using GFramework.Core.Abstractions.State;
namespace GFramework.Core.Tests.State;
///
/// 条件状态实现类V2版本,支持基于类型的条件转换规则。
///
public sealed class ConditionalStateV2 : IState
{
///
/// 获取或设置允许转换到的状态类型数组。
///
public Type[] AllowedTransitions { get; set; } = Array.Empty();
///
/// 获取进入状态是否被调用的标志。
///
public bool EnterCalled { get; private set; }
///
/// 获取退出状态是否被调用的标志。
///
public bool ExitCalled { get; private set; }
///
/// 获取进入此状态的来源状态。
///
public IState? EnterFrom { get; private set; }
///
/// 获取从此状态退出的目标状态。
///
public IState? ExitTo { get; private set; }
///
/// 进入当前状态时调用的方法。
///
/// 从哪个状态进入。
public void OnEnter(IState? from)
{
EnterCalled = true;
EnterFrom = from;
}
///
/// 退出当前状态时调用的方法。
///
/// 退出到哪个状态。
public void OnExit(IState? to)
{
ExitCalled = true;
ExitTo = to;
}
///
/// 判断是否可以转换到目标状态。
///
/// 目标状态。
/// 如果目标状态类型在允许列表中则返回 ,否则返回 。
public bool CanTransitionTo(IState target)
{
return AllowedTransitions.Contains(target.GetType());
}
}