Files
beyond/Assets/ThirdParty/PlayMaker/Actions/StateMachine/BaseFsmVariableIndexAction.cs
2024-11-20 15:21:28 +01:00

64 lines
1.7 KiB
C#

using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
/// <summary>
/// Base class for Get/Set FSM Variable actions
/// </summary>
[ActionCategory(ActionCategory.StateMachine)]
[ActionTarget(typeof(PlayMakerFSM), "gameObject,fsmName")]
public abstract class BaseFsmVariableIndexAction : FsmStateAction
{
[ActionSection("Events")]
[Tooltip("The event to trigger if the index is out of range")]
public FsmEvent indexOutOfRange;
[Tooltip("The event to send if the FSM is not found.")]
public FsmEvent fsmNotFound;
[Tooltip("The event to send if the Variable is not found.")]
public FsmEvent variableNotFound;
private GameObject cachedGameObject;
private string cachedFsmName;
protected PlayMakerFSM fsm;
public override void Reset()
{
fsmNotFound = null;
variableNotFound = null;
}
protected bool UpdateCache(GameObject go, string fsmName)
{
if (go == null)
{
return false;
}
if (fsm == null || cachedGameObject != go || cachedFsmName != fsmName)
{
fsm = ActionHelpers.GetGameObjectFsm(go, fsmName);
cachedGameObject = go;
cachedFsmName = fsmName;
if (fsm == null)
{
LogWarning("Could not find FSM: " + fsmName);
Fsm.Event(fsmNotFound);
}
}
return true;
}
protected void DoVariableNotFound(string variableName)
{
LogWarning("Could not find variable: " + variableName);
Fsm.Event(variableNotFound);
}
}
}