extends CharacterBody2D const MAGNET_FORCE: int = 1000 @export var acceleration: Vector2 = Vector2.ZERO func _ready(): add_to_group("magnets") max_slides = 1 func _physics_process(delta): acceleration = Vector2() #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 var decimal: float = change - snapped(change, 1) print (change, " : ", 1 - decimal) #rotate faster when closer to 0 rotate(lerp(0.0, change, 1 - decimal) * delta) #NOTE: this doesn't work the way I want it to ;_; #apply to velocity velocity += acceleration * delta #move and stop on collision var collided: bool = move_and_slide() if collided: velocity = Vector2.ZERO