using Godot;

namespace Cirno.Scripts.Components.FSM;

public interface IState<TKey, [MustBeVariant] TType>
    where TKey : notnull
    where TType : Node
{
    public TKey StateId { get; }
    public IStateMachine<TKey, TType> StateMachine { get; }

    public void Init(IStateMachine<TKey, TType> machine);

    public void EnterState();
    public void ExitState();
    public void ProcessState(double delta);
    public void PhysicsProcessState(double delta);
}