85 lines
3.1 KiB
C#
85 lines
3.1 KiB
C#
|
using NodeCanvas.Framework;
|
||
|
using ParadoxNotion.Design;
|
||
|
using UnityEngine;
|
||
|
|
||
|
|
||
|
namespace NodeCanvas.StateMachines
|
||
|
{
|
||
|
|
||
|
[Description("Execute a number of Actions repeatedly and in parallel to any other FSM state while the FSM is running. Conditions are optional. This is not a state.")]
|
||
|
[Color("ff64cb")]
|
||
|
[ParadoxNotion.Design.Icon("Repeat")]
|
||
|
[Name("On FSM Update")]
|
||
|
public class OnFSMUpdate : FSMNode, IUpdatable
|
||
|
{
|
||
|
|
||
|
[SerializeField] private ConditionList _conditionList;
|
||
|
[SerializeField] private ActionList _actionList;
|
||
|
|
||
|
public override string name => base.name.ToUpper();
|
||
|
public override int maxInConnections => 0;
|
||
|
public override int maxOutConnections => 0;
|
||
|
public override bool allowAsPrime => false;
|
||
|
|
||
|
///----------------------------------------------------------------------------------------------
|
||
|
|
||
|
public override void OnValidate(Graph assignedGraph) {
|
||
|
if ( _conditionList == null ) {
|
||
|
_conditionList = (ConditionList)Task.Create(typeof(ConditionList), assignedGraph);
|
||
|
_conditionList.checkMode = ConditionList.ConditionsCheckMode.AllTrueRequired;
|
||
|
}
|
||
|
if ( _actionList == null ) {
|
||
|
_actionList = (ActionList)Task.Create(typeof(ActionList), assignedGraph);
|
||
|
_actionList.executionMode = ActionList.ActionsExecutionMode.ActionsRunInParallel;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void OnGraphStarted() {
|
||
|
_conditionList.Enable(graphAgent, graphBlackboard);
|
||
|
}
|
||
|
|
||
|
public override void OnGraphStoped() {
|
||
|
_conditionList.Disable();
|
||
|
_actionList.EndAction(null);
|
||
|
}
|
||
|
|
||
|
void IUpdatable.Update() {
|
||
|
if ( _conditionList.Check(graphAgent, graphBlackboard) ) {
|
||
|
status = _actionList.Execute(graphAgent, graphBlackboard);
|
||
|
} else {
|
||
|
_actionList.EndAction(null);
|
||
|
status = Status.Failure;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///----------------------------------------------------------------------------------------------
|
||
|
///---------------------------------------UNITY EDITOR-------------------------------------------
|
||
|
#if UNITY_EDITOR
|
||
|
|
||
|
protected override void OnNodeGUI() {
|
||
|
if ( _conditionList.conditions.Count > 0 ) {
|
||
|
GUILayout.BeginVertical(Styles.roundedBox);
|
||
|
GUILayout.Label(_conditionList.summaryInfo);
|
||
|
GUILayout.EndVertical();
|
||
|
}
|
||
|
|
||
|
GUILayout.BeginVertical(Styles.roundedBox);
|
||
|
GUILayout.Label(_actionList.summaryInfo);
|
||
|
GUILayout.EndVertical();
|
||
|
|
||
|
base.OnNodeGUI();
|
||
|
}
|
||
|
|
||
|
protected override void OnNodeInspectorGUI() {
|
||
|
EditorUtils.CoolLabel("Conditions (optional)");
|
||
|
_conditionList.ShowListGUI();
|
||
|
_conditionList.ShowNestedConditionsGUI();
|
||
|
EditorUtils.BoldSeparator();
|
||
|
EditorUtils.CoolLabel("Actions");
|
||
|
_actionList.ShowListGUI();
|
||
|
_actionList.ShowNestedActionsGUI();
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
}
|
||
|
}
|