diff --git a/scripts/autoloads/player_stats.gd b/scripts/autoloads/player_stats.gd index 21d6d9e..abf4275 100644 --- a/scripts/autoloads/player_stats.gd +++ b/scripts/autoloads/player_stats.gd @@ -22,6 +22,11 @@ var cpu_limit: int = 5 # 控制 MAX_OPS = cpu_limit * 40 var armor: float = 0.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: EventBus.subscribe(EventID.PLAYER_DAMAGED, _on_player_damaged) @@ -64,11 +69,34 @@ func heal(amount: float) -> void: func get_hp_percent() -> float: 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: take_damage(float(payload.get("damage", 0.0))) func reset_for_run() -> void: hp = hp_max + mana = mana_max gold = 0 xp = 0 level = 1