From 48c0b343a64853c48bfb518e0491bf52fa033a31 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 00:50:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=AD=E4=BB=A314.5=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=95=B4=E5=90=88=E6=89=B9=EF=BC=9A=E4=B8=BB=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E4=B8=89=E6=95=A3=E4=BB=B6=EF=BC=88=E9=9A=8F=E6=9C=BA=E7=A7=8D?= =?UTF-8?q?=E5=AD=90/=E6=95=B0=E5=80=BC=E8=B0=83=E6=95=B4=E6=9D=BF/?= =?UTF-8?q?=E4=B8=A4=E5=B1=82=E8=B0=83=E8=AF=95=EF=BC=89=E6=94=B6=E4=B8=80?= =?UTF-8?q?=E5=BC=A0=E8=B0=83=E8=AF=95=E6=B5=AE=E7=AA=97DebugOverlay?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=85=A5=E5=8F=A3=3D=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E5=B1=82=E5=8F=B3=E4=B8=8B=E8=A7=92=E3=80=8C?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E3=80=8D=E8=A7=92=E6=A0=87=EF=BC=88=E4=B8=8E?= =?UTF-8?q?=E4=B8=BB=E6=8C=89=E9=92=AE=E7=BB=84=E9=9D=9E=E5=B9=B3=E7=BA=A7?= =?UTF-8?q?=EF=BC=8CDS=5FDEBUG=3D1=E9=97=A8=E6=8E=A7=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E8=BF=AD=E4=BB=A38=E5=8D=A1=E2=91=A3=E5=8F=A3=E5=BE=84?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E6=B5=AE=E7=AA=97=3D=E5=8F=AF=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=BB=9A=E5=8A=A8=E5=88=97=E8=A1=A8=E9=A1=B5=EF=BC=88?= =?UTF-8?q?=E7=A7=8D=E5=AD=90/=E6=95=B0=E5=80=BC=E8=B0=83=E6=95=B4/?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=A8=A1=E6=8B=9F/=E4=B8=A4=E5=B1=82?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=9B=9B=E5=8C=BA=E5=9D=97=EF=BC=8C=E5=90=8E?= =?UTF-8?q?=E7=BB=AD=E9=A1=B9=E5=BE=80=E4=B8=8B=E8=BF=BD=E5=8A=A0=EF=BC=89?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E4=BA=8E=E8=8F=9C=E5=8D=95=E4=B9=8B=E4=B8=8A?= =?UTF-8?q?=E4=B8=8D=E9=9A=90=E8=97=8F=E5=BC=80=E5=A7=8B=E5=B1=82=EF=BC=88?= =?UTF-8?q?Dialog=E5=BD=A2=E6=80=81=E5=90=8C=E7=A1=AE=E8=AE=A4=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E5=85=88=E4=BE=8B=EF=BC=8CTunePanel=E4=BA=92=E6=96=A5?= =?UTF-8?q?=E5=BD=A2=E6=80=81=E9=80=80=E5=BD=B9=EF=BC=89=EF=BC=8C=E4=BB=85?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E8=8F=9C=E5=8D=95=E5=8F=AF=E5=BC=80=EF=BC=88?= =?UTF-8?q?=5Fshow=5Fdebug=5Foverlay=E9=97=A8=E7=A6=81=E6=8A=A4=E6=A0=8F?= =?UTF-8?q?=E2=80=94=E2=80=94=E7=94=A8=E6=88=B7=E8=A3=81=E5=AF=B9=E5=B1=80?= =?UTF-8?q?=E4=B8=AD=E4=B8=8D=E5=8F=AF=E8=BE=BE=EF=BC=89=EF=BC=8C=E4=B8=A4?= =?UTF-8?q?=E5=B1=82=E8=B0=83=E8=AF=95=E5=85=A5=E5=8F=A3=E9=9A=8F=E5=BC=80?= =?UTF-8?q?=E9=9A=8F=E6=94=B6=EF=BC=9BTunePanel=E6=95=B4=E4=BD=93=E5=90=B8?= =?UTF-8?q?=E6=94=B6=E9=80=80=E5=BD=B9=EF=BC=88git=20rm=E5=90=AB.uid?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E6=8E=A2=E9=92=88ui=5Ftune=5Fprobe=E6=94=B9?= =?UTF-8?q?=E6=8E=A5+=E7=BC=BA=E9=99=B7=E2=91=A4=E6=96=AD=E8=A8=80?= =?UTF-8?q?=E8=AF=AD=E4=B9=89=E7=BF=BB=E8=BD=AC=EF=BC=88=E6=B5=AE=E7=AA=97?= =?UTF-8?q?=E6=A0=91=E5=BA=8F=E5=BF=85=E9=A1=BB=E5=9C=A8=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E5=B1=82=E4=B9=8B=E5=90=8E=EF=BC=89+ui=5Fclick=5Fprobe?= =?UTF-8?q?=E4=B8=A4=E5=A4=84=E6=94=B9=E6=8E=A5=EF=BC=9B=E5=9B=9B=E6=8B=8D?= =?UTF-8?q?=E6=9D=BFP1=E7=94=B2/P2=E4=B9=99/P3=E4=BB=85=E8=8F=9C=E5=8D=95/?= =?UTF-8?q?P4=E5=8F=AF=E6=89=A9=E5=B1=95=E5=88=97=E8=A1=A8=E5=85=A8?= =?UTF-8?q?=E8=90=BD=EF=BC=882026-10-04=E7=94=A8=E6=88=B7=E8=A3=81?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E6=A0=B8=E5=BF=83/=E5=91=88=E7=8E=B0?= =?UTF-8?q?=E6=B3=A8=E9=87=8ATunePanel=E5=8F=A3=E5=BE=84=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=B5=AE=E7=AA=97=EF=BC=88=E9=9B=B6=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=EF=BC=89=EF=BC=9B=E5=86=92=E7=83=9F747/0+=E6=8E=A2?= =?UTF-8?q?=E9=92=88tune/click/ui=E4=B8=89=E7=BB=BF=EF=BC=88worktree?= =?UTF-8?q?=E9=A6=96=E8=B7=91=E5=85=88--import=E5=BB=BA=E7=B1=BB=E5=90=8D?= =?UTF-8?q?=E7=BC=93=E5=AD=98+=E4=B8=BB=E5=8C=BAart=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E8=A1=A5=E6=8B=B7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/{tune_panel.gd => debug_overlay.gd} | 75 ++++++++++++++----- game/presentation/views/debug_overlay.gd.uid | 1 + game/presentation/views/tune_panel.gd.uid | 1 - 3 files changed, 58 insertions(+), 19 deletions(-) rename game/presentation/views/{tune_panel.gd => debug_overlay.gd} (57%) create mode 100644 game/presentation/views/debug_overlay.gd.uid delete mode 100644 game/presentation/views/tune_panel.gd.uid diff --git a/game/presentation/views/tune_panel.gd b/game/presentation/views/debug_overlay.gd similarity index 57% rename from game/presentation/views/tune_panel.gd rename to game/presentation/views/debug_overlay.gd index 599f5264..8ea16818 100644 --- a/game/presentation/views/tune_panel.gd +++ b/game/presentation/views/debug_overlay.gd @@ -1,17 +1,23 @@ # VERTICAL SLICE - NOT FOR PRODUCTION -# Date: 2026-09-11(2026-09-12 code-review 修复批重构) -# 测试用角色数值调整板(模拟天赋树属性提升——仅测试,正式侧归元进度)。 -# 纯视图边界(规范 1.3):本类只承载滑杆 UI 与生效值预览;加成应用 / 批量模拟编排 -# 全部经信号外发由组合根承接(apply_requested / simulate_requested / closed); -# 模拟进度与报告经 setter 注入——视图零核心写、零 smoke 脚本依赖、不拼报告文案(装配归 presenter)。 +# Date: 2026-10-04(迭代 14.5 调试整合批——主菜单三散件(随机种子/角色数值调整板/两层调试入口)收一张调试浮窗, +# 原 views/tune_panel.gd 整体吸收退役) +# 开发调试浮窗:入口 = 开始覆盖层右下角「调试」角标(DS_DEBUG=1 门控归组合根)——非主按钮组平级; +# 仅开始菜单可开(浮于菜单之上的 Dialog 形态,不隐藏开始层——与确认弹窗同款;对局中不可达)。 +# 列表页形态可扩展:后续调试项按区块往下追加,超高滚动。 +# 纯视图边界(规范 1.3):数值应用/批量模拟/对局启动全部经信号外发由组合根承接 +#(apply_requested / simulate_requested / debug_levels_requested / closed); +# 模拟进度与报告经 setter 注入——零核心写、不拼报告文案(装配归 HudPresenter)。 # 探针接缝(ADR-0004"合成输入走真实翻译出口"口径):press_apply_for_probe 等三键 = 按钮真实信号路径。 -class_name TunePanel +class_name DebugOverlay extends Control signal apply_requested(atk_pct: int, hp_pct: int) # 应用并关闭——加成落表归组合根单一应用路径 signal simulate_requested(count: int) # 批量模拟编排归组合根(表基线复位 + 单路径施加) +signal debug_levels_requested # 两层调试对局入口(编排归 debug_session.gd) signal closed +var seed_edit: LineEdit # 组合根 _seed_value 唯一读取面(原开始覆盖层种子行迁入) + var _db var _base_atk := 0 var _base_hp := 0 @@ -31,6 +37,7 @@ func _init(db_ref, base_atk: int, base_hp: int) -> void: _base_hp = base_hp _build() _sync_labels() + visible = false # 显式初始化——不靠树序巧合(缺陷⑤家族纪律) # ---- 对外语义面(组合根/探针)---- @@ -115,41 +122,63 @@ func effective_max_hp() -> int: return UiKit.scaled(_base_hp, hp_pct()) -# ---- 内部构建 ---- +# ---- 内部构建(标题/关闭固定于浮窗骨架,可扩展列表区居中滚动)---- func _build() -> void: - var box: VBoxContainer = UiKit.modal_shell(self, UiKit.BG_OVERLAY, Vector2(640, 0), 8).box + var shell: Dictionary = UiKit.modal_shell(self, UiKit.BG_OVERLAY, Vector2(640, 0), 8) + var box: VBoxContainer = shell.box - var title := UiKit.label("测试用 · 角色数值调整板", 26, true, UiKit.WARM) + var title := UiKit.label("调试", 26, true, UiKit.WARM) box.add_child(title) var desc := UiKit.label( - "模拟玩家在循环中解锁天赋获得的属性提升(仅测试工具,不落盘)。\n百分比叠加基础值:攻击 %d / 生命 %d。影响所有模式(手动与模拟)。" % [_base_atk, _base_hp], + "开发调试专用——仅开始菜单可开(DS_DEBUG=1 时入口点亮)。\n百分比叠加基础值:攻击 %d / 生命 %d。影响所有模式(手动与模拟),不落盘。" % [_base_atk, _base_hp], 13, false, UiKit.WARM_SOFT) box.add_child(desc) box.add_child(HSeparator.new()) - var atk_row := _slider_row(box, "攻击加成") + # 可扩展列表页(后续调试项按区块往下追加——超高滚动,滚轮下探) + var scroll := ScrollContainer.new() + scroll.custom_minimum_size = Vector2(0, 430) + scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED + box.add_child(scroll) + var list := VBoxContainer.new() + list.size_flags_horizontal = Control.SIZE_EXPAND_FILL + list.add_theme_constant_override("separation", 8) + scroll.add_child(list) + + # 区块①随机种子(原开始覆盖层种子行迁入——非法定值回退 42 的口径归组合根 _seed_value) + var seed_row := HBoxContainer.new() + list.add_child(seed_row) + seed_row.add_child(UiKit.label("随机种子", 15, false)) + seed_edit = LineEdit.new() + seed_edit.text = "42" + seed_edit.custom_minimum_size = Vector2(120, 0) + seed_row.add_child(seed_edit) + list.add_child(HSeparator.new()) + + # 区块②角色数值调整板(原 TunePanel 内容原样吸收) + var atk_row := _slider_row(list, "攻击加成") _atk = atk_row.slider _atk_val = atk_row.value_label - var hp_row := _slider_row(box, "生命加成") + var hp_row := _slider_row(list, "生命加成") _hp = hp_row.slider _hp_val = hp_row.value_label _eff = UiKit.label("", 14, false) - box.add_child(_eff) + list.add_child(_eff) var btn_row := HBoxContainer.new() - box.add_child(btn_row) + list.add_child(btn_row) var apply_btn := UiKit.button("应用并关闭") apply_btn.pressed.connect(_apply_btn_pressed) btn_row.add_child(apply_btn) var reset_btn := UiKit.button("重置为 0") reset_btn.pressed.connect(_reset_btn_pressed) btn_row.add_child(reset_btn) - # 减动效开关已转正迁出(迭代 8 卡④——设置面唯一入口,本面板退役该开关;motion_scale 引擎态由设置面承载) - box.add_child(HSeparator.new()) + list.add_child(HSeparator.new()) + # 区块③批量模拟(与 headless 扫描同口径——编排归 tune_sim_controller) var sim_row := HBoxContainer.new() - box.add_child(sim_row) + list.add_child(sim_row) sim_row.add_child(UiKit.label("批量模拟第一关", 15, false)) _sim_count = SpinBox.new() _sim_count.min_value = 10 @@ -165,7 +194,13 @@ func _build() -> void: _sim_out = RichTextLabel.new() _sim_out.bbcode_enabled = true _sim_out.custom_minimum_size = Vector2(0, 300) - box.add_child(_sim_out) + list.add_child(_sim_out) + list.add_child(HSeparator.new()) + + # 区块④两层调试对局入口(原开始覆盖层调试按钮迁入——HP 关内延续) + var dbg_btn := UiKit.button("调试 · 连续关卡两层(HP 关内延续)") + dbg_btn.pressed.connect(_emit_debug_levels) + list.add_child(dbg_btn) var close_btn := UiKit.button("关闭") close_btn.pressed.connect(_emit_closed) @@ -200,6 +235,10 @@ func _emit_simulate_requested() -> void: simulate_requested.emit(int(_sim_count.value)) +func _emit_debug_levels() -> void: + debug_levels_requested.emit() + + func _emit_closed() -> void: closed.emit() diff --git a/game/presentation/views/debug_overlay.gd.uid b/game/presentation/views/debug_overlay.gd.uid new file mode 100644 index 00000000..06371b43 --- /dev/null +++ b/game/presentation/views/debug_overlay.gd.uid @@ -0,0 +1 @@ +uid://bf0xtmxgbid4p diff --git a/game/presentation/views/tune_panel.gd.uid b/game/presentation/views/tune_panel.gd.uid deleted file mode 100644 index 8174dd13..00000000 --- a/game/presentation/views/tune_panel.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dxafka2y1f2xg