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)