using System.Collections.Generic; namespace AibisDream.Kit { internal interface IActionQueueCallback { void Call(); } internal struct ActionQueueRecycleCallback : IActionQueueCallback { public SimpleObjectPool pool; public T action; public ActionQueueRecycleCallback(SimpleObjectPool pool, T action) { this.pool = pool; this.action = action; } public void Call() { pool.Recycle(action); pool = null; action = default; } } internal class ActionQueue : Singleton { private readonly List _actionQueueCallbacks = new(); public static void AddCallback(IActionQueueCallback actionQueueCallback) { Instance._actionQueueCallbacks.Add(actionQueueCallback); } // Update is called once per frame private void Update() { if (_actionQueueCallbacks.Count > 0) { foreach (var actionQueueCallback in _actionQueueCallbacks) { actionQueueCallback.Call(); } _actionQueueCallbacks.Clear(); } } } }