direction

Blitz3D Forums/Blitz3D Beginners Area/direction

The algorithm is very simple: it's subtraction. The trickery lies in the fact that your result may be off by n*360 where n is any integer, positive or negative. If you're correcting the range of your angles at every step, bram's code will be fine (since it only deals with results off by +-720,) but I prefer a more robust approach:

; calculate difference
relative_angle = target_angle - initial_angle

; simplify range to [0,360)
relative_angle = relative_angle Mod 360 : If relative_angle < 0 Then relative_angle = relative_angle + 360

; modify simplified range to (-180,180]
If relative_angle > 180 Then relative_angle = relative_angle - 360

If relative_angle < 0 Then turn_counter_clockwise()
If relative_angle > 0 Then turn_clockwise()


Another way to modify the range would be

While relative_angle < -180 : relative_angle = relative_angle + 360 : Wend
While relative_angle >= 180 : relative_angle = relative_angle - 360 : Wend