69 lines
1.4 KiB
C#
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!");}
|
|
}
|
|
}
|