feat: 收敛玩法运行时配置并加入故障恢复
This commit is contained in:
405
doc/config/全局规则与配置维度清单.md
Normal file
405
doc/config/全局规则与配置维度清单.md
Normal file
@@ -0,0 +1,405 @@
|
||||
# 全局规则与配置维度清单
|
||||
|
||||
本文档用于定义当前系统中**跨玩法共用**的全局规则块和配置维度,作为后续所有玩法设计文档、配置文件设计、后台录入和联调的统一骨架。
|
||||
|
||||
目标:
|
||||
|
||||
- 统一“一个玩法设计文档至少要覆盖哪些公共规则块”
|
||||
- 统一“一个游戏配置文件通常会包含哪些跨玩法公共配置”
|
||||
- 为后续新增系统能力时提供持续维护入口
|
||||
|
||||
说明:
|
||||
|
||||
- 本文档讲的是**全局规则块**
|
||||
- 它不替代具体玩法规则文档
|
||||
- 它也不替代具体玩法的可配置项清单
|
||||
- 推荐和 [顺序打点规则说明文档](D:/dev/cmr-mini/doc/games/顺序打点/规则说明文档.md)、[顺序打点游戏配置项](D:/dev/cmr-mini/doc/games/顺序打点/游戏配置项.md)、[配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md) 配合阅读
|
||||
- 后续玩法设计建议统一使用 [玩法设计文档模板](D:/dev/cmr-mini/doc/gameplay/玩法设计文档模板.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 设计原则
|
||||
|
||||
后续每个玩法设计文档,至少建议覆盖以下三层:
|
||||
|
||||
1. 玩法专属规则
|
||||
2. 全局规则块选型
|
||||
3. 配置落点与默认值
|
||||
|
||||
也就是说,后续写一个新玩法时,不应该只写:
|
||||
|
||||
- 怎么玩
|
||||
- 怎么赢
|
||||
|
||||
还应该明确:
|
||||
|
||||
- 用哪套定位点样式
|
||||
- 用哪套轨迹策略
|
||||
- 是否启用腿线动画
|
||||
- 是否启用内容弹层
|
||||
- 是否启用音效、震动和 HUD 反馈
|
||||
- 哪些沿用系统默认值,哪些做玩法覆盖
|
||||
|
||||
---
|
||||
|
||||
## 2. 推荐公共骨架
|
||||
|
||||
当前推荐所有玩法配置继续沿用以下顶层骨架:
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.31",
|
||||
"app": {},
|
||||
"map": {},
|
||||
"playfield": {},
|
||||
"game": {},
|
||||
"resources": {},
|
||||
"debug": {}
|
||||
}
|
||||
```
|
||||
|
||||
其中:
|
||||
|
||||
- `app` 管活动级基础信息
|
||||
- `map` 管地图底图和视口底座
|
||||
- `playfield` 管场地对象、路线和点位内容
|
||||
- `game` 管玩法规则和全局运行规则
|
||||
- `resources` 管资源档和主题档
|
||||
- `debug` 管调试与模拟能力
|
||||
|
||||
---
|
||||
|
||||
## 3. 全局规则块总表
|
||||
|
||||
| 规则块 | 建议落点 | 作用 | 是否建议每个玩法都明确 |
|
||||
| --- | --- | --- | --- |
|
||||
| 活动基础信息 | `app.*` | 定义活动身份、标题和语言环境 | 是 |
|
||||
| 地图底座 | `map.*` | 定义地图来源、磁偏角和初始视口 | 是 |
|
||||
| 场地对象 | `playfield.*` | 定义路线、控制点、对象集和内容覆盖 | 是 |
|
||||
| 对局流程 | `game.session.*` | 定义开局、结束、时长和起终点要求 | 是 |
|
||||
| 打点判定 | `game.punch.*` | 定义打点触发方式和判定半径 | 是 |
|
||||
| 顺序推进 / 跳点 | `game.sequence.*` | 定义顺序赛推进和跳点规则 | 顺序类玩法必须明确 |
|
||||
| 计分模型 | `game.scoring.*` | 定义分值模型和点位得分规则 | 有计分时必须明确 |
|
||||
| 引导显示 | `game.guidance.*` | 定义腿线、目标聚焦和地图引导 | 是 |
|
||||
| 可见性策略 | `game.visibility.*` | 定义开局是否隐藏对象、何时揭示全场 | 是 |
|
||||
| 完赛规则 | `game.finish.*` | 定义终点生效条件和结束逻辑 | 是 |
|
||||
| 内容体验 | `playfield.controlOverrides.*` | 定义点位弹窗、H5、点击内容 | 有内容玩法建议明确 |
|
||||
| 点位表现 | `game.presentation.*.controls` | 定义控制点不同状态样式 | 是 |
|
||||
| 腿线表现 | `game.presentation.*.legs` | 定义路线连接线样式和动效 | 有路线玩法建议明确 |
|
||||
| 轨迹表现 | `game.presentation.track.*` | 定义玩家轨迹展示策略 | 是 |
|
||||
| 定位点表现 | `game.presentation.gpsMarker.*` | 定义 GPS 点样式和动画 | 是 |
|
||||
| 遥测参数 | `game.telemetry.*` | 定义心率等计算参数,作为活动默认值 | 用到相关能力时明确 |
|
||||
| 反馈系统 | `game.feedback.*` | 定义音效、震动、UI 动效 | 是 |
|
||||
| 资源档 | `resources.*` | 定义音频、主题、内容资源档 | 是 |
|
||||
| 调试能力 | `debug.*` | 定义模拟输入和调试开关 | 开发阶段建议明确 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 各规则块说明
|
||||
|
||||
### 4.1 活动基础信息
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 活动 ID | `app.id` | 活动或配置实例唯一标识 | 任意字符串 | 无,建议必填 |
|
||||
| 活动标题 | `app.title` | 页面展示和结算展示的标题 | 任意字符串 | 无,建议必填 |
|
||||
| 语言环境 | `app.locale` | 文案和内容环境 | 当前常用:`zh-CN` | `zh-CN` |
|
||||
|
||||
### 4.2 地图底座
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 瓦片路径 | `map.tiles` | 地图瓦片资源位置 | 路径字符串 | 无,建议必填 |
|
||||
| 地图元数据 | `map.mapmeta` | 地图 meta 文件 | 路径字符串 | 无,建议必填 |
|
||||
| 磁偏角 | `map.declination` | 影响真北/磁北换算 | `number` | `0` |
|
||||
| 初始缩放 | `map.initialView.zoom` | 地图初始缩放级别 | `number` | 由客户端初始视口逻辑接管,建议 `17` |
|
||||
|
||||
### 4.3 场地对象
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 场地类型 | `playfield.kind` | 定义玩法使用的对象集合类型 | `course` `control-set` | 由玩法决定,顺序赛常用 `course` |
|
||||
| 场地来源类型 | `playfield.source.type` | 定义空间底稿来源 | 当前支持:`kml` | `kml` |
|
||||
| 场地来源地址 | `playfield.source.url` | KML 或其他空间资源地址 | 路径字符串 | 无,建议必填 |
|
||||
| 控制点绘制半径 | `playfield.CPRadius` | 影响地图上控制点圈的展示大小 | `number` | `6` |
|
||||
| 路线标题 | `playfield.metadata.title` | 路线或对象集标题 | 任意字符串 | 无 |
|
||||
| 路线编码 | `playfield.metadata.code` | 路线或对象集编码 | 任意字符串 | 无 |
|
||||
|
||||
### 4.4 对局流程
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 手动开始 | `game.session.startManually` | 是否需要玩家主动点开始按钮 | `true` `false` | 顺序赛默认 `false` |
|
||||
| 必须打起点 | `game.session.requiresStartPunch` | 是否要求起点打卡后才正式开赛 | `true` `false` | 顺序赛默认 `true` |
|
||||
| 必须打终点 | `game.session.requiresFinishPunch` | 是否要求终点打卡才能完赛 | `true` `false` | 顺序赛默认 `true` |
|
||||
| 最后点自动结束 | `game.session.autoFinishOnLastControl` | 最后一个普通点完成后是否直接结束 | `true` `false` | `false` |
|
||||
| 最大时长 | `game.session.maxDurationSec` | 单局允许的最大比赛时长 | `number` | `5400` |
|
||||
|
||||
### 4.5 打点判定
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 打点策略 | `game.punch.policy` | 控制进入范围后如何完成打点 | `enter-confirm` `enter` | `enter-confirm` |
|
||||
| 打点半径 | `game.punch.radiusMeters` | 打点命中的半径阈值 | `number` | `5` |
|
||||
| 必须先聚焦目标 | `game.punch.requiresFocusSelection` | 是否必须先选中目标点才能打卡 | `true` `false` | 顺序赛默认 `false`,积分赛默认 `true` |
|
||||
|
||||
### 4.6 顺序推进 / 跳点
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 是否允许跳点 | `game.sequence.skip.enabled` | 顺序玩法是否允许跳过当前目标点 | `true` `false` | 顺序赛默认 `true` |
|
||||
| 跳点半径 | `game.sequence.skip.radiusMeters` | 触发跳点的距离阈值 | `number` | `game.punch.radiusMeters * 2` |
|
||||
| 跳点确认 | `game.sequence.skip.requiresConfirm` | 触发跳点时是否需要二次确认 | `true` `false` | `false` |
|
||||
|
||||
### 4.7 计分模型
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 计分模型 | `game.scoring.type` | 定义玩法采用哪种积分模型 | 当前建议:`score` | `score` |
|
||||
| 默认控制点分值 | `game.scoring.defaultControlScore` | 普通点未单独配置时的默认分值 | `number` | 顺序赛默认 `1`,积分赛默认 `10` |
|
||||
|
||||
备注:
|
||||
|
||||
- 顺序赛当前基础分、答题奖励分等更细规则仍以玩法规则文档为准,但系统默认基础分已按 `1` 落地
|
||||
- 后续如果顺序赛积分逻辑进一步配置化,应优先补到 `game.scoring` 下
|
||||
|
||||
### 4.8 引导显示
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 显示腿线 | `game.guidance.showLegs` | 是否绘制路线连接线 | `true` `false` | 顺序赛默认 `true` |
|
||||
| 腿线动画 | `game.guidance.legAnimation` | 是否启用腿线动画效果 | `true` `false` | 顺序赛默认 `true` |
|
||||
| 允许地图选点 | `game.guidance.allowFocusSelection` | 是否允许用户点击地图切换目标 | `true` `false` | 顺序赛默认 `false` |
|
||||
|
||||
补充说明:
|
||||
|
||||
- 黑色顶部引导提示条属于公共引导层。
|
||||
- 当前默认在引导文案发生有效变化时,提示条会播放一次轻量入场动画,并辅以一次轻震动。
|
||||
- 当内容卡、答题卡或结果页出现时,引导提示条默认让位。
|
||||
- 顶部引导提示条的反馈与距离引导反馈分离管理,不能互相替代。
|
||||
- 当前距离引导反馈默认分为三档:
|
||||
- 远距离:弱提醒,间隔更长
|
||||
- 接近目标:提醒频率提升
|
||||
- 可打点:高频确认提醒
|
||||
|
||||
### 4.9 可见性策略
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 起点后揭示全场 | `game.visibility.revealFullPlayfieldAfterStartPunch` | 打完起点后是否显示全部控制点与路线 | `true` `false` | `true` |
|
||||
|
||||
### 4.10 完赛规则
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 终点始终可选 | `game.finish.finishControlAlwaysSelectable` | 终点是否无条件可生效 | `true` `false` | 顺序赛默认 `false` |
|
||||
|
||||
### 4.11 内容体验
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 自动弹窗模板 | `playfield.controlOverrides.<key>.template` | 点位完成后默认卡片模板 | `minimal` `story` `focus` | 起终点常用 `focus`,普通点常用 `story` |
|
||||
| 自动弹窗开关 | `playfield.controlOverrides.<key>.autoPopup` | 完成点位后是否自动弹内容 | `true` `false` | 最小模板默认 `false` |
|
||||
| 自动内容仅一次 | `playfield.controlOverrides.<key>.once` | 本局是否只自动展示一次 | `true` `false` | `false` |
|
||||
| 内容承载方式 | `playfield.controlOverrides.<key>.contentExperience.type` | 自动内容使用原生还是 H5 | `native` `h5` | 当前按点位配置 |
|
||||
| 内容展示形态 | `playfield.controlOverrides.<key>.contentExperience.presentation` | H5 内容如何呈现 | `sheet` `dialog` `fullscreen` | `sheet` |
|
||||
| 点击承载方式 | `playfield.controlOverrides.<key>.clickExperience.type` | 点击点位时使用原生还是 H5 | `native` `h5` | 当前按点位配置 |
|
||||
| 点击展示形态 | `playfield.controlOverrides.<key>.clickExperience.presentation` | 点击 H5 如何呈现 | `sheet` `dialog` `fullscreen` | `sheet` |
|
||||
|
||||
说明:
|
||||
|
||||
- 最小模板下,点击检查点默认不弹任何详情卡,也不直接打开答题卡。
|
||||
- 最小模板下,起点和普通点完成后默认不弹白色内容卡。
|
||||
- 点击内容能力改为显式配置能力;只有配置了 `clickTitle` / `clickBody` / `clickExperience` 之一时,点击点位才会产生内容反馈。
|
||||
- 完成后自动弹白卡也改为显式配置能力;只有明确开启 `autoPopup = true` 时,完成点位后才会弹出白色内容卡。
|
||||
- 点击详情卡片当前默认不展示 H5 详情按钮,但 `clickExperience` 和 CTA 能力保留。
|
||||
- 连续点击不同检查点时,新的点击卡片会直接替换当前卡片,不进入手动关闭队列。
|
||||
- 黑色顶部提示条只承担操作引导,不承载点位内容或结果信息。
|
||||
- 当白色内容卡、答题卡或结果页出现时,黑色顶部提示条默认让位,不与内容层抢注意力。
|
||||
- 白色内容卡当前分为两类:
|
||||
- 浏览型:点击点位查看说明,无按钮,默认约 `4` 秒自动消失,点击屏幕任意位置可关闭。
|
||||
- 交互型:打点完成后的即时内容卡,可带 CTA 或进入答题流程。
|
||||
- 终点完成默认直接进入原生成绩总览页,不再额外叠加终点白色内容卡;如需再次查看终点说明,需显式配置点击内容能力。
|
||||
|
||||
### 4.12 点位表现
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 点位样式 | `game.presentation.<mode>.controls.<state>.style` | 控制点形状和结构 | `classic-ring` `solid-dot` `double-ring` `badge` `pulse-core` | 由玩法状态决定 |
|
||||
| 点位主色 | `game.presentation.<mode>.controls.<state>.colorHex` | 控制点颜色 | 十六进制颜色字符串 | 顺序赛默认参考传统定向紫红色 |
|
||||
| 点位尺寸倍率 | `game.presentation.<mode>.controls.<state>.sizeScale` | 控制点大小缩放 | `number` | `1` 或按状态定制 |
|
||||
| 强调环倍率 | `game.presentation.<mode>.controls.<state>.accentRingScale` | 外环强调强度 | `number` | 按状态定制 |
|
||||
| 光晕强度 | `game.presentation.<mode>.controls.<state>.glowStrength` | 点位光晕表现 | 建议 `0 ~ 1` | 按状态定制 |
|
||||
| 标签倍率 | `game.presentation.<mode>.controls.<state>.labelScale` | 点位编号大小 | `number` | `1` 或按状态定制 |
|
||||
| 标签颜色 | `game.presentation.<mode>.controls.<state>.labelColorHex` | 点位编号颜色 | 十六进制颜色字符串 | 按状态定制 |
|
||||
|
||||
状态建议至少考虑:
|
||||
|
||||
- `default`
|
||||
- `current`
|
||||
- `completed`
|
||||
- `skipped`
|
||||
- `start`
|
||||
- `finish`
|
||||
|
||||
### 4.13 腿线表现
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 腿线样式 | `game.presentation.<mode>.legs.<state>.style` | 连接线风格 | `classic-leg` `dashed-leg` `glow-leg` `progress-leg` | 顺序赛默认建议 `classic-leg` |
|
||||
| 腿线主色 | `game.presentation.<mode>.legs.<state>.colorHex` | 连接线颜色 | 十六进制颜色字符串 | 顺序赛默认建议传统定向紫红色 |
|
||||
| 腿线宽度倍率 | `game.presentation.<mode>.legs.<state>.widthScale` | 连接线粗细 | `number` | 视玩法决定 |
|
||||
| 腿线光晕强度 | `game.presentation.<mode>.legs.<state>.glowStrength` | 连接线发光程度 | 建议 `0 ~ 1` | 视玩法决定 |
|
||||
|
||||
状态建议至少考虑:
|
||||
|
||||
- `default`
|
||||
- `completed`
|
||||
|
||||
### 4.14 轨迹表现
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 轨迹模式 | `game.presentation.track.mode` | 决定是否显示轨迹以及显示方式 | `none` `tail` `full` | 顺序赛建议 `full` |
|
||||
| 轨迹风格 | `game.presentation.track.style` | 整体视觉风格 | `classic` `neon` | 当前默认 `neon` |
|
||||
| 拖尾档位 | `game.presentation.track.tailLength` | 拖尾长度档位 | `short` `medium` `long` | 视玩法决定 |
|
||||
| 预设色盘 | `game.presentation.track.colorPreset` | 轨迹预设颜色方案 | `mint` `cyan` `sky` `blue` `violet` `pink` `orange` `yellow` | 按玩法决定 |
|
||||
| 拖尾长度 | `game.presentation.track.tailMeters` | 实际拖尾长度 | `number` | 可覆盖档位映射 |
|
||||
| 拖尾时窗 | `game.presentation.track.tailMaxSeconds` | 最大拖尾时间窗口 | `number` | 选填 |
|
||||
| 静止淡出 | `game.presentation.track.fadeOutWhenStill` | 静止时是否逐步淡出 | `true` `false` | 选填 |
|
||||
| 静止阈值 | `game.presentation.track.stillSpeedKmh` | 判定静止的速度阈值 | `number` | 选填 |
|
||||
| 淡出时长 | `game.presentation.track.fadeOutDurationMs` | 静止后淡出时长 | `number` | 选填 |
|
||||
| 轨迹主色 | `game.presentation.track.colorHex` | 主体轨迹颜色 | 十六进制颜色字符串 | 未配时回退到预设色盘 |
|
||||
| 轨迹头部色 | `game.presentation.track.headColorHex` | 轨迹头部高亮颜色 | 十六进制颜色字符串 | 未配时回退到预设色盘 |
|
||||
| 轨迹宽度 | `game.presentation.track.widthPx` | 主体轨迹宽度 | `number` | 选填 |
|
||||
| 头部宽度 | `game.presentation.track.headWidthPx` | 头部高亮宽度 | `number` | 选填 |
|
||||
| 轨迹光晕 | `game.presentation.track.glowStrength` | 轨迹光晕强度 | 建议 `0 ~ 1` | 选填 |
|
||||
|
||||
### 4.15 定位点表现
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 是否显示定位点 | `game.presentation.gpsMarker.visible` | 控制 GPS 点是否可见 | `true` `false` | `true` |
|
||||
| 定位点样式 | `game.presentation.gpsMarker.style` | GPS 点基础形态 | `dot` `beacon` `disc` `badge` | `beacon` |
|
||||
| 定位点尺寸 | `game.presentation.gpsMarker.size` | GPS 点大小档位 | `small` `medium` `large` | `medium` |
|
||||
| 定位点预设色盘 | `game.presentation.gpsMarker.colorPreset` | GPS 点默认色彩方案 | `mint` `cyan` `sky` `blue` `violet` `pink` `orange` `yellow` | `cyan` |
|
||||
| 定位点主色 | `game.presentation.gpsMarker.colorHex` | GPS 点主体颜色 | 十六进制颜色字符串 | 未配时回退到预设色盘 |
|
||||
| 外环颜色 | `game.presentation.gpsMarker.ringColorHex` | GPS 点外环颜色 | 十六进制颜色字符串 | 未配时回退到预设色盘 |
|
||||
| 朝向指示颜色 | `game.presentation.gpsMarker.indicatorColorHex` | 小三角或朝向指示颜色 | 十六进制颜色字符串 | 未配时回退到预设色盘 |
|
||||
| 显示朝向指示 | `game.presentation.gpsMarker.showHeadingIndicator` | 是否显示跟随朝向旋转的指示三角 | `true` `false` | `true` |
|
||||
| 定位点动画档 | `game.presentation.gpsMarker.animationProfile` | GPS 点动画风格 | `minimal` `dynamic-runner` `warning-reactive` | `dynamic-runner` |
|
||||
| 中心 logo 地址 | `game.presentation.gpsMarker.logoUrl` | 品牌中心贴片资源 | URL 字符串 | 选填 |
|
||||
| logo 嵌入方式 | `game.presentation.gpsMarker.logoMode` | 品牌贴片嵌入方式 | `center-badge` | 当前支持该值 |
|
||||
|
||||
### 4.16 遥测参数
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 年龄 | `game.telemetry.heartRate.age` | 心率估算的年龄参数 | `number` | `30` |
|
||||
| 静息心率 | `game.telemetry.heartRate.restingHeartRateBpm` | 心率估算基础参数 | `number` | `62` |
|
||||
| 体重 | `game.telemetry.heartRate.userWeightKg` | 卡路里或体征估算参数 | `number` | `65` |
|
||||
|
||||
说明:
|
||||
|
||||
- 这里定义的是活动级默认值
|
||||
- 如果后续接入线上玩家身体数据接口,线上数据应覆盖这里的同名字段
|
||||
|
||||
### 4.17 HUD 信息面板
|
||||
|
||||
| 名称 | 字段 / 归属 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| HUD 页数 | 公共 UI 壳子 | 当前 HUD 固定为 `2` 页 | `2` | `2` |
|
||||
| HUD 第 1 页 | 公共 UI 壳子 | 比赛主信息页,承载动作、时间、里程、目标距离、进度等异型槽位 | 固定结构 | 启用 |
|
||||
| HUD 第 2 页 | 公共 UI 壳子 | 心率 / 遥测页,承载心率、卡路里、均速、精度等异型槽位 | 固定结构 | 启用 |
|
||||
| HUD 项目映射 | 玩法映射 | 不同玩法可将不同数据映射到相同 HUD 槽位 | 按玩法定义 | 按玩法默认 |
|
||||
| HUD 目标摘要 | 玩法映射 | 第 1 页动作区下方的摘要文案,用于显示当前目标或提示信息 | `string` | 按玩法默认 |
|
||||
| HUD 进度摘要 | 玩法映射 | 第 1 页进度区显示的核心摘要,不同玩法可映射为总分、完成进度、跳点数等 | `string` | 按玩法默认 |
|
||||
|
||||
说明:
|
||||
|
||||
- HUD 属于公共层能力,不属于某一个玩法专属规则。
|
||||
- 当前系统采用“公共 HUD 壳子 + 玩法项目映射”的方式。
|
||||
- 例如:
|
||||
- 积分赛可将进度位映射为“总分 + 收集进度”
|
||||
- 顺序打点可将进度位映射为“完成进度 + 跳点数”
|
||||
|
||||
### 4.18 反馈系统
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 音效反馈档 | `game.feedback.audioProfile` | 控制音效方案 | `string` | `default` |
|
||||
| 震动反馈档 | `game.feedback.hapticsProfile` | 控制震动策略 | `string` | `default` |
|
||||
| UI 动效档 | `game.feedback.uiEffectsProfile` | 控制 UI 动效策略 | `string` | `default` |
|
||||
| 距离提示音阈值 | `game.audio.*DistanceMeters` | 控制远距离 / 接近 / 可打点三档距离提示的生效距离 | `number` | 远距离 `80`,接近 `20`,可打点 `5` |
|
||||
| 距离提示音间隔 | `game.audio.cues.guidance:*.*` | 控制三档距离提示音的循环间隔、音量和音源 | `number` / `string` / `boolean` | 远距离 `4800ms`,接近 `950ms`,可打点 `650ms` |
|
||||
|
||||
说明:
|
||||
|
||||
- 系统当前已支持音效反馈能力。
|
||||
- 默认答题正确复用控制点完成音效,答题错误和答题超时复用警告音效。
|
||||
- 引导提示条当前默认改用轻震动,不再播放引导提示音。
|
||||
- 目标距离引导当前默认分为 `distant / approaching / ready` 三档,作为独立反馈链路,可使用距离提示音,不与顶部引导提示绑定。
|
||||
- 当前三档距离提示已支持分别配置距离阈值与循环间隔。
|
||||
|
||||
### 4.19 资源档
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 音效资源档 | `resources.audioProfile` | 选择音频资源包 | `string` | `default` |
|
||||
| 内容资源档 | `resources.contentProfile` | 选择内容资源包 | `string` | `default` |
|
||||
| 主题资源档 | `resources.themeProfile` | 选择主题和视觉资源包 | `string` | `default-race` |
|
||||
|
||||
### 4.20 调试能力
|
||||
|
||||
| 名称 | 字段 | 说明 | 可选项 / 取值 | 默认值 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 允许玩法切换 | `debug.allowModeSwitch` | 是否允许在调试时切玩法 | `true` `false` | `false` |
|
||||
| 允许模拟输入 | `debug.allowMockInput` | 是否允许用模拟数据代替真实输入 | `true` `false` | `false` |
|
||||
| 允许模拟器 | `debug.allowSimulator` | 是否开放调试模拟器面板 | `true` `false` | `false` |
|
||||
|
||||
---
|
||||
|
||||
## 5. 后续所有玩法设计文档的建议结构
|
||||
|
||||
后续每新增一种玩法,设计文档建议至少包含以下章节:
|
||||
|
||||
1. 玩法目标与一句话规则
|
||||
2. 开局流程与结束流程
|
||||
3. 核心判定与胜负条件
|
||||
4. 计分规则
|
||||
5. 对象模型与场地对象要求
|
||||
6. 全局规则块选型
|
||||
7. 默认值与玩法覆盖项
|
||||
8. 最小可跑配置示例
|
||||
|
||||
其中第 6 节“全局规则块选型”建议至少回答:
|
||||
|
||||
- 用哪套定位点样式
|
||||
- 用哪套轨迹显示策略
|
||||
- 是否显示腿线和腿线动画
|
||||
- 起点后是否揭示全场
|
||||
- 是否需要内容弹层和 H5 承载
|
||||
- 用哪套反馈档
|
||||
- 是否依赖心率等遥测参数
|
||||
|
||||
---
|
||||
|
||||
## 6. 维护约定
|
||||
|
||||
后续每次新增全局系统能力时,建议至少同步更新以下文档:
|
||||
|
||||
1. 本文档
|
||||
2. [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
3. [当前最全配置模板](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
4. 对应能力的专项文档
|
||||
- 例如轨迹、GPS 点样式、GPS 点动画、内容体验、反馈系统
|
||||
5. 至少一个玩法的配置样例
|
||||
|
||||
这样可以保证:
|
||||
|
||||
- 玩法设计有统一骨架
|
||||
- 配置字段有统一归档
|
||||
- 后台配置管理有明确输入目标
|
||||
- 后续扩展不会只长代码、不长文档
|
||||
|
||||
@@ -27,6 +27,24 @@
|
||||
"title": "完整配置示例",
|
||||
"locale": "zh-CN"
|
||||
},
|
||||
"settings": {
|
||||
"autoRotateEnabled": {
|
||||
"value": true,
|
||||
"isLocked": false
|
||||
},
|
||||
"trackDisplayMode": {
|
||||
"value": "tail",
|
||||
"isLocked": false
|
||||
},
|
||||
"gpsMarkerStyle": {
|
||||
"value": "beacon",
|
||||
"isLocked": true
|
||||
},
|
||||
"showCenterScaleRuler": {
|
||||
"value": false,
|
||||
"isLocked": false
|
||||
}
|
||||
},
|
||||
"map": {
|
||||
"tiles": "../map/lxcb-001/tiles/",
|
||||
"mapmeta": "../map/lxcb-001/tiles/meta.json",
|
||||
@@ -42,6 +60,13 @@
|
||||
"url": "../kml/lxcb-001/10/c01.kml"
|
||||
},
|
||||
"CPRadius": 6,
|
||||
"controlDefaults": {
|
||||
"score": 10,
|
||||
"template": "story",
|
||||
"autoPopup": false,
|
||||
"pointStyle": "classic-ring",
|
||||
"pointColorHex": "#cc006b"
|
||||
},
|
||||
"metadata": {
|
||||
"title": "完整路线示例",
|
||||
"code": "full-001"
|
||||
@@ -108,7 +133,7 @@
|
||||
"body": "恭喜完成本次路线。",
|
||||
"clickTitle": "终点说明",
|
||||
"clickBody": "点击终点可再次查看结束说明。",
|
||||
"autoPopup": true,
|
||||
"autoPopup": false,
|
||||
"once": true,
|
||||
"priority": 2,
|
||||
"clickExperience": {
|
||||
@@ -118,16 +143,22 @@
|
||||
"presentation": "dialog"
|
||||
}
|
||||
}
|
||||
},
|
||||
"legDefaults": {
|
||||
"style": "classic-leg",
|
||||
"colorHex": "#cc006b",
|
||||
"widthScale": 1
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"mode": "classic-sequential",
|
||||
"rulesVersion": "1",
|
||||
"session": {
|
||||
"startManually": true,
|
||||
"startManually": false,
|
||||
"requiresStartPunch": true,
|
||||
"requiresFinishPunch": true,
|
||||
"autoFinishOnLastControl": false,
|
||||
"minCompletedControlsBeforeFinish": 1,
|
||||
"maxDurationSec": 5400
|
||||
},
|
||||
"punch": {
|
||||
@@ -138,14 +169,10 @@
|
||||
"sequence": {
|
||||
"skip": {
|
||||
"enabled": true,
|
||||
"radiusMeters": 30,
|
||||
"requiresConfirm": true
|
||||
"radiusMeters": 10,
|
||||
"requiresConfirm": false
|
||||
}
|
||||
},
|
||||
"scoring": {
|
||||
"type": "score",
|
||||
"defaultControlScore": 10
|
||||
},
|
||||
"guidance": {
|
||||
"showLegs": true,
|
||||
"legAnimation": true,
|
||||
@@ -164,6 +191,25 @@
|
||||
"userWeightKg": 65
|
||||
}
|
||||
},
|
||||
"audio": {
|
||||
"distantDistanceMeters": 80,
|
||||
"approachDistanceMeters": 20,
|
||||
"readyDistanceMeters": 5,
|
||||
"cues": {
|
||||
"guidance:distant": {
|
||||
"loopGapMs": 4800,
|
||||
"volume": 0.34
|
||||
},
|
||||
"guidance:approaching": {
|
||||
"loopGapMs": 950,
|
||||
"volume": 0.58
|
||||
},
|
||||
"guidance:ready": {
|
||||
"loopGapMs": 650,
|
||||
"volume": 0.68
|
||||
}
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"audioProfile": "default",
|
||||
"hapticsProfile": "default",
|
||||
@@ -327,7 +373,23 @@
|
||||
|
||||
---
|
||||
|
||||
## 6. `playfield.controlOverrides` 字段说明
|
||||
## 6. `playfield.controlDefaults` / `playfield.controlOverrides` 字段说明
|
||||
|
||||
推荐优先级:
|
||||
|
||||
`系统默认值 -> 玩法默认值 -> playfield.controlDefaults -> playfield.controlOverrides`
|
||||
|
||||
### `playfield.controlDefaults`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:普通检查点的活动级默认配置
|
||||
- 作用:减少重复书写,未单独覆盖的普通检查点默认继承这里
|
||||
|
||||
### `playfield.controlOverrides`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:起点、普通点、终点的单点覆盖
|
||||
- 作用:只写与活动默认不同的点
|
||||
|
||||
### key 命名规则
|
||||
|
||||
@@ -365,20 +427,22 @@
|
||||
|
||||
- 类型:`string`
|
||||
- 说明:点击点位时弹出的标题
|
||||
- 默认逻辑:未配置时回退到 `title`
|
||||
- 默认逻辑:最小模板下默认不启用;仅在显式配置点击内容能力时生效
|
||||
|
||||
#### `clickBody`
|
||||
|
||||
- 类型:`string`
|
||||
- 说明:点击点位时弹出的正文
|
||||
- 默认逻辑:未配置时回退到 `body`
|
||||
- 默认逻辑:最小模板下默认不启用;仅在显式配置点击内容能力时生效
|
||||
|
||||
#### `autoPopup`
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:打点完成后是否自动弹出
|
||||
- 默认逻辑:`true`
|
||||
- 默认逻辑:最小模板下默认 `false`
|
||||
- 特殊逻辑:`game.punch.policy = "enter"` 时不自动弹原生内容
|
||||
- 补充说明:白色内容卡已改为显式配置启用;普通点只有显式设置 `autoPopup = true` 才会在打点后先弹白卡
|
||||
- 补充说明:终点完成后默认直接进入结果页,不走白色内容卡链路
|
||||
|
||||
#### `once`
|
||||
|
||||
@@ -454,6 +518,7 @@
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:是否手动开始
|
||||
- 顺序赛建议默认值:`false`
|
||||
|
||||
### `game.session.requiresStartPunch`
|
||||
|
||||
@@ -470,6 +535,14 @@
|
||||
- 类型:`boolean`
|
||||
- 说明:最后一个目标完成后是否自动结束
|
||||
|
||||
### `game.session.minCompletedControlsBeforeFinish`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:终点生效前至少需要完成的普通检查点数量
|
||||
- 建议默认值:
|
||||
- 顺序赛:`0`
|
||||
- 积分赛:`1`
|
||||
|
||||
### `game.session.maxDurationSec`
|
||||
|
||||
- 类型:`number`
|
||||
@@ -492,6 +565,9 @@
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:是否需要先聚焦/选中目标再打点
|
||||
- 建议默认值:
|
||||
- 顺序赛:`false`
|
||||
- 积分赛:`false`
|
||||
|
||||
### `game.sequence.skip.enabled`
|
||||
|
||||
@@ -502,22 +578,13 @@
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:跳点可用半径
|
||||
- 顺序赛建议默认值:打点半径的 `2` 倍
|
||||
|
||||
### `game.sequence.skip.requiresConfirm`
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:跳点是否需要二次确认
|
||||
|
||||
### `game.scoring.type`
|
||||
|
||||
- 类型:`string`
|
||||
- 说明:积分模式类型
|
||||
- 当前常用值:`score`
|
||||
|
||||
### `game.scoring.defaultControlScore`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:默认控制点分值
|
||||
- 顺序赛建议默认值:`false`
|
||||
|
||||
### `game.guidance.showLegs`
|
||||
|
||||
@@ -574,6 +641,41 @@
|
||||
- 类型:`string`
|
||||
- 说明:UI 动效 profile
|
||||
|
||||
### `game.audio`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:高级音频运行时配置,用于控制三档距离提示音的距离阈值和 cue 参数
|
||||
|
||||
### `game.audio.distantDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:远距离提示音阈值
|
||||
- 建议默认值:`80`
|
||||
|
||||
### `game.audio.approachDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:接近提示音阈值
|
||||
- 建议默认值:`20`
|
||||
|
||||
### `game.audio.readyDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:可打点提示音阈值
|
||||
- 建议默认值:`5`
|
||||
- 备注:
|
||||
- 运行时不会低于 `game.punch.radiusMeters`
|
||||
|
||||
### `game.audio.cues["guidance:distant" | "guidance:approaching" | "guidance:ready"]`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:三档距离提示音的 cue 级配置
|
||||
- 当前支持字段:
|
||||
- `src`
|
||||
- `volume`
|
||||
- `loop`
|
||||
- `loopGapMs`
|
||||
|
||||
---
|
||||
|
||||
## 8. `resources` 字段说明
|
||||
@@ -625,6 +727,12 @@
|
||||
},
|
||||
"game": {
|
||||
"mode": "score-o",
|
||||
"session": {
|
||||
"startManually": false
|
||||
},
|
||||
"punch": {
|
||||
"requiresFocusSelection": true
|
||||
},
|
||||
"guidance": {
|
||||
"showLegs": false,
|
||||
"legAnimation": false,
|
||||
@@ -637,7 +745,7 @@
|
||||
}
|
||||
```
|
||||
|
||||
并在 `playfield.controlOverrides` 中为普通点补:
|
||||
并在 `playfield.controlDefaults` 中先写普通点统一默认,必要时再在 `playfield.controlOverrides` 中为少量特殊点补:
|
||||
|
||||
- `score`
|
||||
|
||||
@@ -648,4 +756,3 @@
|
||||
- [D:\dev\cmr-mini\doc\config-template-minimal-game.md](D:/dev/cmr-mini/doc/config/最小游戏配置模板.md)
|
||||
- [D:\dev\cmr-mini\doc\config-option-dictionary.md](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
- [D:\dev\cmr-mini\doc\config-docs-index.md](D:/dev/cmr-mini/doc/config/配置文档索引.md)
|
||||
|
||||
|
||||
@@ -1,200 +0,0 @@
|
||||
# 积分赛最小配置模板
|
||||
|
||||
本文档提供一份 **积分赛(`score-o`)最小可跑配置模板**。
|
||||
|
||||
目标:
|
||||
|
||||
- 只保留积分赛跑通所需的最少字段
|
||||
- 适合快速起活动、联调、排查配置链
|
||||
- 每个字段都带简要说明
|
||||
|
||||
---
|
||||
|
||||
## 1. 最小模板
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.30",
|
||||
"app": {
|
||||
"id": "sample-score-o-minimal-001",
|
||||
"title": "积分赛最小示例"
|
||||
},
|
||||
"map": {
|
||||
"tiles": "../map/lxcb-001/tiles/",
|
||||
"mapmeta": "../map/lxcb-001/tiles/meta.json"
|
||||
},
|
||||
"playfield": {
|
||||
"kind": "control-set",
|
||||
"source": {
|
||||
"type": "kml",
|
||||
"url": "../kml/lxcb-001/10/c01.kml"
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"mode": "score-o",
|
||||
"punch": {
|
||||
"policy": "enter-confirm",
|
||||
"radiusMeters": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 字段说明
|
||||
|
||||
### `schemaVersion`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置结构版本
|
||||
- 当前建议值:`"1"`
|
||||
|
||||
### `version`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置版本号
|
||||
|
||||
### `app.id`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动配置实例 ID
|
||||
|
||||
### `app.title`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动标题 / 比赛名称
|
||||
|
||||
### `map.tiles`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图瓦片根路径
|
||||
|
||||
### `map.mapmeta`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图 meta 文件路径
|
||||
|
||||
### `playfield.kind`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间对象类型
|
||||
- 积分赛固定使用:`control-set`
|
||||
|
||||
### `playfield.source.type`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间底稿来源类型
|
||||
- 当前推荐值:`kml`
|
||||
|
||||
### `playfield.source.url`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:KML 文件路径
|
||||
|
||||
### `game.mode`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:玩法模式
|
||||
- 积分赛固定值:`score-o`
|
||||
|
||||
### `game.punch.policy`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:打点策略
|
||||
- 当前常用值:
|
||||
- `enter-confirm`
|
||||
- `enter`
|
||||
|
||||
### `game.punch.radiusMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:是
|
||||
- 说明:打点判定半径,单位米
|
||||
- 建议默认值:`5`
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前默认逻辑
|
||||
|
||||
如果你不写下面这些字段,积分赛会按当前客户端默认逻辑运行:
|
||||
|
||||
- `map.declination`
|
||||
- 默认按 `0` 处理
|
||||
- `map.initialView.zoom`
|
||||
- 默认由客户端初始视口逻辑接管
|
||||
- `playfield.CPRadius`
|
||||
- 默认按客户端内置值处理
|
||||
- `playfield.controlOverrides.*.score`
|
||||
- 没配时走 `game.scoring.defaultControlScore` 或玩法默认值
|
||||
- `game.session.*`
|
||||
- 默认手动开始
|
||||
- `game.guidance.allowFocusSelection`
|
||||
- 默认按积分赛逻辑允许选点
|
||||
- `game.finish.finishControlAlwaysSelectable`
|
||||
- 默认按积分赛逻辑处理终点可选
|
||||
- `resources.*`
|
||||
- 默认 profile
|
||||
- `debug.*`
|
||||
- 默认关闭
|
||||
|
||||
---
|
||||
|
||||
## 4. 推荐补充字段
|
||||
|
||||
如果你要让积分赛更接近正式活动,通常很快会补这几项:
|
||||
|
||||
```json
|
||||
{
|
||||
"playfield": {
|
||||
"controlOverrides": {
|
||||
"control-1": {
|
||||
"score": 10
|
||||
},
|
||||
"control-2": {
|
||||
"score": 20
|
||||
}
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"scoring": {
|
||||
"type": "score",
|
||||
"defaultControlScore": 10
|
||||
},
|
||||
"guidance": {
|
||||
"allowFocusSelection": true
|
||||
},
|
||||
"finish": {
|
||||
"finishControlAlwaysSelectable": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 适用场景
|
||||
|
||||
这份模板适合:
|
||||
|
||||
- 快速验证积分赛主流程
|
||||
- 联调自由选点、积分累加、终点结束
|
||||
- 后台先跑通最小积分赛配置
|
||||
|
||||
如果要看更完整版本,请继续参考:
|
||||
|
||||
- [D:\dev\cmr-mini\doc\config-template-full-current.md](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
- [D:\dev\cmr-mini\event\score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
|
||||
226
doc/config/配置分级总表.md
Normal file
226
doc/config/配置分级总表.md
Normal file
@@ -0,0 +1,226 @@
|
||||
# 配置分级总表
|
||||
|
||||
本文档用于把当前配置体系按“核心必需项 / 常用活动项 / 高级实验项”三层整理,作为后续后台配置设计、活动装配和字段治理的统一依据。
|
||||
|
||||
目标:
|
||||
|
||||
- 防止把所有内部变量都直接暴露成后台配置
|
||||
- 明确哪些字段适合最先做成后台表单
|
||||
- 明确哪些字段只应保留在高级配置区或 JSON 扩展区
|
||||
- 支撑“默认能跑、少配能跑、多配能扩”的可伸缩配置方案
|
||||
|
||||
说明:
|
||||
|
||||
- 本文档关注的是“字段开放策略”,不是字段字典本身
|
||||
- 字段定义、类型、默认值仍以 [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md) 为准
|
||||
- 玩法专属使用范围仍以各玩法目录下的文档为准
|
||||
|
||||
---
|
||||
|
||||
## 1. 分级原则
|
||||
|
||||
### 1.1 核心必需项
|
||||
|
||||
满足以下条件的字段应归入核心必需项:
|
||||
|
||||
- 不填就无法正常进入游戏
|
||||
- 不填会导致地图、场地或玩法主流程无法成立
|
||||
- 后台创建一个新活动时几乎一定会填写
|
||||
|
||||
特点:
|
||||
|
||||
- 数量要少
|
||||
- 后台首屏就能录入
|
||||
- 应优先做成明确表单项
|
||||
|
||||
### 1.2 常用活动项
|
||||
|
||||
满足以下条件的字段应归入常用活动项:
|
||||
|
||||
- 不填也能跑,但活动运营经常会改
|
||||
- 改动后会明显影响玩家体验或活动策略
|
||||
- 属于“常见活动差异”,而不是内部实现细节
|
||||
|
||||
特点:
|
||||
|
||||
- 可以在后台做成“高级设置”分组
|
||||
- 建议有默认值
|
||||
- 应控制数量,避免首版后台过重
|
||||
|
||||
### 1.3 高级实验项
|
||||
|
||||
满足以下条件的字段应归入高级实验项:
|
||||
|
||||
- 只在少数玩法或实验活动中才需要
|
||||
- 更偏表现调优、体验实验、联调或研发控制
|
||||
- 暂时不适合做成常规后台表单
|
||||
|
||||
特点:
|
||||
|
||||
- 默认不暴露给普通运营
|
||||
- 更适合放在高级 JSON 区或内部配置区
|
||||
- 后续可以按实际使用频率再降级到常用活动项
|
||||
|
||||
---
|
||||
|
||||
## 2. 推荐后台策略
|
||||
|
||||
建议后续后台按三层展示:
|
||||
|
||||
1. 基础信息
|
||||
2. 常用活动设置
|
||||
3. 高级配置
|
||||
|
||||
其中:
|
||||
|
||||
- 基础信息只对应核心必需项
|
||||
- 常用活动设置对应常用活动项
|
||||
- 高级配置对应高级实验项和 JSON 扩展
|
||||
|
||||
不建议:
|
||||
|
||||
- 首版后台直接开放全部字段
|
||||
- 把玩家个人设置和活动规则配置混在一起
|
||||
- 把纯运行时状态做成配置项
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前分级总表
|
||||
|
||||
### 3.1 核心必需项
|
||||
|
||||
| 字段 | 说明 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| `schemaVersion` | 配置结构版本 | 建议固定为 `"1"` |
|
||||
| `version` | 配置版本号 | 建议按发布日期或发布号维护 |
|
||||
| `app.id` | 活动实例 ID | 必填 |
|
||||
| `app.title` | 活动标题 | 必填 |
|
||||
| `map.tiles` | 瓦片根路径 | 必填 |
|
||||
| `map.mapmeta` | 地图元数据路径 | 必填 |
|
||||
| `playfield.kind` | 场地类型 | 顺序赛常用 `course`,积分赛常用 `control-set` |
|
||||
| `playfield.source.type` | 场地来源类型 | 当前推荐 `kml` |
|
||||
| `playfield.source.url` | 场地源文件路径 | 必填 |
|
||||
| `game.mode` | 玩法模式 | 当前核心玩法:`classic-sequential` / `score-o` |
|
||||
|
||||
建议:
|
||||
|
||||
- 核心必需项应控制在 `10` 个左右
|
||||
- 新活动创建时,后台优先只要求填写这一层
|
||||
|
||||
### 3.2 常用活动项
|
||||
|
||||
| 字段 | 说明 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| `app.locale` | 语言环境 | 常见默认值 `zh-CN` |
|
||||
| `settings.*.value` | 系统设置默认值 | 活动可覆盖玩家默认体验 |
|
||||
| `settings.*.isLocked` | 系统设置锁态 | 只在本局生命周期内生效 |
|
||||
| `map.declination` | 磁偏角 | 地图类活动常用 |
|
||||
| `map.initialView.zoom` | 初始缩放 | 常见活动会调 |
|
||||
| `playfield.CPRadius` | 控制点绘制半径 | 常用地图表现项 |
|
||||
| `playfield.metadata.title` | 路线标题 | 常用展示信息 |
|
||||
| `playfield.metadata.code` | 路线编码 | 常用管理字段 |
|
||||
| `playfield.controlOverrides.<key>.score` | 点位分值覆盖 | 积分赛常用 |
|
||||
| `game.session.requiresStartPunch` | 是否要求起点打卡 | 常用局流程控制 |
|
||||
| `game.session.requiresFinishPunch` | 是否要求终点打卡 | 常用局流程控制 |
|
||||
| `game.session.autoFinishOnLastControl` | 最后点自动结束 | 常用局流程控制 |
|
||||
| `game.session.maxDurationSec` | 最大时长 / 关门时间 | 常用赛事规则项 |
|
||||
| `game.punch.policy` | 打点方式 | 常用玩法差异项 |
|
||||
| `game.punch.radiusMeters` | 打点半径 | 常用活动调节项 |
|
||||
| `game.punch.requiresFocusSelection` | 是否先选目标 | 积分赛常用 |
|
||||
| `game.sequence.skip.enabled` | 是否允许跳点 | 顺序赛常用 |
|
||||
| `game.sequence.skip.radiusMeters` | 跳点半径 | 顺序赛常用 |
|
||||
| `game.sequence.skip.requiresConfirm` | 跳点是否确认 | 顺序赛常用 |
|
||||
| `game.guidance.showLegs` | 是否显示腿线 | 常用表现项 |
|
||||
| `game.guidance.legAnimation` | 腿线动画 | 常用表现项 |
|
||||
| `game.guidance.allowFocusSelection` | 是否允许地图选点 | 积分赛常用 |
|
||||
| `game.visibility.revealFullPlayfieldAfterStartPunch` | 起点后是否揭示全场 | 常用局流程表现项 |
|
||||
| `game.finish.finishControlAlwaysSelectable` | 终点是否始终可打 | 积分赛常用 |
|
||||
| `game.scoring.defaultControlScore` | 默认点位分值 | 常用计分项 |
|
||||
|
||||
建议:
|
||||
|
||||
- 常用活动项是后台第二层的重点
|
||||
- 这层优先服务“活动策划/运营经常会改的东西”
|
||||
|
||||
### 3.3 高级实验项
|
||||
|
||||
| 字段 | 说明 | 备注 |
|
||||
| --- | --- | --- |
|
||||
| `playfield.controlOverrides.<key>.template` | 白卡模板 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.title` | 打点后内容标题 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.body` | 打点后内容正文 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.clickTitle` | 点击内容标题 | 显式启用型能力 |
|
||||
| `playfield.controlOverrides.<key>.clickBody` | 点击内容正文 | 显式启用型能力 |
|
||||
| `playfield.controlOverrides.<key>.autoPopup` | 是否自动弹白卡 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.once` | 是否仅一次 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.priority` | 内容优先级 | 内容实验项 |
|
||||
| `playfield.controlOverrides.<key>.contentExperience.*` | 打点后 H5 / 原生体验 | 高级体验项 |
|
||||
| `playfield.controlOverrides.<key>.clickExperience.*` | 点击 H5 / 原生体验 | 高级体验项 |
|
||||
| `playfield.controlOverrides.<key>.pointStyle` | 单点样式覆盖 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointColorHex` | 单点颜色覆盖 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointSizeScale` | 单点尺寸倍率 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointAccentRingScale` | 单点强调环倍率 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointGlowStrength` | 单点光晕强度 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointLabelScale` | 标签缩放 | 表现调优项 |
|
||||
| `playfield.controlOverrides.<key>.pointLabelColorHex` | 标签颜色覆盖 | 表现调优项 |
|
||||
| `playfield.legOverrides.<key>.*` | 腿线局部覆盖 | 表现调优项 |
|
||||
| `game.presentation.*` | 全局点位/腿线样式 | 当前更适合高级区 |
|
||||
| `game.presentation.track.*` | 轨迹表现细项 | 高级表现区 |
|
||||
| `game.presentation.gpsMarker.*` | GPS 点表现细项 | 高级表现区 |
|
||||
| `game.telemetry.*` | 遥测计算参数 | 高级区或设备联调区 |
|
||||
| `game.audio.*` | 音效细项 | 高级表现区 |
|
||||
| `game.haptics.*` | 震动细项 | 高级表现区 |
|
||||
| `game.uiEffects.*` | UI 动效细项 | 高级表现区 |
|
||||
| `resources.*` | 资源档与主题档 | 高级资源管理项 |
|
||||
| `debug.*` | 调试与模拟字段 | 默认不进正式后台 |
|
||||
|
||||
建议:
|
||||
|
||||
- 这一层先不要全做成常规表单
|
||||
- 后期可以根据真实使用频率,把一部分下放到常用活动项
|
||||
|
||||
---
|
||||
|
||||
## 4. 当前建议的开放策略
|
||||
|
||||
### 4.1 先开放
|
||||
|
||||
优先开放这些:
|
||||
|
||||
- 核心必需项
|
||||
- 常用活动项中的对局规则、打点规则、完赛规则、分值规则
|
||||
|
||||
### 4.2 后开放
|
||||
|
||||
后续再开放这些:
|
||||
|
||||
- 常用活动项中的部分设置默认值
|
||||
- 少量高频使用的内容卡字段
|
||||
- 少量高频使用的表现字段
|
||||
|
||||
### 4.3 暂不开放
|
||||
|
||||
建议先不开放这些:
|
||||
|
||||
- 大量细粒度动画参数
|
||||
- 大量音效和震动细项
|
||||
- 纯调试字段
|
||||
- 仅研发联调使用的实验字段
|
||||
|
||||
---
|
||||
|
||||
## 5. 后续维护规则
|
||||
|
||||
后续每次新增配置能力时,建议先回答 3 个问题:
|
||||
|
||||
1. 这个字段是不是不配就跑不了?
|
||||
2. 这个字段是不是活动经常会改?
|
||||
3. 这个字段是不是只是研发或实验阶段才会动?
|
||||
|
||||
对应落点:
|
||||
|
||||
- 第 1 类:核心必需项
|
||||
- 第 2 类:常用活动项
|
||||
- 第 3 类:高级实验项
|
||||
|
||||
如果无法明确归类,默认先归入高级实验项,不急着开放到后台常规表单。
|
||||
110
doc/config/配置发布说明.md
Normal file
110
doc/config/配置发布说明.md
Normal file
@@ -0,0 +1,110 @@
|
||||
# 配置发布说明
|
||||
|
||||
本文档说明当前项目如何把 `event/*.json` 配置同步到服务器。
|
||||
|
||||
## 1. 当前发布链路
|
||||
|
||||
当前客户端直接读取 OSS 上的静态配置:
|
||||
|
||||
- `classic-sequential`
|
||||
- 远端对象:`gotomars/event/classic-sequential.json`
|
||||
- 访问地址:`https://oss-mbh5.colormaprun.com/gotomars/event/classic-sequential.json`
|
||||
- `score-o`
|
||||
- 远端对象:`gotomars/event/score-o.json`
|
||||
- 访问地址:`https://oss-mbh5.colormaprun.com/gotomars/event/score-o.json`
|
||||
|
||||
对应加载入口见:
|
||||
|
||||
- [map.ts](D:/dev/cmr-mini/miniprogram/pages/map/map.ts)
|
||||
|
||||
## 2. 仓库内已有上传能力
|
||||
|
||||
项目根目录已有 OSS 上传脚本:
|
||||
|
||||
- [oss-html.ps1](D:/dev/cmr-mini/oss-html.ps1)
|
||||
|
||||
该脚本封装了 `tools/ossutil.exe`,默认 bucket 为:
|
||||
|
||||
- `oss://color-map-html`
|
||||
|
||||
依赖前提:
|
||||
|
||||
- 本机存在 [ossutil.exe](D:/dev/cmr-mini/tools/ossutil.exe)
|
||||
- 本机存在 `~/.ossutilconfig`
|
||||
|
||||
## 3. 推荐发布命令
|
||||
|
||||
项目根目录新增了专门的配置发布脚本:
|
||||
|
||||
- [publish-event-config.ps1](D:/dev/cmr-mini/publish-event-config.ps1)
|
||||
|
||||
它会在上传前执行这些检查:
|
||||
|
||||
- 本地配置文件是否存在
|
||||
- JSON 是否可解析
|
||||
- 是否包含 `schemaVersion`
|
||||
- 是否包含 `game`
|
||||
- 是否包含 `game.mode`
|
||||
|
||||
### 发布全部玩法配置
|
||||
|
||||
```powershell
|
||||
.\publish-event-config.ps1 all
|
||||
```
|
||||
|
||||
### 只发布顺序打点配置
|
||||
|
||||
```powershell
|
||||
.\publish-event-config.ps1 classic-sequential
|
||||
```
|
||||
|
||||
### 只发布积分赛配置
|
||||
|
||||
```powershell
|
||||
.\publish-event-config.ps1 score-o
|
||||
```
|
||||
|
||||
### 仅检查,不上传
|
||||
|
||||
```powershell
|
||||
.\publish-event-config.ps1 all -DryRun
|
||||
```
|
||||
|
||||
## 4. npm 快捷命令
|
||||
|
||||
也可以使用:
|
||||
|
||||
```powershell
|
||||
npm run publish:config
|
||||
npm run publish:config:classic
|
||||
npm run publish:config:score-o
|
||||
npm run publish:config:dry-run
|
||||
```
|
||||
|
||||
## 5. 当前默认映射关系
|
||||
|
||||
| 本地文件 | 远端对象 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `event/classic-sequential.json` | `gotomars/event/classic-sequential.json` | 顺序打点默认配置 |
|
||||
| `event/score-o.json` | `gotomars/event/score-o.json` | 积分赛默认配置 |
|
||||
|
||||
## 6. 维护约定
|
||||
|
||||
后续如果新增新玩法配置发布,建议同步修改以下位置:
|
||||
|
||||
1. [publish-event-config.ps1](D:/dev/cmr-mini/publish-event-config.ps1)
|
||||
2. [package.json](D:/dev/cmr-mini/package.json)
|
||||
3. [配置发布说明.md](D:/dev/cmr-mini/doc/config/配置发布说明.md)
|
||||
4. [配置文档索引.md](D:/dev/cmr-mini/doc/config/配置文档索引.md)
|
||||
5. 对应玩法目录下的样例配置说明
|
||||
|
||||
## 7. 后续演进方向
|
||||
|
||||
当前方案属于“本地校验 + 手动发布到 OSS”。
|
||||
|
||||
后续接入正式后台后,推荐演进为:
|
||||
|
||||
1. 后台装配并校验配置
|
||||
2. 后台生成发布版本
|
||||
3. 后台上传 OSS/CDN
|
||||
4. 客户端仍只读取静态 JSON
|
||||
@@ -1,220 +1,64 @@
|
||||
# 配置文档索引
|
||||
|
||||
本文档用于汇总当前项目所有与**配置设计、配置样例、配置管理**相关的文档,作为统一入口。
|
||||
|
||||
适用对象:
|
||||
|
||||
- 客户端开发
|
||||
- 服务端开发
|
||||
- 后台管理设计
|
||||
- 配置录入与联调
|
||||
|
||||
---
|
||||
|
||||
## 1. 配置核心结构
|
||||
|
||||
当前项目的配置主入口已经稳定在:
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.30",
|
||||
"app": {},
|
||||
"map": {},
|
||||
"playfield": {},
|
||||
"game": {},
|
||||
"resources": {},
|
||||
"debug": {}
|
||||
}
|
||||
```
|
||||
|
||||
顶层职责建议固定为:
|
||||
|
||||
- `app`
|
||||
活动级基础信息
|
||||
- `map`
|
||||
地图底图与空间底座
|
||||
- `playfield`
|
||||
当前玩法使用的空间对象定义
|
||||
- `game`
|
||||
当前玩法规则配置
|
||||
- `resources`
|
||||
资源包与 profile
|
||||
- `debug`
|
||||
调试与开发开关
|
||||
|
||||
当前推荐的核心原则:
|
||||
|
||||
- 配置只描述,不执行逻辑
|
||||
- `KML` 描述空间事实,配置描述玩法解释
|
||||
- `playfield` 是上位概念,`course` 只是其中一种 `kind`
|
||||
- 当前阶段继续以单文件配置为主,后续再逐步升级成 manifest 组合
|
||||
|
||||
如果你需要看旧版长文讨论稿,已经移到归档:
|
||||
|
||||
- [config-design-proposal.md](/D:/dev/cmr-mini/doc/archive/config/配置设计方案.md)
|
||||
|
||||
---
|
||||
|
||||
## 2. 配置选项字典
|
||||
|
||||
### [config-option-dictionary.md](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 列出当前客户端已经支持或已预留的配置项
|
||||
- 说明每个字段的类型、含义、默认逻辑
|
||||
- 作为后续新增字段时的持续维护文档
|
||||
|
||||
适合阅读时机:
|
||||
|
||||
- 想知道某个字段是否已实现
|
||||
- 想知道字段应该怎么写
|
||||
- 想确认默认行为时
|
||||
|
||||
### [track-visualization-proposal.md](D:/dev/cmr-mini/doc/rendering/轨迹可视化方案.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 说明 `none / full / tail` 三种轨迹模式
|
||||
- 说明拖尾轨迹的默认策略与推荐参数
|
||||
- 说明当前轨迹样式的配置结构
|
||||
|
||||
### [gps-marker-style-system-proposal.md](D:/dev/cmr-mini/doc/rendering/GPS点样式系统方案.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 说明 GPS 点样式系统的目标分层
|
||||
- 说明默认样式、朝向小三角和品牌 logo 扩展思路
|
||||
- 说明第一阶段最小实现字段和长期演进方向
|
||||
|
||||
### [gps-marker-animation-system-proposal.md](D:/dev/cmr-mini/doc/rendering/GPS点动画系统方案.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 说明 GPS 点动画系统的状态分层
|
||||
- 说明 `idle / moving / fast-moving / warning` 的第一阶段实现思路
|
||||
- 说明动画 profile、运行时内部字段和 `standard / lite` 降级策略
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前推荐模板
|
||||
|
||||
### [config-template-minimal-game.md](D:/dev/cmr-mini/doc/config/最小游戏配置模板.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 提供“最小可跑”的游戏配置模板
|
||||
- 去掉绝大部分选配项
|
||||
- 适合快速起步、联调和排查配置链
|
||||
|
||||
### [config-template-minimal-classic-sequential.md](D:/dev/cmr-mini/doc/config/顺序赛最小配置模板.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 提供顺序赛最小可跑模板
|
||||
- 适合快速起顺序赛活动
|
||||
|
||||
### [config-template-minimal-score-o.md](D:/dev/cmr-mini/doc/config/积分赛最小配置模板.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 提供积分赛最小可跑模板
|
||||
- 适合快速起积分赛活动
|
||||
|
||||
### [config-template-full-current.md](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 提供“当前开发状态最全”的配置模板
|
||||
- 汇总目前客户端已实现或已消费的主要字段
|
||||
- 适合后端、后台和联调统一对齐
|
||||
|
||||
---
|
||||
|
||||
## 4. 运行中的样例配置
|
||||
|
||||
### [event/classic-sequential.json](D:/dev/cmr-mini/event/classic-sequential.json)
|
||||
|
||||
作用:
|
||||
|
||||
- 当前顺序赛样例配置
|
||||
- 可直接联调
|
||||
- 已包含控制点内容覆盖示例
|
||||
|
||||
### [event/score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
|
||||
作用:
|
||||
|
||||
- 当前积分赛样例配置
|
||||
- 可直接联调
|
||||
- 已包含分值、起终点内容、点击内容示例
|
||||
|
||||
---
|
||||
|
||||
## 5. 后台与服务端配置管理方案
|
||||
|
||||
### [backend-config-management-v2.md](D:/dev/cmr-mini/doc/config/后台配置管理方案V2.md)
|
||||
|
||||
作用:
|
||||
|
||||
- 在“配置项变化频繁”前提下重写的后台方案
|
||||
- 更强调:
|
||||
- 稳定骨架
|
||||
- `jsonb`
|
||||
- 版本
|
||||
- 发布
|
||||
- 透传未知字段
|
||||
|
||||
推荐优先看这一份。
|
||||
|
||||
---
|
||||
|
||||
## 6. 推荐阅读顺序
|
||||
|
||||
如果你是第一次接触这套配置体系,建议按这个顺序看:
|
||||
|
||||
1. 本页“配置核心结构”一节
|
||||
2. [config-option-dictionary.md](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
3. [config-template-minimal-game.md](D:/dev/cmr-mini/doc/config/最小游戏配置模板.md)
|
||||
4. [config-template-minimal-classic-sequential.md](D:/dev/cmr-mini/doc/config/顺序赛最小配置模板.md)
|
||||
5. [config-template-minimal-score-o.md](D:/dev/cmr-mini/doc/config/积分赛最小配置模板.md)
|
||||
6. [config-template-full-current.md](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
7. [event/classic-sequential.json](D:/dev/cmr-mini/event/classic-sequential.json)
|
||||
8. [event/score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
9. [backend-config-management-v2.md](D:/dev/cmr-mini/doc/config/后台配置管理方案V2.md)
|
||||
|
||||
---
|
||||
|
||||
## 7. 维护约定
|
||||
|
||||
后续每次新增配置能力时,建议至少同步更新这几处:
|
||||
|
||||
1. [config-option-dictionary.md](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
2. [config-template-minimal-game.md](D:/dev/cmr-mini/doc/config/最小游戏配置模板.md)
|
||||
3. [config-template-minimal-classic-sequential.md](D:/dev/cmr-mini/doc/config/顺序赛最小配置模板.md)
|
||||
4. [config-template-minimal-score-o.md](D:/dev/cmr-mini/doc/config/积分赛最小配置模板.md)
|
||||
5. [config-template-full-current.md](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
6. 对应玩法的 `event/*.json` 样例
|
||||
7. 如果涉及顶层结构变化,先更新本页“配置核心结构”一节,再视情况补充归档讨论稿
|
||||
|
||||
这样可以保证:
|
||||
|
||||
- 文档
|
||||
- 样例
|
||||
- 代码
|
||||
- 后台录入
|
||||
|
||||
保持一致。
|
||||
|
||||
---
|
||||
|
||||
## 8. 已归档文档
|
||||
|
||||
下列文档仍保留在归档目录,但不再作为当前主入口:
|
||||
|
||||
- [config-default-template.md](/D:/dev/cmr-mini/doc/archive/config/默认配置模板.md)
|
||||
- [config-design-proposal.md](/D:/dev/cmr-mini/doc/archive/config/配置设计方案.md)
|
||||
- [config-template-classic-sequential.md](/D:/dev/cmr-mini/doc/archive/config/顺序赛配置模板.md)
|
||||
- [config-template-score-o.md](/D:/dev/cmr-mini/doc/archive/config/积分赛配置模板.md)
|
||||
- [backend-config-management-proposal.md](/D:/dev/cmr-mini/doc/archive/config/后台配置管理方案.md)
|
||||
# 配置文档索引
|
||||
|
||||
本文档用于汇总当前项目所有与配置设计、配置样例、配置管理相关的文档,并按“公共配置”和“按游戏分类”两层组织。
|
||||
|
||||
## 1. 公共配置入口
|
||||
|
||||
- [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
字段字典、类型、默认逻辑总入口
|
||||
- [配置分级总表](D:/dev/cmr-mini/doc/config/配置分级总表.md)
|
||||
配置项的开放分级与后台推荐策略
|
||||
- [全局规则与配置维度清单](D:/dev/cmr-mini/doc/config/全局规则与配置维度清单.md)
|
||||
跨玩法公共配置块
|
||||
- [最小游戏配置模板](D:/dev/cmr-mini/doc/config/最小游戏配置模板.md)
|
||||
最小通用骨架
|
||||
- [当前最全配置模板](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
当前共享全量模板
|
||||
- [后台配置管理方案V2](D:/dev/cmr-mini/doc/config/后台配置管理方案V2.md)
|
||||
后台管理与发布方案
|
||||
- [配置发布说明](D:/dev/cmr-mini/doc/config/配置发布说明.md)
|
||||
当前 OSS 配置发布命令与默认映射
|
||||
|
||||
## 2. 按游戏分类
|
||||
|
||||
### 顺序打点
|
||||
|
||||
- [游戏说明文档](D:/dev/cmr-mini/doc/games/顺序打点/游戏说明文档.md)
|
||||
- [规则说明文档](D:/dev/cmr-mini/doc/games/顺序打点/规则说明文档.md)
|
||||
- [最小配置模板](D:/dev/cmr-mini/doc/games/顺序打点/最小配置模板.md)
|
||||
- [最大配置模板](D:/dev/cmr-mini/doc/games/顺序打点/最大配置模板.md)
|
||||
- [全局配置项](D:/dev/cmr-mini/doc/games/顺序打点/全局配置项.md)
|
||||
- [游戏配置项](D:/dev/cmr-mini/doc/games/顺序打点/游戏配置项.md)
|
||||
- [样例配置 classic-sequential.json](D:/dev/cmr-mini/event/classic-sequential.json)
|
||||
|
||||
### 积分赛
|
||||
|
||||
- [游戏说明文档](D:/dev/cmr-mini/doc/games/积分赛/游戏说明文档.md)
|
||||
- [规则说明文档](D:/dev/cmr-mini/doc/games/积分赛/规则说明文档.md)
|
||||
- [最小配置模板](D:/dev/cmr-mini/doc/games/积分赛/最小配置模板.md)
|
||||
- [最大配置模板](D:/dev/cmr-mini/doc/games/积分赛/最大配置模板.md)
|
||||
- [全局配置项](D:/dev/cmr-mini/doc/games/积分赛/全局配置项.md)
|
||||
- [游戏配置项](D:/dev/cmr-mini/doc/games/积分赛/游戏配置项.md)
|
||||
- [样例配置 score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
|
||||
## 3. 推荐阅读顺序
|
||||
|
||||
1. [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
2. [配置分级总表](D:/dev/cmr-mini/doc/config/配置分级总表.md)
|
||||
3. [全局规则与配置维度清单](D:/dev/cmr-mini/doc/config/全局规则与配置维度清单.md)
|
||||
4. 对应玩法目录下的 [游戏说明文档](D:/dev/cmr-mini/doc/games/顺序打点/游戏说明文档.md) 或 [游戏说明文档](D:/dev/cmr-mini/doc/games/积分赛/游戏说明文档.md)
|
||||
5. 对应玩法目录下的最小配置模板、最大配置模板、全局配置项、游戏配置项
|
||||
6. 对应 `event/*.json` 样例
|
||||
|
||||
## 4. 维护约定
|
||||
|
||||
后续每次新增玩法或新增字段时,建议至少同步这几处:
|
||||
|
||||
1. [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
2. [全局规则与配置维度清单](D:/dev/cmr-mini/doc/config/全局规则与配置维度清单.md)
|
||||
3. 对应玩法目录下的规则说明文档
|
||||
4. 对应玩法目录下的最小配置模板
|
||||
5. 对应玩法目录下的最大配置模板
|
||||
6. 对应玩法目录下的全局配置项
|
||||
7. 对应玩法目录下的游戏配置项
|
||||
8. 对应玩法的 `event/*.json` 样例
|
||||
|
||||
@@ -23,8 +23,9 @@
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.27",
|
||||
"version": "2026.03.31",
|
||||
"app": {},
|
||||
"settings": {},
|
||||
"map": {},
|
||||
"playfield": {},
|
||||
"game": {},
|
||||
@@ -54,6 +55,12 @@
|
||||
- 类型:`object`
|
||||
- 说明:活动级基础信息
|
||||
|
||||
### `settings`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:系统设置页默认值与锁态配置
|
||||
- 备注:只控制设置页公共项,不属于具体玩法规则本体
|
||||
|
||||
### `map`
|
||||
|
||||
- 类型:`object`
|
||||
@@ -81,6 +88,40 @@
|
||||
|
||||
---
|
||||
|
||||
## `settings` 字段补充
|
||||
|
||||
推荐结构:
|
||||
|
||||
```json
|
||||
{
|
||||
"settings": {
|
||||
"autoRotateEnabled": {
|
||||
"value": true,
|
||||
"isLocked": false
|
||||
},
|
||||
"trackDisplayMode": {
|
||||
"value": "tail",
|
||||
"isLocked": true
|
||||
},
|
||||
"gpsMarkerStyle": {
|
||||
"value": "beacon",
|
||||
"isLocked": false
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
规则:
|
||||
|
||||
- `value` 表示该设置项的活动默认值
|
||||
- `isLocked` 表示该设置项是否允许玩家修改
|
||||
- `value` 会和玩家本地持久化值一起参与解析
|
||||
- `isLocked` 不持久化,只受系统默认值和活动配置控制
|
||||
- 玩家不能在页面里修改锁态
|
||||
- `isLocked` 只在当前游戏配置运行生命周期内生效;本局结束或主动退出后失效
|
||||
|
||||
---
|
||||
|
||||
## 3. `app` 字段
|
||||
|
||||
### `app.id`
|
||||
@@ -172,23 +213,63 @@
|
||||
|
||||
---
|
||||
|
||||
## 6. `playfield.controlOverrides`
|
||||
## 6. `playfield.controlDefaults` / `playfield.controlOverrides`
|
||||
|
||||
`playfield.controlOverrides` 用于对起点、检查点、终点做内容或分值覆盖。
|
||||
推荐优先使用:
|
||||
|
||||
### 6.1 key 命名规则
|
||||
- `playfield.controlDefaults`:活动级默认
|
||||
- `playfield.controlOverrides`:单点重载
|
||||
|
||||
默认覆盖顺序:
|
||||
|
||||
`系统默认值 -> 玩法默认值 -> playfield.controlDefaults -> playfield.controlOverrides`
|
||||
|
||||
### 6.1 `playfield.controlDefaults`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:普通检查点的活动级默认配置
|
||||
- 适用:普通检查点,不直接作用于起点和终点
|
||||
|
||||
当前支持字段:
|
||||
|
||||
- `score`
|
||||
- `template`
|
||||
- `title`
|
||||
- `body`
|
||||
- `clickTitle`
|
||||
- `clickBody`
|
||||
- `autoPopup`
|
||||
- `once`
|
||||
- `priority`
|
||||
- `ctas`
|
||||
- `contentExperience`
|
||||
- `clickExperience`
|
||||
- `pointStyle`
|
||||
- `pointColorHex`
|
||||
- `pointSizeScale`
|
||||
- `pointAccentRingScale`
|
||||
- `pointGlowStrength`
|
||||
- `pointLabelScale`
|
||||
- `pointLabelColorHex`
|
||||
|
||||
### 6.2 `playfield.controlOverrides`
|
||||
|
||||
`playfield.controlOverrides` 用于对起点、检查点、终点做单点覆盖。
|
||||
|
||||
### 6.3 key 命名规则
|
||||
|
||||
- 起点:`start-1`
|
||||
- 普通检查点:`control-1`、`control-2`、`control-3`
|
||||
- 终点:`finish-1`
|
||||
|
||||
### 6.2 当前支持字段
|
||||
### 6.4 当前支持字段
|
||||
|
||||
#### `score`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:积分赛控制点分值
|
||||
- 适用:积分赛
|
||||
- 备注:如果同时配置了 `playfield.controlDefaults.score`,则当前点以单点值为准
|
||||
|
||||
#### `title`
|
||||
|
||||
@@ -216,20 +297,22 @@
|
||||
|
||||
- 类型:`string`
|
||||
- 说明:点击控制点时弹出的标题
|
||||
- 默认逻辑:未配置时回退到 `title`
|
||||
- 默认逻辑:最小模板下默认不启用;仅在显式配置点击内容能力时生效
|
||||
|
||||
#### `clickBody`
|
||||
|
||||
- 类型:`string`
|
||||
- 说明:点击控制点时弹出的正文
|
||||
- 默认逻辑:未配置时回退到 `body`
|
||||
- 默认逻辑:最小模板下默认不启用;仅在显式配置点击内容能力时生效
|
||||
|
||||
#### `autoPopup`
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:完成该点后是否自动弹出内容
|
||||
- 建议默认值:`true`
|
||||
- 说明:完成该点后是否自动弹出内容卡
|
||||
- 建议默认值:最小模板下 `false`
|
||||
- 特殊逻辑:如果当前玩法是自动打点,即 `game.punch.policy = "enter"`,则无论这里如何配置,**都不自动弹出**
|
||||
- 补充说明:该字段只控制内容卡弹出
|
||||
- 补充说明:系统默认白卡已改为“显式配置启用”,未开启 `autoPopup` 时,起点和普通点完成后不弹白卡
|
||||
|
||||
#### `once`
|
||||
|
||||
@@ -415,7 +498,7 @@
|
||||
"template": "focus",
|
||||
"title": "比赛结束",
|
||||
"body": "恭喜完成本次路线。",
|
||||
"autoPopup": true,
|
||||
"autoPopup": false,
|
||||
"once": true,
|
||||
"priority": 2,
|
||||
"clickTitle": "终点说明",
|
||||
@@ -450,7 +533,11 @@
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:是否需要手动点击开始
|
||||
- 建议默认值:`true`
|
||||
- 建议默认值:
|
||||
- 顺序赛:`false`
|
||||
- 积分赛:`false`
|
||||
- 备注:
|
||||
- 进入页面后先进入待起跑态,通过开始点打卡正式开赛
|
||||
|
||||
### `game.session.requiresStartPunch`
|
||||
|
||||
@@ -474,6 +561,14 @@
|
||||
- 说明:是否打完最后控制点自动结束
|
||||
- 建议默认值:`false`
|
||||
|
||||
### `game.session.minCompletedControlsBeforeFinish`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:终点生效前至少需要完成的普通检查点数量
|
||||
- 建议默认值:
|
||||
- 顺序赛:`0`
|
||||
- 积分赛:`1`
|
||||
|
||||
### `game.session.maxDurationSec`
|
||||
|
||||
- 类型:`number`
|
||||
@@ -517,19 +612,22 @@
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:是否允许跳点
|
||||
- 建议默认值:`false`
|
||||
- 建议默认值:
|
||||
- 顺序赛:`true`
|
||||
- 积分赛:`false`
|
||||
|
||||
### `game.sequence.skip.radiusMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:跳点半径
|
||||
- 建议默认值:`30`
|
||||
- 建议默认值:
|
||||
- 顺序赛:`game.punch.radiusMeters * 2`
|
||||
|
||||
### `game.sequence.skip.requiresConfirm`
|
||||
|
||||
- 类型:`boolean`
|
||||
- 说明:跳点是否需要确认
|
||||
- 建议默认值:`true`
|
||||
- 建议默认值:`false`
|
||||
|
||||
---
|
||||
|
||||
@@ -544,8 +642,11 @@
|
||||
### `game.scoring.defaultControlScore`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:积分赛默认控制点分值
|
||||
- 建议默认值:`10`
|
||||
- 说明:普通控制点未单独配置时的默认基础分
|
||||
- 建议默认值:
|
||||
- 顺序赛:`1`
|
||||
- 积分赛:`10`
|
||||
- 适用:顺序赛、积分赛
|
||||
|
||||
---
|
||||
|
||||
@@ -596,6 +697,9 @@
|
||||
- 建议默认值:
|
||||
- 顺序赛:`false`
|
||||
- 积分赛:`true`
|
||||
- 备注:
|
||||
- 顺序赛默认要求所有中间点都已被标记为“成功”或“跳过”后,终点才可生效
|
||||
- 积分赛默认开赛后终点始终可结束,不需要先设为目标点
|
||||
|
||||
---
|
||||
|
||||
@@ -641,6 +745,50 @@
|
||||
- 说明:UI 动效 profile
|
||||
- 建议默认值:`default`
|
||||
|
||||
### `game.audio.distantDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:远距离提示音的最大生效距离,超出该距离默认静默
|
||||
- 建议默认值:`80`
|
||||
|
||||
### `game.audio.approachDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:接近提示音的最大生效距离
|
||||
- 建议默认值:`20`
|
||||
|
||||
### `game.audio.readyDistanceMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:可打点提示音的最大生效距离
|
||||
- 建议默认值:`5`
|
||||
- 备注:
|
||||
- 运行时不会小于 `game.punch.radiusMeters`
|
||||
|
||||
### `game.audio.cues["guidance:distant"].loopGapMs`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:远距离提示音循环间隔,单位毫秒
|
||||
- 建议默认值:`4800`
|
||||
|
||||
### `game.audio.cues["guidance:approaching"].loopGapMs`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:接近提示音循环间隔,单位毫秒
|
||||
- 建议默认值:`950`
|
||||
|
||||
### `game.audio.cues["guidance:ready"].loopGapMs`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:可打点提示音循环间隔,单位毫秒
|
||||
- 建议默认值:`650`
|
||||
|
||||
### `game.audio.cues["guidance:distant" | "guidance:approaching" | "guidance:ready"].volume`
|
||||
|
||||
- 类型:`number`
|
||||
- 说明:三档距离提示音各自音量
|
||||
- 建议范围:`0 ~ 1`
|
||||
|
||||
---
|
||||
|
||||
## 17. `resources`
|
||||
@@ -710,6 +858,8 @@
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:顺序赛已跳过点样式
|
||||
- 备注:
|
||||
- 默认建议使用偏橙色系,与已完成灰色态区分
|
||||
|
||||
### `game.presentation.sequential.controls.start`
|
||||
|
||||
@@ -730,6 +880,9 @@
|
||||
- `colorHex`:十六进制颜色
|
||||
- `widthScale`:路线腿宽度倍率
|
||||
- `glowStrength`:路线腿光晕强度
|
||||
- 备注:
|
||||
- 默认建议使用传统定向运动紫红色系
|
||||
- 默认配合电流动效使用
|
||||
|
||||
### `game.presentation.sequential.legs.completed`
|
||||
|
||||
@@ -740,6 +893,17 @@
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:对指定路线腿做局部样式覆盖
|
||||
- 建议:优先使用 `playfield.legDefaults` 写整场腿线默认,再用 `legOverrides` 写单腿例外
|
||||
|
||||
### `playfield.legDefaults`
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:腿线的活动级默认样式
|
||||
- 当前支持字段:
|
||||
- `style`
|
||||
- `colorHex`
|
||||
- `widthScale`
|
||||
- `glowStrength`
|
||||
- 键名建议:
|
||||
- `leg-1`
|
||||
- `leg-2`
|
||||
@@ -766,6 +930,7 @@
|
||||
|
||||
- 类型:`object`
|
||||
- 说明:积分赛默认点位样式
|
||||
- 当前默认建议使用传统圆圈样式,编号绘制在圆圈内
|
||||
|
||||
### `game.presentation.scoreO.controls.focused`
|
||||
|
||||
@@ -810,8 +975,8 @@
|
||||
"controls": {
|
||||
"scoreBands": [
|
||||
{ "min": 0, "max": 19, "style": "classic-ring", "colorHex": "#56ccf2" },
|
||||
{ "min": 20, "max": 49, "style": "double-ring", "colorHex": "#f2c94c" },
|
||||
{ "min": 50, "max": 999999, "style": "badge", "colorHex": "#eb5757" }
|
||||
{ "min": 20, "max": 49, "style": "classic-ring", "colorHex": "#f2c94c" },
|
||||
{ "min": 50, "max": 999999, "style": "double-ring", "colorHex": "#eb5757" }
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1049,7 +1214,7 @@
|
||||
|
||||
- 能有默认值的尽量给默认值
|
||||
- 控制点内容类字段缺失时走默认文案
|
||||
- `clickTitle/clickBody` 缺失时回退到 `title/body`
|
||||
- `clickTitle/clickBody` 在最小模板下默认关闭,不再回退到 `title/body`
|
||||
- 自动打点模式下不自动弹内容
|
||||
- 内容优先级未配置时使用普通点 `1`、终点 `2`
|
||||
|
||||
@@ -1057,6 +1222,56 @@
|
||||
|
||||
**大部分配置项都不是强制必填,先保证主骨架完整即可。**
|
||||
|
||||
### 22.1 顺序赛最小模板默认流程
|
||||
|
||||
如果只提供顺序赛最小模板,系统默认按以下流程处理:
|
||||
|
||||
- 进入游戏后只显示开始点,提示玩家先打开始点
|
||||
- 成功打开始点后,显示全部普通控制点、终点和腿线,并正式开始计时
|
||||
- 开始点和结束点默认不弹题,只弹提示信息
|
||||
- 普通控制点默认允许跳点
|
||||
- 默认跳点半径为打点半径的 `2` 倍
|
||||
- 普通控制点成功打点后立即获得 `1` 分基础分
|
||||
- 最小模板下默认不弹题
|
||||
- 如需答题,需显式为对应点位配置 `quiz` CTA
|
||||
- 跳过点不弹题、不得分
|
||||
- 成功打结束点后停止计时,弹出结束提示,随后进入默认结算页
|
||||
|
||||
### 22.2 顺序赛最小模板默认表现
|
||||
|
||||
- 起跑前只显示开始点
|
||||
- 打完开始点后显示完整路线
|
||||
- 默认路线主色参考传统定向运动紫红色
|
||||
- 默认腿线带电流动效
|
||||
- 开始点、结束点、当前目标点都应有动效强调
|
||||
- 已完成点默认变灰
|
||||
- 已跳过点默认使用另一套区分色
|
||||
|
||||
### 22.3 积分赛最小模板默认流程
|
||||
|
||||
如果只提供积分赛最小模板,系统默认按以下流程处理:
|
||||
|
||||
- 进入游戏后只显示开始点,提示玩家先打开始点
|
||||
- 成功打开始点后,显示全部积分点和结束点,并正式开始计时
|
||||
- 开始点和结束点默认不弹题,只弹提示信息
|
||||
- 玩家默认不需要先点击积分点
|
||||
- 底部 HUD 信息面板默认显示当前目标摘要、目标距离和总分 / 收集进度摘要
|
||||
- 任意未收集积分点进入范围时都可生效
|
||||
- 成功打点后默认立即获得该点基础分
|
||||
- 最小模板下默认不弹题
|
||||
- 如需答题,需显式为对应点位配置 `quiz` CTA
|
||||
- 默认至少完成 `1` 个普通积分点后,结束点才解锁,且不需要先设为目标点
|
||||
- 成功打结束点后停止计时,弹出结束提示,随后进入默认结算页
|
||||
|
||||
### 22.4 积分赛最小模板默认表现
|
||||
|
||||
- 起跑前只显示开始点
|
||||
- 打完开始点后显示全部积分点和结束点
|
||||
- 当前目标点默认要有更强高亮和动效
|
||||
- 默认所有积分点显示分值标签
|
||||
- 已收集点默认变灰
|
||||
- 默认不显示腿线
|
||||
|
||||
---
|
||||
|
||||
## 23. 维护约定
|
||||
@@ -1072,4 +1287,3 @@
|
||||
- 服务端可对照
|
||||
- 后台可录入
|
||||
- 客户端联调时有统一参考
|
||||
|
||||
|
||||
@@ -1,165 +0,0 @@
|
||||
# 顺序赛最小配置模板
|
||||
|
||||
本文档提供一份 **顺序赛(`classic-sequential`)最小可跑配置模板**。
|
||||
|
||||
目标:
|
||||
|
||||
- 只保留顺序赛跑通所需的最少字段
|
||||
- 适合快速起活动、联调、排查配置链
|
||||
- 每个字段都带简要说明
|
||||
|
||||
---
|
||||
|
||||
## 1. 最小模板
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.30",
|
||||
"app": {
|
||||
"id": "sample-classic-minimal-001",
|
||||
"title": "顺序赛最小示例"
|
||||
},
|
||||
"map": {
|
||||
"tiles": "../map/lxcb-001/tiles/",
|
||||
"mapmeta": "../map/lxcb-001/tiles/meta.json"
|
||||
},
|
||||
"playfield": {
|
||||
"kind": "course",
|
||||
"source": {
|
||||
"type": "kml",
|
||||
"url": "../kml/lxcb-001/10/c01.kml"
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"mode": "classic-sequential",
|
||||
"punch": {
|
||||
"policy": "enter-confirm",
|
||||
"radiusMeters": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 字段说明
|
||||
|
||||
### `schemaVersion`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置结构版本
|
||||
- 当前建议值:`"1"`
|
||||
|
||||
### `version`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置版本号
|
||||
|
||||
### `app.id`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动配置实例 ID
|
||||
|
||||
### `app.title`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动标题 / 比赛名称
|
||||
|
||||
### `map.tiles`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图瓦片根路径
|
||||
|
||||
### `map.mapmeta`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图 meta 文件路径
|
||||
|
||||
### `playfield.kind`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间对象类型
|
||||
- 顺序赛固定使用:`course`
|
||||
|
||||
### `playfield.source.type`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间底稿来源类型
|
||||
- 当前推荐值:`kml`
|
||||
|
||||
### `playfield.source.url`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:KML 文件路径
|
||||
|
||||
### `game.mode`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:玩法模式
|
||||
- 顺序赛固定值:`classic-sequential`
|
||||
|
||||
### `game.punch.policy`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:打点策略
|
||||
- 当前常用值:
|
||||
- `enter-confirm`:进入范围后用户再点击确认打点
|
||||
- `enter`:进入范围自动打点
|
||||
|
||||
### `game.punch.radiusMeters`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:是
|
||||
- 说明:打点判定半径,单位米
|
||||
- 建议默认值:`5`
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前默认逻辑
|
||||
|
||||
如果你不写下面这些字段,顺序赛会按当前客户端默认逻辑运行:
|
||||
|
||||
- `map.declination`
|
||||
- 默认按 `0` 处理
|
||||
- `map.initialView.zoom`
|
||||
- 默认由客户端初始视口逻辑接管
|
||||
- `playfield.CPRadius`
|
||||
- 默认按客户端内置值处理
|
||||
- `game.session.*`
|
||||
- 默认手动开始、要求起点打卡、终点打卡
|
||||
- `game.sequence.skip.*`
|
||||
- 默认不启用跳点
|
||||
- `game.guidance.*`
|
||||
- 默认使用当前引导逻辑
|
||||
- `resources.*`
|
||||
- 默认 profile
|
||||
- `debug.*`
|
||||
- 默认关闭
|
||||
|
||||
---
|
||||
|
||||
## 4. 适用场景
|
||||
|
||||
这份模板适合:
|
||||
|
||||
- 快速验证顺序赛主流程
|
||||
- 联调地图和 KML
|
||||
- 后台先跑通最小顺序赛配置
|
||||
|
||||
如果要看更完整版本,请继续参考:
|
||||
|
||||
- [D:\dev\cmr-mini\doc\config-template-full-current.md](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
- [D:\dev\cmr-mini\event\classic-sequential.json](D:/dev/cmr-mini/event/classic-sequential.json)
|
||||
|
||||
Reference in New Issue
Block a user