extends CharacterBody2D const MAGNET_FORCE: int = 1000 func _ready(): add_to_group("magnets") max_slides = 1 func _physics_process(delta): var acceleration: Vector2 = Vector2.ZERO #calc acceleration to other magnets for iter in get_tree().get_nodes_in_group("magnets"): if iter == self: continue var dir: Vector2 = (iter.position - position).normalized() var dist: float = (iter.position - position).length() acceleration += dir * (MAGNET_FORCE / dist) #if moving, rotate to face that direction if velocity >= Vector2.ONE: var dest: float = acceleration.angle() + TAU/4 var change: float = dest - rotation #rotate faster when closer to 0 rotate(change) #apply to velocity velocity += acceleration * delta #move and stop on collision var collided: bool = move_and_slide() if collided: velocity = Vector2.ZERO