Commit Graph
31 Commits
Author SHA1 Message Date
joywayer b1d3c169ec chore(enemy): 补交 EnemyBody 与其测试的 .meta 2026-07-27 12:07:46 +08:00
joywayer b0e1ebfecc feat(enemy): 新增 IEnemyBody 身体几何权威接口与 EnemyBody 实现(+14 纯函数单测) 2026-07-27 11:48:26 +08:00
joywayer 86e3637d8e chore(core): 补交 WeightedPick 与其测试的 .meta 2026-07-27 10:00:59 +08:00
joywayer 3d85f65965 feat(core): 新增 WeightedPick 加权随机共享原语(+10 单测),为消除四处平行实现做准备 2026-07-27 09:54:34 +08:00
joywayer 568b6e46c0 chore(enemy): 补交新脚本的 .meta(AbilityCategory/AttackSelectionMode/IAttackCandidate/EnemyAttackSelector+测试) 2026-07-24 14:55:17 +08:00
joywayer 022e4f18d2 fix(enemy): Approach 逼近改用 aggro/视野双刷新的 LastKnown(修 aggro 先命中扑向错误点)+补 Attack 退出测试 2026-07-24 12:47:48 +08:00
joywayer 6cdd4ef513 feat(enemy): PerceptionStateMachine 增加 ApproachAttack 风格(寻路逼近↔选招攻击)+测试 2026-07-24 12:27:59 +08:00
joywayer 297f9d2968 feat(enemy): IEnemyLocomotion 增加 Pursue 寻路逼近原语(RunSpeed) 2026-07-24 12:23:43 +08:00
joywayer 702df35efd feat(enemy): ICombatant 增加 HasEligibleAttack/UseBestAttack + EnemyBase 构建选择器 2026-07-24 12:20:54 +08:00
joywayer 04a267b69f feat(enemy): EnemyAttackSelector 选招器(射程+冷却+LOS+着地过滤,两模式选招)+单测 2026-07-24 12:15:41 +08:00
joywayer ca36974ec3 feat(enemy): EnemyAbilityBase 加 ResolveConfig<T> 类型化配置解析(不匹配显式报错) + EditMode 测试 2026-07-21 11:14:28 +08:00
joywayer d7be0cc119 @
feat(ai): 追击冲刺带冷却——CD 期巡逻,冷却结束仍在追逐区则再冲(PatrolBetweenChases)

按需求:冲刺打完 → CD 期切到巡逻(Move_Patrol) → 冷却结束且玩家仍在追逐区 → 再冲刺。

PerceptionStateMachine 加 opt-in 开关 PatrolBetweenChases:
- Chase → Patrol When !IsAbilityRunning(chase):冲刺是 committed 冲锋,感知丢失
  也不中途打断,打完(能力结束)即降巡逻。
- Idle/Patrol/Alert → Chase 加冷却门 CanUseAbility(chase):CD 中不回追击,
  避免"CD 期在追逐区每帧 Chase↔Patrol 来回抖"(用户担心的错切/抖动)。
- 默认关:不影响其他敌人(leftAllZones 旧行为保留)。
E001CaoZhiAi 打开开关。追击能力保持单次冲刺不变,冷却=ABL_E001_Chase.cooldown(1s)。

测试:PerceptionStateMachineTests +5(CD 转换矩阵含"CD 期多帧不抖动"负例),
FakeCombat 加可控 CanUse。全量 75/75 绿。PlayMode 实测循环
Move_Patrol(CD)→Chase(冲)→Move_Patrol,inChase 全程 true 亦不抖,0 报错。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 13:11:28 +08:00
joywayer 55b6255ce6 @
test(ai): BrainGraph 全面测试——框架边界 + 全感知矩阵(70 tests 全绿)

保证自研 AI 状态机(BrainGraph)稳定与功能正确性。EditMode AI 测试从 31 增至 70。

新增 AiFrameworkTests(17)——框架健壮性/边界(与 AiRuntimeTests 主干互补):
- 构图校验:Entry 未设/未声明、全局转换目标未声明、GlobalBuilder 顺序错用抛异常
- 转换优先级:同态多条件首声明胜、全局条件转换、全局优先于局部
- 事件 vs 条件:事件优先(Tick 首步)、未匹配信号被消费不阻塞、多信号首个匹配胜
- 时序:条件自转换 no-op、转换当帧跳过 OnTick、Tick 双参传 dt
- trace 环形上限 16、事件推进后清挂起、State 重声明累加转换

重写 PerceptionStateMachineTests(22)——完整感知↔状态矩阵:
- 待机/巡逻/警觉/追击/死亡 全转换 + HasAlert 分支(无警觉态不进警觉)
- 追击优先于警觉;追击永不回警觉、脱离全部感知才降级 R(=Patrol)
- 视野单独/追逐区单独仍维持追击;locomotion 意图(Idle/Patrol/Face)
- 追击触发能力、离开中断能力;死亡为终态不复活

