I’m making a game and in it is a computer controlled gun turret.
The gun turret can rotate 360 degrees.
It uses trig to find out the angle it needs to aim the gun (objdeg) and the current angle of the gun is stored in (gundeg)
the following code rotates the gun at a set speed
if (objdeg > gundeg)
{
gundeg++;
}
if (objdeg < gundeg)
{
gundeg--;
}
The problem is that if there is an object at 10 degrees, the gun rotates, shoots and destroys it, if another target appears at 320 degrees, the gun will rotate 310 degrees anticlockwise instead of just rotating 60 degrees clockwise to hit it.
How can I fix my code so it won’t act stupidly?
If you need to rotate more than 180 degrees in one direction to aim the turret, then it would be quicker to rotate the other direction.
I would just check for this and then rotate in the appropriate direction
EDIT: New Solution
I have refined my solution based on the feedback in the comments. This determines whether the target is to the ‘left or right’ of the turret and decides which way to turn. It then inverts this direction if the target is more than 180 degrees away.