using System.Collections.Generic; using Godot; using Newlon; using Newlon.Components.Level; using Newlon.Components.Zombies; public partial class ZombieSequencer : Node2D { public static ZombieSequencer Instance { get; private set; } private Queue queue = []; private RandomNumberGenerator rng = new(); public override void _Ready() { rng.Randomize(); Instance = this; } private void FormSquad() { if (queue.Count == 0) return; int count = rng.RandiRange(1, queue.Count > 5 ? 5 : queue.Count); if (count == 5) { Spawn(queue.Dequeue(), 1); Spawn(queue.Dequeue(), 2); Spawn(queue.Dequeue(), 3); Spawn(queue.Dequeue(), 4); Spawn(queue.Dequeue(), 5); } List list = []; while (list.Count < count) { int lane = rng.RandiRange(1, 5); if (list.Contains(lane) == true) { continue; } list.Add(lane); } foreach (int lane in list) { Spawn(queue.Dequeue(), lane); } } private void Spawn(string id, int lane) { RuntimeZombieData zombie = GameRegistry.GetZombieByName(id).scene.Instantiate(); PoolContainer.Instance.Zombies.AddChild(zombie); zombie.GlobalPosition = new Vector2(GlobalPosition.X, Utility.RightFieldBoundary.Y - (lane-1) * Utility.TileHeight); } public void Add(string id) { queue.Enqueue(id); } }