验证:反射调用全部 [Test] 方法(负对照确认能捕获失败),70/70 通过。
去重:Blackboard/局部转换目标校验已由 BlackboardTests/BrainBuilderTests 覆盖,不重复。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-20 11:11:54 +08:00
joywayer 63b3701fc7 @
test(ai): PerceptionStateMachine locomotion 意图回归测试(绿)

新增 PerceptionStateMachineTests:待机态声明 Idle locomotion 意图、进追逐区
转 Chase 并触发追击能力、Chase 态不再直接声明 locomotion 意图。测试程序集
补 BaseGames.Enemies 引用。断言经真实状态机 + 测试 fake 验证通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-07-10 12:21:28 +08:00
joywayerandClaude Opus 4.8 1ab0521061 refactor(ai): IAiContext.Mover→Locomotion,删除 IMover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:14:53 +08:00
joywayerandClaude Opus 4.8 6c27993e09 feat(ai): 敌人感知↔状态模型——待机/警觉/追击/巡逻 + 可复用感知状态机
感知门面 EnemyBase.InChaseZone(追逐/aggro)/InVisionZone(视野/los,缺省回退aggro),纯查询;
转换逻辑归 AI 层: 新增可复用 PerceptionStateMachine(统一规则,HasAlert/视野缺省自动降级);
规则: 未发现进视野→警觉, 进追逐→追击(委托能力), 追击脱离视野→巡逻(永不回警觉,再进视野再警觉).
EnemyStatsSO.HasAlertState 勾选项; ContactChaseAbility 改纯执行器(退出由AI中断); E001 用可复用件.
PlayMode 验证四态转换全通过.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:10:39 +08:00
joywayerandClaude Opus 4.8 4ce798ea6e refactor(ai): E001 AI 重写为纯决策层,符合设计并委托能力模块
依据小怪设计文档重构 E001 状态机 Idle_Disguise→Skill_Start→Skill_Loop→Skill_End→Move_Patrol:
追击移动/接触伤害全部委托 e001_chase(ContactChaseAbility),AI 不再裸 MoveTo。
新增 ISensor.DetectsPlayer(视线OR近身,对齐设计)、IMover.UseChase/PatrolSpeed、
IEnemyActor.SetPhase(AI 声明阶段、EnemyBase 播动画)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 16:51:47 +08:00
joywayerandClaude Opus 4.8 63e241af92 fix(ai): AiRuntime 自转换设为no-op(根治死亡双发Died再入) + EnemyBase.OnSpawn复位brain.enabled + 测试
Switch 对 target==当前态直接 no-op(不重跑Exit/Enter),循环改为 if(Switch(t))return true;
OnSpawn 复用时恢复被 QuotaManager 裁剪禁用的 brain。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 16:26:28 +08:00
joywayer 683a2d9ffb feat(ai): AiDefinitionRegistry——反射按id提供共享AiGraph(关域重载重置) 2026-07-03 14:55:42 +08:00
joywayer 11e4c9f1ea refactor(ai): 终审收尾——删死字段/事件转换刷新IsSuspended + 局部事件与双实例独立性测试 2026-07-03 14:33:23 +08:00
joywayer 747d39072e test(ai): BrainGraph 第1阶段收尾——flyweight 共享测试 + 全量绿 2026-07-03 14:26:01 +08:00
joywayer d01df7b5f0 feat(ai): AiRuntime 事件转换(push,不受门限制)+trace触发原因+池复用测试 2026-07-03 14:23:28 +08:00
joywayer 5ad26b16e8 perf(ai): AiRuntime 热路径去装箱/弱表一次注册 + 补 OnExit/Entry OnEnter 测试 2026-07-03 14:20:19 +08:00
joywayer cdd1053bec feat(ai): AiRuntime 条件转换+IsControllable让位门+状态计时+trace+Reset 2026-07-03 14:13:36 +08:00
joywayer 6f9fa8c4b8 feat(ai): BrainGraph AiGraph + BrainBuilder(fluent, 显式标签, 目标校验) 2026-07-03 14:04:51 +08:00
joywayer db5bd019f8 feat(ai): BrainGraph 核心程序集 + AiSignal + Blackboard(可自省) 2026-07-03 13:56:11 +08:00
joywayer a1f9122153 UI相关优化补充 2026-05-25 13:21:41 +08:00
joywayer 8ae2de5bcb 存档完善和修复 2026-05-20 15:26:51 +08:00
joywayer ec633d9b79 存档完善和修复 2026-05-20 15:10:35 +08:00
joywayer f264329751 摄像机区域的架构改动 2026-05-15 14:47:24 +08:00
joywayer 1b37297585 多轮审查评估 2026-05-13 09:19:54 +08:00