@icon("res://assets/editor/64x64/fc1098.png") extends Node2D class_name ModifierManager signal modifier_added(modifier) signal modifier_removed(modifier) signal stats_updated() var stats_component: StatsComponent # Stores all active modifiers var modifiers: Array[Modifier] = [] func _ready() -> void: Log.pr("ModifierManager initialized") Log.pr("StatsComponent: ", stats_component) func set_stats(stats: StatsComponent) -> void: self.stats_component = stats func add_modifier(modifier: Modifier) -> void: modifiers.append(modifier) modifier.on_equip(get_parent()) emit_signal("modifier_added", modifier) recalculate_stats() func remove_modifier(modifier_id: String) -> void: for i in range(modifiers.size()): if modifiers[i].id == modifier_id: var modifier = modifiers[i] modifier.on_unequip(get_parent()) modifiers.remove_at(i) emit_signal("modifier_removed", modifier) recalculate_stats() break func recalculate_stats() -> void: # Reset stats to base values stats_component.reset_stats() # Sort modifiers by priority modifiers.sort_custom(func(a, b): return a.priority > b.priority) # First pass: Apply OVERRIDE modifiers (highest priority first) for modifier in modifiers: if modifier.modifier_type == Modifier.ModifierType.OVERRIDE: _apply_modifier_stats(modifier) # Second pass: Apply ADDITIVE modifiers for modifier in modifiers: if modifier.modifier_type == Modifier.ModifierType.ADDITIVE: _apply_modifier_stats(modifier) # Third pass: Apply MULTIPLICATIVE modifiers for modifier in modifiers: if modifier.modifier_type == Modifier.ModifierType.MULTIPLICATIVE: _apply_modifier_stats(modifier) # Last pass: Apply CONDITIONAL modifiers for modifier in modifiers: if modifier.modifier_type == Modifier.ModifierType.CONDITIONAL: _apply_modifier_stats(modifier) emit_signal("stats_updated") func _apply_modifier_stats(modifier: Modifier) -> void: if modifier.has_method("apply_stats_modification"): modifier.apply_stats_modification(stats_component)