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);
}
}
}
}