using System; using System.Collections.Generic; namespace BaseGames.AI { /// 一个状态:进入/每帧/退出钩子 + 出边转换列表(按优先级有序,首个命中即转)。 public sealed class AiState { readonly List _transitions = new List(); public string Name { get; } public Action OnEnter { get; internal set; } public Action OnTick { get; internal set; } // (ctx, dt) public Action OnExit { get; internal set; } public IReadOnlyList Transitions => _transitions; /// /// 是否为终态:进入后不再离开是设计意图,而非漏挂出边。 /// 由 标记,供 Build() 的死角校验放行。 /// public bool IsTerminal { get; internal set; } internal void AddTransition(Transition t) => _transitions.Add(t); public AiState(string name) => Name = name; } }