跳转至

Vehicle

职责

vehicle 模型化由 vehicle_part 组成的可移动整体,包括安装点、cargo、engine、 battery、control、fault、label、zone、power network、运动、碰撞、autodrive 与交互。

入口点

阅读 src/vehicle.h 与各 vehicle_*.cpp。定义数据由 vehicle prototype 和 part 注册 表进入;放置与 map 集成;持久化在 src/savegame_json.cpp。

数据所有权

vehicle 拥有 part vector 与 part 内 item。已加载 submap 拥有 vehicle 实例;map 的 vehicle cache 索引占用点。vehicle_part_location 是受检查 locator,不是独立所有权。

依赖

vehicle 依赖 map 坐标/缓存、item pocket、part/type 注册表、fuel/energy 单位、Character、 Creature、zone、activity 与物理计算。

生命周期

prototype 生成或存档读取 vehicle;part 安装、移除、位移并 refresh;map 跟踪移动与 碰撞;split 创建不同 owner;卸载/保存持久化每个整体。

不变量

part mount 坐标与占用点缓存一致;part 引用只在文档有效期内使用;cargo 只有一个 owner; part 变化失效 power/mass cache;split 不复制 part 或 label。

扩展点

优先使用 JSON vehicle part/prototype。原生行为放在聚焦组件,并同时更新 refresh/cache、 interaction、serialization 和 split 规则。

序列化

vehicle::serialize / deserialize 与 vehicle-part 持久化位于 savegame_json.cpp。派生物理与 map 缓存重建;持久 part 字段需要旧存档默认与迁移。

测试

按变化选择 vehicle part、split、power、efficiency、drag、ramp、turret、export、 fake-part、interaction 与 mapgen-placement 测试。

性能

移动会频繁重算占用 tile 与物理。保持 dirty flag,避免每个查询都全扫 part,并用大型 移动组合测量。

CCB 差异

CCB vehicle 数据与代码经过选择性移植,不保证与上游缓存/存档语义一致。以 CCB prototype、测试与当前序列化验证。

技术债务

part、cache、physics、power、UI 与 persistence 仍紧密耦合。重构应单独作为非行为修改, 并提供往返和运动证据。