69 lines
1.7 KiB
C#
69 lines
1.7 KiB
C#
using System;
|
|
|
|
namespace AibisDream.Kit
|
|
{
|
|
internal class Callback : IAction
|
|
{
|
|
private Callback()
|
|
{
|
|
}
|
|
|
|
private Action _callback;
|
|
|
|
private static readonly SimpleObjectPool<Callback> SimpleObjectPool = new(() => new Callback(), null, 10);
|
|
|
|
public static Callback Allocate(Action callback)
|
|
{
|
|
var callbackAction = SimpleObjectPool.Allocate();
|
|
callbackAction.ActionID = ActionKit.IDGenerator++;
|
|
callbackAction.Reset();
|
|
callbackAction.IsFinalized = false;
|
|
callbackAction._callback = callback;
|
|
return callbackAction;
|
|
}
|
|
|
|
public bool Paused { get; set; }
|
|
public bool IsFinalized { get; set; }
|
|
public ulong ActionID { get; set; }
|
|
public ActionStatus Status { get; set; }
|
|
|
|
public void OnStart()
|
|
{
|
|
_callback?.Invoke();
|
|
this.Finish();
|
|
}
|
|
|
|
public void OnExecute(float dt)
|
|
{
|
|
}
|
|
|
|
public void OnFinish()
|
|
{
|
|
}
|
|
|
|
public void Deinit()
|
|
{
|
|
if (!IsFinalized)
|
|
{
|
|
IsFinalized = true;
|
|
_callback = null;
|
|
ActionKitMonoBehaviourEvents.AddCallback(
|
|
new ActionQueueRecycleCallback<Callback>(SimpleObjectPool, this));
|
|
}
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
Paused = false;
|
|
Status = ActionStatus.NotStart;
|
|
}
|
|
}
|
|
|
|
public static class CallbackExtension
|
|
{
|
|
public static ISequence Callback(this ISequence self, Action callback)
|
|
{
|
|
return self.Append(Kit.Callback.Allocate(callback));
|
|
}
|
|
}
|
|
} |