using BaseGames.AI; namespace BaseGames.Enemies { /// /// E001(草蛭)的 AI 定义:巡逻 → 追击(接触即伤害,无需攻击能力)→ 搜查 → 巡逻。 /// 数值目前用字面量常量;后续可外挂 SO 做热调。 /// [AiDefinition("E001")] public sealed class E001CaoZhiAi : AiScript { const float LoseTimeout = 2.5f; // 丢失玩家判定 const float SearchTime = 3f; // 搜查后返回巡逻 protected override void Build(BrainBuilder b) { b.Entry("Patrol"); // 死亡:全局事件,终止决策 b.Global().To("Dead").OnEvent(AiSignal.Died); b.State("Patrol") .Tick(c => c.Mover.WalkRandom()) .To("Chase").When(c => c.Sensor.SeesPlayer(), "SeesPlayer"); b.State("Chase") .OnEnter(c => c.Mover.FacePlayer()) .Tick(c => c.Mover.MoveTo(c.Sensor.LastKnown)) // 冲向玩家,接触即由 BodyContactDamage 造成伤害 .To("Search").When(c => c.Sensor.LostFor(LoseTimeout), "LostFor"); b.State("Search") .OnEnter(c => c.Mover.LookAround()) .To("Chase").When(c => c.Sensor.SeesPlayer(), "SeesPlayer") .To("Patrol").After(SearchTime); b.State("Dead") .OnEnter(c => c.Mover.Stop()); } } }