fix(ui): 敌方站桩护甲类型图标化+AC数值退役(2026-09-26 用户终裁)

- 底座下名字行改 HBox 组合:护甲类型图标占位 Label + 名字 Label;文本格式「名字 · 类型·AC%d」退役
- 图标形状+色相双通道占位(◇轻甲·灰石 / ◆魔法护甲·小人蓝 / ▣重甲·深金;避开 Boss 专属紫赤 #8F2F6A 与妨害紫),终稿图标资产归美术批
- _armor_class 字段与 set_data 读取删除(站桩视图零消费方;核心/数据层 armor_class 不动);_armor 保留供图标
- battle_stage_view._card_by_name 与 smoke/ui_probe 名字行断言同步新节点口径(ui_probe 增护甲图标非空检查)
- 全量冒烟 557 项 0 失败退出码 0
This commit is contained in:
DKChan committed 2026-09-25 20:41:35 +08:00
1 parent 78cc064fff
commit 171a2ddee5
3 files changed
+39 -18

No files matched your search

+1 -1
View File
@@ -106,7 +106,7 @@ func _card_by_name(display_name: String) -> StandeeView:
for c in _cards:
if not is_instance_valid(c):
continue
if String(c._name_line.text).contains(display_name):
if String(c._name_label.text).contains(display_name): # 名字行图标化批 2026-09-26:名字 Label 独立节点(_name_line 已改 HBox 容器)
return c
return null
+36 -15
View File
@@ -7,15 +7,19 @@
# 词汇单点复用 StatusSlotRow.EFFECT_ICON,未知键同款 fail-fast + ? 占位)。
# 敌方专属:顺位徽标悬浮头顶;意图三档动作动画占位(表现层升级批拍板:不显示技能名——普攻零表示 /
# 攻击系 ⚔ / 增益系 ✦ / 妨害系 ☠ / 蓄力 = ⚔ 金档;开轮摇定播一次性短动画后静帧保持,
# 挖掘期不循环——art-bible §2.1 能量纪律,终稿动画密度归战斗表现批);底座下名字·护甲·AC 常驻行
# (护甲类型+AC 恒常驻——敌人技能池批克制对策可读性义务)。
# 挖掘期不循环——art-bible §2.1 能量纪律,终稿动画密度归战斗表现批);底座下 护甲类型图标+名字
# 常驻行(2026-09-26 用户终裁:AC 数值不展示、护甲类型图标化——敌人技能池批克制对策可读性
# 义务降级承载:类型保留可读、数值移除;HP 信息已足够)。
# 死亡呈现(敌人系统 资产下限):灰化 + 摇摆塌陷残位,禁瞬消;受击闪白沿用。
# Date: 2026-09-20(站桩改造批——hero_card_view/enemy_card_view 退役删除)
class_name StandeeView
extends Control
const CHARGE_SKILL_IDS := ["heavy"]
const ARMOR_NAMES := {"light": "轻甲", "ward": "魔法护甲", "heavy": "重甲"}
# 护甲类型图标占位——终稿图标资产归美术批(2026-09-26 用户终裁:AC 数值不展示,类型图标化)。
# 形状+色相双通道(art-bible):轻甲=◇ 空心菱(轻薄)·灰石中性 / 魔法护甲=◆ 实心晶菱·小人蓝
# (避开 Boss 专属紫赤 #8F2F6A 与妨害紫——两者各有专属语义)/ 重甲=▣ 实心方板(厚重板甲)·深金。
const ARMOR_ICONS := {"light": "◇", "ward": "◆", "heavy": "▣"}
var _kind := "enemy"
var _portrait: Label
@@ -25,11 +29,12 @@ var _hp_bar: ProgressBar
var _order_badge: Label = null
var _intent_badge: Label = null
var _status_row: HBoxContainer
var _name_line: Label = null
var _name_line: HBoxContainer = null
var _armor_icon: Label = null
var _name_label: Label = null
var _display_name := ""
var _enemy_id := ""
var _armor := "light"
var _armor_class := 0
var _dead := false
var _hp_tween: Tween
@@ -100,17 +105,25 @@ func _init(kind: String = "enemy") -> void:
UiKit.panel_flat(UiKit.STONE.darkened(0.35), UiKit.STONE.darkened(0.1), 6, 1))
add_child(_platform)
# 底座下名字·护甲·AC 常驻行(敌 only)
# 底座下 护甲类型图标+名字 常驻行(敌 only——2026-09-26 用户终裁:AC 数值不展示,类型图标化)
if kind == "enemy":
_name_line = UiKit.label("", 12, false)
_name_line.add_theme_color_override("font_color", UiKit.INK_TITLE)
_name_line.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
_name_line.clip_text = true
_name_line.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
_name_line = HBoxContainer.new()
_name_line.alignment = BoxContainer.ALIGNMENT_CENTER
_name_line.add_theme_constant_override("separation", 3)
_name_line.mouse_filter = Control.MOUSE_FILTER_IGNORE
_name_line.set_anchors_preset(Control.PRESET_BOTTOM_WIDE)
_name_line.offset_top = -8.0
_name_line.mouse_filter = Control.MOUSE_FILTER_IGNORE
add_child(_name_line)
_armor_icon = UiKit.label("", 12, true)
_armor_icon.mouse_filter = Control.MOUSE_FILTER_IGNORE
_name_line.add_child(_armor_icon)
_name_label = UiKit.label("", 12, false)
_name_label.add_theme_color_override("font_color", UiKit.INK_TITLE)
_name_label.clip_text = true
_name_label.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
_name_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
_name_label.mouse_filter = Control.MOUSE_FILTER_IGNORE
_name_line.add_child(_name_label)
# ---- setter 面(投影契约与旧敌卡一致——presenter 装配面零改排) ----
@@ -121,7 +134,6 @@ func set_data(d: Dictionary) -> void:
_display_name = String(d.get("display_name", "敌人"))
_enemy_id = String(d.get("enemy_id", ""))
_armor = String(d.get("armor_type", "light"))
_armor_class = int(d.get("armor_class", 0))
_hp_bar.max_value = maxi(1, int(d.get("max_hp", 1)))
_set_hp(int(d.get("hp", 0)))
set_order(int(d.get("order", 1)))
@@ -280,8 +292,17 @@ func _revive() -> void:
func _update_name_line() -> void:
if _name_line != null:
_name_line.text = "%s · %s·AC%d" % [_display_name, String(ARMOR_NAMES.get(_armor, "轻甲")), _armor_class]
if _name_line == null:
return
_name_label.text = _display_name
var col: Color = UiKit.STONE # 轻甲 = 灰石(中性轻薄)
match _armor:
"ward":
col = UiKit.HERO_BLUE # 魔法护甲 = 小人蓝(避开 Boss 专属紫赤/妨害紫)
"heavy":
col = UiKit.GOLD_DEEP # 重甲 = 深金(厚重达意金)
_armor_icon.text = String(ARMOR_ICONS.get(_armor, "◇"))
_armor_icon.add_theme_color_override("font_color", col)
func _refresh_portrait_glyph() -> void:
+2 -2
View File
@@ -109,8 +109,8 @@ func _ready() -> void:
# E 区道具面板已随可选类删除下线(格面资源批 2026-09-15)——四区构建由其余断言覆盖
# ---- 敌方站桩投影(顺位徽标/意图三档动作动画占位——敌人系统×4;2026-09-20 全站桩拍板)----
var standee = main.stage.enemy_box.get_child(0)
if standee != null and standee._name_line.text == "":
problems.append("敌立绘名字行为空")
if standee != null and (standee._name_label.text == "" or standee._armor_icon.text == ""):
problems.append("敌立绘名字行缺失(名字或护甲类型图标占位为空——2026-09-26 终裁:AC 不展示、类型图标化)")
if standee != null and standee._intent_badge == null:
problems.append("敌立绘意图指示缺失")
elif standee != null: