using System.Collections.Generic; using Godot; public partial class ProjectilePool : Node { [Export] private PackedScene _scene; [Export] private int _poolSize; private readonly Queue _pool = new(); public override void _Ready() { for (int i = 0; i < _poolSize; i++) { _pool.Enqueue(CreateProjectile()); } } private Projectile CreateProjectile() { var p = _scene.Instantiate(); p.OnDespawn += ReturnToPool; return p; } public Projectile Get() { var p = _pool.Count > 0 ? _pool.Dequeue() : CreateProjectile(); return p; } private void ReturnToPool(Projectile p) { p.GetParent()?.RemoveChild(p); p.ProcessMode = ProcessModeEnum.Disabled; _pool.Enqueue(p); } }