# Data and Map ## 职责 数据模块负责把外部关卡数据转换成游戏运行时使用的 `LevelDefinition`。 主要源码: - `game/src/data/level_definition.h` - `game/src/data/stage_map_resource.*` - `game/src/data/stage_map_loader.*` - `game/src/data/whitebox_level.cpp` - `game/assets/map/stage_01.map` ## 数据流 ```text stage_01.map -> StageMapResource -> StageMapLoader -> LevelDefinition -> WhiteboxScene / StageRenderer / DebugOverlay ``` 读取优先级: 1. `Asset` 普通文本资源:`map/stage_01.map` 2. `Asset` fallback:`assets/map/stage_01.map` 3. `PvfArchive` 二进制脚本:`map/stage_01.map` 4. `PvfArchive` 文本内容:`map/stage_01.map` ## `LevelDefinition` 当前包含: - 世界宽高。 - 玩家出生点。 - 摄像机边界。 - 平台碰撞世界。 - tileset 定义和 tile entry。 - 场景视觉层。 - battle zone。 - enemy spawn point。 ## `.map` 当前命令 ```text map world camera player_spawn collision tileset layer rect rect_sprite rect_sprite_src tile_rect endlayer battle_zone spawn endbattle_zone ``` ## Tile 约定 `tileset` 定义 tile 图片来源、单格尺寸和 fallback 色。图片不存在时,`StageRenderer` 会按 tile fallback 色绘制,不阻断场景启动。 `tile_rect` 只能写在 `layer` 内,用于批量铺同一种 tile: - `columns` / `rows` 是重复格数。 - `tile_index` 当前表示 tileset 第一行的横向 tile 序号。 - `r g b` 是该批 tile 的灰盒 fallback 色,alpha 固定为 `1.0`。 当前 `stage_01.map` 已把 `level_visual` 地面和平台从长色块替换为 `tile_rect`,碰撞仍由 `collision` 独立定义。 ## 下一步 - 把 `tile_rect` 扩展成可表达 tile row/column 或 tile id。 - 增加空 layer、battle zone 无 spawn、tile texture 不存在等更严格错误日志。 - 保留 `whitebox_level.cpp` 作为 fallback,不再把主地图写死在 C++。