extends CharacterBody2D
const FLOAT_EPSILON = 0.001
@onready var shape = $CollisionShape2D
@onready var ray: RayCast2D = $Ray
var settled = false
var rotating = false
var current = 0.0
var touched_ground_again = false
static func compare_floats(a, b, epsilon = FLOAT_EPSILON):
var diff = abs(a - b)
return diff <= epsilon
func raycast(origin, target):
var space_state = get_world_2d().direct_space_state
var query = PhysicsRayQueryParameters2D.create(origin, target)
return space_state.intersect_ray(query)
func _physics_process(delta):
if !settled && ray.get_collider():
settled = true
if ray.get_collider():
touched_ground_again = true
if !settled:
return
if !ray.get_collider() && touched_ground_again:
rotating = true
if rotating:
var target = lerp(rotation_degrees, current + 90, 0.3)
if compare_floats(rotation_degrees, current + 90.0):
touched_ground_again = false
current += 90.0
rotating = false
return
velocity = transform.x * 80
move_and_slide()
I know the code is terrible, i'm mostly messing around