From 566e3bdaa92b8b6fec6bf0156d35eea7df052f9e Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 5 Oct 2026 01:56:10 +0800 Subject: [PATCH] =?UTF-8?q?M2=20=E6=A0=87=E9=A2=98=E5=B1=8F=E5=8F=8C?= =?UTF-8?q?=E5=88=97=E9=87=8D=E6=9E=84=EF=BC=88UI=E8=90=BD=E7=A0=81?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=B3=A2=EF=BC=89=E2=80=94=E2=80=94=E5=B7=A6?= =?UTF-8?q?=E6=93=8D=E4=BD=9C56%(=E5=88=86=E7=BB=84+=E5=8A=A8=E8=AF=8D?= =?UTF-8?q?=E5=8C=96+tooltip)+=E5=8F=B3=E7=AB=8B=E7=BB=98=E7=9C=8B?= =?UTF-8?q?=E5=8F=B0/=E9=80=9F=E8=A7=88=E7=89=8C(=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E5=85=A8=E6=96=87=E4=BF=9D=E7=95=99=E8=A1=A8=E5=80=BC=E9=A9=B1?= =?UTF-8?q?=E5=8A=A8)=EF=BC=9Blvbtn=E5=8D=87CANDLE=E4=B8=BB=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E9=92=AE=EF=BC=9Broot=E6=8C=82tooltip=E5=85=A8?= =?UTF-8?q?=E7=AB=99=E4=B8=BB=E9=A2=98=EF=BC=9B=E8=BF=94=E5=9B=9E=E9=94=AE?= =?UTF-8?q?=E9=9B=86=E4=B8=8D=E5=8F=98=E7=BB=84=E5=90=88=E6=A0=B9=E9=9B=B6?= =?UTF-8?q?=E6=94=B9=E3=80=82=E9=97=B8=3D=E5=86=92=E7=83=9F747/0+probe=5Fg?= =?UTF-8?q?ate=E5=85=A8=E7=BB=BF+layout=200?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/presentation/ui_assembler.gd | 88 ++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 14 deletions(-) diff --git a/game/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd index b39f5748..9eb67e83 100644 --- a/game/presentation/ui_assembler.gd +++ b/game/presentation/ui_assembler.gd @@ -97,9 +97,13 @@ static func build_overlays(host: Control, db) -> Dictionary: # 开始覆盖层(返回 {overlay, box, lvbtn, resumebtn, campbtn, settingsbtn, quitbtn, dbgbtn}——按钮接线归组合根; # 迭代 14.5 调试整合批:随机种子/数值调整板/两层调试三散件撤出主按钮组,收进调试浮窗—— -# 本层只留右下角「调试」角标入口(DS_DEBUG=1 门控归组合根),dbgbtn 即该角标) +# 本层只留右下角「调试」角标入口(DS_DEBUG=1 门控归组合根),dbgbtn 即该角标。 +# UI 落码批 M2(2026-10-04):单列 VBox→双列(左操作 56% + 右舞台/帮助牌);按钮动词化+悬停解释 +#(解释全迁 tooltip,G5);lvbtn 升主操作钮(烛光黄 CANDLE);右列=立绘看台+玩法速览牌(帮助全文保留, +# 表值驱动不变);root 挂 UiKit.tooltip_theme() 全树生效。返回键集不变,组合根接线零改) static func build_start_overlay(host: Control, db = null) -> Dictionary: - var overlay := overlay_bg(host, UiKit.BG_OVERLAY) + var overlay := overlay_bg(host, UiKit.BG_BRIGHT) + overlay.theme = UiKit.tooltip_theme() # 石纹底噪底层(样张 v2 冻结批 T2——z 序=dim 之上/内容之下;缺位不挂即回退平色) var bd_tex := UiKit.load_tex(UiKit.TEX_BACKDROP_STONE) if bd_tex != null: @@ -110,23 +114,44 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: bd.set_anchors_preset(Control.PRESET_FULL_RECT) bd.mouse_filter = Control.MOUSE_FILTER_IGNORE overlay.add_child(bd) - var box := overlay_box(overlay) - var title := UiKit.label("Dungeon Sweeper", 34, true, UiKit.WARM) + # 双列骨架(M2):左=操作列 56% / 右=舞台+速览 + var cols := HBoxContainer.new() + cols.set_anchors_preset(Control.PRESET_FULL_RECT) + cols.add_theme_constant_override("separation", 32) + var pad := MarginContainer.new() + pad.set_anchors_preset(Control.PRESET_FULL_RECT) + for side in ["margin_left", "margin_right", "margin_top", "margin_bottom"]: + pad.add_theme_constant_override(side, 56) + cols.add_child(pad) + overlay.add_child(cols) + var box := VBoxContainer.new() + box.size_flags_horizontal = Control.SIZE_EXPAND_FILL + box.size_flags_stretch_ratio = 1.4 + box.add_theme_constant_override("separation", 10) + pad.add_child(box) + + var title := UiKit.label("Dungeon Sweeper", 40, true, Color8(246, 238, 218)) box.add_child(title) - # 对比度修复(v3.5 批 B3——WARM_SOFT 对深石底实测 3.54:1→暖白 ≥6:1) - var sub := UiKit.label("战斗屏战斗屏改造批 —— 扫雷的因,逐行兑现的果", 16, false, UiKit.WARM) + var sub := UiKit.label("扫雷的因 · 逐行兑现的果", 16, false, UiKit.WARM_SOFT) box.add_child(sub) box.add_child(HSeparator.new()) + # 组帽·冒险(M2 分组) + box.add_child(UiKit.label("── 冒 险 ──", 12, false, UiKit.WARM_FAINT)) # 唯一试玩入口 = 正式「开始冒险」(三关序列);单关测试直入口(L2/L3)退役(2026-09-23 用户拍板) - var resumebtn := UiKit.button("▶ 继续上局(自最近停点恢复)") # 迭代 8 卡②——有断点才亮(可见性归组合根刷新) + var resumebtn := UiKit.button("▶ 继续上局") # 迭代 8 卡②——有断点才亮(可见性与关数文案归组合根刷新) + resumebtn.tooltip_text = "自最近停点恢复" resumebtn.visible = false box.add_child(resumebtn) - var lvbtn := UiKit.button("▶ 开始冒险(三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城)") + var lvbtn := UiKit.primary_button("▶ 开始冒险", "三关连探:地精洞窟 → 幽暗地域 → 灰矮人矿城") box.add_child(lvbtn) - var campbtn := UiKit.button("营地 · 永久强化(钥石换永久属性——跨局成长账本)") # 元进度实现批——主菜单营地入口(双入口框架的主菜单一侧) + + # 组帽·营地与系统 + box.add_child(UiKit.label("── 营地与系统 ──", 12, false, UiKit.WARM_FAINT)) + var campbtn := UiKit.verb_button("营地", UiKit.TEX_ICON_KEYSTONE, "永久强化:钥石换永久属性——跨局成长账本") # 元进度实现批——主菜单营地入口 box.add_child(campbtn) - var settingsbtn := UiKit.button("设置(音量 / 全屏 / 减动效)") # 迭代 8 卡④——最小设置面入口 + var settingsbtn := UiKit.button("设置") # 迭代 8 卡④——最小设置面入口 + settingsbtn.tooltip_text = "音量 / 全屏 / 减动效" box.add_child(settingsbtn) # 二轮修改批 D1(2026-09-29 用户目检裁决):退出游戏与设置同层并行——只在一级菜单出现 var quitbtn := UiKit.button("退出游戏") @@ -139,12 +164,47 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: dbgbtn.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 16) overlay.add_child(dbgbtn) - # 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化") + # 右列:立绘看台 + 玩法速览牌(M2——帮助全文保留表值驱动,仅容器化;内容含地形变异段不删) + var right := VBoxContainer.new() + right.size_flags_horizontal = Control.SIZE_EXPAND_FILL + right.add_theme_constant_override("separation", 18) + right.alignment = BoxContainer.ALIGNMENT_CENTER + pad.add_child(right) + var stage := VBoxContainer.new() + stage.alignment = BoxContainer.ALIGNMENT_CENTER + var foe_row := HBoxContainer.new() + foe_row.alignment = BoxContainer.ALIGNMENT_CENTER + foe_row.add_theme_constant_override("separation", 36) + for cfg in [[UiKit.TEX_ENEMY_GOBLIN, 46, 96], [UiKit.TEX_HERO_PORTRAIT, 138, 144], [UiKit.TEX_ENEMY_OGRE_CHIEF, 80, 96]]: + var tr := TextureRect.new() + var tex := UiKit.load_tex(cfg[0]) + if tex != null: + tr.texture = tex + tr.custom_minimum_size = Vector2(cfg[1], cfg[2]) + tr.expand_mode = TextureRect.EXPAND_IGNORE_SIZE + tr.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + tr.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST + if cfg[0] != UiKit.TEX_HERO_PORTRAIT: + tr.modulate = Color(0.7, 0.7, 0.7, 0.4) # 敌影剪影退后(§6.1 立绘>背景) + foe_row.add_child(tr) + stage.add_child(foe_row) + var pedestal := Panel.new() + var ped_sb := UiKit.panel_flat(Color8(90, 74, 56), Color8(58, 46, 34), 17, 2) + pedestal.add_theme_stylebox_override("panel", ped_sb) + pedestal.custom_minimum_size = Vector2(240, 22) + pedestal.size_flags_horizontal = Control.SIZE_SHRINK_CENTER + stage.add_child(pedestal) + right.add_child(stage) + # 玩法帮助文案(表值驱动——2026-09-16 AP 压速批遗留硬编码 8 随手修正;护甲等级掷点批同步"减伤"→"护甲强化"; + # M2 容器化=石板牌承载〔文字禁直接压纹理/深底——§7.2〕,内容逐字保留含地形变异段) 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)] - # 字号下限(v3.5 批 B3——正文 ≥16);对比度修复(v3.5 批 B3——WARM_FAINT 对深石底实测 2.58:1→暖白 ≥6:1;暗底双色墨制) - var help := UiKit.label(help_text, 16, false, UiKit.WARM) - box.add_child(help) + var help_plate := PanelContainer.new() + help_plate.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(14, 10, 14, 10))) + help_plate.size_flags_horizontal = Control.SIZE_SHRINK_CENTER + var help := UiKit.label(help_text, 16, false, UiKit.INK) + help_plate.add_child(help) + right.add_child(help_plate) return {"overlay": overlay, "box": box, "lvbtn": lvbtn, "resumebtn": resumebtn,