From 17aaad358993d882e52808d4fb14b92f62a461d3 Mon Sep 17 00:00:00 2001 From: Joywayer Date: Mon, 20 Jul 2026 16:26:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(mana):=20PlayerStats=20=E8=93=9D=E6=B1=A0?= =?UTF-8?q?=E7=8A=B6=E6=80=81=20+=20spend/regen/set=5Fpool=20+=20reset=20?= =?UTF-8?q?=E7=BD=AE=E6=BB=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/autoloads/player_stats.gd | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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