using System; using System.Collections.Generic; using Sirenix.OdinInspector; namespace DDD { [Serializable] public sealed class SpawnSchedule { [ShowInInspector] private readonly Queue _queue; public int Count => _queue.Count; public SpawnSchedule(IEnumerable ids) { _queue = new Queue(ids); } public bool TryDequeue(out string id) { if (_queue.Count == 0) { id = null; return false; } id = _queue.Dequeue(); return true; } } public struct SpawnScheduleBuildArgs { public IReadOnlyList NormalIds; // Normal 풀의 ValidCustomers public IReadOnlyList SpecialIds; // Special 풀의 ValidCustomers (없으면 null 또는 빈 목록) public int NormalQuota; // 한 번의 스케줄에서 뽑아둘 Normal 개수 public int SpecialQuota; // 한 번의 스케줄에서 뽑아둘 Special 개수 public int Seed; // 셔플 시드(재현성 필요 시) } public interface ISpawnScheduleBuilder { SpawnSchedule Build(SpawnScheduleBuildArgs args); } }