78 lines
1.7 KiB
C#
78 lines
1.7 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[Obsolete("This action is obsolete; use Send Event with Event Target instead.")]
|
|
[ActionCategory(ActionCategory.StateMachine)]
|
|
[Tooltip("Sends an Event to another Fsm after an optional delay. Specify an Fsm Name or use the first Fsm on the object.")]
|
|
public class SendEventToFsm : FsmStateAction
|
|
{
|
|
[RequiredField]
|
|
public FsmOwnerDefault gameObject;
|
|
[UIHint(UIHint.FsmName)]
|
|
[Tooltip("Optional name of Fsm on Game Object")]
|
|
public FsmString fsmName;
|
|
[RequiredField]
|
|
[UIHint(UIHint.FsmEvent)]
|
|
public FsmString sendEvent;
|
|
[HasFloatSlider(0, 10)]
|
|
public FsmFloat delay;
|
|
bool requireReceiver;
|
|
|
|
private GameObject go;
|
|
private DelayedEvent delayedEvent;
|
|
|
|
public override void Reset()
|
|
{
|
|
gameObject = null;
|
|
fsmName = null;
|
|
sendEvent = null;
|
|
delay = null;
|
|
requireReceiver = false;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
go = Fsm.GetOwnerDefaultTarget(gameObject);
|
|
|
|
if (go == null)
|
|
{
|
|
Finish();
|
|
return;
|
|
}
|
|
|
|
var sendToFsm = ActionHelpers.GetGameObjectFsm(go, fsmName.Value);
|
|
|
|
if (sendToFsm == null)
|
|
{
|
|
if (requireReceiver)
|
|
{
|
|
LogError("GameObject doesn't have FsmComponent: " + go.name + " " + fsmName.Value);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (delay.Value < 0.001)
|
|
{
|
|
sendToFsm.Fsm.Event(sendEvent.Value);
|
|
Finish();
|
|
}
|
|
else
|
|
{
|
|
delayedEvent = sendToFsm.Fsm.DelayedEvent(FsmEvent.GetFsmEvent(sendEvent.Value), delay.Value);
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (DelayedEvent.WasSent(delayedEvent))
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
}
|
|
} |