diff --git a/design/art/art-bible.md b/design/art/art-bible.md index 07e07fa8..7a2e29c4 100644 --- a/design/art/art-bible.md +++ b/design/art/art-bible.md @@ -421,7 +421,8 @@ - **字体**:全局一套像素字——拉丁候选 Kenney Fonts(CC0)、中文候选缝合像素字体 Fusion Pixel(OFL)(清单 §3.6);墨色走主墨系(§7.2);换字体 = 全局决策。 - **字号**:像素字体**整数倍缩放,禁非整数缩放**(像素模糊);下限(1280×800 基座;2026-09-29 v3.0 对齐 ux-designer PC 规范):棋盘数字 ≥18px(公式 = max(18, ceil(格边长 × 0.5))不变)、**正文/明细 ≥16px、tooltip ≥14px**(旧 14/13px 下限退役——1280×800 低于 1080p 基准,同字号实际更小)。 -- **小字号豁免条款(2026-10-06 UI 设计对齐批 P11+Q5 甲,合并单条不开两口子)**:下款两类**豁免于本节下限**——①**条带内读数**:压在窄条带(血条/进度条等 ≤12px 高带)内居中的数字,受条带高度物理约束,维持 11px 下限,且必须按 §7.2 垫素色牌后计对比(实装=B 区站桩血数 11px 压 HP_BAR_BACK 牌 14.3:1);②**装饰性 overline/caption**:不承载须精确读取的信息、仅作分区标题或氛围小字者,可至 **12px**。两类豁免均须逐处登记清单(条带内读数清单=B 区站桩血数一处;装饰 caption 逐处清单随本批字号档位卡落本节),清单外的 11-13px 文字一律按正文/tooltip 下限提档。 +- **字号档位表(2026-10-06 UI 设计对齐批 P3 甲——WB G1 六档)**:全站 UI 文字字号只经 `UiKit.FS_*` 单点取值,裸数字字号退役——`FS_CAPTION 12`/`FS_HINT 14`/`FS_BODY 16`/`FS_SUB 18`/`FS_TITLE 24`/`FS_H1 34`。旧 15 实测档按就近归档收编(10/11/12→CAPTION、13/14→HINT、15/16→BODY、17/18/20→SUB、21/22/24/26→TITLE、32/40→H1;T0 普查 107 静态位点全归档,数据驱动动态字号位点除外);棋盘数字公式 `maxi(18, ceil(格边长×0.5))` 与站桩血数 11px(条带内读数豁免)不入表。注:六档相邻比 12→14→16→18 三段 <1.25×,系 P3 裁决值优先于字重纪律的档差参考线,档差参考线对新层级设计仍有效。 +- **小字号豁免条款(2026-10-06 UI 设计对齐批 P11+Q5 甲,合并单条不开两口子)**:下款两类**豁免于本节下限**——①**条带内读数**:压在窄条带(血条/进度条等 ≤12px 高带)内居中的数字,受条带高度物理约束,维持 11px 下限,且必须按 §7.2 垫素色牌后计对比(实装=B 区站桩血数 11px 压 HP_BAR_BACK 牌 14.3:1);②**装饰性 overline/caption**:不承载须精确读取的信息、仅作分区标题或氛围小字者,可至 **12px**。**两类豁免逐处清单(2026-10-06 T6 判定落定)**:条带内读数=B 区站桩血数一处;装饰 caption 档(FS_CAPTION)在册面=主菜单分组 overline×2(「── 冒 险 ──」「── 营地与系统 ──」)/棋盘底操作提示条/营地柜台说明文与结构位预留注记/图例 RAP 词条说明/设置警示文两处/关卡地图底栏组标(生命/属性/特性)与分隔系/站桩消散提示/B 区状态槽微计数(×N●○)/bcard 脚注/RAP 反馈行/刷新余量徽标——清单外 11-13px 文字一律按正文/tooltip 下限提档,新增 caption 位须同批增补本清单。 - **字重纪律(2026-09-29 v3.0 修订)**:层级手段解禁为三件——**字号档差(相邻层级 ≥1.25×)+ 墨色深浅 +(字体支持时)字重两档**;数字禁描边/阴影伪加粗不变(字形为唯一数值载体,§4.1 同源纪律)。 ### 7.5 营地界面 diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 7977e027..96605e33 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -335,7 +335,7 @@ func _build_ui() -> void: func _fatal_screen(msg: String) -> void: - var l := UiKit.label(msg, 20, true, UiKit.RED_ALERT) + var l := UiKit.label(msg,UiKit.FS_SUB, true, UiKit.RED_ALERT) l.set_anchors_preset(Control.PRESET_CENTER) add_child(l) diff --git a/game/presentation/ui_assembler.gd b/game/presentation/ui_assembler.gd index bfb75afb..ec843713 100644 --- a/game/presentation/ui_assembler.gd +++ b/game/presentation/ui_assembler.gd @@ -128,14 +128,14 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: box.add_theme_constant_override("separation", 10) pad.add_child(box) - var title := UiKit.label("Dungeon Sweeper", 40, true, UiKit.INK_ON_DEEP) + var title := UiKit.label("Dungeon Sweeper",UiKit.FS_H1, true, UiKit.INK_ON_DEEP) box.add_child(title) - var sub := UiKit.label("扫雷的因 · 逐行兑现的果", 16, false, UiKit.WARM_SOFT) + var sub := UiKit.label("扫雷的因 · 逐行兑现的果",UiKit.FS_BODY, false, UiKit.WARM_SOFT) box.add_child(sub) box.add_child(HSeparator.new()) # 组帽·冒险(M2 分组) - box.add_child(UiKit.label("── 冒 险 ──", 12, false, UiKit.WARM_FAINT)) + box.add_child(UiKit.label("── 冒 险 ──",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT)) # 唯一试玩入口 = 正式「开始冒险」(三关序列);单关测试直入口(L2/L3)退役(2026-09-23 用户拍板) var resumebtn := UiKit.button("▶ 继续上局") # 迭代 8 卡②——有断点才亮(可见性与关数文案归组合根刷新) resumebtn.tooltip_text = "自最近停点恢复" @@ -145,7 +145,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: box.add_child(lvbtn) # 组帽·营地与系统 - box.add_child(UiKit.label("── 营地与系统 ──", 12, false, UiKit.WARM_FAINT)) + box.add_child(UiKit.label("── 营地与系统 ──",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT)) var campbtn := UiKit.verb_button("营地", UiKit.TEX_ICON_KEYSTONE, "永久强化:钥石换永久属性——跨局成长账本") # 元进度实现批——主菜单营地入口 box.add_child(campbtn) var settingsbtn := UiKit.button("设置") # 迭代 8 卡④——最小设置面入口 @@ -158,7 +158,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: # 迭代 14.5 调试整合批——调试入口收右下角标(与主按钮组非平级;DS_DEBUG=1 点亮,可见性归组合根)。 # margin 16px 角距;字号降档与主按钮拉开层级 var dbgbtn := UiKit.button("调试", 0.0) # 角标豁免宽度基准(0=不设 min/flags——角落小件) - dbgbtn.add_theme_font_size_override("font_size", 13) + dbgbtn.add_theme_font_size_override("font_size", UiKit.FS_HINT) dbgbtn.set_anchors_and_offsets_preset(Control.PRESET_BOTTOM_RIGHT, Control.PRESET_MODE_MINSIZE, 16) overlay.add_child(dbgbtn) @@ -201,7 +201,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: 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) + var help := UiKit.label(help_text,UiKit.FS_BODY, false, UiKit.INK) help_plate.add_child(help) right.add_child(help_plate) @@ -214,7 +214,7 @@ static func build_start_overlay(host: Control, db = null) -> Dictionary: static func build_inter_overlay(host: Control) -> Dictionary: var overlay := overlay_bg(host, Color(0, 0, 0, 0.6)) var box := overlay_box(overlay) - var label := UiKit.label("", 24, true, UiKit.WARM) + var label := UiKit.label("",UiKit.FS_TITLE, true, UiKit.WARM) box.add_child(label) var next_btn := UiKit.button("进入下一层") box.add_child(next_btn) diff --git a/game/presentation/views/ap_bar_view.gd b/game/presentation/views/ap_bar_view.gd index a531390b..743595cf 100644 --- a/game/presentation/views/ap_bar_view.gd +++ b/game/presentation/views/ap_bar_view.gd @@ -51,7 +51,7 @@ func _init() -> void: _dots.add_theme_constant_override("separation", 3) _dots.size_flags_vertical = Control.SIZE_SHRINK_CENTER row.add_child(_dots) - _ap_label = UiKit.label("AP 0/0", 16, true) + _ap_label = UiKit.label("AP 0/0",UiKit.FS_BODY, true) _ap_label.size_flags_vertical = Control.SIZE_SHRINK_CENTER row.add_child(_ap_label) @@ -71,10 +71,10 @@ func _init() -> void: _rap_dots.add_theme_constant_override("separation", 2) _rap_dots.size_flags_vertical = Control.SIZE_SHRINK_CENTER row.add_child(_rap_dots) - _rap_label = UiKit.label("RAP 0", 14, true, UiKit.INK_LABEL) # 显式传色(UI 设计对齐批 N1-7——T0 实测对 PANEL_DATA 10.4:1 已合规,显式化仅为确定性加固,值不变) + _rap_label = UiKit.label("RAP 0",UiKit.FS_HINT, true, UiKit.INK_LABEL) # 显式传色(UI 设计对齐批 N1-7——T0 实测对 PANEL_DATA 10.4:1 已合规,显式化仅为确定性加固,值不变) _rap_label.size_flags_vertical = Control.SIZE_SHRINK_CENTER row.add_child(_rap_label) - _rap_feedback = UiKit.label("", 11, false, UiKit.STONE_FAINT) + _rap_feedback = UiKit.label("",UiKit.FS_CAPTION, false, UiKit.STONE_FAINT) _rap_feedback.size_flags_vertical = Control.SIZE_SHRINK_CENTER row.add_child(_rap_feedback) @@ -83,7 +83,7 @@ func _init() -> void: _confirm_row.add_theme_constant_override("separation", 4) _confirm_row.visible = false row.add_child(_confirm_row) - _confirm_lab = UiKit.label("RAP−%d · 旧板旗作废" % refresh_cost, 14, true, COL_INK) + _confirm_lab = UiKit.label("RAP−%d · 旧板旗作废" % refresh_cost,UiKit.FS_HINT, true, COL_INK) _confirm_row.add_child(_confirm_lab) var confirm_btn := UiKit.button("确认弃图", 0.0) # HUD 顶条紧凑钮豁免宽度基准 confirm_btn.pressed.connect(_disarm_and_fire) @@ -102,7 +102,7 @@ func _init() -> void: _btn_refresh = UiKit.button("弃图刷新", 0.0) # HUD 顶条紧凑钮豁免宽度基准 _btn_refresh.pressed.connect(_on_refresh_pressed) refresh_box.add_child(_btn_refresh) - _refresh_sub = UiKit.label("RAP−%d · 剩 0 次" % refresh_cost, 14, false, UiKit.INK_LABEL) + _refresh_sub = UiKit.label("RAP−%d · 剩 0 次" % refresh_cost,UiKit.FS_HINT, false, UiKit.INK_LABEL) _refresh_sub.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER refresh_box.add_child(_refresh_sub) diff --git a/game/presentation/views/battle_end_overlay.gd b/game/presentation/views/battle_end_overlay.gd index c565a787..445873cf 100644 --- a/game/presentation/views/battle_end_overlay.gd +++ b/game/presentation/views/battle_end_overlay.gd @@ -55,7 +55,7 @@ func _init() -> void: seal_img.size_flags_vertical = Control.SIZE_SHRINK_CENTER seal_img.mouse_filter = Control.MOUSE_FILTER_IGNORE _seal.add_child(seal_img) - _verdict = UiKit.label("", 24, true, UiKit.INK_TITLE) + _verdict = UiKit.label("",UiKit.FS_TITLE, true, UiKit.INK_TITLE) _verdict.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _verdict.size_flags_vertical = Control.SIZE_SHRINK_CENTER header.add_child(_verdict) @@ -75,14 +75,14 @@ func _init() -> void: _rows_box.add_theme_constant_override("separation", 6) _rows_box.visible = false box.add_child(_rows_box) - _gp_row = UiKit.label("", 17, true, UiKit.GOLD_DEEP) + _gp_row = UiKit.label("",UiKit.FS_SUB, true, UiKit.GOLD_DEEP) _gp_row.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _rows_box.add_child(_gp_row) - _ks_row = UiKit.label("", 15, true, UiKit.INK_LABEL) + _ks_row = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_LABEL) _ks_row.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _ks_row.visible = false _rows_box.add_child(_ks_row) - _bonus_row_l = UiKit.label("", 14, false, UiKit.INK_LABEL) + _bonus_row_l = UiKit.label("",UiKit.FS_HINT, false, UiKit.INK_LABEL) _bonus_row_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _bonus_row_l.visible = false _rows_box.add_child(_bonus_row_l) diff --git a/game/presentation/views/battle_log_view.gd b/game/presentation/views/battle_log_view.gd index e803b15e..b3ebdd88 100644 --- a/game/presentation/views/battle_log_view.gd +++ b/game/presentation/views/battle_log_view.gd @@ -39,12 +39,12 @@ func _init(db_ref) -> void: var head := HBoxContainer.new() vb.add_child(head) # 对比度修复(v3.5 批 B3 2026-09-30——明细条灰字对深灰底实测 2.63:1):暗底双色墨制=暖白族 - _summary = UiKit.label("", 16, false, UiKit.WARM) + _summary = UiKit.label("",UiKit.FS_BODY, false, UiKit.WARM) _summary.custom_minimum_size = Vector2(0, BAND_H_DIG - 4) _summary.clip_text = true _summary.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS head.add_child(_summary) - _hint = UiKit.label("上轮摘要(回看归「生涯」)", 14, false, UiKit.WARM) # 辅助提示(≥14 辅助档)随上暖白 + _hint = UiKit.label("上轮摘要(回看归「生涯」)",UiKit.FS_HINT, false, UiKit.WARM) # 辅助提示(≥14 辅助档)随上暖白 _hint.size_flags_horizontal = Control.SIZE_SHRINK_END head.add_child(_hint) _log = RichTextLabel.new() diff --git a/game/presentation/views/battle_stage_view.gd b/game/presentation/views/battle_stage_view.gd index 17d8f5a0..5ff7dadf 100644 --- a/game/presentation/views/battle_stage_view.gd +++ b/game/presentation/views/battle_stage_view.gd @@ -93,7 +93,7 @@ func _init(db_ref) -> void: narr_plate.add_theme_stylebox_override("panel", UiKit.panel_skinned(Vector4(12, 4, 12, 4))) narr_plate.size_flags_horizontal = Control.SIZE_SHRINK_CENTER vb.add_child(narr_plate) - round_label = UiKit.label("第 — 轮 · —", 15, true, UiKit.INK_TITLE) + round_label = UiKit.label("第 — 轮 · —",UiKit.FS_BODY, true, UiKit.INK_TITLE) round_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER narr_plate.add_child(round_label) @@ -109,7 +109,7 @@ func _init(db_ref) -> void: var center_col := VBoxContainer.new() center_col.alignment = BoxContainer.ALIGNMENT_CENTER center.add_child(center_col) - stage_center = UiKit.label(STAGE_CENTER_HINT, 13, false, UiKit.WARM_SOFT) # 暗底双色墨制(原 STONE_FAINT 对暗底不可读) + stage_center = UiKit.label(STAGE_CENTER_HINT,UiKit.FS_HINT, false, UiKit.WARM_SOFT) # 暗底双色墨制(原 STONE_FAINT 对暗底不可读) stage_center.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER center_col.add_child(stage_center) _row.add_child(center) diff --git a/game/presentation/views/board_fx_view.gd b/game/presentation/views/board_fx_view.gd index 84df2360..418d2d46 100644 --- a/game/presentation/views/board_fx_view.gd +++ b/game/presentation/views/board_fx_view.gd @@ -17,7 +17,7 @@ var _banner: Label func _init() -> void: mouse_filter = Control.MOUSE_FILTER_IGNORE set_anchors_preset(Control.PRESET_FULL_RECT) - _banner = UiKit.label("", 26, true, COL_GOLD) + _banner = UiKit.label("",UiKit.FS_TITLE, true, COL_GOLD) _banner.set_anchors_preset(Control.PRESET_CENTER_TOP) _banner.grow_horizontal = Control.GROW_DIRECTION_BOTH _banner.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER diff --git a/game/presentation/views/board_zone_view.gd b/game/presentation/views/board_zone_view.gd index efa4208c..776ce1a1 100644 --- a/game/presentation/views/board_zone_view.gd +++ b/game/presentation/views/board_zone_view.gd @@ -49,7 +49,7 @@ func _init() -> void: hint.size_flags_horizontal = Control.SIZE_SHRINK_CENTER hint.mouse_filter = Control.MOUSE_FILTER_IGNORE vb.add_child(hint) - var hl := UiKit.label("左键 挖掘 / 移动 · 右键 封印(不可逆) · 同格双击 快开", 12, false, UiKit.WARM_FAINT) + var hl := UiKit.label("左键 挖掘 / 移动 · 右键 封印(不可逆) · 同格双击 快开",UiKit.FS_CAPTION, false, UiKit.WARM_FAINT) hint.add_child(hl) # 信号转发(组合根只接线一处) board_view.action_requested.connect(_forward_action) diff --git a/game/presentation/views/camp_overlay_view.gd b/game/presentation/views/camp_overlay_view.gd index 07659967..88de1ed9 100644 --- a/game/presentation/views/camp_overlay_view.gd +++ b/game/presentation/views/camp_overlay_view.gd @@ -71,9 +71,9 @@ func _init() -> void: top.add_child(plaque) var plaque_col := VBoxContainer.new() plaque.add_child(plaque_col) - var title := UiKit.label("营地 · 永久强化", 22, true, UiKit.INK_TITLE) + var title := UiKit.label("营地 · 永久强化",UiKit.FS_TITLE, true, UiKit.INK_TITLE) plaque_col.add_child(title) - var sub := UiKit.label("跨局成长账本——钥石换永久属性", 13, false, UiKit.STONE) + var sub := UiKit.label("跨局成长账本——钥石换永久属性",UiKit.FS_HINT, false, UiKit.STONE) plaque_col.add_child(sub) var spacer := Control.new() spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -90,7 +90,7 @@ func _init() -> void: var keystone_icon := UiKit.icon_rect(UiKit.TEX_ICON_KEYSTONE, 20) # 缺位 null → 纯文本回退(M3 18→20) if keystone_icon != null: bal_row.add_child(keystone_icon) - _balance_label = UiKit.label("钥石 0", 18, true, UiKit.INK_ON_GOLD) + _balance_label = UiKit.label("钥石 0",UiKit.FS_SUB, true, UiKit.INK_ON_GOLD) bal_row.add_child(_balance_label) # ── 三柜台列(方向稿同构:头带深棕+米色板身)── @@ -113,7 +113,7 @@ func _init() -> void: mid.add_child(_counter_panel("道具工坊", UiKit.TEX_ICON_WORKSHOP, ws_scroll, 356)) var atlas_holder := VBoxContainer.new() mid.add_child(_counter_panel("奖励格图鉴", UiKit.TEX_ICON_ATLAS, atlas_holder, 356)) - var lock_l := UiKit.label(" —— 柜台结构位预留:内容排 Alpha(地图战斗资源差异化批)", 13, false, UiKit.STONE) + var lock_l := UiKit.label(" —— 柜台结构位预留:内容排 Alpha(地图战斗资源差异化批)",UiKit.FS_HINT, false, UiKit.STONE) lock_l.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART lock_l.custom_minimum_size = Vector2(300, 0) atlas_holder.add_child(lock_l) @@ -136,10 +136,10 @@ func _init() -> void: var spacer2 := Control.new() spacer2.size_flags_horizontal = Control.SIZE_EXPAND_FILL bottom.add_child(spacer2) - var caption := UiKit.label("每购得一件永久强化,对应柜台亮起一格暖光 · 价格为钥石", 13, false, UiKit.WARM_SOFT) + var caption := UiKit.label("每购得一件永久强化,对应柜台亮起一格暖光 · 价格为钥石",UiKit.FS_HINT, false, UiKit.WARM_SOFT) bottom.add_child(caption) col.add_child(bottom) - _recent_list = UiKit.label("", 13, false, UiKit.WARM_SOFT) + _recent_list = UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM_SOFT) _recent_list.clip_text = true _recent_list.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS col.add_child(_recent_list) @@ -165,7 +165,7 @@ func _counter_panel(title_text: String, icon_path: String, holder: Control, min_ var ic := UiKit.icon_rect(icon_path, 20) # M3 16→20(demo 头带图标档) # 缺位 null → 纯文本回退 if ic != null: head.add_child(ic) - var l := UiKit.label(title_text, 16, true, UiKit.WARM) + var l := UiKit.label(title_text,UiKit.FS_BODY, true, UiKit.WARM) head.add_child(l) vbox.add_child(holder) return panel @@ -187,7 +187,7 @@ func _rebuild_tree(data: Dictionary) -> void: var vein := String(row.get("vein", "")) if vein != last_vein: last_vein = vein - var vh := UiKit.label(String(vein_names.get(vein, vein)), 13, true, UiKit.GOLD_DEEP) + var vh := UiKit.label(String(vein_names.get(vein, vein)),UiKit.FS_HINT, true, UiKit.GOLD_DEEP) _tree_holder.add_child(vh) var hb := HBoxContainer.new() hb.add_theme_constant_override("separation", 6) @@ -330,12 +330,12 @@ func _build_forge_row(holder: VBoxContainer, row: Dictionary) -> Dictionary: var name_l := UiKit.label("%s %+d/级" % [String(row.get("display_name", "")), int(row.get("flat", 0))], 14, true, UiKit.INK) name_l.custom_minimum_size = Vector2(112, 0) line.add_child(name_l) - var level_l := UiKit.label("", 13, true, UiKit.INK_ON_DEEP) + var level_l := UiKit.label("",UiKit.FS_HINT, true, UiKit.INK_ON_DEEP) # M3:Lv 章化(木底小章——demo lvtag;Label normal 槽挂样式盒) level_l.add_theme_stylebox_override("normal", UiKit.panel_flat(UiKit.CAMP_HEADER_BAND, Color(0, 0, 0, 0),UiKit.RADIUS_OBJECT, 0, Vector4(6, 0, 6, 0))) level_l.custom_minimum_size = Vector2(44, 0) line.add_child(level_l) - var price_l := UiKit.label("", 14, false, UiKit.STONE) + var price_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.STONE) price_l.custom_minimum_size = Vector2(64, 0) line.add_child(price_l) var btn := UiKit.button("锻造 +1 级", 0.0) # 柜台行板紧凑钮豁免宽度基准 @@ -355,14 +355,14 @@ func _rebuild_workshop(data: Dictionary) -> void: var line := HBoxContainer.new() line.add_theme_constant_override("separation", 12) card.add_child(line) - var name_l := UiKit.label(String(row.get("display_name", "")), 14, true, UiKit.INK) + var name_l := UiKit.label(String(row.get("display_name", "")),UiKit.FS_HINT, true, UiKit.INK) name_l.custom_minimum_size = Vector2(132, 0) line.add_child(name_l) - var progress_l := UiKit.label("", 13, false, UiKit.STONE) + var progress_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.STONE) progress_l.custom_minimum_size = Vector2(110, 0) line.add_child(progress_l) # 状态色随卡⑭ 亮板双色墨制(深墨族替代暖白族)——色随刷新态条件赋值,非机械两行式(T4 收口保留) - var status_l := UiKit.label("", 13, true, UiKit.STONE) + var status_l := UiKit.label("",UiKit.FS_HINT, true, UiKit.STONE) line.add_child(status_l) _workshop_holder.add_child(card) _workshop_rows.append({"item_id": String(row.get("item_id", "")), "progress_l": progress_l, "status_l": status_l}) @@ -375,17 +375,17 @@ func _rebuild_attune(data: Dictionary) -> void: _attune_nodes.clear() _attune_btns.clear() var att: Dictionary = data.get("attune", {}) - _attune_header_l = UiKit.label("", 13, true, UiKit.INK) + _attune_header_l = UiKit.label("",UiKit.FS_HINT, true, UiKit.INK) _workshop_holder.add_child(_attune_header_l) _attune_nodes.append(_attune_header_l) for row in att.get("items", []): var iid := String(row.get("item_id", "")) var line := HBoxContainer.new() line.add_theme_constant_override("separation", 6) - var name_l := UiKit.label(String(row.get("display_name", "")), 13, true, UiKit.INK) + var name_l := UiKit.label(String(row.get("display_name", "")),UiKit.FS_HINT, true, UiKit.INK) name_l.custom_minimum_size = Vector2(96, 0) line.add_child(name_l) - var form_l := UiKit.label("被动" if String(row.get("form", "")) == "passive" else "主动·充能", 12, false, UiKit.STONE) + var form_l := UiKit.label("被动" if String(row.get("form", "")) == "passive" else "主动·充能",UiKit.FS_CAPTION, false, UiKit.STONE) form_l.custom_minimum_size = Vector2(58, 0) line.add_child(form_l) var btn := UiKit.button("装配", 0.0) # 行板紧凑钮豁免 @@ -396,7 +396,7 @@ func _rebuild_attune(data: Dictionary) -> void: _attune_btns.append({"item_id": iid, "btn": btn}) var refresh_line := HBoxContainer.new() refresh_line.add_theme_constant_override("separation", 6) - _refresh_l = UiKit.label("", 12, false, UiKit.STONE) + _refresh_l = UiKit.label("",UiKit.FS_CAPTION, false, UiKit.STONE) refresh_line.add_child(_refresh_l) _refresh_btn = UiKit.button("升级", 0.0) # 行板紧凑钮豁免 _refresh_btn.pressed.connect(_emit_buy_requested.bind("attune_refresh")) diff --git a/game/presentation/views/confirm_dialog.gd b/game/presentation/views/confirm_dialog.gd index 41f8364e..b7f6c144 100644 --- a/game/presentation/views/confirm_dialog.gd +++ b/game/presentation/views/confirm_dialog.gd @@ -17,7 +17,7 @@ var _cancel_btn: Button func _init() -> void: var box: VBoxContainer = UiKit.modal_shell(self, Color(UiKit.DIM, 0.55), Vector2(460, 0), 12, true, UiKit.panel_skinned(Vector4(14, 12, 14, 12))).box - _text = UiKit.label("", 16, false, UiKit.INK_TITLE) + _text = UiKit.label("",UiKit.FS_BODY, false, UiKit.INK_TITLE) _text.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART _text.custom_minimum_size = Vector2(430, 0) box.add_child(_text) diff --git a/game/presentation/views/curio_pick_overlay.gd b/game/presentation/views/curio_pick_overlay.gd index 9238f696..a60a7b19 100644 --- a/game/presentation/views/curio_pick_overlay.gd +++ b/game/presentation/views/curio_pick_overlay.gd @@ -34,7 +34,7 @@ func _init() -> void: var top := HBoxContainer.new() top.add_theme_constant_override("separation", 12) box.add_child(top) - top.add_child(UiKit.label("战利品三选一", 22, true, UiKit.WARM)) + top.add_child(UiKit.label("战利品三选一",UiKit.FS_TITLE, true, UiKit.WARM)) var top_sp := Control.new() top_sp.size_flags_horizontal = Control.SIZE_EXPAND_FILL top.add_child(top_sp) @@ -45,16 +45,16 @@ func _init() -> void: _refresh_btn.pressed.connect(_emit_refresh_requested) _refresh_btn.visible = false top.add_child(_refresh_btn) - _refresh_badge = UiKit.label("0", 12, true, UiKit.INK_ON_GOLD) + _refresh_badge = UiKit.label("0",UiKit.FS_CAPTION, true, UiKit.INK_ON_GOLD) _refresh_badge.mouse_filter = Control.MOUSE_FILTER_IGNORE _refresh_badge.set_anchors_preset(Control.PRESET_TOP_RIGHT) _refresh_badge.offset_left = -22.0 _refresh_badge.offset_top = -6.0 _refresh_btn.add_child(_refresh_badge) - _refresh_l = UiKit.label("", 12, false, UiKit.WARM_SOFT) + _refresh_l = UiKit.label("",UiKit.FS_CAPTION, false, UiKit.WARM_SOFT) _refresh_l.visible = false top.add_child(_refresh_l) - _label = UiKit.label("", 15, false, UiKit.WARM_SOFT) + _label = UiKit.label("",UiKit.FS_BODY, false, UiKit.WARM_SOFT) _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(_label) _choice_box = HBoxContainer.new() diff --git a/game/presentation/views/debug_overlay.gd b/game/presentation/views/debug_overlay.gd index a580a0e4..a98143ec 100644 --- a/game/presentation/views/debug_overlay.gd +++ b/game/presentation/views/debug_overlay.gd @@ -128,7 +128,7 @@ func _build() -> void: 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("调试",UiKit.FS_TITLE, true, UiKit.WARM) box.add_child(title) var desc := UiKit.label( "开发调试专用——仅开始菜单可开(DS_DEBUG=1 时入口点亮)。\n百分比叠加基础值:攻击 %d / 生命 %d。影响所有模式(手动与模拟),不落盘。" % [_base_atk, _base_hp], @@ -150,7 +150,7 @@ func _build() -> void: var fx_row := HBoxContainer.new() fx_row.add_theme_constant_override("separation", 10) list.add_child(fx_row) - fx_row.add_child(UiKit.label("胜利演出", 14, false, UiKit.WARM)) + fx_row.add_child(UiKit.label("胜利演出",UiKit.FS_HINT, false, UiKit.WARM)) var fx_btn := UiKit.button("纹章拼合" if UiKit.victory_fx_style == "crest" else "尘金粒子") fx_btn.tooltip_text = "两套演出并存——点击切换(会话级,不落盘)" fx_btn.pressed.connect(func() -> void: @@ -161,7 +161,7 @@ func _build() -> void: # 区块①随机种子(原开始覆盖层种子行迁入——非法定值回退 42 的口径归组合根 _seed_value) var seed_row := HBoxContainer.new() list.add_child(seed_row) - seed_row.add_child(UiKit.label("随机种子", 15, false)) + seed_row.add_child(UiKit.label("随机种子",UiKit.FS_BODY, false)) seed_edit = LineEdit.new() seed_edit.text = "42" seed_edit.custom_minimum_size = Vector2(120, 0) @@ -175,7 +175,7 @@ func _build() -> void: var hp_row := _slider_row(list, "生命加成") _hp = hp_row.slider _hp_val = hp_row.value_label - _eff = UiKit.label("", 14, false) + _eff = UiKit.label("",UiKit.FS_HINT, false) list.add_child(_eff) var btn_row := HBoxContainer.new() @@ -191,7 +191,7 @@ func _build() -> void: # 区块③批量模拟(与 headless 扫描同口径——编排归 tune_sim_controller) var sim_row := HBoxContainer.new() list.add_child(sim_row) - sim_row.add_child(UiKit.label("批量模拟第一关", 15, false)) + sim_row.add_child(UiKit.label("批量模拟第一关",UiKit.FS_BODY, false)) _sim_count = SpinBox.new() _sim_count.min_value = 10 _sim_count.max_value = 200 @@ -199,7 +199,7 @@ func _build() -> void: _sim_count.value = 30 _sim_count.custom_minimum_size = Vector2(90, 0) sim_row.add_child(_sim_count) - sim_row.add_child(UiKit.label("次(理性玩家策略,含面板当前加成)", 13, false)) + sim_row.add_child(UiKit.label("次(理性玩家策略,含面板当前加成)",UiKit.FS_HINT, false)) _sim_btn = UiKit.button("运行模拟") _sim_btn.pressed.connect(_emit_simulate_requested) sim_row.add_child(_sim_btn) @@ -222,14 +222,14 @@ func _build() -> void: func _slider_row(box: VBoxContainer, title: String) -> Dictionary: var row := HBoxContainer.new() box.add_child(row) - row.add_child(UiKit.label(title, 15, false)) + row.add_child(UiKit.label(title,UiKit.FS_BODY, false)) var s := HSlider.new() s.min_value = 0 s.max_value = 300 s.step = 5 s.custom_minimum_size = Vector2(320, 24) row.add_child(s) - var v := UiKit.label("+0%", 15, true) + var v := UiKit.label("+0%",UiKit.FS_BODY, true) v.custom_minimum_size = Vector2(70, 0) row.add_child(v) s.value_changed.connect(_on_slider_value_changed) diff --git a/game/presentation/views/hero_info_panel_view.gd b/game/presentation/views/hero_info_panel_view.gd index 170adfa9..878ef288 100644 --- a/game/presentation/views/hero_info_panel_view.gd +++ b/game/presentation/views/hero_info_panel_view.gd @@ -37,7 +37,7 @@ func _init() -> void: col.add_theme_constant_override("separation", 14) # 布局充实(2026-09-26 反馈③:区段间距放大) add_child(col) - col.add_child(UiKit.label("探险者", 17, true)) + col.add_child(UiKit.label("探险者",UiKit.FS_SUB, true)) # 数据行装框(直角细线数据框——battle.md Component Inventory C 区行规格落形;同时消化纵向空白) var data_box := PanelContainer.new() data_box.add_theme_stylebox_override("panel", @@ -53,7 +53,7 @@ func _init() -> void: # 秘宝槽(预留):随身战斗用道具的唯一展示面——空槽占位承诺格子在此, # 不预设交互(挖掘期指向交互归 E 区既有裁决);终稿样式/槽位数归秘宝批 - col.add_child(UiKit.label("秘宝", 16, true)) + col.add_child(UiKit.label("秘宝",UiKit.FS_BODY, true)) item_slots = HBoxContainer.new() item_slots.add_theme_constant_override("separation", 10) col.add_child(item_slots) @@ -77,7 +77,7 @@ func _init() -> void: _feat_section.add_theme_constant_override("separation", 4) _feat_section.visible = false col.add_child(_feat_section) - _feat_section.add_child(UiKit.label("特性", 16, true)) + _feat_section.add_child(UiKit.label("特性",UiKit.FS_BODY, true)) _feat_list = VBoxContainer.new() _feat_list.add_theme_constant_override("separation", 2) _feat_section.add_child(_feat_list) @@ -87,7 +87,7 @@ func _init() -> void: _board_variant_section.add_theme_constant_override("separation", 4) _board_variant_section.visible = false col.add_child(_board_variant_section) - _board_variant_section.add_child(UiKit.label("地形变异", 16, true)) + _board_variant_section.add_child(UiKit.label("地形变异",UiKit.FS_BODY, true)) _board_variant_list = VBoxContainer.new() _board_variant_list.add_theme_constant_override("separation", 2) _board_variant_section.add_child(_board_variant_list) @@ -97,7 +97,7 @@ func _init() -> void: _curio_section.add_theme_constant_override("separation", 4) _curio_section.visible = false col.add_child(_curio_section) - _curio_section.add_child(UiKit.label("特性", 16, true)) + _curio_section.add_child(UiKit.label("特性",UiKit.FS_BODY, true)) _curio_list = VBoxContainer.new() _curio_list.add_theme_constant_override("separation", 2) _curio_section.add_child(_curio_list) @@ -119,7 +119,7 @@ func set_feat_holdings(lines: Array) -> void: _feat_list.remove_child(c2) c2.queue_free() for line in lines: - var l2 := UiKit.label(String(line), 16, false, COL_INK) + var l2 := UiKit.label(String(line),UiKit.FS_BODY, false, COL_INK) _feat_list.add_child(l2) _feat_section.visible = not lines.is_empty() @@ -130,7 +130,7 @@ func set_board_variants(lines: Array) -> void: _board_variant_list.remove_child(c3) c3.queue_free() for line in lines: - var l3 := UiKit.label(String(line), 16, false, COL_INK) + var l3 := UiKit.label(String(line),UiKit.FS_BODY, false, COL_INK) _board_variant_list.add_child(l3) _board_variant_section.visible = not lines.is_empty() @@ -141,7 +141,7 @@ func set_level_bonuses(lines: Array) -> void: _curio_list.remove_child(c) c.queue_free() for line in lines: - var l := UiKit.label(String(line), 16, false, COL_INK) # 字号下限(v3.5 批 B3——正文 ≥16) + var l := UiKit.label(String(line),UiKit.FS_BODY, false, COL_INK) # 字号下限(v3.5 批 B3——正文 ≥16) _curio_list.add_child(l) _curio_section.visible = not lines.is_empty() @@ -157,7 +157,7 @@ func armor_text() -> String: func _data_line() -> Label: # 对比度修复(v3.5 批 B3 2026-09-30——非粗体 label 默认浅灰对米色数据框仅 1.31:1, # 实测=ui-redesign 对比报告 §一):显式主墨(对 PANEL_DATA ≈10:1) - var l := UiKit.label("", 16, false, UiKit.INK) + var l := UiKit.label("",UiKit.FS_BODY, false, UiKit.INK) l.clip_text = true l.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS return l @@ -203,7 +203,7 @@ func set_treasure_inventory(items: Array, selected_handle: int) -> void: tr.mouse_filter = Control.MOUSE_FILTER_IGNORE slot.add_child(tr) else: - var glyph := UiKit.label(glyph_ch, 20, true) + var glyph := UiKit.label(glyph_ch,UiKit.FS_SUB, true) glyph.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER glyph.vertical_alignment = VERTICAL_ALIGNMENT_CENTER glyph.set_anchors_preset(Control.PRESET_FULL_RECT) diff --git a/game/presentation/views/legend_overlay.gd b/game/presentation/views/legend_overlay.gd index c6cec4be..d0b02333 100644 --- a/game/presentation/views/legend_overlay.gd +++ b/game/presentation/views/legend_overlay.gd @@ -32,7 +32,7 @@ func _init(rap_cost: int = -1) -> void: _panel = shell.panel (shell.dim as ColorRect).gui_input.connect(_on_dim_gui_input) var box: VBoxContainer = shell.box - var title := UiKit.label("图例 · 格态", 20, true, UiKit.INK_TITLE) # 亮底墨字(§7.2 数据素面) + var title := UiKit.label("图例 · 格态",UiKit.FS_SUB, true, UiKit.INK_TITLE) # 亮底墨字(§7.2 数据素面) box.add_child(title) box.add_child(HSeparator.new()) for e in ENTRIES: @@ -56,7 +56,7 @@ func _init(rap_cost: int = -1) -> void: rap_chip.custom_minimum_size = Vector2(18, 18) rap_chip.color = UiKit.GOLD # 同 #F0A828——金徽章同源单点(T4 裸色收口) rap_row.add_child(rap_chip) - var rap_lab := UiKit.label("RAP 储备行动点 —— 停手时剩余 AP 转存;弃图刷新消耗 RAP−%d(旧板旗作废,AP 保留继续挖)" % _rap_cost, 13, false, UiKit.INK_LABEL) + var rap_lab := UiKit.label("RAP 储备行动点 —— 停手时剩余 AP 转存;弃图刷新消耗 RAP−%d(旧板旗作废,AP 保留继续挖)" % _rap_cost,UiKit.FS_HINT, false, UiKit.INK_LABEL) rap_lab.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART rap_lab.custom_minimum_size = Vector2(440, 0) rap_row.add_child(rap_lab) diff --git a/game/presentation/views/level_map_screen.gd b/game/presentation/views/level_map_screen.gd index df4cc82e..18eac718 100644 --- a/game/presentation/views/level_map_screen.gd +++ b/game/presentation/views/level_map_screen.gd @@ -97,7 +97,7 @@ func _init() -> void: var top := HBoxContainer.new() top.add_theme_constant_override("separation", 12) box.add_child(top) - _level_label = UiKit.label("", 16, true, UiKit.WARM) + _level_label = UiKit.label("",UiKit.FS_BODY, true, UiKit.WARM) _level_label.custom_minimum_size.x = 420 top.add_child(_level_label) var gp_box := PanelContainer.new() @@ -106,9 +106,9 @@ func _init() -> void: var gp_row := HBoxContainer.new() gp_row.add_theme_constant_override("separation", 6) gp_box.add_child(gp_row) - _gp_value = UiKit.label("", 16, true, UiKit.GOLD) + _gp_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.GOLD) gp_row.add_child(_gp_value) - _title = UiKit.label(TITLE_FORK, 18, true, UiKit.WARM) + _title = UiKit.label(TITLE_FORK,UiKit.FS_SUB, true, UiKit.WARM) _title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(_title) # 节点图画布(图上点击 = 唯一提交通道——布局决策 2;mouse_filter STOP 接悬停/点击) @@ -139,8 +139,8 @@ func _init() -> void: strip.add_child(face) var life_box := VBoxContainer.new() strip.add_child(life_box) - life_box.add_child(UiKit.label("生命", 11, false, UiKit.INK_HINT)) - _hp_value = UiKit.label("", 15, true, UiKit.INK_TITLE) + life_box.add_child(UiKit.label("生命",UiKit.FS_CAPTION, false, UiKit.INK_HINT)) + _hp_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_TITLE) life_box.add_child(_hp_value) _hp_bar = Control.new() _hp_bar.custom_minimum_size = Vector2(130, 7) @@ -149,8 +149,8 @@ func _init() -> void: strip.add_child(_vdiv()) var attr_box := VBoxContainer.new() strip.add_child(attr_box) - attr_box.add_child(UiKit.label("属性", 11, false, UiKit.INK_HINT)) - _attr_value = UiKit.label("", 15, true, UiKit.INK_TITLE) + attr_box.add_child(UiKit.label("属性",UiKit.FS_CAPTION, false, UiKit.INK_HINT)) + _attr_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.INK_TITLE) attr_box.add_child(_attr_value) strip.add_child(_vdiv()) # 本关加成框(零加成隐藏——spec 布局决策 4)+ 流派件持有行(迭代 12 呈现补齐——组合根投喂) @@ -160,12 +160,12 @@ func _init() -> void: _bonus_row.add_child(bonus_box) var bonus_inner := VBoxContainer.new() bonus_box.add_child(bonus_inner) - var bonus_cap := UiKit.label("特性", 12, false, UiKit.WARM_SOFT) + var bonus_cap := UiKit.label("特性",UiKit.FS_CAPTION, false, UiKit.WARM_SOFT) bonus_inner.add_child(bonus_cap) - _bonus_value = UiKit.label("", 15, true, UiKit.WARM) + _bonus_value = UiKit.label("",UiKit.FS_BODY, true, UiKit.WARM) bonus_inner.add_child(_bonus_value) # 特性持有行(迭代 12 呈现补齐 2026-10-04——用户反馈关卡选择页看不到局内奖励;组合根投喂) - _feat_value = UiKit.label("", 13, false, UiKit.WARM_SOFT) + _feat_value = UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM_SOFT) _feat_value.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART bonus_box.add_child(_feat_value) var spacer := Control.new() diff --git a/game/presentation/views/node_overlay.gd b/game/presentation/views/node_overlay.gd index bcaac1c7..46bfd38a 100644 --- a/game/presentation/views/node_overlay.gd +++ b/game/presentation/views/node_overlay.gd @@ -16,7 +16,7 @@ func _init() -> void: var shell: Dictionary = UiKit.modal_shell(self, Color(0, 0, 0, 0.6), Vector2.ZERO, 14, true, UiKit.panel_skinned(Vector4(26, 18, 26, 18))) var box: VBoxContainer = shell.box - _label = UiKit.label("", 20, true, UiKit.INK_TITLE) + _label = UiKit.label("",UiKit.FS_SUB, true, UiKit.INK_TITLE) _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(_label) _btn = UiKit.primary_button("继续") diff --git a/game/presentation/views/settings_overlay.gd b/game/presentation/views/settings_overlay.gd index 2ae64e1c..eb485886 100644 --- a/game/presentation/views/settings_overlay.gd +++ b/game/presentation/views/settings_overlay.gd @@ -39,10 +39,10 @@ func _build() -> void: UiKit.panel_skinned(Vector4(20, 16, 20, 16))) var box: VBoxContainer = shell.box - var title := UiKit.label("设置", 24, true, UiKit.INK_TITLE) + var title := UiKit.label("设置",UiKit.FS_TITLE, true, UiKit.INK_TITLE) title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(title) - var hint := UiKit.label("系统级设置——独立存储不随存档(一安装一份,删游戏才消失)", 13, false, UiKit.INK_HINT) + var hint := UiKit.label("系统级设置——独立存储不随存档(一安装一份,删游戏才消失)",UiKit.FS_HINT, false, UiKit.INK_HINT) hint.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(hint) box.add_child(HSeparator.new()) @@ -51,12 +51,12 @@ func _build() -> void: var vol_row := HBoxContainer.new() vol_row.add_theme_constant_override("separation", 14) box.add_child(vol_row) - vol_row.add_child(UiKit.label("主音量", 15, false, UiKit.INK_LABEL)) + vol_row.add_child(UiKit.label("主音量",UiKit.FS_BODY, false, UiKit.INK_LABEL)) _volume = UiKit.styled_slider(100.0, 0.0, 100.0) _volume.step = 1 _volume.value_changed.connect(_on_volume_changed) vol_row.add_child(_volume) - _volume_val = UiKit.label("100%", 15, true, UiKit.INK_TITLE) + _volume_val = UiKit.label("100%",UiKit.FS_BODY, true, UiKit.INK_TITLE) _volume_val.custom_minimum_size = Vector2(60, 0) vol_row.add_child(_volume_val) @@ -64,24 +64,24 @@ func _build() -> void: var fs_row := HBoxContainer.new() fs_row.add_theme_constant_override("separation", 14) box.add_child(fs_row) - fs_row.add_child(UiKit.label("全屏", 15, false, UiKit.INK_LABEL)) + fs_row.add_child(UiKit.label("全屏",UiKit.FS_BODY, false, UiKit.INK_LABEL)) _fs_btn = UiKit.switch_toggle(false) _fs_btn.toggled.connect(_on_fullscreen_toggled) fs_row.add_child(_fs_btn) - _fs_st = UiKit.label("关", 14, true, UiKit.INK_LABEL) + _fs_st = UiKit.label("关",UiKit.FS_HINT, true, UiKit.INK_LABEL) fs_row.add_child(_fs_st) # 结算演出动画(=减动效实称——语义命名批 T17;拨杆 on=完整,off=快速时长减半) var motion_row := HBoxContainer.new() motion_row.add_theme_constant_override("separation", 14) box.add_child(motion_row) - motion_row.add_child(UiKit.label("结算演出动画", 15, false, UiKit.INK_LABEL)) + motion_row.add_child(UiKit.label("结算演出动画",UiKit.FS_BODY, false, UiKit.INK_LABEL)) _motion_btn = UiKit.switch_toggle(true) _motion_btn.toggled.connect(_on_motion_toggled) motion_row.add_child(_motion_btn) - _motion_st = UiKit.label("完整", 14, true, UiKit.INK_LABEL) + _motion_st = UiKit.label("完整",UiKit.FS_HINT, true, UiKit.INK_LABEL) motion_row.add_child(_motion_st) - var why := UiKit.label("快速 = 时长减半(运动敏感 / 演示用)", 12, false, UiKit.INK_HINT) + var why := UiKit.label("快速 = 时长减半(运动敏感 / 演示用)",UiKit.FS_CAPTION, false, UiKit.INK_HINT) why.position.y = 0 box.add_child(why) diff --git a/game/presentation/views/settlement_fx_view.gd b/game/presentation/views/settlement_fx_view.gd index 1d6a0c5a..f7d47588 100644 --- a/game/presentation/views/settlement_fx_view.gd +++ b/game/presentation/views/settlement_fx_view.gd @@ -47,7 +47,7 @@ func play_round_sweep(board_rect: Rect2) -> void: # 跨区弹道:glyph 字形自 from 飞向 to(0.35s + 轻微上抛弧线 + 终点淡出,自动回收)—— # 开格之因 → 站桩之果的因果可视承载(P2);crit 弹道由调用方传加重标记 func play_projectile(from: Vector2, to: Vector2, glyph: String, col: Color, crit: bool = false) -> void: - var shot := UiKit.label(glyph, 22 if crit else 16, true, col) + var shot := UiKit.label(glyph, UiKit.FS_TITLE if crit else UiKit.FS_BODY, true, col) shot.mouse_filter = Control.MOUSE_FILTER_IGNORE shot.size = Vector2(24, 24) shot.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER @@ -91,7 +91,7 @@ func play_damage_number(pos: Vector2, text: String, col: Color, crit: bool = fal _fx_damage_marks += 1 # T17 修复(用户实机「完全没看到伤害数字」):26/32px 大字+1.1s 驻留——旧 20px/0.7s 在 # 结算排播节奏下视觉存在感不足;描边 4→6 同步加重(亮舞台底上保读数)。 - var lab := UiKit.label(text, 32 if crit else 26, true, col) + var lab := UiKit.label(text, UiKit.FS_H1 if crit else UiKit.FS_TITLE, true, col) lab.add_theme_color_override("font_outline_color", Color(0.1, 0.08, 0.06, 0.9)) lab.add_theme_constant_override("outline_size", 6) lab.mouse_filter = Control.MOUSE_FILTER_IGNORE @@ -127,8 +127,8 @@ func play_round_banner(ri: int) -> void: _fx_banners += 1 var banner := Panel.new() banner.mouse_filter = Control.MOUSE_FILTER_IGNORE - banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP,UiKit.RADIUS_OBJECT, 2)) - var lab := UiKit.label("第 %d 轮" % ri, 22, true, UiKit.GOLD) + banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP, UiKit.RADIUS_OBJECT, 2)) + var lab := UiKit.label("第 %d 轮" % ri, UiKit.FS_TITLE, true, UiKit.GOLD) lab.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) lab.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lab.vertical_alignment = VERTICAL_ALIGNMENT_CENTER @@ -156,8 +156,8 @@ func play_board_variant_banner(text: String) -> void: _fx_banners += 1 var banner := Panel.new() banner.mouse_filter = Control.MOUSE_FILTER_IGNORE - banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP,UiKit.RADIUS_OBJECT, 2)) - var lab := UiKit.label(text, 22, true, UiKit.GOLD) + banner.add_theme_stylebox_override("panel", UiKit.panel_flat(Color(UiKit.BG_OVERLAY, 0.88), UiKit.GOLD_DEEP, UiKit.RADIUS_OBJECT, 2)) + var lab := UiKit.label(text, UiKit.FS_TITLE, true, UiKit.GOLD) lab.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) lab.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lab.vertical_alignment = VERTICAL_ALIGNMENT_CENTER diff --git a/game/presentation/views/settlement_review_overlay.gd b/game/presentation/views/settlement_review_overlay.gd index c9c0068d..8f74bcc2 100644 --- a/game/presentation/views/settlement_review_overlay.gd +++ b/game/presentation/views/settlement_review_overlay.gd @@ -14,7 +14,7 @@ func _init() -> void: var shell := UiKit.modal_shell(self, Color(UiKit.DIM, 0.62), Vector2(760, 560), 6, true) (shell.dim as ColorRect).gui_input.connect(_on_dim_gui_input) var box: VBoxContainer = shell.box - box.add_child(UiKit.label("结算明细回看(完整流水 · 逐行归因)", 18, true)) + box.add_child(UiKit.label("结算明细回看(完整流水 · 逐行归因)",UiKit.FS_SUB, true)) _log = RichTextLabel.new() _log.bbcode_enabled = true _log.size_flags_vertical = Control.SIZE_EXPAND_FILL diff --git a/game/presentation/views/shop_overlay_view.gd b/game/presentation/views/shop_overlay_view.gd index 6af46e71..54cf60aa 100644 --- a/game/presentation/views/shop_overlay_view.gd +++ b/game/presentation/views/shop_overlay_view.gd @@ -33,7 +33,7 @@ func _init() -> void: var top := HBoxContainer.new() top.add_theme_constant_override("separation", 12) box.add_child(top) - var title := UiKit.label("商 店", 26, true, UiKit.WARM) + var title := UiKit.label("商 店",UiKit.FS_TITLE, true, UiKit.WARM) top.add_child(title) var top_sp := Control.new() top_sp.size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -44,7 +44,7 @@ func _init() -> void: _refresh_btn.disabled = true # MC-1 投喂后启用(set_refresh_display) _refresh_btn.pressed.connect(_emit_refresh_requested) top.add_child(_refresh_btn) - var stock_badge := UiKit.label("0", 12, true, UiKit.INK_ON_GOLD) + var stock_badge := UiKit.label("0",UiKit.FS_CAPTION, true, UiKit.INK_ON_GOLD) stock_badge.mouse_filter = Control.MOUSE_FILTER_IGNORE stock_badge.set_anchors_preset(Control.PRESET_TOP_RIGHT) stock_badge.offset_left = -22.0 @@ -54,7 +54,7 @@ func _init() -> void: gp_chip.add_theme_stylebox_override("panel", UiKit.panel_flat(UiKit.CANDLE, UiKit.CAMP_HEADER_BAND,UiKit.RADIUS_OBJECT, 1, Vector4(12, 4, 12, 4))) top.add_child(gp_chip) - _gp_label = UiKit.label("金币 0", 16, true, UiKit.INK_ON_GOLD) + _gp_label = UiKit.label("金币 0",UiKit.FS_BODY, true, UiKit.INK_ON_GOLD) gp_chip.add_child(_gp_label) _cards_box = VBoxContainer.new() _cards_box.add_theme_constant_override("separation", 8) @@ -98,13 +98,13 @@ func _build_card(p: Dictionary) -> Dictionary: var row := HBoxContainer.new() row.add_theme_constant_override("separation", 14) card.add_child(row) - var name_l := UiKit.label(_card_title(p), 15, true) + var name_l := UiKit.label(_card_title(p),UiKit.FS_BODY, true) name_l.custom_minimum_size = Vector2(190, 0) row.add_child(name_l) - var price_l := UiKit.label("", 14, false, UiKit.WARM_SOFT) + var price_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM_SOFT) price_l.custom_minimum_size = Vector2(110, 0) row.add_child(price_l) - var bought_l := UiKit.label("", 14, false, UiKit.WARM_FAINT) + var bought_l := UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM_FAINT) row.add_child(bought_l) var btn := UiKit.button("购买", 0.0) # 行卡紧凑钮豁免宽度基准 btn.pressed.connect(_emit_buy_requested.bind(p)) @@ -142,7 +142,7 @@ func open_shelf(cards: Array, gp: int) -> void: for c in cards: _shelf_rows.append(_build_shelf_card(row, c)) if cards.is_empty(): - var empty := UiKit.label("货架售罄——共享池已买空(属性件全冒险共 3+3+3 份 / AP 件 2 份)", 14, false, UiKit.WARM_FAINT) + var empty := UiKit.label("货架售罄——共享池已买空(属性件全冒险共 3+3+3 份 / AP 件 2 份)",UiKit.FS_HINT, false, UiKit.WARM_FAINT) empty.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER row.add_child(empty) refresh_shelf_state(gp) diff --git a/game/presentation/views/standee_body.gd b/game/presentation/views/standee_body.gd index 983a465b..6a588e5a 100644 --- a/game/presentation/views/standee_body.gd +++ b/game/presentation/views/standee_body.gd @@ -141,7 +141,7 @@ func set_effects_cleared_feedback() -> void: return slot_row.visible = true slot_row.set_cleared_feedback() - var note := UiKit.label("状态随战斗结束消散", 11, false, UiKit.STONE_FAINT) + var note := UiKit.label("状态随战斗结束消散",UiKit.FS_CAPTION, false, UiKit.STONE_FAINT) note.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER note.mouse_filter = Control.MOUSE_FILTER_IGNORE var parent := slot_row.get_parent() diff --git a/game/presentation/views/status_slot_row.gd b/game/presentation/views/status_slot_row.gd index ac8143a5..c233a3b6 100644 --- a/game/presentation/views/status_slot_row.gd +++ b/game/presentation/views/status_slot_row.gd @@ -64,7 +64,7 @@ func _init() -> void: _tip.visible = false var sb := UiKit.panel_flat(UiKit.TIP_BG, UiKit.GOLD,UiKit.RADIUS_OBJECT, 1, Vector4(6, 3, 6, 3)) _tip.add_theme_stylebox_override("panel", sb) - _tip_label = UiKit.label("", 13, false, UiKit.WARM) + _tip_label = UiKit.label("",UiKit.FS_HINT, false, UiKit.WARM) _tip_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART _tip_label.custom_minimum_size = Vector2(210, 0) _tip.add_child(_tip_label) @@ -126,7 +126,7 @@ func _make_slot() -> PanelContainer: icon.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR icon.mouse_filter = Control.MOUSE_FILTER_IGNORE col.add_child(icon) - var meta := UiKit.label("", 11, false) + var meta := UiKit.label("",UiKit.FS_CAPTION, false) meta.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER col.add_child(meta) return slot @@ -145,7 +145,7 @@ func _fill_slot(slot: PanelContainer, eff: Dictionary) -> void: # 迷你档:层数角标挂图标下方(×N)——槽随内容自适应,无 meta 行/剩余点(悬停 tooltip 承载全部明细) var tag := col.get_child(1) as Label tag.text = "×%d" % layers if layers > 1 else "" - tag.add_theme_font_size_override("font_size", 10) + tag.add_theme_font_size_override("font_size", UiKit.FS_CAPTION) if tex == null: tag.text = (ICON_PLACEHOLDER + tag.text).strip_edges() return diff --git a/game/presentation/views/toast_stack.gd b/game/presentation/views/toast_stack.gd index 5d30f69f..0bc4e2ed 100644 --- a/game/presentation/views/toast_stack.gd +++ b/game/presentation/views/toast_stack.gd @@ -43,7 +43,7 @@ func show_toast(text: String, tone: String = "info") -> void: col = COL_GOLD sb.border_color = col row.add_theme_stylebox_override("panel", sb) - var lab := UiKit.label(("⚠ " if tone == "warn" else "") + text, 14, tone != "info", col) + var lab := UiKit.label(("⚠ " if tone == "warn" else "") + text,UiKit.FS_HINT, tone != "info", col) lab.clip_text = true row.add_child(lab) _slot_box.add_child(row) diff --git a/game/presentation/views/ui_kit.gd b/game/presentation/views/ui_kit.gd index 5439aaa8..122560eb 100644 --- a/game/presentation/views/ui_kit.gd +++ b/game/presentation/views/ui_kit.gd @@ -226,6 +226,17 @@ static func load_font(path: String) -> Font: return null +# ── 字号档位表(UI 设计对齐批 P3 甲 2026-10-06——WB G1 六档;全站 UiKit.label/字号 override 只许取 +# 本表,裸数字字号退役。归档映射:10/11/12→CAPTION、13/14→HINT、15/16→BODY、17/18/20→SUB、 +# 21/22/24/26→TITLE、32/40→H1(就近归档);棋盘数字公式 maxi(18, ceil(格边×0.5)) 与站桩血数 +# 11px 条带内读数豁免不入表(art-bible §7.4)── +const FS_CAPTION := 12 # 装饰 caption/分区小字/微计数(§7.4 豁免下限) +const FS_HINT := 14 # 提示/tooltip 下限档 +const FS_BODY := 16 # 正文/明细下限档 +const FS_SUB := 18 # 副标题/小组标题(=棋盘数字下限同值) +const FS_TITLE := 24 # 屏标题/横幅/价格 +const FS_H1 := 34 # 主标题/演算暴击 + # ── StyleBox 工厂 ── # margin = (左, 上, 右, 下);border_w = 0 即无边框(根底/遮罩用) # 圆角率单点(UI 设计对齐批 P5 甲 2026-10-06——容器/按钮全站唯一圆角值;数据框/数字牌/AP 点阵/准线/血条 @@ -460,7 +471,7 @@ class BCard: band_r.color = band band_r.custom_minimum_size = Vector2(0, 6) box.add_child(band_r) - mark = UiKit.label("✓", 16, true, Color8(58, 42, 8)) + mark = UiKit.label("✓",FS_BODY, true, Color8(58, 42, 8)) mark.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT mark.visible = false box.add_child(mark) @@ -474,21 +485,21 @@ class BCard: icon_tr.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST icon_tr.size_flags_horizontal = Control.SIZE_SHRINK_CENTER box.add_child(icon_tr) - name_l = UiKit.label(title, 18, true, INK_TITLE) + name_l = UiKit.label(title,FS_SUB, true, INK_TITLE) name_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER box.add_child(name_l) - desc_l = UiKit.label(desc, 14, false, Color8(74, 58, 40)) + desc_l = UiKit.label(desc,FS_HINT, false, Color8(74, 58, 40)) desc_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER desc_l.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART box.add_child(desc_l) var spacer := Control.new() spacer.size_flags_vertical = Control.SIZE_EXPAND_FILL box.add_child(spacer) - price_l = UiKit.label(price, 21, true, GOLD) + price_l = UiKit.label(price,FS_TITLE, true, GOLD) price_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER price_l.visible = price != "" box.add_child(price_l) - foot_l = UiKit.label(footnote, 11, false, Color8(110, 69, 52)) + foot_l = UiKit.label(footnote,FS_CAPTION, false, Color8(110, 69, 52)) foot_l.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER foot_l.visible = footnote != "" box.add_child(foot_l)