newlon/scripts/level/zombe_spawners/RowSpawner.cs
2025-07-17 11:44:10 +05:00

53 lines
1.1 KiB
C#

using Godot;
using System.Collections.Generic;
using Newlon.Components.Zombies;
using Godot.Collections;
namespace Newlon.Components.Level;
[GlobalClass]
public partial class RowSpawner : Node2D
{
private Queue<RowSpawn> 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<RuntimeZombieData>();
PoolContainer.Instance.Zombies.AddChild(zombie);
zombie.GlobalPosition = new Vector2(GlobalPosition.X, FieldParams.LeftFieldBoundary.Y + lane * FieldParams.TileHeight);
runner.AddZombie(zombie);
}
public void Add(Array<RowSpawn> rowSpawns)
{
foreach (var spawn in rowSpawns)
{
queue.Enqueue(spawn);
}
delayTimer.Start();
}
}