Creature¶
职责¶
Creature 是 Character 与 monster 的多态基类,定义所有活跃行动者共享的位置、感知、
面向战斗的属性、伤害、effect、移动、可见性、态度钩子和 viewer 行为。
入口点¶
阅读 src/creature.h、src/creature.cpp;effect 集成由 creature-effect 测试覆盖,
空间索引与查找进入 creature_tracker。
数据所有权¶
creature 拥有基础行动者状态与 effect map,具体子类拥有类型专属状态。map 拥有地形;
creature_tracker 索引活跃实例,但不是它们的玩法所有者。
依赖¶
基类依赖坐标、map 可见性、field、effect、damage type、faction、event,以及
Character 或 monster 提供的虚行为。
生命周期¶
具体行动者被构造、定位并注册,由模拟更新,可能跨 submap 移动、受到效果/伤害、死亡, 最后由所有者从 tracker 移除。
不变量¶
tracker 位置与真实位置一致;活跃行动者不会在 tracker 重复;effect key 和持续时间 有效;虚类型 predicate 与具体对象一致。
扩展点¶
真正共享的行动者行为才放入 Creature,其余放在具体类。跨行动者变化优先通过既有
event 与 ID 发布,不要新增类型判断链。
序列化¶
基类提供共享读取 helper,但具体 Character 与 monster 路径拥有持久记录。tracker
索引和可见性缓存读取后重建。
测试¶
使用 creature、creature-in-field、creature-effect、vision、combat 和子类测试。移动 变化必须同时断言 map 占用与 tracker 查找。
性能¶
可见性、effect 处理、距离计算和 tracker 查询都是热路径。避免对所有 creature 扇出 虚调用,以及在嵌套循环中重复查 map。
CCB 差异¶
CCB creature 行为由当前源码与测试定义,包括现行 field/effect 语义。上游算法移植 前必须提供确定性的回归证据。
技术债务¶
基类为语义不同的行动者暴露了很宽的虚接口。扩展时优先使用面向能力的 helper 与 event, 而不是继续增加宽泛虚函数。