refactor(ui): C 区精简批——信息归属拍板代码实装(2026-09-26):①C 区面板=攻击+护甲AC 数据框+魔法道具槽(预留 4 空槽)+本关强化列表(预留空态隐藏)——HP 条/立绘占位/状态槽/RAP/GP/钥石退役;②状态效果唯一展示面=B 区站桩(compact 档 StatusSlotRow 整体迁入——16px 图标+层数角标+悬停 tooltip 义务随迁,BUG-0001 回归组件同源;清空反馈逐槽化光+微文案随迁站桩);③RAP 读数迁 D 区 AP 条贴弃图刷新消费口(点阵+数字+清零脉冲微文案+拒绝脉冲载体随迁);④hud_presenter 单投喂改造(B/C 双投喂重复展示退役)+钱包投喂退役(GP/钥石迁出战斗屏,去向=关卡画面/结算/营地归对应 UX 批);冒烟 557/0+五探针全绿
This commit is contained in:
1 parent
d6eee49945
commit
effb98e57d
9 files changed
+203
-224
No files matched your search
@@ -2,9 +2,9 @@
|
||||
# 实现 GDD:design/ux/battle.md(B 区全站桩形态——2026-09-20 用户看对照样张拍板,台账 99:
|
||||
# 主角与敌人均为无框立绘+底座,英雄卡/敌人卡卡片式整体退役禁再提)。
|
||||
# 形态契约:无框立绘(程序占位字形;set_portrait_texture = 资产挂点,战斗表现样张批落位零代码换装)
|
||||
# + 底座;血条悬浮头顶;状态小图标一排挂血条正下方(2026-09-24 状态图标接入批:定稿 PNG 纹理
|
||||
# 取代程序化占位字形,极性染色退役——绿↑红↓极性语言内化于图标本体;层数 ×N 角标保留;
|
||||
# 词汇单点复用 StatusSlotRow.EFFECT_ICON,未知键同款 fail-fast + ? 占位)。
|
||||
# + 底座;血条悬浮头顶;状态效果唯一展示面挂血条正下方(2026-09-26 C 区精简批:compact 档
|
||||
# StatusSlotRow 组件整体迁入——定稿 PNG 图标+层数 ×N 角标+悬停 tooltip〔来源+语义+剩余〕,
|
||||
# tooltip 义务自 C 区状态槽并入;空态 = 图标行隐藏)。
|
||||
# 敌方专属:顺位徽标悬浮头顶;意图三档动作动画占位(表现层升级批拍板:不显示技能名——普攻零表示 /
|
||||
# 攻击系 ⚔ / 增益系 ✦ / 妨害系 ☠ / 蓄力 = ⚔ 金档;开轮摇定播一次性短动画后静帧保持,
|
||||
# 挖掘期不循环——art-bible §2.1 能量纪律,终稿动画密度归战斗表现批);底座下 护甲类型图标+名字
|
||||
@@ -28,7 +28,9 @@ var _platform: Panel
|
||||
var _hp_bar: ProgressBar
|
||||
var _order_badge: Label = null
|
||||
var _intent_badge: Label = null
|
||||
var _status_row: HBoxContainer
|
||||
var _top_row: VBoxContainer
|
||||
var slot_row: StatusSlotRow # 状态效果唯一展示面(2026-09-26 C 区精简批——compact 档组件整体迁入;
|
||||
# 悬停 tooltip 来源+语义+剩余 义务随之从 C 区状态槽并入,主角/敌方共用)
|
||||
var _name_line: HBoxContainer = null
|
||||
var _armor_icon: Label = null
|
||||
var _name_label: Label = null
|
||||
@@ -46,6 +48,7 @@ func _init(kind: String = "enemy") -> void:
|
||||
|
||||
# 头顶悬浮层:血条(敌附顺位徽标)+ 状态小图标行
|
||||
var top := VBoxContainer.new()
|
||||
_top_row = top
|
||||
top.set_anchors_preset(Control.PRESET_TOP_WIDE)
|
||||
top.offset_left = 8.0
|
||||
top.offset_right = -8.0
|
||||
@@ -64,10 +67,12 @@ func _init(kind: String = "enemy") -> void:
|
||||
_hp_bar.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_hp_bar.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
hp_row.add_child(_hp_bar)
|
||||
_status_row = HBoxContainer.new()
|
||||
_status_row.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||
_status_row.add_theme_constant_override("separation", 4)
|
||||
top.add_child(_status_row)
|
||||
slot_row = StatusSlotRow.new()
|
||||
slot_row.compact = true # 站桩迷你档——图标 16px+层数角标,tooltip 全明细
|
||||
slot_row.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||
slot_row.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
|
||||
slot_row.mouse_filter = Control.MOUSE_FILTER_IGNORE # 行容器放行鼠标事件给槽位(悬停 tooltip)
|
||||
top.add_child(slot_row)
|
||||
|
||||
# 立绘(程序占位字形)
|
||||
_portrait = UiKit.label("人" if kind == "hero" else "敌", 42, true)
|
||||
@@ -164,32 +169,28 @@ func set_idle() -> void:
|
||||
set_effects([])
|
||||
|
||||
|
||||
# 主角/敌方共用——状态小图标行重建(B 区迷你版:定稿纹理 16px + 层数 ×N 角标;
|
||||
# 完整 tooltip 义务归 C 区状态槽。2026-09-24 状态图标接入批:占位字形+极性染色退役)
|
||||
# 主角/敌方共用——状态效果唯一展示面(2026-09-26 C 区精简批:compact 档 StatusSlotRow 整体迁入,
|
||||
# 原 B 区迷你字形行退役;悬停 tooltip(来源+语义+剩余结算次数)义务自 C 区状态槽并入本组件;
|
||||
# 空态 = 图标行隐藏不占位(增益状态 EC12))
|
||||
func set_effects(effects: Array) -> void:
|
||||
for c in _status_row.get_children():
|
||||
_status_row.remove_child(c)
|
||||
c.queue_free()
|
||||
for eff in effects:
|
||||
var tex := _icon_tex(String(eff.get("effect_id", "")))
|
||||
var layers := maxi(1, int(eff.get("layers", 1)))
|
||||
if tex != null:
|
||||
var icon := TextureRect.new()
|
||||
icon.texture = tex
|
||||
icon.custom_minimum_size = Vector2(16, 16) # 32px 源 ÷2 整数档缩放
|
||||
icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
||||
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
icon.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR
|
||||
icon.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_status_row.add_child(icon)
|
||||
else:
|
||||
var ph := UiKit.label(StatusSlotRow.ICON_PLACEHOLDER, 12, true) # release 回退占位(debug 已断言)
|
||||
ph.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_status_row.add_child(ph)
|
||||
if layers > 1:
|
||||
var lab := UiKit.label("×%d" % layers, 12, true)
|
||||
lab.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_status_row.add_child(lab)
|
||||
slot_row.set_effects(effects)
|
||||
slot_row.visible = not effects.is_empty()
|
||||
|
||||
|
||||
# battle_over:状态图标行全清可见反馈(增益状态×4④ 载体迁移——逐槽化光 + 微文案,
|
||||
# 自 C 区状态槽迁入;主角侧调用,敌方不适用)
|
||||
func set_effects_cleared_feedback() -> void:
|
||||
slot_row.visible = true
|
||||
slot_row.set_cleared_feedback()
|
||||
var note := UiKit.label("状态随战斗结束消散", 11, false)
|
||||
note.add_theme_color_override("font_color", UiKit.STONE_FAINT)
|
||||
note.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
note.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_top_row.add_child(note)
|
||||
var tw := create_tween()
|
||||
tw.tween_interval(1.2)
|
||||
tw.tween_property(note, "modulate:a", 0.0, UiKit.motion(0.8))
|
||||
tw.tween_callback(note.queue_free)
|
||||
|
||||
|
||||
func set_order(i: int) -> void:
|
||||
@@ -321,13 +322,3 @@ func _refresh_portrait_glyph() -> void:
|
||||
_portrait.text = "█" # 最大体量
|
||||
_:
|
||||
_portrait.text = "敌"
|
||||
|
||||
|
||||
# 状态图标键解析(词汇单点复用 C 区 StatusSlotRow——HUD框架:查不到的键按错误处理,
|
||||
# 立即断言 + ? 占位 + 诊断,禁止静默显示空图标)
|
||||
func _icon_tex(effect_id: String) -> Texture2D:
|
||||
if StatusSlotRow.EFFECT_ICON.has(effect_id):
|
||||
return StatusSlotRow.EFFECT_ICON[effect_id]
|
||||
push_error("[站桩] 未知状态图标键(映射表外键——立即断言): %s" % effect_id)
|
||||
assert(false, "未知状态图标键: " + effect_id)
|
||||
return null
|
||||
Reference in new issue
Block a user