docs: ADR 体系废除 + architecture.md 确立为架构唯一事实源(2026-10-15 用户令:决策记录归 git commit log,不另存决策文档)

- 删除 design/dev/architecture/adr-0001~0007 共 7 份文件(内容留 git 历史可查)
- architecture.md:删「ADR 审计」「ADR 立项清单」两节;清除全文 ADR-000X 注记、QQ 表/S 表 ADR 引用;未决表关闭已落定项(QQ-01/02/03),立项清单在途事项转登记 QQ-11~14;补 A1 生成姿态事实、autoload 四件清单、board_generator 性能姿态;文档状态立「事实源地位」条
- CLAUDE.md:恢复 RNG 单点硬性红线(去 ADR-0007 引用);新增「架构事实唯一源」红线;规范导航架构行标注唯一事实源
- doc-conventions:§5 增「架构事实唯一源」行;§11 活文档清单补架构文档
- registry:architecture.yaml 删 18 处 adr 字段、autoload_set 补 SaveManager/MetaProgression、board_rending 更新为 Node2D 已落地事实;entities.yaml 12 处引用清除
- game/ 代码注释约 60 处清 ADR-000X 引用(事实与日期保留);豁免标记 ADR-0007-exempt → rng-seed-exempt(main.gd/static_scan.sh/architecture.md/06/iter27 五处同步)
- GDD/qa 实现报告/research 卡片/roadmap/tests README 引用全清;死链校验 1206 链接 0 死链、gdd_lint 0 不通过
- 代码中 adr/adr5 等为 adventure_runner 既有局部变量名(非 ADR 引用),未动
This commit is contained in:
DKChan committed 2026-10-15 23:52:30 +08:00
1 parent f22adb5564
commit 6c2dbc37c1
73 files changed
+193 -1118

No files matched your search

+1 -1
View File
@@ -1,7 +1,7 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# 营地/商店投影控制器(规范 1.1 单一职责拆件):
# 营地面开合/快照投影/锻造·同调·天赋树·Fork 购买与切换 + 商店房购买/离开(pool 与 product 双面)。
# 装配纪律(ADR-0001,仿 treasure_interact_controller 先例):信号连接不在此发生——campbtn/
# 装配纪律(仿 treasure_interact_controller 先例):信号连接不在此发生——campbtn/
# camp_overlay 四信号/shop_overlay 两信号由组合根接至本类 on_* 入口;模态栈/呈现刷新/续玩按钮
# 刷新经组合根回调注入;runner 随局更替——现值回调注入;写调用唯一经 MetaProgression 购买原语
# 与 LevelRunner.buy_*(core 侧单口,本类零直写——拒绝可见 pattern 1 兜底 toast 保留原地)。
@@ -2,7 +2,7 @@
# 三选一交互控制器(规范 1.1 单一职责拆件):
# 三选一停点编排(presented→pick→confirm/refresh→resolved→continue)+ 同调位替换子态
#(presented→chosen)+ TP0 令牌池卡片文案装配("kind|tier|feat_id" 复合键)+ 工坊显示名投影。
# 装配纪律(ADR-0001,仿 treasure_interact_controller 先例):信号连接不在此发生——curio_overlay
# 装配纪律(仿 treasure_interact_controller 先例):信号连接不在此发生——curio_overlay
# 四信号与 adventure 两信号由组合根接至本类 on_* 入口;模态栈/演播后排窗/呈现刷新/终局面/
# 推进失败 fatal 经组合根回调注入;adventure/runner 随局更替——现值回调注入;兑付写调用唯一
# 经 adventure.pick_curio/apply_node_curio(core 侧单口,本类零直写;无替换子交互——装配不可变契约 1,冒险中零更换途径)。
+2 -2
View File
@@ -4,13 +4,13 @@
# 职责边界:层序/携带 HP + 战斗结算 生命周期编排(创建 / begin_battle)。
# 层间延续 = HP 关内延续(库存与共享 地图战斗资源 已下线)。
# 授权边界:与 tune_sim_controller 同款——控制器承接模式编排,
# 组合根仍持有全部信号接线(battle_created 先于 begin_battle 发出,ADR-0001 接线唯一归组合根)
# 组合根仍持有全部信号接线(battle_created 先于 begin_battle 发出,接线唯一归组合根)
# 与终局 UI 决策;玩家意图写调用(settle_batch / 刷新)不经本类。
# 加成生效值经注入 Callable 供给(组合根从面板百分比现算)→ encounter
# 显式传入战斗——零表写。
extends RefCounted
signal battle_created(settlement, level: int, carry_hp: int) # begin_battle 前——组合根完成信号接线(ADR-0001)
signal battle_created(settlement, level: int, carry_hp: int) # begin_battle 前——组合根完成信号接线
signal battle_ready(settlement, level: int, carry_hp: int) # begin_battle 完成后——组合根 rebuild 棋盘 + 刷新呈现
var db
+7 -7
View File
@@ -27,7 +27,7 @@
# 排除式开态查询+三例外(浮窗开态不计入锁);battle 收尾反馈与结算视觉 setter 走 hud_presenter 单通道
# (时序敏感演出触发留本类并注释);settlement 相位读取经 presentation_snapshot 成文面、变异表读取直读
# 本根 db(settlement.db 即同一实例)——禁 settlement.action_economy / settlement.db 链式穿透。
# ADR-0001 纪律:呈现层永不直接订阅 排雷玩法/行动经济——只订 战斗结算/runner 转发信号;相位读取仅用于
# 接线纪律:呈现层永不直接订阅 排雷玩法/行动经济——只订 战斗结算/runner 转发信号;相位读取仅用于
# 驱动视图状态;信号连接只在组合根(row_pacer/treasure_interact_controller 零连接,只收注入)。
extends Control
@@ -317,7 +317,7 @@ func _build_ui() -> void:
curio_overlay = CurioPickOverlay.new()
add_child(curio_overlay)
# 提升三选一与替换子交互(T4/D4 拆件批——迁 curio_interact_controller.gd;本类只接线与回调注入,
# ADR-0001——模态栈/演播后排窗/呈现刷新/fatal 经回调注入,adventure/runner 现值回调)
# 模态栈/演播后排窗/呈现刷新/fatal 经回调注入,adventure/runner 现值回调)
_bonus = CurioInteractController.new(CurioFlowContext.new(db, func() -> Variant: return meta, curio_overlay, _end_overlay, board_view,
board_zone.toast, func() -> Variant: return save_manager, func() -> Variant: return run_scope.adventure,
func() -> Variant: return run_scope.runner, func() -> Variant: return run_scope.is_adventure,
@@ -556,7 +556,7 @@ func _resume_from_menu() -> void:
return
# 冒险编排构建+接线(开新局/续玩共用——信号连接只在组合根,ADR-0001;断点注入同口)
# 冒险编排构建+接线(开新局/续玩共用——信号连接只在组合根;断点注入同口)
func _wire_adventure() -> void:
run_scope.adventure = AdventureRunner.new(db, get_node(AUTOLOAD_PATH_RNG))
run_scope.adventure.step_row.connect(_on_step_row)
@@ -595,7 +595,7 @@ static func build_adventure_params(save_manager_ref, meta_ref, extra: Dictionary
# 冒险模式(三关连探——AdventureRunner 编排;转发信号签名与 runner 一致,接线照原样对接;
# 信号连接只在组合根——ADR-0001)
# 信号连接只在组合根)
func _start_adventure() -> void:
_close_modal(debug_overlay) # 开冒险路径显式关浮窗(迭代 18 卡⑦ T2 防护——DS_DEBUG 默认开态下开局不带窗;对局中经角标再开)
_begin_session(true)
@@ -741,7 +741,7 @@ func _start_debug_levels() -> void:
func _on_debug_battle_created(settlement_ref: BattleOrchestrator, _level: int, _carry: int) -> void:
# begin_battle 前接手 + 接线(ADR-0001:signal.connect 唯一归组合根)。settlement 必须先于 begin_battle
# begin_battle 前接手 + 接线(signal.connect 唯一归组合根)。settlement 必须先于 begin_battle
# 就位——begin 期间发出的 board_changed 要用新板重建棋盘并触发一次性提示(缺陷①同款时序义务)
run_scope.settlement = settlement_ref
_wire_battle(settlement_ref)
@@ -1448,9 +1448,9 @@ func _seed_value() -> int:
# ②首局固定 42(P5 甲——存档现役布尔 is_first_adventure_done:新档显式 false=教学局恒 42〔教学
# 重放模板 0 即在此种子下标定〕;置位 true=教学局已收束的非首局走 ③ 随机);
# ③非首局空/非法框=引擎全局熵 randi()(Godot 4 启动自播种子,headless 同;不走 rng_service
# 封闭流、禁 randomize()/自建 RNG——组合根建种子属 ADR-0007 豁免面,不进玩法 RNG 消费)
# 封闭流、禁 randomize()/自建 RNG——组合根建种子属引擎熵豁免面,不进玩法 RNG 消费)
if _seed_edit.text.is_valid_int():
return int(_seed_edit.text)
if save_manager.is_first_adventure_done():
return randi() # ADR-0007-exempt(非首局空框引擎熵——组合根建种子不进玩法 RNG 消费,static_scan S1/S2 标记豁免)
return randi() # rng-seed-exempt(非首局空框引擎熵——组合根建种子不进玩法 RNG 消费,static_scan S1/S2 标记豁免)
return 42
+1 -1
View File
@@ -2,7 +2,7 @@ class_name ModalFlow
extends RefCounted
# 模态编排纯逻辑类(迭代 27 T4——审计 P1-5/P2-7:组合根可测化抽取 + 模态互斥域内聚)。
# 依赖仅 ModalStack + 查询 Callable(审计处方原话)——零节点构建、零信号连接、零核心触碰
#(ADR-0001 同构:连接归组合根,本类只收注入)。可直接 new() 单测(V6)。
#(同构:连接归组合根,本类只收注入)。可直接 new() 单测(V6)。
# 职责三件:
# ① 登记与开合编排(遮挡记账单口 / T17 演播后排窗挂起——原 main._open_modal 系逻辑随迁)
# ② 棋盘输入锁谓词(互斥域随层登记——原 main._input_locked 排除式拼装消亡)
+1 -1
View File
@@ -6,7 +6,7 @@
# level_finished/step_row);本组件负责订阅、缓冲与写文件——核心零日志感知(零 UI 依赖不变)。
# 文件 = user://logs/playtest_<seed>_<时间戳>.jsonl(每行一次结算/终局/节点的全量状态 JSON)。
# ux 行族(呈现层观测,不改 core):ux_round_input_ratio(原始输入动作数∶AP 消耗)、
# ux_round_exit{path_tag}(快照 round_facts.path——呈现层只订 战斗结算 的 ADR 纪律下唯一合法来源)、
# ux_round_exit{path_tag}(快照 round_facts.path——呈现层只订 战斗结算 的接线纪律下唯一合法来源)、
# ux_refresh_attempt / ux_reject / ux_hint_shown(组合根显式上报;无 ux_window_choice——道具窗口已下线)。
# 诊断转储 = 全量核心状态 + 最近结算/操作环形缓冲 → user://logs/diag_<时间戳>.json(卡死时点按钮)。
class_name PlaytestLogger
+1 -1
View File
@@ -4,7 +4,7 @@
# 硬契约:核心层零 await 不破——本队列只做信号的"后置消费",结算顺序/结果/时序逻辑零改动(§3 契约 1);
# 减动效开=延迟归零走同帧直落快路(行呈现不跳过——§3 契约 5);模态开启前强制排空(明细回看/停点
# 覆盖层所见明细带恒完整——排空入口在组合根 _open_modal)。
# 装配纪律:视图句柄与呈现刷新回调由组合根注入(ADR-0001——本类零信号连接,仅做信号后置消费)。
# 装配纪律:视图句柄与呈现刷新回调由组合根注入(本类零信号连接,仅做信号后置消费)。
extends Node
const PACE_SEGMENT_GAP := 0.3 # 段间阶梯延迟(代拍板:白名单 0.2–0.4s 内取值,追认清单呈报)
+1 -1
View File
@@ -5,7 +5,7 @@ extends Node
# 会话更替/终局整节点 queue_free()——旧手工复位清单(原 main._reset_run_scope 三项 +
# _on_battle_end_continue 置空四件)随节点释放机制消亡,此后新增跨局字段零新增泄漏点
#(泄漏=低频难复现脏状态的手工契约病灶,审计 P0-2)。
# 纪律:本节点零信号连接、零视图构建、零核心写调用(ADR-0001——信号连接只在组合根):
# 纪律:本节点零信号连接、零视图构建、零核心写调用(信号连接只在组合根):
# 纯状态承载,组合根经 run_scope.X 读写。
var adventure = null # 冒险结构编排器(调试两层恒 null)
var runner = null # 关卡推进器(冒险每关重取 adventure.runner();调试两层恒 null)
+1 -1
View File
@@ -2,7 +2,7 @@ class_name AdventureScreen
extends Control
# 冒险屏壳(迭代 27 T1 场景拆分——审计 P0-1 第一步;内含关卡地图屏与战斗屏两容器)。
# 两容器视图原样构建(build_battle_ui 归 ui_assembler 纪律不变、LevelMapScreen 类视图继续
# 代码构建、零 .tscn 化改造——契约 2);战斗信号接线归组合根 main.gd(ADR-0001——信号连接
# 代码构建、零 .tscn 化改造——契约 2);战斗信号接线归组合根 main.gd(信号连接
# 只在组合根)。树序语义:本屏壳挂 main 首子位(全模态之下)——屏内 level_screen 与
# battle_root 无同时可见态(屏级互斥+模态栈遮挡),层内先后序零视觉差;
# 模态登记序不变(level_screen 实例仍按节点层与三选一层之间登记)。
+1 -1
View File
@@ -2,7 +2,7 @@ class_name CampScreen
extends Control
# 营地屏壳(迭代 27 T1 场景拆分——审计 P0-1 第一步)。
# 营地覆盖层视图原样构建(CampOverlay 类视图继续代码构建、零 .tscn 化改造——契约 2);
# 购买/开合接线归组合根经 CampShopPresenter(ADR-0001——信号连接只在组合根)。
# 购买/开合接线归组合根经 CampShopPresenter(信号连接只在组合根)。
# 可独立实例化(F6/headless 挂载)——V2 探针断言载体。
var camp_overlay: CampOverlay # 营地覆盖层(原 build_overlays 营地段迁入——main 组合根句柄指向本屏成员)
+1 -1
View File
@@ -2,7 +2,7 @@ class_name MenuScreen
extends Control
# 开始菜单屏壳(迭代 27 T1 场景拆分——审计 P0-1「场景作为组合单元/生命周期单元」第一步)。
# 视图代码原样构建(节点构建归 ui_assembler.gd 纪律不变——本屏壳只持有与暴露句柄);
# 按钮接线归组合根 main.gd(ADR-0001——信号连接只在组合根)。
# 按钮接线归组合根 main.gd(信号连接只在组合根)。
# 可独立实例化(F6/headless 挂载)——V2「各新屏场景可独立实例化」探针断言载体。
# main 组合根保留 _start_overlay 等句柄指向本屏成员——可见性开关与探针挂载假设零迁移。
@@ -4,7 +4,7 @@
# 数据源 = runner 级库存只读面(query_inventory/query_overlays)+ 表行投影(display_name/target/effect_kinds);
# 写调用唯一经 战斗结算.use_treasure(core 侧四步编排——拒绝零消耗 toast 可辨认)。
# 装配纪律:settlement/runner 随关卡逐关更替——经组合根现值回调注入(仿 identity_resolver 只读回调
# 先例);呈现句柄(信息面板/toast/棋盘叠加层)由组合根注入;ADR-0001——信号连接不在此发生,
# 先例);呈现句柄(信息面板/toast/棋盘叠加层)由组合根注入;信号连接不在此发生,
# info_panel.treasure_slot_clicked 由组合根接至 on_slot_clicked。
# 无目标使用显式化:AP 类(target=none)无坐标可给——
# 调用面一律 attempt_use(handle)(cell 缺省=null=显式「无目标」),core 契约的
+1 -1
View File
@@ -2,7 +2,7 @@
# 实现 GDD:design/ux/battle.md(四区装配器——组合根的 UI 构建拆分载体)。
# Date: 2026-09-12(code-review 修复批:main.gd 回涨 761 行触规范 1.1 审视线——构建拆出)
# 高内聚边界(规范 1.1/1.3):视图构建装配器——只做 new / add_child / 布局,
# 零信号连接、零核心写调用;返回句柄供组合根接线(ADR-0001:接线拓扑唯一归组合根)。
# 零信号连接、零核心写调用;返回句柄供组合根接线(接线拓扑唯一归组合根)。
# 静态无状态。z 序契约:调用方必须按 build 返回序 addChild(登记序 = 模态遮挡序——缺陷⑤纪律)。
extends RefCounted
+1 -1
View File
@@ -181,7 +181,7 @@ func is_refresh_ready() -> bool:
return not _btn_refresh.disabled
# 探针接缝(ADR-0004"合成输入走真实翻译出口"口径):刷新按钮点击 → 确认 chips 全链路
# 探针接缝(合成输入走真实翻译出口口径):刷新按钮点击 → 确认 chips 全链路
func press_refresh_for_probe() -> void:
_on_refresh_pressed()
+2 -2
View File
@@ -4,7 +4,7 @@
# 底部结算明细带(布局决策 D1 常驻双舞台分屏))。
# Date: 2026-09-12(setter 面契约:set_enemies/clear_enemies/on_step_row_fx/gray_all_enemies
# 签名稳定——探针与组合根零改造面)
# 结构(ADR-0006 / board-node2d-migration-plan §3——B 区战斗舞台归 Node2D):根壳 Control(类名/
# 结构(Node2D 迁移批——B 区战斗舞台归 Node2D):根壳 Control(类名/
# 尺寸 252px/树内位置不变),内部两半区——「Node2D 舞台半区 = SubViewportContainer + SubViewport +
# StageWorld(站桩本体 StandeeBody 世界精灵)」+「Control 文本半区 = round_label / stage_center /
# log_view 三件」。SubViewport 逻辑分辨率 = 壳层像素 1:1(stretch,禁任何缩放系数——C2/C5);
@@ -60,7 +60,7 @@ func _init(db_ref) -> void:
beams.resized.connect(beams.queue_redraw)
add_child(beams)
# ── Node2D 舞台半区(ADR-0006 Phase B 同构;stretch 1:1 无缩放系数——C2/C5)──
# ── Node2D 舞台半区(战斗舞台迁移批 Phase B 同构;stretch 1:1 无缩放系数——C2/C5)──
_svp_container = SubViewportContainer.new()
_svp_container.stretch = true # 容器尺寸 = 视口逻辑分辨率,恒 1:1
_svp_container.mouse_filter = Control.MOUSE_FILTER_IGNORE # 世界零输入(tooltip 归壳层伴随件)
+1 -1
View File
@@ -1,6 +1,6 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# CellUnit——BoardView SubViewport 世界内逐格渲染件(Node2D)。
# 固定叠层序(ADR-0006 Decision 4):砖面底 < 变异纹带 < 数字/徽章 < 旗 < 焦点高亮——全部程序化
# 固定叠层序(Node2D 迁移批 Decision 4):砖面底 < 变异纹带 < 数字/徽章 < 旗 < 焦点高亮——全部程序化
# _draw 占位视觉;每层留 texture 槽位(art-bible §8.2 格面 32×32 暂定档——终稿 1:1 换入,
# 纹理加载未实现)。无 class_name(类名缓存面纪律——BoardView 经 preload 使用)。
# 字体:font 槽位缺省 = ThemeDB.fallback_font(与旧 Button 缺省主题字体同源);注入挂点归
+4 -4
View File
@@ -3,11 +3,11 @@
# BFS 路径预览/奖励徽章/结算期去饱和锁输入)。
# Date: 2026-09-12(battle.md 战斗屏改造批;基础 = 2026-09-11 HUD框架-lite 版)
# 棋盘渲染本体 = Control 壳 + SubViewportContainer + SubViewport + BoardWorld(Node2D) +
# CellUnit(Node2D)(ADR-0006 / docs/architecture/board-node2d-migration-plan.md §2)。对外契约:
# CellUnit(Node2D)(Node2D 迁移批)。对外契约:
# 类名/extends/三信号/click_cell/_cells 键面(Vector2i→格单元,值 Button→CellUnit)/
# board()/set_desaturated()/set_identity_resolver()/set_variant_mask_resolver()/set_cell_area()/
# rebuild()/refresh()/set_dig_glow_enabled()——探针与组合根零改造。
# 命中 = 壳层 _gui_input + 板级公式单点换算(ADR-0006 Decision 3,_cell_at 为唯一公式函数;
# 命中 = 壳层 _gui_input + 板级公式单点换算(Node2D 迁移批 Decision 3,_cell_at 为唯一公式函数;
# SubViewportContainer 逻辑分辨率恒等于板像素尺寸(stretch 1:1,无缩放比),换算只需减居中偏移)。
# 程序化占位视觉:数字三档/旗/徽章/危险红/变异遮蔽 "?"/呼吸微光/悬停/路径预览/R₀ 豁免;
# CellUnit 叠层 texture 槽位留好(纹理资产接 CellUnit)。只读属性 cell_size 为格尺寸契约出口。
@@ -480,7 +480,7 @@ func click_cell(cell: Vector2i, button: int) -> void:
_on_cell_input(cell, ev)
# 板级公式单点(ADR-0006 Decision 3):格坐标 = floor(板内局部坐标 / 格步长)
# 板级公式单点(Node2D 迁移批 Decision 3):格坐标 = floor(板内局部坐标 / 格步长)
#(格步长 = 格边长 + 间距;板外/负域返回 (-9,-9)。旧逐格 Button 命中被此函数取代;
# 2px 格间隙落入左/上邻格——旧间隙为零命中死区,等价性偏差已登记迁移方案汇报面)
func _cell_at(shell_pos: Vector2) -> Vector2i:
@@ -513,7 +513,7 @@ func _update_world_size() -> void:
_viewport.size = px
# 真实输入路径(ADR-0006 Decision 3):壳层 _gui_input → 板级公式换算 → 复用既有 hover/点选/chord 出口
# 真实输入路径(Node2D 迁移批 Decision 3):壳层 _gui_input → 板级公式换算 → 复用既有 hover/点选/chord 出口
func _gui_input(ev: InputEvent) -> void:
if _minesweeper == null:
return
+1 -1
View File
@@ -2,7 +2,7 @@
# BoardWorld——棋盘 Node2D 世界根(SubViewport 内
# CellUnit 容器)。职责单点:世界级材质挂点(set_desaturated 去饱和挂此处,CellUnit
# use_parent_material 链下随世界灰化)+ 主题/字体显式注入槽位(SubViewport 不自动继承主场景
# Control 主题——ADR-0006 Negative 项;两舞台共用骨架,ADR-0006 Decision 5)。
# Control 主题(Node2D 迁移批 Negative 项);两舞台共用骨架(Decision 5)。
# 无 class_name(类名缓存面纪律——BoardView 经 preload 使用)。
# 板块伪立体绘制(正俯视纸雕风):
# 顶面方格不变(数字可读性硬指标不受伤),厚度全部画在网格矩形外的正面/右侧悬崖带:
+1 -1
View File
@@ -44,7 +44,7 @@ func _init() -> void:
board_area.add_child(toast)
# 角标对(迭代 18 卡⑦ P2 甲——调试+状态两枚右下角常驻,HBox 并排锚角距 16px):
# 17卡③状态角标同形制:紧凑钮豁免宽度基准+字号降档。可见性/置灰归组合根 _sync_status_entry
#(DS_DEBUG 门控/其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根(ADR-0001)。
#(DS_DEBUG 门控/其他模态开着=置灰不可点——排除式开态查询);信号连接归组合根。
# preset 在子件全部入列后调用——MINSIZE 锚按当时最小尺寸计偏移(空容器调用=零尺寸锚外溢屏边)
var corner := HBoxContainer.new()
corner.add_theme_constant_override("separation", 8)
+1 -1
View File
@@ -8,7 +8,7 @@
#(apply_requested / simulate_requested / debug_levels_requested / closed);
# 当局数据经 update_run_data setter 喂入(只读投影零回读);模拟进度与报告经 setter 注入——
# 零核心写、不拼报告文案(装配归 HudPresenter)。零动效(零 tween/AnimationPlayer)。
# 探针接缝(ADR-0004"合成输入走真实翻译出口"口径):press_apply_for_probe 等三键 = 按钮真实信号路径。
# 探针接缝(合成输入走真实翻译出口口径):press_apply_for_probe 等三键 = 按钮真实信号路径。
class_name DebugOverlay
extends Control
+2 -2
View File
@@ -112,7 +112,7 @@ func _init() -> void:
gp_row.add_child(_gp_value)
# 状态面板入口角标(迭代 17 卡③ P1 丁——顶栏常驻;debug 角标同形制:紧凑钮豁免宽度基准+字号降档。
# 置灰守卫归组合根 _sync_status_entry(其他模态开着=不可点;本屏自身的登记开态不计——has_open_excluding);
# 信号连接归组合根(ADR-0001——视图零连接))
# 信号连接归组合根(视图零连接))
status_badge = UiKit.button("状态", 0.0)
status_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
status_badge.tooltip_text = "查看钥石与永久强化进度(只读)"
@@ -120,7 +120,7 @@ func _init() -> void:
top.add_child(status_badge)
# 调试浮窗入口角标(迭代 18 卡⑦ P2 甲——顶栏状态角标右侧;17卡③同形制:紧凑钮豁免宽度基准+
# 字号降档。可见性/置灰归组合根 _sync_status_entry(DS_DEBUG 门控/其他模态开着=置灰——排除式
# 开态查询,本屏自身开态不计);信号连接归组合根(ADR-0001——视图零连接))
# 开态查询,本屏自身开态不计);信号连接归组合根(视图零连接))
debug_badge = UiKit.button("调试", 0.0)
debug_badge.add_theme_font_size_override("font_size", UiKit.FS_HINT)
debug_badge.tooltip_text = "打开调试浮窗(当局数据/种子/数值调整)"
+3 -3
View File
@@ -1,8 +1,8 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# StageWorld——B 区战斗舞台 Node2D
# 世界根(SubViewport 内站桩本体容器)。ADR-0006 分工:Node2D = D 区棋盘 + B 区战斗舞台;
# 世界根(SubViewport 内站桩本体容器)。分工:Node2D = D 区棋盘 + B 区战斗舞台;
# 与 BoardWorld 同构。职责单点:主题/字体显式注入槽位(SubViewport 不自动继承主场景
# Control 主题——ADR-0003 Decision 4;set_world_font 同款挂点,null = ThemeDB.fallback_font 与
# Control 主题(2026-09-12 场景结构裁决);set_world_font 同款挂点,null = ThemeDB.fallback_font 与
# 旧 Label 缺省主题同源)+ 站桩本体装载面。无 class_name(类名缓存面纪律——
# BattleStageView 经 preload 使用)。
# 坐标空间钉死:世界内 = 局部排布坐标(SubViewport 逻辑分辨率 =
@@ -12,5 +12,5 @@ extends Node2D
var world_font: Font = null # 字体注入槽位(null = ThemeDB.fallback_font——BattleStageView.set_world_font 注入)
# C6 headless 可验判据(ADR-0003 Decision 4):注入字体非空 + 中文字形 has_char + 采样文本宽度 > 0。
# C6 headless 可验判据(2026-09-12 场景结构裁决):注入字体非空 + 中文字形 has_char + 采样文本宽度 > 0。
# 实际光栅观感归批末目检清单。
+1 -1
View File
@@ -1,7 +1,7 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# 实现 GDD:design/ux/battle.md(B 区全站桩形态——主角与敌人均为无框立绘+底座,
# 英雄卡/敌人卡卡片式整体退役禁再提)。
# 站桩本体 = Node2D 世界精灵(ADR-0006:B 区战斗舞台归 Node2D)。行为面契约逐项保持:
# 站桩本体 = Node2D 世界精灵(B 区战斗舞台归 Node2D)。行为面契约逐项保持:
# set_data/set_hero/_set_hp/set_idle/set_effects/set_effects_cleared_feedback/set_order/set_pending/
# _play_intent_motion/set_portrait_texture(tex,flip)/mark_dead/is_dead/flash_hit/_revive/
# _update_name_line/_refresh_portrait_glyph(调用点 hud_presenter/main/探针零改造目标——C3)。