38 lines
1.3 KiB
GDScript
38 lines
1.3 KiB
GDScript
extends Node
|
|
|
|
func _ready() -> void:
|
|
EventBus.role_changed.connect(_on_role_changed)
|
|
|
|
func _on_role_changed(player: Node, _role_type: int) -> void:
|
|
var role: Node = player.get_node_or_null("Role")
|
|
if not role:
|
|
return
|
|
var ability_set: AbilitySet = role.get_ability_set()
|
|
if not ability_set:
|
|
return
|
|
var damage_mult := 1.0
|
|
var heal_mult := 1.0
|
|
var shield_mult := 1.0
|
|
for ability in ability_set.abilities:
|
|
if ability and ability.type == Ability.Type.PASSIVE:
|
|
var bonus: float = ability.damage / 100.0
|
|
match ability.passive_stat:
|
|
"damage":
|
|
damage_mult = 1.0 + bonus
|
|
"heal":
|
|
heal_mult = 1.0 + bonus
|
|
"shield":
|
|
shield_mult = 1.0 + bonus
|
|
Stats.set_stat(player, "buff_damage", damage_mult)
|
|
Stats.set_stat(player, "buff_heal", heal_mult)
|
|
Stats.set_stat(player, "buff_shield", shield_mult)
|
|
var base: BaseStats = Stats.get_base(player)
|
|
if base:
|
|
var new_max: float = base.max_shield * shield_mult
|
|
Stats.set_stat(player, "max_shield", new_max)
|
|
var shield: float = Stats.get_stat(player, "shield")
|
|
shield = min(shield, new_max)
|
|
Stats.set_stat(player, "shield", shield)
|
|
EventBus.shield_changed.emit(player, shield, new_max)
|
|
EventBus.buff_changed.emit(player, "damage", damage_mult)
|