From 023a9ed61e4ddd50111c3a91a3e3336e40c716b2 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sat, 18 Jan 2025 21:16:20 +1100 Subject: [PATCH] Don't code before bed --- Godot/Magnet/magnet.gd | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/Godot/Magnet/magnet.gd b/Godot/Magnet/magnet.gd index 00f0ea2..d1f3498 100644 --- a/Godot/Magnet/magnet.gd +++ b/Godot/Magnet/magnet.gd @@ -1,23 +1,44 @@ extends CharacterBody2D -const MAGNET_FORCE = 100 +const MAGNET_FORCE: int = 1000 + +@export var acceleration: Vector2 = Vector2.ZERO func _ready(): add_to_group("magnets") max_slides = 1 func _physics_process(delta): - var acceleration: Vector2 = Vector2() + acceleration = Vector2() - #calc direction + #calc acceleration to other magnets for iter in get_tree().get_nodes_in_group("magnets"): if iter == self: continue - acceleration += (iter.position - position).normalized() * MAGNET_FORCE + + 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 - var collided: bool = move_and_slide() + #move and stop on collision + var collided: bool = move_and_slide() if collided: velocity = Vector2.ZERO