// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 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()); } }