迭代14.5调试整合批·补遗:上次提交漏暂存的11个修改件收编——main.gd接线(角标入口/浮窗构建挂树序末/模态登记/处理器更名_show_debug_overlay/_close_debug_overlay+对局随开随收/门禁护栏)+ui_assembler(build_overlays撤TunePanel改签名+开始覆盖层三散件撤除+角落角标)+探针ui_tune_probe全量改接与ui_click_probe两处+核心/呈现/冒烟注释口径TunePanel→调试浮窗(零行为);与48c0b34同批同验证(冒烟747/0+三探针绿)
This commit is contained in:
1 parent
48c0b343a6
commit
46dadbb45d
11 files changed
+112
-110
No files matched your search
@@ -13,7 +13,7 @@ var _save_get: Callable # () → 存档承载现值(同上——营
|
||||
var camp_overlay: CampOverlay
|
||||
var shop_overlay: ShopOverlay
|
||||
var toast: ToastStack
|
||||
var start_overlay: Control # 开始层互斥面(开合仿 TunePanel 先例——非模态且树序在后,规范 2.3)
|
||||
var start_overlay: Control # 开始层互斥面(开合仿设置面先例——非模态且树序在后,规范 2.3)
|
||||
var logger # 试玩日志(ux_reject 取数面)
|
||||
var _runner_get: Callable # () → 关卡推进器现值(组合根 lambda——随局更替)
|
||||
var _open_modal: Callable
|
||||
@@ -41,7 +41,7 @@ func _init(db_ref, meta_get: Callable, save_get: Callable, camp_overlay_ref: Cam
|
||||
_refresh_resume_button = refresh_resume_button
|
||||
|
||||
|
||||
# 打开营地(主菜单入口——开合与开始层互斥仿 TunePanel 先例:开始覆盖层非模态且树序在后,
|
||||
# 打开营地(主菜单入口——开合与开始层互斥仿设置面先例:开始覆盖层非模态且树序在后,
|
||||
# 规范 2.3 遮挡纪律;打开时先刷工坊解锁——达标未解锁就地入账)
|
||||
func open_camp() -> void:
|
||||
var meta = _meta_get.call()
|
||||
|
||||
+42
-34
@@ -118,10 +118,10 @@ var shop_overlay: ShopOverlay # 商店覆盖层(GP+商店房实施
|
||||
var camp_overlay: CampOverlay # 营地覆盖层(元进度实现批——主菜单营地入口兑付呈现)
|
||||
var settings_store # 系统级设置独立存储(迭代 8 卡④——音量/全屏/减动效)
|
||||
var settings_overlay: SettingsOverlay # 设置覆盖层(迭代 8 卡④——最小设置面)
|
||||
var tune_panel: TunePanel
|
||||
var debug_overlay: DebugOverlay # 调试浮窗(迭代 14.5 调试整合批——种子/数值调整/批量模拟/两层调试入口收一)
|
||||
|
||||
var _modals = null # 模态层级状态机(modal_stack.gd——缺陷⑤纪律载体)
|
||||
var _tune_sim = null # 调整板批量模拟控制器(tune_sim_controller.gd)
|
||||
var _tune_sim = null # 调试浮窗批量模拟控制器(tune_sim_controller.gd)
|
||||
var _hints_shown := {} # 一次性非模态提示去重(每 run 一次:chord/no_adjacent)
|
||||
var _refresh_used_round := 0 # 本轮已受理刷新次数(遥测 round_refresh_index——每轮 round_started 归零)
|
||||
var _boss_active := false # Boss 遭遇变体(阶段指示附 Boss 名)
|
||||
@@ -242,15 +242,14 @@ func _build_ui() -> void:
|
||||
logger.ap_per_round = int(db.action_economy.ap_per_round)
|
||||
|
||||
# 模态覆盖层(登记序 = 树序 = z 遮挡序:图例 < 明细回看 < 节点 < 关卡画面 < 三选一 < 终局
|
||||
# < 商店 < 营地 < 调整板 < 设置 < 确认弹窗)
|
||||
var overlays: Dictionary = UiAssembler.build_overlays(self, db, int(db.hero.atk), int(db.hero.max_hp))
|
||||
# < 商店 < 营地 < 设置 < 确认弹窗 < 调试浮窗)
|
||||
var overlays: Dictionary = UiAssembler.build_overlays(self, db)
|
||||
legend_overlay = overlays.legend_overlay
|
||||
review_overlay = overlays.review_overlay
|
||||
node_overlay = overlays.node_overlay
|
||||
_end_overlay = overlays.end_overlay
|
||||
shop_overlay = overlays.shop_overlay
|
||||
camp_overlay = overlays.camp_overlay
|
||||
tune_panel = overlays.tune_panel
|
||||
level_screen = LevelMapScreen.new()
|
||||
add_child(level_screen)
|
||||
# 树序 = 模态登记序 = z 遮挡序(缺陷⑤纪律)——关卡画面须夹在节点层与商店层之间
|
||||
@@ -263,9 +262,6 @@ func _build_ui() -> void:
|
||||
level_screen.abandon_requested.connect(_on_abandon_requested) # 放弃入口(2026-09-21 用户拍板——台账 119)
|
||||
_end_overlay.review_pressed.connect(_on_end_review)
|
||||
_end_overlay.continue_pressed.connect(_on_battle_end_continue)
|
||||
tune_panel.closed.connect(_close_tune_panel)
|
||||
tune_panel.apply_requested.connect(_on_tune_apply)
|
||||
tune_panel.simulate_requested.connect(_on_tune_simulate)
|
||||
settings_overlay = SettingsOverlay.new(settings_store) # 迭代 8 卡④——最小设置面(音量/全屏/减动效)
|
||||
add_child(settings_overlay)
|
||||
settings_overlay.closed.connect(_on_settings_closed)
|
||||
@@ -287,12 +283,10 @@ func _build_ui() -> void:
|
||||
|
||||
var start: Dictionary = UiAssembler.build_start_overlay(self, db)
|
||||
_start_overlay = start.overlay
|
||||
_seed_edit = start.seed_edit
|
||||
_resume_btn = start.resumebtn
|
||||
start.lvbtn.pressed.connect(_start_adventure_from_menu)
|
||||
start.resumebtn.pressed.connect(_resume_from_menu) # 迭代 8 卡②——续玩入口
|
||||
start.tunebtn.pressed.connect(_show_tune_panel)
|
||||
start.dbgbtn.pressed.connect(_start_debug_levels)
|
||||
start.dbgbtn.pressed.connect(_show_debug_overlay) # 迭代 14.5——调试角标入口(浮窗,非平级主按钮)
|
||||
start.dbgbtn.visible = OS.get_environment("DS_DEBUG") == "1" # 迭代 8 卡④——调试入口默认隐藏门控(DS_DEBUG=1 点亮)
|
||||
# 营地/商店投影(T4/D4 拆件批——迁 camp_shop_presenter.gd;本类只接线、探针缝保缝转发;
|
||||
# 购买写调用唯一经 MetaProgression/LevelRunner core 单口——组合根 lambda 现值注入)
|
||||
@@ -326,11 +320,22 @@ func _build_ui() -> void:
|
||||
confirm_dialog.confirmed.connect(_on_confirm_new_adventure)
|
||||
confirm_dialog.cancelled.connect(_on_confirm_cancelled)
|
||||
|
||||
# 调试浮窗(迭代 14.5 调试整合批——主菜单三散件收一:随机种子/数值调整/批量模拟/两层调试入口)。
|
||||
# 树序在开始层与确认弹窗之后 = 浮于菜单之上的 Dialog(不隐藏开始层——与确认弹窗同款形态,
|
||||
# 旧 TunePanel「与开始层互斥」形态退役);入口仅开始覆盖层角标(DS_DEBUG=1 门控)
|
||||
debug_overlay = DebugOverlay.new(db, int(db.hero.atk), int(db.hero.max_hp))
|
||||
add_child(debug_overlay)
|
||||
_seed_edit = debug_overlay.seed_edit # 种子读取面随浮窗迁入(_seed_value 唯一消费点不变)
|
||||
debug_overlay.closed.connect(_on_modal_closed.bind(debug_overlay))
|
||||
debug_overlay.apply_requested.connect(_on_tune_apply)
|
||||
debug_overlay.simulate_requested.connect(_on_tune_simulate)
|
||||
debug_overlay.debug_levels_requested.connect(_start_debug_levels)
|
||||
|
||||
# 模态登记(缺陷⑤纪律——登记序 = 树序:含 move_child 调位后的关卡画面/三选一终位)
|
||||
_modals = ModalStack.new()
|
||||
for m: Control in [legend_overlay, review_overlay, node_overlay, level_screen, bonus_overlay, _end_overlay, shop_overlay, camp_overlay, tune_panel, settings_overlay, confirm_dialog]:
|
||||
for m: Control in [legend_overlay, review_overlay, node_overlay, level_screen, bonus_overlay, _end_overlay, shop_overlay, camp_overlay, settings_overlay, confirm_dialog, debug_overlay]:
|
||||
_register_modal(m)
|
||||
_tune_sim = TuneSimController.new(db, tune_panel, int(db.hero.max_hp))
|
||||
_tune_sim = TuneSimController.new(db, debug_overlay, int(db.hero.max_hp))
|
||||
|
||||
|
||||
func _fatal_screen(msg: String) -> void:
|
||||
@@ -432,7 +437,7 @@ func _resume_from_menu() -> void:
|
||||
_reset_run_scope()
|
||||
log_view.clear()
|
||||
logger.start_session(int(bp.get("master_seed", 0)))
|
||||
adventure.set_hero_override(tune_panel.atk_pct(), tune_panel.hp_pct())
|
||||
adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct())
|
||||
if not adventure.resume_adventure(bp, {"hero_override": meta.hero_override() if meta != null else {}, "aux_unlocked": _aux.unlocked_set()}):
|
||||
_fatal_screen("续玩恢复失败——见输出日志")
|
||||
return
|
||||
@@ -467,7 +472,7 @@ func _start_adventure() -> void:
|
||||
log_view.clear()
|
||||
var seed_val := _seed_value()
|
||||
logger.start_session(seed_val)
|
||||
adventure.set_hero_override(tune_panel.atk_pct(), tune_panel.hp_pct())
|
||||
adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct())
|
||||
# 永久强化注入(元进度实现批):冒险开始参数面——meta 现算 override 显式传参(全零 = 白板)
|
||||
# 首次冒险脚本(关卡节点图生成 v0.4):存档布尔位 false = 全关固定模板 0(教学重放);置位后逐关抽签
|
||||
var first_script: bool = not save_manager.is_first_adventure_done()
|
||||
@@ -482,7 +487,7 @@ func _on_adventure_level_started(level_index: int, display_name: String) -> void
|
||||
runner = adventure.runner()
|
||||
log_view.append_bb(Narrator.level_open_line(display_name, int(adventure.master_seed),
|
||||
int(db.hero.atk), int(db.hero.max_hp),
|
||||
tune_panel.atk_pct() > 0 or tune_panel.hp_pct() > 0))
|
||||
debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0))
|
||||
|
||||
|
||||
func _reset_run_scope() -> void:
|
||||
@@ -580,7 +585,7 @@ func _on_battle_end_continue() -> void:
|
||||
settlement = null
|
||||
adventure = null
|
||||
_adventure_mode = false
|
||||
tune_panel.reset_sliders()
|
||||
debug_overlay.reset_sliders()
|
||||
_start_overlay.visible = true
|
||||
_refresh_resume_button() # 迭代 8 卡②——回菜单按断点在档态刷新(收束后已清=隐藏)
|
||||
_refresh_presentations()
|
||||
@@ -593,13 +598,15 @@ func _on_end_review() -> void:
|
||||
|
||||
|
||||
# ==================== 调试模式(连续两层——编排归 debug_session.gd;
|
||||
# 单场遭遇用户入口已删(2026-09-13 用户裁决)——debug_session.start_single 原语仅探针使用)
|
||||
# 单场遭遇用户入口已删(2026-09-13 用户裁决)——debug_session.start_single 原语仅探针使用;
|
||||
# 入口 2026-10-04 迁调试浮窗(debug_levels_requested 接线))
|
||||
# T4/D3 收口注记:本节处理器(battle_created/battle_ready/override/seed)系组合根绑定面——
|
||||
# settlement 写与 _wire_battle=ADR-0001 组合根 essence,override/seed 取数面在组合根 UI 态
|
||||
#(tune_panel/_seed_edit)——不迁移,信号连接留本根(契约 3)。====================
|
||||
#(debug_overlay/_seed_edit)——不迁移,信号连接留本根(契约 3)。====================
|
||||
|
||||
func _start_debug_levels() -> void:
|
||||
tune_panel.reset_sliders()
|
||||
debug_overlay.reset_sliders()
|
||||
_close_modal(debug_overlay) # 浮窗内入口发起——随开随收(对局期不可再开:门禁在 _show_debug_overlay)
|
||||
_start_overlay.visible = false
|
||||
log_view.clear()
|
||||
log_view.append_bb(Narrator.debug_open_line(_seed_value(), 1, true))
|
||||
@@ -633,12 +640,12 @@ func _on_inter_next_pressed() -> void:
|
||||
_fatal_screen("战斗启动失败——见输出日志")
|
||||
|
||||
|
||||
# E4:加成生效值供给(debug_session 注入 Callable——每次从面板百分比现算,经 encounter 传参零表写;
|
||||
# E4:加成生效值供给(debug_session 注入 Callable——每次从浮窗百分比现算,经 encounter 传参零表写;
|
||||
# 原表写路径 _apply_hero_override/_scaled_override 已废除,双写叠加 6→18→54 整类隐患随之移除;
|
||||
# 合成式单点在 UiKit.scaled——与 TunePanel 生效值预览共用,本类不再持有同式私有实现)
|
||||
# 合成式单点在 UiKit.scaled——与调试浮窗生效值预览共用,本类不再持有同式私有实现)
|
||||
func _debug_hero_override() -> Dictionary:
|
||||
return {"atk": UiKit.scaled(int(db.hero.atk), tune_panel.atk_pct()),
|
||||
"max_hp": UiKit.scaled(int(db.hero.max_hp), tune_panel.hp_pct())}
|
||||
return {"atk": UiKit.scaled(int(db.hero.atk), debug_overlay.atk_pct()),
|
||||
"max_hp": UiKit.scaled(int(db.hero.max_hp), debug_overlay.hp_pct())}
|
||||
|
||||
|
||||
# 奖励徽章身份解析(组合根守卫:仅挖掘期 Active 相位内查询——地图战斗资源 Ready 域外零读、零诊断噪音;
|
||||
@@ -1096,22 +1103,23 @@ func _on_diagnose_pressed() -> void:
|
||||
board_zone.toast.show_toast("已转储诊断: " + path, "info")
|
||||
|
||||
|
||||
# ==================== 数值调整板(加成应用/批量模拟编排——组合根承接,视图纯 UI)====================
|
||||
# ==================== 调试浮窗(迭代 14.5 整合批——原数值调整板节收编;开合/应用/模拟编排组合根承接)====================
|
||||
|
||||
func _show_tune_panel() -> void:
|
||||
_start_overlay.visible = false
|
||||
_open_modal(tune_panel) # 模态栈单口(T3 收口批)
|
||||
func _show_debug_overlay() -> void:
|
||||
# 门禁(用户裁 2026-10-04:仅开始菜单可开,对局中不可达):入口角标宿主即开始层,
|
||||
# 此护栏防御未来调用面(含探针直呼);浮窗树序在开始层之后 = 悬浮其上,不隐藏菜单
|
||||
if not _start_overlay.visible:
|
||||
return
|
||||
_open_modal(debug_overlay) # 模态栈单口
|
||||
|
||||
|
||||
func _close_tune_panel() -> void:
|
||||
_close_modal(tune_panel) # 模态栈单口(T3 收口批)
|
||||
_start_overlay.visible = true
|
||||
_refresh_resume_button() # 迭代 8 卡②——回菜单按断点在档态刷新
|
||||
func _close_debug_overlay() -> void:
|
||||
_close_modal(debug_overlay) # 模态栈单口——开始层全程未隐藏,无需恢复
|
||||
|
||||
|
||||
func _on_tune_apply(atk_pct: int, hp_pct: int) -> void:
|
||||
# E4:加成无持久态可"落"——各战斗开局经 _debug_hero_override/runner 现算生效(面板仅关闭回开始层)
|
||||
_close_tune_panel()
|
||||
# E4:加成无持久态可"落"——各战斗开局经 _debug_hero_override/runner 现算生效(应用=关闭浮窗)
|
||||
_close_debug_overlay()
|
||||
|
||||
|
||||
func _on_tune_simulate(n: int) -> void:
|
||||
|
||||
@@ -13,7 +13,7 @@ const SEED_BASE := 4200 # 模拟种子基(与历史实现同源——同种
|
||||
const PlaytestLogger := preload("res://presentation/playtest_logger.gd") # 试玩日志(同层依赖——运行时 load 收敛为 preload 常量)
|
||||
|
||||
var db
|
||||
var panel # TunePanel setter 面:atk_pct/hp_pct/set_sim_running/set_sim_progress/set_sim_report
|
||||
var panel # 调试浮窗 setter 面:atk_pct/hp_pct/set_sim_running/set_sim_progress/set_sim_report
|
||||
var _base_hp := 0 # 报告中的"基础 HP"口径注记值
|
||||
var _driver = null # 关卡自动策略驱动(调用方注入;null = 旧行为运行时 load 兜底)
|
||||
|
||||
|
||||
@@ -61,9 +61,10 @@ static func build_battle_ui(root: Control, db) -> Dictionary:
|
||||
}
|
||||
|
||||
|
||||
# 模态覆盖层组(z 序 = 登记序:图例 < 明细回看 < 节点 < 终局 < 商店 < 调整板)。
|
||||
# 返回 {legend_overlay, review_overlay, node_overlay, end_overlay, shop_overlay, tune_panel};调用方按本序 addChild。
|
||||
static func build_overlays(host: Control, db, base_atk: int, base_hp: int) -> Dictionary:
|
||||
# 模态覆盖层组(z 序 = 登记序:图例 < 明细回看 < 节点 < 终局 < 商店)。
|
||||
# 返回 {legend_overlay, review_overlay, node_overlay, end_overlay, shop_overlay, camp_overlay};调用方按本序 addChild。
|
||||
# (调整板已随迭代 14.5 调试整合批退役——调试浮窗由组合根直构挂树序最末,见 main._build_ui)
|
||||
static func build_overlays(host: Control, db) -> Dictionary:
|
||||
var legend_overlay := LegendOverlay.new(int(db.action_economy.rap_refresh_cost)) # 打磨包 2026-09-29——RAP 行表值注入
|
||||
host.add_child(legend_overlay)
|
||||
|
||||
@@ -80,14 +81,10 @@ static func build_overlays(host: Control, db, base_atk: int, base_hp: int) -> Di
|
||||
var shop_overlay := ShopOverlay.new()
|
||||
host.add_child(shop_overlay)
|
||||
|
||||
# 营地覆盖层(元进度实现批 2026-09-21——主菜单营地入口兑付呈现;开合仿 TunePanel 与开始层互斥)
|
||||
# 营地覆盖层(元进度实现批 2026-09-21——主菜单营地入口兑付呈现;开合与开始层互斥仿设置面先例)
|
||||
var camp_overlay := CampOverlay.new()
|
||||
host.add_child(camp_overlay)
|
||||
|
||||
var tune_panel := TunePanel.new(db, base_atk, base_hp)
|
||||
tune_panel.visible = false # 显式初始化——原版依赖"被不透明开始层遮蔽"的树序巧合(缺陷⑤家族);模态锁输入以 visible 为准
|
||||
host.add_child(tune_panel)
|
||||
|
||||
return {
|
||||
"legend_overlay": legend_overlay,
|
||||
"review_overlay": review_overlay,
|
||||
@@ -95,12 +92,12 @@ static func build_overlays(host: Control, db, base_atk: int, base_hp: int) -> Di
|
||||
"end_overlay": end_overlay,
|
||||
"shop_overlay": shop_overlay,
|
||||
"camp_overlay": camp_overlay,
|
||||
"tune_panel": tune_panel,
|
||||
}
|
||||
|
||||
|
||||
# 开始覆盖层(返回 {overlay, box, seed_edit, lvbtn, tunebtn, dbgbtn}——按钮接线归组合根;
|
||||
# 单场遭遇用户入口已删(2026-09-13 用户裁决——单场原语仅探针经 debug_session.start_single 使用))
|
||||
# 开始覆盖层(返回 {overlay, box, lvbtn, resumebtn, campbtn, settingsbtn, quitbtn, dbgbtn}——按钮接线归组合根;
|
||||
# 迭代 14.5 调试整合批:随机种子/数值调整板/两层调试三散件撤出主按钮组,收进调试浮窗——
|
||||
# 本层只留右下角「调试」角标入口(DS_DEBUG=1 门控归组合根),dbgbtn 即该角标)
|
||||
static func build_start_overlay(host: Control, db = null) -> Dictionary:
|
||||
var overlay := overlay_bg(host, UiKit.BG_OVERLAY)
|
||||
# 石纹底噪底层(样张 v2 冻结批 T2——z 序=dim 之上/内容之下;缺位不挂即回退平色)
|
||||
@@ -121,26 +118,12 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
|
||||
box.add_child(sub)
|
||||
box.add_child(HSeparator.new())
|
||||
|
||||
var seed_row := HBoxContainer.new()
|
||||
box.add_child(seed_row)
|
||||
# 字号下限(v3.5 批 B3——正文 ≥16)+暗底显式暖白
|
||||
var seed_label := UiKit.label("随机种子:", 16, false, UiKit.WARM)
|
||||
seed_row.add_child(seed_label)
|
||||
var seed_edit := LineEdit.new()
|
||||
seed_edit.text = "42"
|
||||
seed_edit.custom_minimum_size = Vector2(120, 0)
|
||||
seed_row.add_child(seed_edit)
|
||||
|
||||
# 唯一试玩入口 = 正式「开始冒险」(三关序列);单关测试直入口(L2/L3)退役(2026-09-23 用户拍板)
|
||||
var resumebtn := UiKit.button("▶ 继续上局(自最近停点恢复)") # 迭代 8 卡②——有断点才亮(可见性归组合根刷新)
|
||||
resumebtn.visible = false
|
||||
box.add_child(resumebtn)
|
||||
var lvbtn := UiKit.button("▶ 开始冒险(三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城)")
|
||||
box.add_child(lvbtn)
|
||||
var tunebtn := UiKit.button("测试用 · 角色数值调整板(模拟天赋树属性提升)")
|
||||
box.add_child(tunebtn)
|
||||
var dbgbtn := UiKit.button("调试 · 连续关卡两层(HP 关内延续)")
|
||||
box.add_child(dbgbtn)
|
||||
var campbtn := UiKit.button("营地 · 永久强化(钥石换永久属性——跨局成长账本)") # 元进度实现批——主菜单营地入口(双入口框架的主菜单一侧)
|
||||
box.add_child(campbtn)
|
||||
var settingsbtn := UiKit.button("设置(音量 / 全屏 / 减动效)") # 迭代 8 卡④——最小设置面入口
|
||||
@@ -149,6 +132,13 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
|
||||
var quitbtn := UiKit.button("退出游戏")
|
||||
box.add_child(quitbtn)
|
||||
|
||||
# 迭代 14.5 调试整合批——调试入口收右下角标(与主按钮组非平级;DS_DEBUG=1 点亮,可见性归组合根)。
|
||||
# margin 16px 角距;字号降档与主按钮拉开层级
|
||||
var dbgbtn := UiKit.button("调试")
|
||||
dbgbtn.add_theme_font_size_override("font_size", 13)
|
||||
dbgbtn.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 16)
|
||||
overlay.add_child(dbgbtn)
|
||||
|
||||
# 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化")
|
||||
var help_text := "玩法:每轮 %d AP——挖开(1AP)/插旗(1AP)/移动(免费)/连锁(免费)。\n每个非封锁格都藏一种格面资源(增伤/护甲强化/回血/爆裂/削弱)。开安全格、标中雷 = 正向兑付;\n开雷格、标错安全格 = 负向兑付——全部在轮末结算逐行兑现;吃掷点的基础攻击按护甲等级判定,无 miss、最低保底 1 点。\n停手:剩余 AP 转存 RAP;弃图刷新:RAP−%d 当场换图继续挖(每轮剩 %d 次)。\n敌人全灭胜、主角倒下负。悬停可看三态光标与可挖域微光。\n地形变异:第二关起 Boss 图带整图变异(贫矿脉——回复与护甲资源减少、攻击资源增多;开战横幅与 HUD 角标常驻提示)。" % [
|
||||
int(db.action_economy.ap_per_round), int(db.action_economy.rap_refresh_cost), int(db.action_economy.refresh_cap_per_round)]
|
||||
@@ -156,9 +146,9 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary:
|
||||
var help := UiKit.label(help_text, 16, false, UiKit.WARM)
|
||||
box.add_child(help)
|
||||
|
||||
return {"overlay": overlay, "box": box, "seed_edit": seed_edit,
|
||||
"lvbtn": lvbtn, "resumebtn": resumebtn, "tunebtn": tunebtn, "dbgbtn": dbgbtn,
|
||||
"campbtn": campbtn, "settingsbtn": settingsbtn, "quitbtn": quitbtn}
|
||||
return {"overlay": overlay, "box": box,
|
||||
"lvbtn": lvbtn, "resumebtn": resumebtn,
|
||||
"campbtn": campbtn, "settingsbtn": settingsbtn, "quitbtn": quitbtn, "dbgbtn": dbgbtn}
|
||||
|
||||
|
||||
# 调试两层模式的层间过渡覆盖层(历史入口专用)。返回 {overlay, label, next_btn}——接线归组合根
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# 三柜台列(属性锻造/道具工坊/奖励格图鉴,头带深棕+米色板身+内嵌行板,暗底→亮板双色墨制)+
|
||||
# 底栏关闭钮/操作注记;最近冒险收底栏条带。信号面/投影契约零变化:buy_requested(attr)/closed、
|
||||
# open_camp(data)/refresh_camp(data)、_forge_rows 行结构 {attr,level_l,price_l,btn}(探针依赖)。
|
||||
# 挂接方式:开合与开始层互斥仿 TunePanel 先例(开始覆盖层非模态且树序在后——打开本层前由组合根
|
||||
# 挂接方式:开合与开始层互斥仿设置面先例(开始覆盖层非模态且树序在后——打开本层前由组合根
|
||||
# 隐藏开始层,规范 2.3 遮挡纪律)。
|
||||
# 高内聚边界:纯视图 setter 面——账本快照经组合根喂入(MetaProgression 只读投影),购买/关闭
|
||||
# 意图经信号外发——零核心写调用、零 MetaProgression 持有。
|
||||
|
||||
@@ -104,7 +104,7 @@ const DOT_OFF := PANEL_BORDER
|
||||
|
||||
|
||||
# ── 减动效(battle.md §Transitions 内建承诺:开启时时长减半;结算逐行兑现为信息载体降速不跳过)──
|
||||
# 切片期入口 = TunePanel 开关(设置独立于存档两分制——正式设置层载体随设置批落位)
|
||||
# 唯一入口 = 设置面开关(迭代 8 卡④ 转正;切片期调整板开关已随其退役,调整板本体 14.5 收进调试浮窗)
|
||||
static var motion_scale := 1.0 # 1.0 常态 / 0.5 减动效
|
||||
|
||||
# 全部呈现层 tween 时长经本函数包装——新增动效一律 UiKit.motion(秒),禁再写裸时长字面量
|
||||
@@ -232,7 +232,7 @@ static func modal_shell(parent: Control, dim_color: Color, min_size := Vector2.Z
|
||||
return {"dim": dim, "center": center, "panel": panel, "box": box}
|
||||
|
||||
|
||||
# 属性百分比合成(main._debug_hero_override 与 TunePanel 生效值预览共用单点——两处同式实现收口)
|
||||
# 属性百分比合成(main._debug_hero_override 与调试浮窗生效值预览共用单点——两处同式实现收口)
|
||||
static func scaled(base: int, pct: int) -> int:
|
||||
return maxi(1, int(round(float(base) * (100.0 + float(pct)) / 100.0)))
|
||||
|
||||
|
||||
Reference in new issue
Block a user