- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- [CreateAssetMenu(menuName = "Finite State Machine/State")]
- public class State : ScriptableObject
- {
-
- [SerializeField] private Action entryAction;
- [SerializeField] private Action[] actions;
- [SerializeField] private Action exitAction;
- [SerializeField] private Transition[] transitions;
- [SerializeField] private State initialSubState;
- [SerializeField] private List<State> subStates;
-
- public Action GetEntryAction() => entryAction;
- public Action[] GetActions() => actions;
- public Action ExitAction() => exitAction;
- public Transition[] Transitions() => transitions;
- public List<State> SubStates() => subStates;
-
- public void Enter(FSM fsm)
- {
- Debug.Log($"Entering state: {name}");
- entryAction?.Execute(fsm);
- if (initialSubState != null)
- {
- fsm.ChangeState(initialSubState);
- }
- }
-
- public void ExecuteActions(FSM fsm)
- {
- foreach (Action action in actions)
- {
- action?.Execute(fsm);
- }
- }
-
- public Transition GetTriggeredTransition(FSM fsm)
- {
- foreach (Transition transition in transitions)
- {
- if (transition.IsTriggered(fsm))
- {
- return transition;
- }
- }
- return null;
- }
- }