T4 UiKit色彩骨架收口段: modal_shell/modal_dim收10处overlay骨架(dim色/min_size/panel参数化对照表在报告,探针私有件同名同层级保留)+label加color参收全层两行式+裸色收口(standee/camp/stage/level_map/board_world Color8→UiKit档13色+HEX_LOG_*/HEX_ROUTE/SEED 13档——值逐字节不变)+杂并七件(UiKit.scaled收双实现/到达拍块合并/点阵合并/画布常数单点/瓦片词表单点化/占位文案const/with_bar判据/bonus内联lambda改具名);ArmedConfirm三处语义异构降级记06(不做了半套);闸=冲烟636/0+run_all 15套+八探针全绿+熵增闸PASS
This commit is contained in:
1 parent
315e46038c
commit
5584feb6e5
27 files changed
+263
-345
No files matched your search
@@ -38,9 +38,13 @@ const TITLE_ENTRY := "出发——选择首个节点" # 入口停点
|
||||
const TITLE_SINGLE := "继续前进" # 单链停点
|
||||
const TITLE_FORK := "选择下一节点" # 岔路停点
|
||||
const NODE_HALF := Vector2(26, 18) # 节点方块半宽高(52×36 占位画布参数——样张批终稿)
|
||||
const LAYER_BASE_X := 70 # 首层节点原点 x(画布拟合与布局公式共用——T4 杂并:双写退役)
|
||||
const LAYER_STEP_X := 122 # 层间横向步距(同上)
|
||||
const SLOT_BASE_Y := 52 # 槽位原点 y(同上)
|
||||
const SLOT_STEP_Y := 58 # 同层槽位纵向步距(同上)
|
||||
const HIT_PAD := 6.0 # 图上命中外扩(指宽容差)
|
||||
const CONFIRM_WINDOW_S := 3.0 # 放弃确认态窗口(秒——超时回落)
|
||||
const COL_HP_BAR_BACK := Color8(40, 34, 28) # 迷你血条深底(样张 v1 冻结——对暗面板可辨)
|
||||
const COL_HP_BAR_BACK := UiKit.HP_BAR_BACK # 迷你血条深底(样张 v1 冻结——对暗面板可辨;值单点收 UiKit)
|
||||
|
||||
var _runner = null
|
||||
var _title: Label
|
||||
@@ -92,8 +96,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)
|
||||
_level_label.add_theme_color_override("font_color", UiKit.WARM)
|
||||
_level_label = UiKit.label("", 16, true, UiKit.WARM)
|
||||
_level_label.custom_minimum_size.x = 420
|
||||
top.add_child(_level_label)
|
||||
var gp_box := PanelContainer.new()
|
||||
@@ -102,11 +105,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)
|
||||
_gp_value.add_theme_color_override("font_color", UiKit.GOLD)
|
||||
_gp_value = UiKit.label("", 16, true, UiKit.GOLD)
|
||||
gp_row.add_child(_gp_value)
|
||||
_title = UiKit.label(TITLE_FORK, 18, true)
|
||||
_title.add_theme_color_override("font_color", UiKit.WARM)
|
||||
_title = UiKit.label(TITLE_FORK, 18, true, UiKit.WARM)
|
||||
_title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
box.add_child(_title)
|
||||
# 节点图画布(图上点击 = 唯一提交通道——布局决策 2;mouse_filter STOP 接悬停/点击)
|
||||
@@ -130,11 +131,9 @@ 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)
|
||||
bonus_cap.add_theme_color_override("font_color", UiKit.WARM_SOFT)
|
||||
var bonus_cap := UiKit.label("本关加成", 12, false, UiKit.WARM_SOFT)
|
||||
bonus_inner.add_child(bonus_cap)
|
||||
_bonus_value = UiKit.label("", 15, true)
|
||||
_bonus_value.add_theme_color_override("font_color", UiKit.WARM)
|
||||
_bonus_value = UiKit.label("", 15, true, UiKit.WARM)
|
||||
bonus_inner.add_child(_bonus_value)
|
||||
bottom.add_child(_bonus_row)
|
||||
var spacer := Control.new()
|
||||
@@ -148,25 +147,24 @@ func _init() -> void:
|
||||
visible = false
|
||||
|
||||
|
||||
# 状态数据框工厂(直角细线数据框——pattern 5 族;hp_box = 带迷你血条。墨色按样张 v1 冻结:
|
||||
# 暗底标签 WARM_SOFT/读数 WARM——§7.1 数据素面墨来自世界的墨在暗底侧的落法,L3 ≥4.5:1)
|
||||
# 状态数据框工厂(直角细线数据框——pattern 5 族;with_bar = 带迷你血条(生命框),值读数随行挂回
|
||||
# _hp_value/_attr_value(T4 杂并:旧「caption == "生命"」文案做控制流退役——分组判据复用 with_bar)。
|
||||
# 墨色按样张 v1 冻结:暗底标签 WARM_SOFT/读数 WARM——§7.1 数据素面墨来自世界的墨在暗底侧的落法,L3 ≥4.5:1)
|
||||
func _status_box(caption: String, with_bar: bool) -> PanelContainer:
|
||||
var panel := PanelContainer.new()
|
||||
panel.add_theme_stylebox_override("panel", UiKit.panel_flat(UiKit.DARK_UPCOMING, UiKit.PANEL_BORDER, 0, 1))
|
||||
var inner := VBoxContainer.new()
|
||||
panel.add_child(inner)
|
||||
var cap := UiKit.label(caption, 12, false)
|
||||
cap.add_theme_color_override("font_color", UiKit.WARM_SOFT)
|
||||
var cap := UiKit.label(caption, 12, false, UiKit.WARM_SOFT)
|
||||
inner.add_child(cap)
|
||||
if with_bar:
|
||||
_hp_bar = Control.new()
|
||||
_hp_bar.custom_minimum_size = Vector2(120, 6)
|
||||
_hp_bar.draw.connect(_draw_hp_bar.bind(_hp_bar))
|
||||
inner.add_child(_hp_bar)
|
||||
var value := UiKit.label("", 15, true)
|
||||
value.add_theme_color_override("font_color", UiKit.WARM)
|
||||
var value := UiKit.label("", 15, true, UiKit.WARM)
|
||||
inner.add_child(value)
|
||||
if caption == "生命":
|
||||
if with_bar:
|
||||
_hp_value = value
|
||||
else:
|
||||
_attr_value = value
|
||||
@@ -174,7 +172,7 @@ func _status_box(caption: String, with_bar: bool) -> PanelContainer:
|
||||
|
||||
|
||||
func _draw_hp_bar(bar: Control) -> void:
|
||||
# 迷你血条(样张 v1 冻结:深底 Color8(40,34,28)(对暗面板可辨)+金填充——比例 = hero_hp / effective_max_hp)
|
||||
# 迷你血条(样张 v1 冻结:深底 UiKit.HP_BAR_BACK #28221C(对暗面板可辨)+金填充——比例 = hero_hp / effective_max_hp)
|
||||
if _runner == null:
|
||||
return
|
||||
var max_hp := maxi(1, _runner.effective_max_hp())
|
||||
@@ -268,7 +266,8 @@ func _fit_canvas(nodes: Array) -> void:
|
||||
maxl = maxi(maxl, int(layer[k]))
|
||||
for k in slot.keys():
|
||||
maxslot = maxi(maxslot, int(slot[k]))
|
||||
_content_size = Vector2(70 + maxl * 122 + NODE_HALF.x + 8.0, 52 + maxslot * 58 + NODE_HALF.y + 8.0)
|
||||
_content_size = Vector2(LAYER_BASE_X + maxl * LAYER_STEP_X + NODE_HALF.x + 8.0,
|
||||
SLOT_BASE_Y + maxslot * SLOT_STEP_Y + NODE_HALF.y + 8.0)
|
||||
_content_size = _content_size.max(Vector2(620, 240)) # 下限 = 旧定值画布(小图观感不变)
|
||||
_canvas.custom_minimum_size = _content_size
|
||||
|
||||
@@ -450,7 +449,8 @@ func _layout(nodes: Array, canvas: Control) -> Dictionary:
|
||||
var pos := {}
|
||||
var origin := (canvas.size - _content_size) / 2.0
|
||||
for node in nodes:
|
||||
pos[node] = origin + Vector2(70 + int(layer[node]) * 122, 52 + int(slot[node]) * 58)
|
||||
pos[node] = origin + Vector2(LAYER_BASE_X + int(layer[node]) * LAYER_STEP_X,
|
||||
SLOT_BASE_Y + int(slot[node]) * SLOT_STEP_Y)
|
||||
return pos
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user