using Godot; using PokemonLike.Library.Support; namespace PokemonLike.Library.Utilities; [GlobalClass] public partial class StateMachine : Node { [ExportCategory("State Machine Vars")] [Export] public Node Customer; [Export] public State CurrentState; public override void _Ready() { Logger.Info("Loading state machine..."); foreach (Node child in GetChildren()) { if (child is State state) { state.StateOwner = Customer; state.SetProcess(false); } } } public string GetCurrentState() => CurrentState.Name.ToString(); public void ChangeState(State newState) { CurrentState?.ExitState(); CurrentState = newState; CurrentState?.EnterState(); foreach (Node child in GetChildren()) if (child is State state) state.SetProcess(state == CurrentState); } }