86 lines
2.1 KiB
C#
86 lines
2.1 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.StateMachine)]
|
|
[ActionTarget(typeof(PlayMakerFSM), "eventTarget")]
|
|
[ActionTarget(typeof(GameObject), "eventTarget")]
|
|
[Tooltip("Sends an Event after an optional delay. NOTE: To send events between FSMs they must be marked as Global in the Events Browser.")]
|
|
public class SendEvent : FsmStateAction
|
|
{
|
|
[Tooltip("Where to send the event.")]
|
|
public FsmEventTarget eventTarget;
|
|
|
|
[RequiredField]
|
|
[Tooltip("The event to send. NOTE: Events must be marked Global to send between FSMs.")]
|
|
public FsmEvent sendEvent;
|
|
|
|
[HasFloatSlider(0, 10)]
|
|
[Tooltip("Optional delay in seconds.")]
|
|
public FsmFloat delay;
|
|
|
|
[Tooltip("Repeat every frame. Rarely needed, but can be useful when sending events to other FSMs.")]
|
|
public bool everyFrame;
|
|
|
|
private DelayedEvent delayedEvent;
|
|
|
|
public override void Reset()
|
|
{
|
|
eventTarget = null;
|
|
sendEvent = null;
|
|
delay = null;
|
|
everyFrame = false;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
if (delay.Value < 0.001f)
|
|
{
|
|
Fsm.Event(eventTarget, sendEvent);
|
|
if (!everyFrame)
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
delayedEvent = Fsm.DelayedEvent(eventTarget, sendEvent, delay.Value);
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (!everyFrame)
|
|
{
|
|
if (DelayedEvent.WasSent(delayedEvent))
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Fsm.Event(eventTarget, sendEvent);
|
|
}
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
public override string AutoName()
|
|
{
|
|
return "SendEvent : " + (eventTarget.target != FsmEventTarget.EventTarget.Self ? " " + eventTarget.target + " ": "")
|
|
+ (sendEvent != null ? sendEvent.Name : "None")
|
|
+ (delay.Value > 0f ? " " + delay.Value + "s" : "");
|
|
}
|
|
|
|
public override float GetProgress()
|
|
{
|
|
if (delayedEvent != null)
|
|
return Mathf.Min(delayedEvent.GetProgress());
|
|
return 0f;
|
|
}
|
|
#endif
|
|
}
|
|
} |