refactor(ai): 终审收尾——删死字段/事件转换刷新IsSuspended + 局部事件与双实例独立性测试
This commit is contained in:
@@ -159,5 +159,42 @@ namespace BaseGames.Tests.EditMode.AI
|
||||
Assert.IsEmpty(rt.Trace);
|
||||
Assert.IsFalse(ctx.BB.Has("scratch"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LocalEventTransition_Fires()
|
||||
{
|
||||
var b = new BrainBuilder();
|
||||
b.Entry("Idle");
|
||||
b.State("Idle").To("Flee").OnEvent(AiSignal.Parried);
|
||||
b.State("Flee");
|
||||
var ctx = new FakeAiContext();
|
||||
var rt = new AiRuntime(b.Build(), ctx);
|
||||
rt.Send(AiSignal.Parried);
|
||||
rt.Tick(0.1f);
|
||||
Assert.AreEqual("Flee", rt.CurrentStateName);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TwoRuntimes_ShareGraph_IndependentStateAndTimer()
|
||||
{
|
||||
var graph = Graph(); // 共享同一张不可变图
|
||||
var a = new FakeAiContext(); var rtA = new AiRuntime(graph, a);
|
||||
var b = new FakeAiContext(); var rtB = new AiRuntime(graph, b);
|
||||
|
||||
// A 发现玩家推进,B 不动 —— 状态独立
|
||||
a.S.Sees = true; rtA.Tick(0.1f);
|
||||
Assert.AreEqual("Chase", rtA.CurrentStateName);
|
||||
Assert.AreEqual("Patrol", rtB.CurrentStateName);
|
||||
|
||||
// 两者各自进入 Search(计时归零)
|
||||
a.S.Sees = false; a.S.LostForValue = 5f; rtA.Tick(0.1f); // A -> Search
|
||||
b.S.Sees = true; rtB.Tick(0.1f); // B -> Chase
|
||||
b.S.Sees = false; b.S.LostForValue = 5f; rtB.Tick(0.1f); // B -> Search
|
||||
|
||||
// 只推进 A 的 After 计时越过 3s;B 计时独立、不动
|
||||
rtA.Tick(2f); rtA.Tick(2f); // A Search 计时 ~4 -> After -> Patrol
|
||||
Assert.AreEqual("Patrol", rtA.CurrentStateName);
|
||||
Assert.AreEqual("Search", rtB.CurrentStateName); // B 独立,仍在 Search
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user