TowerDefense/spawner.gd
2025-08-25 23:23:03 +02:00

57 lines
1.1 KiB
GDScript

extends Path3D
class_name Spawner
@export var waves : Array[Wave]
var current_wave : Wave
var current_troop : Troop
var enemies_to_spawn : int = 0
var can_spawn : bool = false
var wave_on_going : bool = false
func spawn_next_wave() -> void:
if waves.is_empty():
EventBus.player_has_won.emit()
return
current_wave = waves.pop_front()
$SpawnTimer.start(current_wave.wait_time_before_next_wave)
func _process(delta: float) -> void:
spawn_manager()
func spawn() -> void:
$SpawnTimer.start()
var tempEnemy = current_troop.enemy.instantiate()
add_child(tempEnemy)
enemies_to_spawn -= 1
GameManager.enemies_alive += 1
can_spawn = false
func spawn_manager() -> void:
if !can_spawn:
return
#Send next troop
if !current_wave.troops.is_empty() and enemies_to_spawn == 0:
current_troop = current_wave.troops.pop_front()
enemies_to_spawn = current_troop.number_to_spawn
if enemies_to_spawn > 0:
spawn()
if GameManager.enemies_alive > 0:
wave_on_going = true
else:
wave_on_going = false
spawn_next_wave()
func _on_spawn_timer_timeout() -> void:
can_spawn = true
$SpawnTimer.wait_time = 1.0