2026-02-26 23:13:57 +01:00
|
|
|
|
#nullable enable
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-03-04 17:50:16 +01:00
|
|
|
|
using Godot;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Cirno.Scripts.Components.FSM;
|
|
|
|
|
|
|
2025-03-04 18:16:39 +01:00
|
|
|
|
public interface IStateMachine<TKey, [MustBeVariant] TType>
|
2025-03-04 17:50:16 +01:00
|
|
|
|
where TKey : notnull
|
|
|
|
|
|
where TType : Node
|
|
|
|
|
|
{
|
|
|
|
|
|
public Dictionary<TKey, IState<TKey, TType>> States { get; set; }
|
|
|
|
|
|
protected TKey CurrentStateIndex { get; set; }
|
|
|
|
|
|
public IState<TKey, TType> CurrentState { get; }
|
|
|
|
|
|
public TKey InitialState { get; }
|
|
|
|
|
|
public void SetState(TKey stateId);
|
2025-06-26 14:03:36 +02:00
|
|
|
|
public TKey GetState();
|
2025-03-04 17:50:16 +01:00
|
|
|
|
|
|
|
|
|
|
public TType MainObject { get; }
|
2026-02-26 23:13:57 +01:00
|
|
|
|
|
|
|
|
|
|
// Allow states to query modules by type from the owning actor
|
|
|
|
|
|
public T? GetModule<T>() where T : Node;
|
2025-03-04 17:50:16 +01:00
|
|
|
|
}
|