IndieGame/client/Assets/ParadoxNotion/NodeCanvas/Modules/StateMachines/Nodes/NestedFSMState.cs
DOBEST\zhaoyingjie f242607587 初始化工程
2024-10-11 10:12:15 +08:00

61 lines
1.7 KiB
C#

using NodeCanvas.Framework;
using ParadoxNotion.Design;
using UnityEngine;
namespace NodeCanvas.StateMachines
{
[Name("Sub FSM")]
[Description("Execute a sub FSM OnEnter, and Stop that FSM OnExit. This state is Finished only when and if the sub FSM is finished as well.")]
[DropReferenceType(typeof(FSM))]
[ParadoxNotion.Design.Icon("FSM")]
public class NestedFSMState : FSMStateNested<FSM>
{
public enum FSMExitMode
{
StopAndRestart,
PauseAndResume
}
[SerializeField, ExposeField, Name("Sub FSM")]
private BBParameter<FSM> _nestedFSM = null;
[Tooltip("What will happen to the sub FSM when this state exits.")]
public FSMExitMode exitMode;
public override FSM subGraph { get { return _nestedFSM.value; } set { _nestedFSM.value = value; } }
public override BBParameter subGraphParameter => _nestedFSM;
//
protected override void OnEnter() {
if ( subGraph == null ) {
Finish(false);
return;
}
this.TryStartSubGraph(graphAgent, Finish);
OnUpdate();
}
protected override void OnUpdate() {
currentInstance.UpdateGraph(this.graph.deltaTime);
}
protected override void OnExit() {
if ( currentInstance != null ) {
if ( this.status == Status.Running ) {
this.TryReadAndUnbindMappedVariables();
}
if ( exitMode == FSMExitMode.StopAndRestart ) {
currentInstance.Stop();
} else {
currentInstance.Pause();
}
}
}
}
}