52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace AibisDream.Kit
|
|
{
|
|
internal interface IActionQueueCallback
|
|
{
|
|
void Call();
|
|
}
|
|
|
|
internal struct ActionQueueRecycleCallback<T> : IActionQueueCallback
|
|
{
|
|
public SimpleObjectPool<T> pool;
|
|
public T action;
|
|
|
|
public ActionQueueRecycleCallback(SimpleObjectPool<T> pool, T action)
|
|
{
|
|
this.pool = pool;
|
|
this.action = action;
|
|
}
|
|
|
|
public void Call()
|
|
{
|
|
pool.Recycle(action);
|
|
pool = null;
|
|
action = default;
|
|
}
|
|
}
|
|
|
|
internal class ActionQueue : Singleton<ActionQueue>
|
|
{
|
|
private readonly List<IActionQueueCallback> _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();
|
|
}
|
|
}
|
|
}
|
|
} |