## VERTICAL SLICE - NOT FOR PRODUCTION ## 站桩身份与命值态件(StandeeBody 拆件——单一变化原因=战斗结算快照投影的字段形态): ## 站桩是谁、活没活、血量几何的唯一账面——身份五元组(种类/名/id/护甲/顺位)+存活位+血量账与两条血量系 tween 槽。 ## 无 class_name(类名缓存面纪律)——经宿主 standee_body preload 引用(st 实例名沿用); ## hp_value 属性 setter 经 _owner 回引触发宿主重绘语义逐字。 extends RefCounted var _owner: Node2D = null var _kind := "enemy" var _display_name := "" var _enemy_id := "" var _armor := "light" var _order := 1 var _dead := false var _hp_max := 1.0 var _hp_cur := 0 # 血量数字显示面(HUD框架 验收「血量数字可读」) var hp_value := 1.0: # 血条值 0..1(直角递减——tween_property 目标,逐行刷新重启不累积) set(v): hp_value = clampf(v, 0.0, 1.0) _owner.queue_redraw() var _hp_tween: Tween var _hp_flash_tw: Tween func _init(owner: Node2D) -> void: _owner = owner # ---- 公开交付与读投影面(pres封装 A2——宿主经此读写,字段保持私有)---- # 身份四元组一次交付(生成期/配置期同口——宿主 _init 与 set_data 共用) func configure_identity(kind: String, display_name: String, enemy_id: String, armor: String) -> void: _kind = kind _display_name = display_name _enemy_id = enemy_id _armor = armor func set_max_hp(v: float) -> void: _hp_max = v func set_order(i: int) -> void: _order = i func set_dead(v: bool) -> void: _dead = v func is_dead() -> bool: return _dead func kind() -> String: return _kind func armor() -> String: return _armor func display_name() -> String: return _display_name func enemy_id() -> String: return _enemy_id func order() -> int: return _order func hp_cur() -> int: return _hp_cur func hp_max() -> float: return _hp_max # 受击闪白归位(宿主 flash_hit 转调——tween 句柄留本件自持,目标=宿主 modulate) func play_hp_flash() -> void: if _hp_flash_tw != null and _hp_flash_tw.is_valid(): _hp_flash_tw.kill() _hp_flash_tw = _owner.create_tween() _hp_flash_tw.tween_property(_owner, "modulate", Color(1.6, 1.4, 1.2), UiKit.motion(0.08)) _hp_flash_tw.tween_property(_owner, "modulate", Color(1, 1, 1) if not _dead else Color(0.62, 0.62, 0.62, 0.9), UiKit.motion(0.2)) # 血条短 tween 递减(直角递减占位);逐行刷新时重启 tween 不累积 func apply_hp(hp: int) -> void: _hp_cur = clampi(hp, 0, int(_hp_max)) var target := float(_hp_cur) / _hp_max if _hp_tween != null and _hp_tween.is_valid(): _hp_tween.kill() _hp_tween = _owner.create_tween() _hp_tween.tween_property(self, "hp_value", target, UiKit.motion(0.15))