iter16ui T6:P3甲FS_*六档字号档位表立项(CAPTION12/HINT14/BODY16/SUB18/TITLE24/H1=34)+全库裸字号归档107位点(就近映射;4动态位点除外;settlement_fx两处span错位写入当场修复)+11px六处提FS_CAPTION并入P11豁免清单+art-bible §7.4档位表与豁免清单落文(条带内读数=血数一处;caption档逐处清单);轻闸冒烟782/0+三探针+layout全绿

This commit is contained in:
DKChan committed 2026-10-06 03:38:51 +08:00
1 parent 2f74da830b
commit e0fd7cb8d7
25 files changed
+122 -110

No files matched your search

+2 -1
View File
@@ -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 营地界面
+1 -1
View File
@@ -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)
+7 -7
View File
@@ -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)
+5 -5
View File
@@ -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)
@@ -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)
+2 -2
View File
@@ -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()
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+17 -17
View File
@@ -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"))
+1 -1
View File
@@ -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)
@@ -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()
+8 -8
View File
@@ -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)
+10 -10
View File
@@ -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)
+2 -2
View File
@@ -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)
+10 -10
View File
@@ -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()
+1 -1
View File
@@ -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("继续")
+9 -9
View File
@@ -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)
@@ -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
@@ -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
+7 -7
View File
@@ -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)
+1 -1
View File
@@ -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()
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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)
+16 -5
View File
@@ -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)