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:
1 parent
2f74da830b
commit
e0fd7cb8d7
25 files changed
+122
-110
No files matched your search
@@ -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 营地界面
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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("继续")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user