feat(mana): PlayerStats 蓝池状态 + spend/regen/set_pool + reset 置满

This commit is contained in:
2026-07-20 16:26:12 +08:00
parent 94a78d1a4c
commit 17aaad3589
+28
View File
@@ -22,6 +22,11 @@ var cpu_limit: int = 5 # 控制 MAX_OPS = cpu_limit * 40
var armor: float = 0.0 var armor: float = 0.0
var resistance: float = 0.0 # 0.0~1.0 var resistance: float = 0.0 # 0.0~1.0
# ── 魔力(MVP)─────────────────────────────────────────
var mana: float = 100.0
var mana_max: float = 100.0
var mana_regen: float = 5.0 # 每秒回复
func _ready() -> void: func _ready() -> void:
EventBus.subscribe(EventID.PLAYER_DAMAGED, _on_player_damaged) EventBus.subscribe(EventID.PLAYER_DAMAGED, _on_player_damaged)
@@ -64,11 +69,34 @@ func heal(amount: float) -> void:
func get_hp_percent() -> float: func get_hp_percent() -> float:
return hp / max(hp_max, 0.001) return hp / max(hp_max, 0.001)
## 换杖时设定蓝池上限/回速,并把当前蓝夹到 [0, max]
func set_mana_pool(max_v: float, regen: float) -> void:
mana_max = max_v
mana_regen = regen
mana = clampf(mana, 0.0, mana_max)
stats_changed.emit()
## 花费魔力;够则扣除返回 true,否则不变返回 false
func spend_mana(cost: float) -> bool:
if mana < cost:
return false
mana -= cost
stats_changed.emit()
return true
## 每帧回蓝(PlayerManager 驱动)。不 emit stats_changed —— HUD 每帧直接读 mana
## 避免回蓝过程每帧发信号触发商店刷新。
func regen_mana(delta: float) -> void:
if mana >= mana_max:
return
mana = min(mana_max, mana + mana_regen * delta)
func _on_player_damaged(payload: Dictionary) -> void: func _on_player_damaged(payload: Dictionary) -> void:
take_damage(float(payload.get("damage", 0.0))) take_damage(float(payload.get("damage", 0.0)))
func reset_for_run() -> void: func reset_for_run() -> void:
hp = hp_max hp = hp_max
mana = mana_max
gold = 0 gold = 0
xp = 0 xp = 0
level = 1 level = 1