using System.Collections.Generic; using SepCore.Entity; using UnityEngine; namespace SepCore.EnemyManager { public class EnemyRegistry { private readonly Dictionary _enemyById; public int Count => _enemyById.Count; public IReadOnlyCollection Enemies => _enemyById.Values; public EnemyRegistry() { _enemyById = new Dictionary(); } public void Register(EnemyBase enemy) { if (enemy == null) return; _enemyById[enemy.Id] = enemy; } public void Remove(int entityId) { if (!_enemyById.ContainsKey(entityId)) { Debug.LogWarning($"EnemyRegistry: Attempt to remove non-existent entity id={entityId}"); return; } _enemyById.Remove(entityId); } public bool TryGet(int entityId, out EntityBase enemy) { return _enemyById.TryGetValue(entityId, out enemy); } public void PruneInvalidEntries() { var invalidIds = new List(); foreach (var kvp in _enemyById) { if (kvp.Value == null || !kvp.Value.Available) { invalidIds.Add(kvp.Key); } } foreach (int id in invalidIds) { _enemyById.Remove(id); } } public void Clear() { _enemyById.Clear(); } } }