diff --git a/design/gdd/06-待办清单.md b/design/gdd/06-待办清单.md index 8f29fe62..bc0265bf 100644 --- a/design/gdd/06-待办清单.md +++ b/design/gdd/06-待办清单.md @@ -377,20 +377,6 @@ NodeOverlay 现行实态为模态覆盖层:恢复点全量服务(回复读 **状态**:待办——2026-09-27 欠账处置拍板:不立独立档、债挂内容批;tools/doc_link_known.txt 对应欠账行随之清空 -#### 关卡画面 UX spec 三项设计提案(HP 常驻读数/图上点击选路/放弃二次确认)(2026-09-27 登记) - -**现状**:关卡画面 UX spec 已建 [level-map](ux/level-map.md)(占位升格版——信息层级/三分区布局/组件清单/三停点状态/交互映射/AC 成文;停点标题措辞修正清偿台账 143 遗留;GP 常驻徽章落地面)。三项设计提案待拍板: - -①**跨战斗生命(HP)常驻读数上顶栏**——推荐上:选路风险评估需要(低血择疗),数据源 runner.hero_hp 现成,两铁律过闸(选路停点战斗屏被遮蔽,不构成同屏重复展示面)。 - -②**图上直接点击候选节点选路**——推荐做:候选亮金描边已是视觉焦点,悬停预承诺(pattern 4)后点击即提交,候选按钮保留为等价冗余通道(press_candidate 探针面不动),未拍板前按钮为唯一提交通道。 - -③**放弃冒险二次确认**——推荐做:现行单击即发,与不可逆终结整局的分量不匹配(pattern 7 破坏性确认合规),确认态 = 文案转确认语 + 危险红脉冲约 3 秒回落。 - -**归属**:关卡画面实装批(随表现层升级批排期;视觉终稿前置 = 表现层样张) - -**状态**:待拍板(2026-09-27 登记;荐值 = 三项均做,分析见 spec Open Questions) - ### 数据配置 diff --git a/design/gdd/ux/level-map.md b/design/gdd/ux/level-map.md index 13c0ffa9..7f949e5a 100644 --- a/design/gdd/ux/level-map.md +++ b/design/gdd/ux/level-map.md @@ -1,6 +1,6 @@ # UX Spec: 关卡画面(选路枢纽,Level Map) -> **Status**: 新立——占位升格版(结构、信息面、交互、状态与验收成文;视觉终稿以表现层样张为前置,见 OQ4) +> **Status**: 占位升格版——三项设计提案已拍板收口(2026-09-27:底栏状态展示 / 图上点击选路·候选按钮退役 / 放弃二次确认);视觉终稿以表现层样张为前置 > **Author**: user + ZCode(关卡画面 UX 批) > **Last Updated**: 2026-09-27 > **Platform Target**: PC (Steam)——Keyboard/Mouse 主,全部操作纯鼠标可完成(同 [battle.md](battle.md)) @@ -19,7 +19,7 @@ - 节点图本体承载 P4(地牢下探隐喻):方块地牢观感的整层纵览,本层的形状与去路尽收眼底 - 候选选路口承载 P1(推理的掌控感):下一步的去向明示(节点类型字面),零自动推进——每一步都是玩家亲手走出来的 -- 顶栏语境承载规划原料:当前所在关卡与常驻资源读数,支撑「要不要先进商店房」一类选路判断 +- 底部状态栏承载规划原料:生命、属性与本关已选加成常读,支撑「低血先疗、缺攻先补」一类选路判断(2026-09-27 拍板:底栏 = 状态展示) 若此屏缺失或难用:中循环失去锚点(玩家不知道自己走到第几环);零自动推进沦为「被迫逐步确认」的负担而非掌控感。 @@ -52,10 +52,11 @@ 本屏必须传达的全部信息,按注视优先级分五层: 1. **节点图本体**(第一注视点):节点方块(五类型字面:战/赏/疗/王/商)、通道连线、当前位置、可选去路 -2. **候选选路口**:亮金候选通道 + 候选节点亮金描边 + 底部候选按钮——「下一步能去哪」的三重冗余 +2. **候选选路口**:亮金候选通道 + 候选节点亮金描边——「下一步能去哪」的图上双冗余(2026-09-27 拍板:候选按钮退役,图上点击为唯一提交通道) 3. **常驻语境**(顶栏):关卡名(第 N 层·名称)、GP 常驻总量(2026-09-26 二轮拍板去向:GP = 关卡画面常驻总量,[battle.md](battle.md) OQ14 口径经 2026-09-27 GP 归属拍板对齐批维持) -4. **边缘动作**:放弃冒险入口(破坏性,危险红族,异位呈现) -5. **进度语境**:已过/当前/未来三态节点直接读图呈现——节点态即节点链进度呈现载体,**不另设进度条组件**(关卡节点地图 呈现侧口径 2026-09-17 用户拍板) +4. **状态展示**(底栏,2026-09-27 拍板):生命(当前/上限)、属性(攻击 / 护甲 AC 有效值)、本关已选加成(统一冒险加算区增量)——选路规划原料常读 +5. **边缘动作**:放弃冒险入口(破坏性,危险红族,异位呈现) +6. **进度语境**:已过/当前/未来三态节点直接读图呈现——节点态即节点链进度呈现载体,**不另设进度条组件**(关卡节点地图 呈现侧口径 2026-09-17 用户拍板) ### Layout Zones @@ -65,7 +66,7 @@ |---|---|---| | **顶栏语境** | 居中横排,图区上方,高约 32px | 左:关卡名(`level_row.display_name`,如「第二层 · 幽暗地域」);右:GP 常驻徽章(金币图标+数字,直角细线数据框——GP 值域超点阵适用档,走 pattern 5 的 When-NOT-to-Use 路线);HP 常驻读数是否并列右侧 = OQ1 待拍板,拍板前不实现 | | **节点图区** | 居中 | 整幅节点图自绘:节点方块 + 通道折线 + 节点态着色 + Boss 紫赤描边。现行程序化占位为定值画布 620×240(层距 122px / 行距 58px / 节点方块 52×36px,现两关行集均容得下);目标形态随图自适应(画布宽随层数、高随同层最大节点数),公式与终值随实装批定、视觉随样张批 | -| **底部动作栏** | 图区下方横排,高约 48px | 左:候选按钮(横排,一候选一钮;单候选时单钮「继续前进」);右端:放弃冒险按钮(危险红族文字,与候选按钮保持间距——破坏性确认异位,pattern 7) | +| **底部状态栏** | 图区下方横排,高约 48px | 左-中:状态数据框组(直角细线,pattern 5 族)——生命(当前/上限 + 迷你血条)、属性(攻击 / 护甲 AC,有效值 + 加成角标)、本关加成(攻+X · 上限+Y · AC+Z,零加成隐藏);右端:放弃冒险按钮(危险红族文字,与状态数据框保持间距——破坏性确认异位,pattern 7) | ### Component Inventory @@ -73,9 +74,9 @@ |---|---|---|---|---| | 关卡名标签 | 文本 | `level_row.display_name`(关卡表行读数) | 只读 | 新建(现行标题位升级) | | GP 常驻徽章 | 直角细线数据框 | 金币图标 + 数字(`runner.gp`,冒险钱包读数;刷新经 `wallet_changed` 信号投影〔gain/buy/clear 三事件〕或写路径回执后重查) | 只读 | 新建(GP 去向拍板落地面) | -| 节点图画布 | 自绘 Control | 节点方块(五类型字面 + 编号)、通道折线、节点态着色、Boss 紫赤描边(BOSS_PURPLE——2026-09-26 封印紫批语义:紫赤本色) | 悬停 / 点击候选(OQ2) | ✅ route_overlay.gd `_draw_graph`(程序化占位) | -| 候选按钮 ×N | 按钮(凸圆角可按的砖) | 文案「节点 N · 战斗房」/ 单链「继续前进(战斗房)」 | 点击提交选路 | ✅ route_overlay.gd(press_candidate 探针面保持) | -| 放弃冒险按钮 | 按钮(危险红族) | 「放弃冒险(同失败结算——已获大奖励保留)」;二次确认态见 OQ3 | 点击(现行单击即发;确认态为提案) | ✅ route_overlay.gd(可见性归组合根,仅冒险模式开) | +| 节点图画布 | 自绘 Control | 节点方块(五类型字面 + 编号)、通道折线、节点态着色、Boss 紫赤描边(BOSS_PURPLE——2026-09-26 封印紫批语义:紫赤本色) | 悬停预承诺 / 点击提交选路(唯一通道) | ✅ route_overlay.gd `_draw_graph`(程序化占位) | +| 状态数据框组 | 直角细线数据框 ×3 | 生命(当前/上限 + 迷你血条)、属性(攻击 / 护甲 AC 有效值 + 加成角标)、本关加成(加算区增量列表,零加成隐藏) | 只读 | 新建(2026-09-27 拍板:底栏状态展示) | +| 放弃冒险按钮 | 按钮(危险红族) | 「放弃冒险(同失败结算——已获大奖励保留)」;二次确认态已拍板(见布局决策 3) | 点击(首击转确认态、二击提交) | ✅ route_overlay.gd(可见性归组合根,仅冒险模式开) | | 标题行 | 文本 | 停点语境提示(见布局决策 1 三停点标题) | 只读 | ✅ route_overlay.gd `_title`(措辞待改) | **布局决策 1 —— 停点标题措辞修正(清偿台账 143 遗留)**:现行入口停点标题沿用「继续前进(战斗房)」,与「尚未走出第一步」的语境矛盾。三停点标题定稿: @@ -86,9 +87,11 @@ | 单链停点 | 1 | 「继续前进」 | | 岔路停点 | ≥2 | 「选择下一节点」 | -**布局决策 2 —— 图上直接点击选路(提案,OQ2)**:候选节点的亮金描边本身是可点目标,悬停预承诺(pattern 4)后点击即提交——图与按钮从「展示 + 操作」分离变为双通道等价。候选按钮保留(无障碍冗余 + 探针 `press_candidate` 面不动)。未拍板前按钮为唯一提交通道。 +**布局决策 2 —— 图上直接点击选路(2026-09-27 拍板)**:候选节点的亮金描边本身是可点目标,悬停预承诺(pattern 4)后点击即提交——**候选按钮整列退役,图上点击为唯一提交通道**。实装注记:route_overlay.gd 现行候选按钮列与 `press_candidate` 探针入口随实装批拆除改造(图上命中换板级公式族命中),ui_click_probe 选路段同步改写。 -**布局决策 3 —— 放弃冒险二次确认(提案,OQ3)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。现行单击即发;提案 = 首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 +**布局决策 3 —— 放弃冒险二次确认(2026-09-27 拍板)**:放弃 = 整局冒险终结,不可逆(pattern 7 破坏性确认)。首击转入确认态(按钮文案变「再点一次确认放弃——不可逆」,危险红边框脉冲约 3 秒,超时回落),二击才提交。代价语义(已获大奖励保留、同失败结算)常驻按钮文案。 + +**布局决策 4 —— 底部状态栏(2026-09-27 拍板,原提案为顶栏 HP 读数)**:底栏作为状态展示——生命、属性、本关已选加成三项常读;顶栏保持关卡名 + GP 两件。单一展示面注记:与 [battle.md](battle.md) C 区「本关强化列表(预留)」为不同屏的不同展示面——两屏循环口径各自独立(选路规划消费 vs 战斗内决策消费),不构成同屏重复。 ### ASCII Wireframe @@ -99,11 +102,11 @@ │ │ │ [战0]──┐ │ │ ├──[战3]──┬──[赏6]──┐ │ -│ [战1]──┤ │ ├──[王8] │ +│ [战1]──┤ │ ├──[王8] ←悬停候选=亮金加粗+指针 │ │ [战2]──┴──[疗4]──┴──[战7]──┘ (战=已过·暗金 疗=当前·金 │ │ 亮金描边=候选 王=紫赤描边·Boss) │ │ │ -│ [ 节点 6 · 奖励点 ] [ 节点 7 · 战斗房 ] 放弃冒险(同失败结算) │ +│ HP ▓▓▓░ 14/20 │ 攻击 6 ⁺2 │ 护甲 AC 12 ⁺1 │ 本关加成: 攻⁺2·上限⁺5·AC⁺1 放弃冒险 │ └──────────────────────────────────────────────────────────────────────────────┘ ``` @@ -118,8 +121,8 @@ | **入口停点(默认首态)** | 关卡开始(停点前移) | 标题「出发——选择首个节点」;唯一候选 = 入口节点;图上全部节点为未来态 | | **单链停点** | 兑付确认后、恰 1 个下一跳 | 标题「继续前进」;单候选按钮 | | **岔路停点** | 兑付确认后、≥2 个下一跳 | 标题「选择下一节点」;候选按钮横排;亮金通道与候选描边逐一分叉可辨 | -| **悬停预承诺(OQ2 提案)** | 悬停候选节点 | 该节点亮金描边加粗 + 所属通道增亮 + 光标切指针态;移出即回落(仅预承诺,点击才提交) | -| **放弃确认态(OQ3 提案)** | 首击放弃按钮 | 文案转确认语 + 危险红边框脉冲约 3 秒;超时或移出回落;二击提交 `abandon_requested` | +| **悬停预承诺** | 悬停候选节点 | 该节点亮金描边加粗 + 所属通道增亮 + 光标切指针态;移出即回落(仅预承诺,点击才提交) | +| **放弃确认态** | 首击放弃按钮 | 文案转确认语 + 危险红边框脉冲约 3 秒;超时或移出回落;二击提交 `abandon_requested` | | **换层进入** | 上一关结算确认 → 新关开始 | 本屏以新关卡数据淡入(无专属开场演出——art-bible §2.7 下探过渡演出的承载归场景表现批,本屏不设计) | | **减动效** | 设置开关(切片期 TunePanel) | 淡入、描边脉冲等全部 tween 时长减半或跳终态(UiKit.motion 单点包装,同 battle.md 通道) | @@ -131,8 +134,7 @@ | 组件 | 动作 | 输入 | 即时反馈 | 结果(经组合根) | |---|---|---|---|---| -| 候选按钮 | 提交选路 | 左键 | 按钮下压,本屏关闭 | `route_chosen(node_id)` → `LevelRunner.pick_next_node`——到达即兑付,无进入前确认步 | -| 候选节点(图上,OQ2 提案) | 提交选路 | 左键 | 悬停预承诺 + 点击同上 | 同上(与按钮等价双通道) | +| 候选节点(图上,唯一通道) | 提交选路 | 左键 | 悬停预承诺(描边加粗 + 通道增亮 + 指针)→ 点击本屏关闭 | `route_chosen(node_id)` → `LevelRunner.pick_next_node`——到达即兑付,无进入前确认步 | | 放弃冒险按钮 | 终结整局冒险 | 左键(现行单击;确认态见 OQ3) | 危险红族反馈 | `abandon_requested` → 组合根走冒险终结(同失败结算——已获大奖励保留) | **零自动推进纪律**(关卡节点地图 定稿):本屏是唯一的行进发起口——不选就停在图上;没有任何定时、默认或顺延的自动前进路径。兑付后确认挂各兑付面(战斗结算画面 / 节点覆盖层 / 商店覆盖层离开动作),本屏不重复确认步。 @@ -146,7 +148,8 @@ | 节点图结构 / 当前节点 / 已到序列 / 候选集 | LevelRunner 只读成文出口:`nodes()` / `current_node_id()` / `visited_ids()` / `next_candidate_ids()` / `node_id_of()` / `node_out_ids()` | Read | 呈现只读(关卡节点地图 验收「呈现只读」条);节点态四色直接读图 | | GP 常驻总量 | `runner.gp`(冒险钱包) | Read | 刷新经 `wallet_changed` 信号投影(gain/buy/clear 三事件)或写路径回执后重查;冒险收束清零后本屏不可达(收束即离屏) | | 关卡名 | `level_row.display_name`(关卡表行) | Read | 字段名实现期核对(level.tres 行键 `display_name` 在案) | -| HP 常驻读数(OQ1,未拍板不实现) | `runner.hero_hp`(跨战斗生命携带) | Read | 拍板通过后接线;两铁律过闸分析见 OQ1 | +| 生命读数 | `runner.hero_hp` / `runner.effective_max_hp()`(跨战斗生命携带) | Read | 已拍板(2026-09-27):底栏状态栏承载 | +| 属性与本关加成 | `runner.effective_atk() / effective_ac() / effective_max_hp()` 与 `bonus` 统一冒险加算区(锻造/大奖励/商店购买/节点奖励同账) | Read | 已拍板:底栏承载;无推送信号——组合根打开本屏 / 兑付确认回执后重查(命令式刷新纪律,同行动经济) | | 选路提交 | LevelRunner | **Write** | 唯一写路径 = `route_chosen` → 组合根 → `pick_next_node`;本屏零其他写面 | | 放弃请求 | 组合根 | **Write** | `abandon_requested` → 冒险终结流程(归冒险结构) | @@ -199,8 +202,9 @@ - [ ] 三停点标题按布局决策 1 呈现(入口停点不再出现「继续前进(战斗房)」措辞——台账 143 遗留清偿) - [ ] 候选提交经组合根唯一写路径(`route_chosen` → `pick_next_node`),到达即兑付;零自动推进(无任何不选而行的路径) -- [ ] 候选按钮与图上点击(若 OQ2 通过)两通道提交等价;`press_candidate` 探针路径不回归 -- [ ] 放弃按钮仅冒险模式可见(调试两层不可达);若 OQ3 通过:单击不提交、确认态超时回落、二击才终结 +- [ ] 图上点击为唯一选路提交通道(候选按钮退役,2026-09-27 拍板);悬停预承诺反馈可见;ui_click_probe 选路段随实装批改造后全绿 +- [ ] 底部状态栏三组读数可见且与 runner 现值一致(生命当前/上限、攻击/AC 有效值、本关加成增量——零加成隐藏);兑付确认返回后读数刷新 +- [ ] 放弃按钮仅冒险模式可见(调试两层不可达);单击不提交、确认态超时回落、二击才终结(已拍板) - [ ] 放弃后走冒险终结(同失败结算),已获大奖励保留语义可见 **模态与测试** @@ -213,10 +217,9 @@ ## Open Questions -1. **HP 常驻读数是否上顶栏(拍板前置,06 已登记)**:推荐**上**——选路风险评估需要(低血择疗、临 Boss 战前的自知);数据源 `runner.hero_hp` 现成。两铁律过闸:循环口径——HP 是关卡内跨战斗携带读数,选路决策正消费它(关卡节点地图 依赖表「跨战斗生命携带的读数」同源);单一展示面——本屏打开时战斗屏被锁定遮蔽,不构成同屏重复展示面(与 B 区站桩血条不同屏并存)。拍板前不实现(顶栏 = 关卡名 + GP 两件) -2. **图上直接点击选路(提案,见布局决策 2)**:推荐**做**——候选描边已是视觉焦点,双段路径(看图→移到按钮)是纯摩擦;按钮保留为等价通道。未拍板前按钮为唯一提交通道 -3. **放弃冒险二次确认(提案,见布局决策 3)**:推荐**做**——pattern 7 合规(破坏性确认),现行单击即发与「不可逆终结整局」的分量不匹配 -4. **视觉终稿**:节点字形/通道质感/画布参数以表现层样张过审为前置(节点图标组 ♻ 采购清单在案);本 spec 的 AC 为功能性判据,不含视觉终稿判据(同 level-clear.md OQ4 先例) +**已收口(2026-09-27 用户拍板,正文随拍板改写)**:① 底栏 = 状态展示(生命 + 属性 + 本关已选加成——原提案仅顶栏 HP 读数,用户扩为底栏状态栏);② 图上直接点击选路,候选按钮退役;③ 放弃冒险二次确认。 + +1. **视觉终稿**:节点字形/通道质感/画布参数/底栏数据框样式以表现层样张过审为前置(节点图标组 ♻ 采购清单在案);本 spec 的 AC 为功能性判据,不含视觉终稿判据(同 level-clear.md OQ4 先例) --- @@ -239,3 +242,4 @@ | 日期 | 改动 | |---|---| | 2026-09-27 | 初稿(关卡画面 UX 批,用户拍板立项):占位升格版——信息层级五层/三分区布局/组件清单/三停点状态/交互与数据锚/AC 成文;停点标题措辞修正(清偿台账 143 遗留);GP 常驻徽章落地面(2026-09-26 二轮拍板去向,经 GP 归属拍板对齐批维持);三项提案挂 OQ(HP 常驻读数/图上直接点击选路/放弃二次确认)登记 06 待拍板;视觉终稿以表现层样张为前置。实现锚 = route_overlay.gd 程序化占位现行 | +| 2026-09-27 | **三拍板收口批(用户逐项裁决)**:① 底栏 = 状态展示——生命/属性(攻击·AC 有效值)/本关已选加成三组常读(原提案顶栏 HP 扩为底栏状态栏,布局决策 4);② 图上直接点击选路定稿——候选按钮整列退役、图上点击为唯一提交通道(布局决策 2;press_candidate 探针面随实装批改造注记);③ 放弃冒险二次确认定稿(布局决策 3)。信息层级六层重排/组件清单/States/交互表/Data Requirements(属性与加成读数入口)/AC/线框图随改;06 拍板点条目解决移除(去向 = 本批台账 204) |