From 51315cfe1ddd3562bf7a68116020a4459d4f107e Mon Sep 17 00:00:00 2001 From: Sascha Date: Sun, 15 Oct 2023 15:52:34 +0200 Subject: [PATCH] GameManger and Lives --- Godot-space Shooter.csproj.old.2 | 6 +++++ Scenes/SpaceShooter.tscn | 32 ++++++++++++++++++------ Scripts/Asteroid.cs | 1 + Scripts/{Asteroids.cs => GameManager.cs} | 25 +++++++++++++++--- 4 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 Godot-space Shooter.csproj.old.2 rename Scripts/{Asteroids.cs => GameManager.cs} (57%) diff --git a/Godot-space Shooter.csproj.old.2 b/Godot-space Shooter.csproj.old.2 new file mode 100644 index 0000000..0c5959c --- /dev/null +++ b/Godot-space Shooter.csproj.old.2 @@ -0,0 +1,6 @@ + + + net6.0 + true + + \ No newline at end of file diff --git a/Scenes/SpaceShooter.tscn b/Scenes/SpaceShooter.tscn index ca543bb..008bd24 100644 --- a/Scenes/SpaceShooter.tscn +++ b/Scenes/SpaceShooter.tscn @@ -3,11 +3,11 @@ [ext_resource type="PackedScene" uid="uid://tlr55u0gn20l" path="res://Packed-Scenes/player_ship.tscn" id="1_njb5h"] [ext_resource type="Texture2D" uid="uid://cg6n1hh3lj7rn" path="res://Textures/tile_nebula_green_dff.png" id="2_43vix"] [ext_resource type="Script" path="res://Scripts/Background.cs" id="3_imgbw"] -[ext_resource type="Script" path="res://Scripts/Asteroids.cs" id="4_pf4xb"] [ext_resource type="PackedScene" uid="uid://6dn1gjqffnt" path="res://Packed-Scenes/asteroid_01.tscn" id="5_do6ba"] [ext_resource type="PackedScene" uid="uid://cvlxm2yrohsca" path="res://Packed-Scenes/asteroid_02.tscn" id="6_tqoe7"] [ext_resource type="PackedScene" uid="uid://brqqgidqchi88" path="res://Packed-Scenes/asteroid_03.tscn" id="7_v6ul2"] [ext_resource type="AudioStream" uid="uid://bthqgu8sulv77" path="res://Sounds/music_background.wav" id="8_4ms0p"] +[ext_resource type="Script" path="res://Scripts/GameManager.cs" id="9_rsrr5"] [node name="SpaceShooter" type="Node3D"] @@ -33,19 +33,37 @@ region_enabled = true region_rect = Rect2(0, 0, 810, 1380) script = ExtResource("3_imgbw") -[node name="Asteroids" type="Node3D" parent="." node_paths=PackedStringArray("labelAsteroids")] -script = ExtResource("4_pf4xb") -asteroids = [ExtResource("5_do6ba"), ExtResource("6_tqoe7"), ExtResource("7_v6ul2")] -labelAsteroids = NodePath("../LabelAsteroids") +[node name="Asteroids" type="Node3D" parent="."] [node name="BackgroundMusic" type="AudioStreamPlayer" parent="."] stream = ExtResource("8_4ms0p") volume_db = -20.0 -autoplay = true -[node name="LabelAsteroids" type="RichTextLabel" parent="."] +[node name="GameManager" type="Node" parent="." node_paths=PackedStringArray("labelAsteroids", "labelLifes")] +script = ExtResource("9_rsrr5") +asteroids = Array[PackedScene]([ExtResource("5_do6ba"), ExtResource("6_tqoe7"), ExtResource("7_v6ul2")]) +spawnRate = 0.5 +labelAsteroids = NodePath("../Control/LabelAsteroids") +labelLifes = NodePath("../Control/LabelLives") + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="LabelAsteroids" type="RichTextLabel" parent="Control"] +layout_mode = 2 offset_left = 20.0 offset_top = 20.0 offset_right = 260.0 offset_bottom = 40.0 text = "Asteroids: 0" + +[node name="LabelLives" type="RichTextLabel" parent="Control"] +layout_mode = 2 +offset_left = 20.0 +offset_top = 47.0 +offset_right = 260.0 +offset_bottom = 67.0 +text = "Lives: 3" diff --git a/Scripts/Asteroid.cs b/Scripts/Asteroid.cs index 77df731..01ce27f 100644 --- a/Scripts/Asteroid.cs +++ b/Scripts/Asteroid.cs @@ -21,6 +21,7 @@ public partial class Asteroid : Node3D { RotationDegrees += rotation * (float)delta; if (Position.Z > 7) { GD.Print($"Asteroid {Name} below screen!"); + GameManager.Instance.RemoveLife(); QueueFree(); } } diff --git a/Scripts/Asteroids.cs b/Scripts/GameManager.cs similarity index 57% rename from Scripts/Asteroids.cs rename to Scripts/GameManager.cs index a362706..8e0b6db 100644 --- a/Scripts/Asteroids.cs +++ b/Scripts/GameManager.cs @@ -1,15 +1,26 @@ using Godot; -using System; using Godot.Collections; -public partial class Asteroids : Node3D { +public partial class GameManager : Node +{ [Export] private Array asteroids; [Export] private float spawnRate = 1f; - [Export] private RichTextLabel labelAsteroids; private float spawnTimer; + + [Export] private RichTextLabel labelAsteroids; + [Export] private RichTextLabel labelLifes; private int asteroidNumber; - public override void _Ready() => spawnTimer = spawnRate; + private int lives = 3; + + public static GameManager Instance { get; private set; } + + public override void _Ready() { + Instance = this; + spawnTimer = spawnRate; + labelLifes.Text = $"Lives: {lives}"; + labelAsteroids.Text = $"Asteroids: {asteroidNumber}"; + } public override void _Process(double delta) { spawnTimer -= (float)delta; @@ -25,4 +36,10 @@ public partial class Asteroids : Node3D { spawnTimer = spawnRate; labelAsteroids.Text = $"Asteroids: {asteroidNumber}"; } + + public void RemoveLife() { + lives--; + labelLifes.Text = $"Lives: {lives}"; + if (lives <= 0 ) { GD.Print("GAME OVER!");} + } }