Files
2024-11-20 15:21:28 +01:00

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();
}
}
}
}