37 lines
958 B
C#
37 lines
958 B
C#
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);
|
|
}
|
|
}
|