using Godot; namespace Newlon.Components.Level; [GlobalClass] public partial class LevelRunner : Node { private AdventureLevelResource resource; [Export] private RowSpawner rowSpawner; [Export] private Timer waveTimer; private int waveIndex = -1; [Signal] public delegate void ResourceChangedEventHandler(AdventureLevelResource resource); [Signal] public delegate void WaveChangedEventHandler(int to); public override void _Ready() { waveTimer.Timeout += SummonWave; } public void SetLevelResource(AdventureLevelResource data) { resource = data; waveTimer.Stop(); waveTimer.WaitTime = resource.initialWaveDelay; waveTimer.Start(); EmitSignal(SignalName.ResourceChanged, resource); } private void SummonWave() { waveIndex += 1; EmitSignal(SignalName.WaveChanged, waveIndex); rowSpawner.Add(resource.waves[waveIndex].zombiesOrdered); if (waveIndex == resource.waves.Count - 1) return; waveTimer.WaitTime = resource.waves[waveIndex].customWaveDelay > 0 ? resource.waves[waveIndex].customWaveDelay : resource.standardWaveDelay; waveTimer.Start(); } }