using Godot; using System.Collections.Generic; using Newlon.Components.Zombies; using Godot.Collections; using Newlon.Resources; namespace Newlon.Components.Level; [GlobalClass] public partial class RowSpawner : Node2D { private Queue queue = []; [Export] private Timer delayTimer; [Export] private LevelRunner runner; public override void _Ready() { delayTimer.Timeout += FormSquad; } private void FormSquad() { if (queue.Count == 0) return; var row = queue.Dequeue(); for (int i = 0; i < row.zombies.Count; i++) { if (row.zombies[i] != null) Spawn(row.zombies[i], i+1); } if (queue.Count == 0) delayTimer.Stop(); } private void Spawn(ZombieResource resource, int lane) { RuntimeZombieData zombie = resource.Scene.Instantiate(); PoolContainer.Instance.Zombies.AddChild(zombie); zombie.GlobalPosition = new Vector2(GlobalPosition.X, FieldParams.LeftFieldBoundary.Y + lane * FieldParams.TileHeight); runner.AddZombie(zombie); } public void Add(Array rowSpawns) { foreach (var spawn in rowSpawns) { queue.Enqueue(spawn); } delayTimer.Start(); } }