feat(mana): PlayerStats 蓝池状态 + spend/regen/set_pool + reset 置满
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user