⑦T2: 输入锁死防护+P2甲角标迁宿主+T3当局数据只读区块(三件互锁一批落码)——modal_stack 增 has_open_excluding_any 多排除式查询(has_open_excluding 委托零语义变);main.gd 输入锁/暂停角标置灰/暂停守卫判据全改排除式排除调试浮窗(审计🔴S1+防线:DS_DEBUG默认开×遮挡复活×has_open=棋盘锁死破局)+开冒险/续玩路径显式关浮窗+_show_debug_overlay 门禁改向对局中可开(C6 单口保持)+_start_debug_levels/_on_tune_simulate 对局中守卫(长程异步模拟与活跃结算并存态不开放)+DS_DEBUG=1 启动即开(P3甲)+当局数据六项只读投影 _debug_run_data/_current_master_seed 单点(:1174 诊断种子重算冒充病灶同批改向)+模态开合单口挂 _sync_debug_overlay;P2甲:战斗屏 HUD 角标对(HBox 并排锚角距16px)+地图屏顶栏调试角标(17卡③同形制 DS_DEBUG 门控)+开始层 dbgbtn 退役(ui_assembler 返回键集换代);T3:debug_overlay 当局数据只读区块(种子/关卡/节点/HP/GP/钥石六项标签喂入制零信号连接零动效)+is_running 语义拆分(模拟在跑≠对局禁用)+set_context_locked 对局中两钮禁用+desc 文案换代;冒烟 811/0

This commit is contained in:
DKChan committed 2026-10-07 06:43:50 +08:00
1 parent 40fb4a5c1b
commit dd2c57c4cf
6 files changed
+190 -42

No files matched your search

+62 -11
View File
@@ -1,12 +1,14 @@
# VERTICAL SLICE - NOT FOR PRODUCTION
# Date: 2026-10-04(迭代 14.5 调试整合批——主菜单三散件(随机种子/角色数值调整板/两层调试入口)收一张调试浮窗,
# 原 views/tune_panel.gd 整体吸收退役)
# 开发调试浮窗:入口 = 开始覆盖层右下角「调试」角标(DS_DEBUG=1 门控归组合根)——非主按钮组平级;
# 仅开始菜单可开(浮于菜单之上的 Dialog 形态,不隐藏开始层——与确认弹窗同款;对局中不可达)。
# 开发调试浮窗:全局可开(迭代 18 卡⑦——DS_DEBUG=1 会话启动即开〔组合根 _ready〕+战斗屏 HUD/关卡地图屏
# 两枚角标再开〔P2 甲,17卡③暂停角标同形制〕;遮挡语义=ModalStack 登记制:他模态开时暂隐、关后自动恢复;
# 旧「仅开始菜单可开」门随入口迁宿主退役)。当局数据只读区块=本局种子唯一查看位(T3,P4 甲六项)。
# 列表页形态可扩展:后续调试项按区块往下追加,超高滚动。
# 纯视图边界(规范 1.3):数值应用/批量模拟/对局启动全部经信号外发由组合根承接
#(apply_requested / simulate_requested / debug_levels_requested / closed);
# 模拟进度与报告经 setter 注入——零核心写、不拼报告文案(装配归 HudPresenter)。
# 当局数据经 update_run_data setter 喂入(只读投影零回读);模拟进度与报告经 setter 注入——
# 零核心写、不拼报告文案(装配归 HudPresenter)。零动效(零 tween/AnimationPlayer——17卡③契约)。
# 探针接缝(ADR-0004"合成输入走真实翻译出口"口径):press_apply_for_probe 等三键 = 按钮真实信号路径。
class_name DebugOverlay
extends Control
@@ -28,7 +30,12 @@ var _hp_val: Label
var _eff: Label
var _sim_count: SpinBox
var _sim_btn: Button
var _dbg_btn: Button # 两层调试入口钮(迭代 18 卡⑦——对局中禁用承载面)
var _sim_out: RichTextLabel
var _sim_running := false # 批量模拟进行中(is_running 判据——与对局中禁用态分离防互扰)
var _ctx_locked := false # 对局中上下文锁定(组合根 _sync_debug_overlay 喂入——批量模拟/两层调试入口禁用)
var _run_labels := {} # 当局数据六项标签(P4 甲——只读投影,组合根 update_run_data 喂入)
var _run_data := {} # 最近一次投喂快照(探针值对面 run_data_probe)
func _init(db_ref, base_atk: int, base_hp: int) -> void:
@@ -70,12 +77,37 @@ func set_sim_count(n: int) -> void:
func is_running() -> bool:
return _sim_btn.disabled
return _sim_running # 批量模拟进行中(迭代 18 卡⑦——与对局中禁用态分离,置灰 ≠ 在跑)
func set_sim_running(running: bool) -> void:
_sim_btn.disabled = running
_sim_btn.text = "模拟中…" if running else "运行模拟"
_sim_running = running
_sync_sim_button()
# 对局中上下文锁定(迭代 18 卡⑦ T2——组合根 _sync_debug_overlay 喂入):批量模拟与两层调试入口
# 在活跃对局并存态不开放(长程异步模拟/并发对局编排与活跃结算并存态破坏状态机)
func set_context_locked(locked: bool) -> void:
_ctx_locked = locked
_dbg_btn.disabled = _ctx_locked
_sync_sim_button()
# 当局数据只读投影喂入(T3 P4 甲六项——组合根 _debug_run_data 构造;纯标签重查零动效)
func update_run_data(data: Dictionary) -> void:
_run_data = data.duplicate()
for key in _run_labels:
(_run_labels[key] as Label).text = str(data.get(key, "—"))
# 当局数据快照读面(探针值对面——ui_tune_probe 断言六项与只读访问器逐项一致)
func run_data_probe() -> Dictionary:
return _run_data.duplicate()
func _sync_sim_button() -> void:
_sim_btn.disabled = _sim_running or _ctx_locked
_sim_btn.text = "模拟中…" if _sim_running else "运行模拟"
func set_sim_progress(text: String) -> void:
@@ -131,7 +163,7 @@ func _build() -> void:
var title := UiKit.label("调试",UiKit.FS_TITLE, true, UiKit.WARM)
box.add_child(title)
var desc := UiKit.label(
"开发调试专用——仅开始菜单可开(DS_DEBUG=1 时入口点亮)。\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())
@@ -146,6 +178,25 @@ func _build() -> void:
list.add_theme_constant_override("separation", 8)
scroll.add_child(list)
# 区块·当局数据(迭代 18 卡⑦ T3 P4 甲——六项只读投影:种子=本局种子唯一查看位〔adventure
# .master_seed 现值,非 _seed_value() 重算〕/关卡/节点/HP/GP/钥石;数据由组合根开窗与模态开合
# 时 update_run_data 喂入;纯标签零信号连接零动效——17卡③只读契约)
var run_head := UiKit.label("当局数据(只读)",UiKit.FS_HINT, true, UiKit.WARM)
list.add_child(run_head)
var run_grid := GridContainer.new()
run_grid.columns = 2
run_grid.add_theme_constant_override("h_separation", 14)
run_grid.add_theme_constant_override("v_separation", 2)
list.add_child(run_grid)
for item in [["seed", "种子"], ["level", "关卡"], ["node", "节点"], ["hp", "HP"], ["gp", "GP"], ["keystone", "钥石"]]:
var cap := UiKit.label(String(item[1]),UiKit.FS_HINT, false, UiKit.WARM_FAINT)
cap.custom_minimum_size = Vector2(52, 0)
run_grid.add_child(cap)
var val := UiKit.label("—",UiKit.FS_HINT, false, UiKit.WARM)
_run_labels[item[0]] = val
run_grid.add_child(val)
list.add_child(HSeparator.new())
# 区块⓪胜利演出风格(P-C5 两套并存——纹章拼合[默认]/尘金粒子;会话级不落盘)
var fx_row := HBoxContainer.new()
fx_row.add_theme_constant_override("separation", 10)
@@ -211,10 +262,10 @@ func _build() -> void:
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)
# 区块④两层调试对局入口(原开始覆盖层调试按钮迁入——HP 关内延续;迭代 18 卡⑦——对局中禁用)
_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)