37 lines
1.4 KiB
GDScript
37 lines
1.4 KiB
GDScript
## 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
|
|
|
|
|
|
# 血条短 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))
|