diff --git a/game/presentation/views/battle_stage_view.gd b/game/presentation/views/battle_stage_view.gd index b31ce8f6..de06b01d 100644 --- a/game/presentation/views/battle_stage_view.gd +++ b/game/presentation/views/battle_stage_view.gd @@ -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 diff --git a/game/presentation/views/standee_view.gd b/game/presentation/views/standee_view.gd index c0115984..e44dfe1f 100644 --- a/game/presentation/views/standee_view.gd +++ b/game/presentation/views/standee_view.gd @@ -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: diff --git a/game/smoke/ui_probe.gd b/game/smoke/ui_probe.gd index 13d15b76..b77a7c1a 100644 --- a/game/smoke/ui_probe.gd +++ b/game/smoke/ui_probe.gd @@ -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: