class_name XPOrb extends Node2D @export var value: float @export var max_speed: float = 100.0 @export var min_speed: float = 10.0 var player: Player func _ready() -> void: player = get_tree().get_first_node_in_group(GlobalConst.GROUP_PLAYER) func _physics_process(delta: float) -> void: if not player: return var to_player = player.global_position - global_position var dist = to_player.length() var attract_radius = player.player_stats.get_final("pickup_radius", player.modifiers) var adjusted_max_speed = clampf((attract_radius / 50.0) * max_speed, min_speed, max_speed * 5) var adjusted_min_speed = clampf((attract_radius / 50.0) * min_speed, min_speed, min_speed * 5) if dist < 4: return if dist < attract_radius: var dir = to_player.normalized() var speed = lerp( adjusted_min_speed, adjusted_max_speed, (attract_radius - dist) / attract_radius ) global_position += dir * speed * delta