TowerGame/scripts/game_manager.gd

42 lines
1.1 KiB
GDScript3
Raw Normal View History

2025-06-10 13:34:26 +01:00
extends Node3D
@export var waves: Array[WaveData] = []
signal wave_started()
signal wave_completed()
var next_wave_id: int = 0
var wave_timer: float = 0.0
var wave_in_progress: bool = false
var next_spawn_times: Dictionary[String, float] = {}
func _process(delta: float) -> void:
if next_wave_id >= waves.size():
next_wave_id = 0
var wave: WaveData = waves[next_wave_id]
wave_timer += delta
if !wave_in_progress:
if wave_timer >= wave.delay:
wave_timer = 0
next_spawn_times.clear()
wave_in_progress = true
wave_started.emit()
else:
if wave_timer >= wave.duration:
wave_in_progress = false
wave_timer = 0
next_wave_id += 1
else:
for key in wave.enemies.keys():
var next_spawn_time: float = next_spawn_times.get(key, 0)
if wave_timer >= next_spawn_time:
var enemy_delay: float = wave.duration / wave.enemies.get(key)
next_spawn_time += enemy_delay
next_spawn_times.set(key, next_spawn_time)
spawn(key as String)
func spawn(key: String) -> void:
var node: Node = get_tree().get_nodes_in_group("Spawners").pick_random()
var spawner: Spawner = node as Spawner
spawner.spawn()