Godot-SpaceShooter/Scripts/GameManager.cs

69 lines
1.4 KiB
C#

using Godot;
using Godot.Collections;
namespace Scripts;
public partial class GameManager : Node
{
[Export] private Array<PackedScene> asteroids;
[Export] private float spawnRate = 1f;
private float spawnTimer;
[Export] private RichTextLabel labelAsteroids;
[Export] private RichTextLabel labelLifes;
public int AsteroidNumber {
get => asteroidNumber;
set {
asteroidNumber = value;
RefreshUi();
}
}
private int Lives {
get => lives;
set {
lives = value;
RefreshUi();
}
}
private const int asteroidMaxNumber = 3;
private int lives = 3;
private int asteroidNumber;
public static GameManager Instance { get; private set; }
public override void _Ready() {
Instance = this;
spawnTimer = spawnRate;
RefreshUi();
}
public override void _Process(double delta) {
spawnTimer -= (float)delta;
if (spawnTimer < 0) {
if (AsteroidNumber < asteroidMaxNumber) SpawnNewAsteroid();
spawnTimer = spawnRate;
}
}
private void SpawnNewAsteroid() {
GD.Print("Spawn new asteroid");
AsteroidNumber++;
Node asteroid = asteroids.PickRandom().Instantiate();
asteroid.Name = $"Asteroid{AsteroidNumber}";
AddChild(asteroid);
}
private void RefreshUi() {
labelLifes.Text = $"Lives: {lives}";
labelAsteroids.Text = $"Asteroids: {asteroidNumber}";
}
private void RemoveLife() {
Lives--;
if (Lives <= 0 ) { GD.Print("GAME OVER!");}
}
}