64 lines
1.3 KiB
C#
64 lines
1.3 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.StateMachine)]
|
|
[Tooltip("Sends the next event on the state each time the state is entered.")]
|
|
public class SequenceEvent : FsmStateAction
|
|
{
|
|
[HasFloatSlider(0, 10)]
|
|
public FsmFloat delay;
|
|
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Assign a variable to control reset. Set it to True to reset the sequence. Value is set to False after resetting.")]
|
|
public FsmBool reset;
|
|
|
|
DelayedEvent delayedEvent;
|
|
int eventIndex;
|
|
|
|
public override void Reset()
|
|
{
|
|
delay = null;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
if (reset.Value)
|
|
{
|
|
eventIndex = 0;
|
|
reset.Value = false;
|
|
}
|
|
|
|
var eventCount = State.Transitions.Length;
|
|
|
|
if (eventCount > 0)
|
|
{
|
|
var fsmEvent = State.Transitions[eventIndex].FsmEvent;
|
|
|
|
if (delay.Value < 0.001f)
|
|
{
|
|
Fsm.Event(fsmEvent);
|
|
Finish();
|
|
}
|
|
else
|
|
{
|
|
delayedEvent = Fsm.DelayedEvent(fsmEvent, delay.Value);
|
|
}
|
|
|
|
eventIndex++;
|
|
if (eventIndex == eventCount)
|
|
{
|
|
eventIndex = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (DelayedEvent.WasSent(delayedEvent))
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
}
|
|
} |