I am creating a turret on a platform. Think it as a battleship turret.
The turret can rotate, but it must be limited to max 2*PI/3 radians, clockwise and counterclocwise
The very problem is the turret won't stop at 2*PI/3 radians relative to the platform IF the platform rotate beyond 0 radian or PI radiant
With rotation limit > PI radians, the clamp() method returns bizarre behavior. It is only good if platform's rotation is 0 radian or PI radian.
In addition, the turret also lerp-ing, so using collision body to blockade the rotation is useless
I am already using KinematicBody2D or Sprite node to solve this problem, but I'm stuck now.
This is my base code without any attempt to limit rotation of the turret:
var turret_rotation_speed = PI/4 #as in radian/second
custom_global.main_target_position = get_global_mouse_position()
target_vector_angle = (custom_global.main_target_position - global_position).angle()
var r = global_rotation
#define the permitted max angle change (the delta)
var angle_delta = turret_rotation_speed * delta
#smoothen the angle by interpolation
target_vector_angle = lerp_angle(r, target_vector_angle, 1.0)
#clamp turret angle relative to target position and permitted max angle change
target_vector_angle = clamp(target_vector_angle, r - angle_delta, r + angle_delta)
#rotate turret based on ship's vs target angle
global_rotation = target_vector_angle
Any idea to solve the rotation limiter?