using Convention; using Convention.Experimental.Modules; using System; using System.Collections.Generic; using static Convention.Experimental.Architecture; namespace Demo.Game { public class GameObjectPool : MonoSingleton { private Dictionary, ScriptableObject> Pool = new(); public ScriptableObject Spawn(Func creater) { if (Pool.TryGetValue(creater, out var prefab) == false) { prefab = Pool[creater] = creater(); prefab.gameObject.SetActive(false); prefab.transform.SetParent(transform); } if (prefab is CameraObject) { return prefab; } else { var result = GetModule().Spawn(prefab.gameObject).GetComponent(); result.gameObject.SetActive(true); return result; } } public void Unspawn(ScriptableObject obj) { if (obj is CameraObject camera) { camera.gameObject.SetActive(false); camera.transform.SetParent(transform); } else if (obj is RootObject) return; else { GetModule().Unspawn(obj.gameObject); } } } }