Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / NPC / FSM / State.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace MyCollections.AI.FinitStateMachine
{
    [CreateAssetMenu(menuName = "Finite State Machine/State")]
    public class State : ScriptableObject
    {
        [SerializeField] private List<Action> entryActions;
        [SerializeField] private List<Action> actions;
        [SerializeField] private List<Transition> transitions = new List<Transition>();
        [SerializeField] private Action exitAction;

        public List<Action> GetentryActions() => entryActions;
        public List<Action> GetActions() => actions;
        public List<Transition> GetTransitions() => transitions;
        public Action GetExitAction() => exitAction;

        //SetUp custom Properties of the state
        public virtual void StartState()
        {

        }

        //Runs the entry actions of the state
        public void EnterState(FSM fsm)
        {
            StartState();
            if (entryActions.Count > 0)
            {
                foreach (Action action in entryActions)
                {
                    action.Run(fsm);
                }
            }
        }

        //Gets a triggered transition if any of the transition is true
        public Transition GetTriggeredTransition(FSM fsm)
        {
            if (transitions.Count > 0)
            {
                foreach (Transition transition in transitions)
                {
                    //Debug.Log($"Transition {transition.name}: {transition.IsTriggered(fsm)}");
                    if (transition.IsTriggered(fsm))
                    {
                        return transition;
                    }
                }
            }

            return null;
        }
    }
}