refactor(ai): BrainGraph Task4 审查修复——删死字段/Global空目标校验/AiState只读转换

This commit is contained in:
2026-07-03 14:09:43 +08:00
parent 6f9fa8c4b8
commit 0253fd15ca
2 changed files with 14 additions and 7 deletions
+9 -6
View File
@@ -61,17 +61,16 @@ namespace BaseGames.AI
public StateBuilder Tick(Action<IAiContext, float> fn) { _state.OnTick = fn; return this; }
public StateBuilder OnExit(Action<IAiContext> fn) { _state.OnExit = fn; return this; }
public TransitionBuilder To(string target) => new TransitionBuilder(_owner, this, _state, target);
public TransitionBuilder To(string target) => new TransitionBuilder(this, _state, target);
}
public sealed class TransitionBuilder
{
readonly BrainBuilder _owner;
readonly StateBuilder _stateBuilder;
readonly AiState _state;
readonly string _target;
internal TransitionBuilder(BrainBuilder owner, StateBuilder sb, AiState state, string target)
{ _owner = owner; _stateBuilder = sb; _state = state; _target = target; }
internal TransitionBuilder(StateBuilder sb, AiState state, string target)
{ _stateBuilder = sb; _state = state; _target = target; }
/// <summary>
/// 条件转换。label 为可读标签(用于 Mermaid 边 / trace 触发原因),
@@ -79,14 +78,14 @@ namespace BaseGames.AI
/// </summary>
public StateBuilder When(Func<IAiContext, bool> cond, string label = null)
{
_state.Transitions.Add(Transition.OnCondition(_target, cond, label ?? "cond"));
_state.AddTransition(Transition.OnCondition(_target, cond, label ?? "cond"));
return _stateBuilder;
}
/// <summary>事件转换。</summary>
public StateBuilder OnEvent(AiSignal evt)
{
_state.Transitions.Add(Transition.OnEvent(_target, evt));
_state.AddTransition(Transition.OnEvent(_target, evt));
return _stateBuilder;
}
@@ -108,12 +107,16 @@ namespace BaseGames.AI
public GlobalBuilder OnEvent(AiSignal evt)
{
if (_pendingTarget == null)
throw new System.InvalidOperationException("Global(): 请先调用 To(target) 再 OnEvent/When。");
_owner.AddGlobal(Transition.OnEvent(_pendingTarget, evt));
return this;
}
public GlobalBuilder When(Func<IAiContext, bool> cond, string label = null)
{
if (_pendingTarget == null)
throw new System.InvalidOperationException("Global(): 请先调用 To(target) 再 OnEvent/When。");
_owner.AddGlobal(Transition.OnCondition(_pendingTarget, cond, label ?? "cond"));
return this;
}