34 lines
948 B
GDScript
34 lines
948 B
GDScript
extends PathFollow2D
|
|
|
|
export (int) var threshold = 5 # Range to snap around axis direction, in degrees.
|
|
|
|
func _ready():
|
|
set_unit_offset(0.0)
|
|
|
|
func snap_rotation(r):
|
|
"""
|
|
Snap rotation to multiples of 45°
|
|
Also snaps within a certain range of direction axis
|
|
"""
|
|
if r >= 0 - threshold and r <= 0 + threshold: # Right
|
|
r = 0
|
|
elif r >= 180 - threshold or r <= -180 + threshold: # Left
|
|
r = 180
|
|
elif r >= 90 - threshold and r <= 90 + threshold: # Down
|
|
r = 90
|
|
elif r >= -90 - threshold and r <= -90 + threshold: # Up
|
|
r = -90
|
|
elif r > 0 + threshold and r < 90 - threshold:
|
|
r = 45
|
|
elif r > 90 + threshold and r < 180 - threshold:
|
|
r = 135
|
|
elif r > -90 + threshold and r < 0 - threshold:
|
|
r = -45
|
|
elif r > -180 + threshold and r < -90 - threshold:
|
|
r = -135
|
|
return r
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(_delta):
|
|
set_rotation_degrees( snap_rotation(get_rotation_degrees()) )
|