public System.Collections.Generic.IEnumerator <float> InitializePool(params Pool[] aditionalScenePools) { if (State == ScenePoolState.NotInitialized) { Debugging.DevDebug.Log(() => $"Initializing pools {name}", this); State = ScenePoolState.Initializing; allScenePools.AddRange(m_scenesPool); allScenePools.AddRange(aditionalScenePools); foreach (Pool pool in allScenePools) { if (pool == null) { Debugging.Logger.LogError("Pool element is null", gameObject); } else { while (Asynchronous.WorkScheduler.Instance.IsToSkipToNextFrame) { yield return(0); } Debugging.DevDebug.Log(() => $"Initializing pool: {pool.name}", this); yield return(MEC.Timing.WaitUntilDone(MEC.Timing.RunCoroutine(pool.InitializePool(this)))); Debugging.DevDebug.Log(() => $"Initialized pool: {pool.name}", this); } } Debugging.DevDebug.Log(() => $"Initialized pools {name}", this); State = ScenePoolState.Initialized; } else { Debugging.Logger.LogError("Trying to initialize a pool that is already initialized"); } }
public Asynchronous.AsyncTimingOperation FinalizePool(bool destroySelf, bool isDestroying = false) { if (State != ScenePoolState.Initialized) { return(new Asynchronous.AsyncTimingOperation()); } State = ScenePoolState.Finalizing; var result = new Asynchronous.AsyncTimingOperation(FinalizePoolCoroutine(destroySelf, isDestroying)); result.Run(); return(result); }
public System.Collections.Generic.IEnumerator <float> FinalizePoolCoroutine(bool destroySelf, bool isDestroying = false) { foreach (Pool pool in allScenePools) { pool.ReturnAllObjectsToPool(isDestroying); pool.FinalizePool(this); yield return(Timing.WaitForOneFrame); } if (destroySelf) { Destroy(gameObject); } yield return(0); State = ScenePoolState.NotInitialized; }
private void Awake() { isQuitting = false; State = ScenePoolState.NotInitialized; }