feat(mana): PlayerStats mana_heat/leech+gain_mana/spend_hp_cost+击杀回蓝;SpellContext hp_cost_accum
This commit is contained in:
@@ -26,9 +26,15 @@ var resistance: float = 0.0 # 0.0~1.0
|
||||
var mana: float = 100.0
|
||||
var mana_max: float = 100.0
|
||||
var mana_regen: float = 5.0 # 每秒回复
|
||||
var mana_heat: float = 0.0 # 递增蓝耗热值(0=无,1=蓝耗翻倍)
|
||||
var mana_leech: float = 0.0 # 击杀回蓝量(换杖/换牌重算)
|
||||
|
||||
func _ready() -> void:
|
||||
EventBus.subscribe(EventID.PLAYER_DAMAGED, _on_player_damaged)
|
||||
EventBus.subscribe(EventID.ENEMY_KILLED, _on_enemy_killed)
|
||||
|
||||
func _on_enemy_killed(_payload: Dictionary) -> void:
|
||||
gain_mana(mana_leech)
|
||||
|
||||
## 升级曲线:roundf(10 × 1.4^(level-1)),P6-N16
|
||||
## Level 1→2: 10 XP; Level 5→6: ≈ 54 XP
|
||||
@@ -91,6 +97,22 @@ func regen_mana(delta: float) -> void:
|
||||
return
|
||||
mana = min(mana_max, mana + mana_regen * delta)
|
||||
|
||||
## 击杀回蓝(魔力虹吸)
|
||||
func gain_mana(n: float) -> void:
|
||||
if n <= 0.0:
|
||||
return
|
||||
mana = min(mana_max, mana + n)
|
||||
stats_changed.emit()
|
||||
|
||||
## 主动 HP 代价(infinite_spells / heavy_cost)——直接扣血,不走难度减伤
|
||||
func spend_hp_cost(amount: float) -> void:
|
||||
if amount <= 0.0:
|
||||
return
|
||||
hp = max(0.0, hp - amount)
|
||||
stats_changed.emit()
|
||||
if hp <= 0.0:
|
||||
EventBus.emit(EventID.PLAYER_DIED, {})
|
||||
|
||||
func _on_player_damaged(payload: Dictionary) -> void:
|
||||
take_damage(float(payload.get("damage", 0.0)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user