Legacy GM [SOLVED] Rotation angle limiting

X

xorphinindi

Guest
I'm having trouble adapting some code.

I have a stationary turret that the player can pan back and forth by changing its image_angle with the arrow keys.
I want to limit its rotation to a minimum and maximum angle from its original position.
The tutorial I followed does exactly what I want,
but it calculates the angle difference using mouse position rather than a set location.

Here's what I have now ---> in the step event:
Code:
pointDir = point_direction(x, y, mouse_x, mouse_y);
    
base_angle = image_angle;
    
delta = max(-minMaxAngle, min(minMaxAngle, angle_difference(pointDir, base_angle)));
    
image_angle = scr_angleRotate(image_angle, base_angle + delta, rSpeed);
In the script ---> scr_angleRotate:
Code:
angle = argument0;
baseDiff = argument1;
rotateSpeed = argument2;

calc = angle + median(-rotateSpeed, rotateSpeed, angle_difference(baseDiff, angle));
return calc;
I want it to have a full angle of 30 degrees so I've set minMaxAngle to 15.
I think I just need to change the (mouse_x, mouse_y) part but I can't figure out what to change it to for the life of me.
 

samspade

Member
Probably easiest to simply clamp the image angle with the following line right after you set image_angle.

image_angle = clamp(image_anlge, min_angle, max_angle);
 
X

xorphinindi

Guest
Well, shoot.
You're just solving all of my problems today.
Thank you!
 

AriesGames

Member
That clamp function it's so useful, a parameter limiter. Neat, very neat indeed.

No wonder it isn't build-in GM 8. No worry, shouldn't be too hard to build one each time you need one.
 
G

GOD-sSs-END

Guest
I have a similar but much easier question. How do I set an image_angle max for the following line?
________________________

if (btnState = 1) {
image_angle = image_angle + 10;
}
________________________

Or is the max something I should set elsewhere (like in a Create Event)? If so, how do I do that?

Basically, if my button's state = 1, I want the object it controls to rotate 180 degrees and stop. . .

Thanks so much.
 

NightFrost

Member
If it is just a maximum you want to set, you can do
Code:
if(image_angle < 180) image_angle = min(180, image_angle + 10);
 
Top