using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public class FiniteStateMachine : MonoBehaviour, IUpdatable { public State initialState; [SerializeField] private State currentState; private GameObject target; [HideInInspector] public DictionariesFSM<object> dic = new DictionariesFSM<object>(); public DictionariesFSM<Vector3> dicVecs = new DictionariesFSM<Vector3>(); public DictionariesFSM<bool> dicBools = new DictionariesFSM<bool>(); void Start() { currentState = initialState; target = GameObject.FindGameObjectWithTag("Player"); if(currentState.GetEntryAction() != null) { currentState.GetEntryAction().Act(this); } } public GameObject GetTarget() { return target; } public void Updating() { Transition triggeredTransition = null; if (currentState == null) currentState = initialState; foreach (Transition transition in currentState.GetTransitions()) { if (transition.IsTriggered(this)) { triggeredTransition = transition; break; } } List<Action> actions = new List<Action>(); if (triggeredTransition) { State targetState = triggeredTransition.GetTargetState(); actions.Add(currentState.GetExitAction()); actions.Add(triggeredTransition.GetAction()); actions.Add(targetState.GetEntryAction()); currentState = targetState; } else { foreach (Action action in currentState.GetStateActions()) { actions.Add(action); } } foreach (Action action in actions) { if (action) { //Debug.Log(action.name); action.Act(this); } } } }