using System; using System.Collections.Generic; public class LevelManager : Singleton { public event System.Action Added; public event System.Action Removed; private List levelObjects; public LevelManager() { levelObjects = new List(); } public void Add(ILevelObject levelObject) { if (levelObjects.Contains(levelObject)) return; levelObjects.Add(levelObject); Added?.Invoke(levelObject); } public void Remove(ILevelObject levelObject) { if (!levelObjects.Contains(levelObject)) return; levelObjects.Remove(levelObject); Removed?.Invoke(levelObject); } public void Clear() { levelObjects.RemoveAll(obj => { Removed?.Invoke(obj); return true; }); } public T Get(System.Func predicate = default) where T : ILevelObject { if (predicate == default) predicate = (t) => true; return (T)levelObjects.Find(t => t is T t1 && predicate(t1)); } public List GetAll(System.Func predicate = default) where T : ILevelObject { if (predicate == default) predicate = (t) => true; List ret = new List(); foreach (var t in levelObjects) if (t is T t1 && predicate(t1)) ret.Add(t1); return ret; } public int Count(Func predicate = default) where T : ILevelObject { return GetAll(predicate).Count; } public bool Has(System.Func predicate = default) { if (predicate == default) predicate = (t) => true; return levelObjects.Exists(t => t is T && predicate((T)t)); } }