button = script.Parent while true do wait(1) button.Rotation = button.Rotation + 2 if button.Rotation == 20 then button.Rotation = button.Rotation - 2 if button.Rotation == - 20 then button.Rotation = button.Rotation + 2 wait(.1) end end end
What happens is, the Gui rotates to 20 but it won't rotate back down to -20?
This code is definitely poorly designed.
Let's begin by tabbing your code properly
button = script.Parent while true do wait(1) button.Rotation = button.Rotation + 2 if button.Rotation == 20 then button.Rotation = button.Rotation - 2 if button.Rotation == - 20 then button.Rotation = button.Rotation + 2 wait(.1) end end end
Notice that the second if
for adding to Rotation
is inside the other one. That is almost certainly not what we want.
The wait(.1)
similarly doesn't belong, probably.
button = script.Parent while true do wait(1) button.Rotation = button.Rotation + 2 if button.Rotation == 20 then button.Rotation = button.Rotation - 2 end if button.Rotation == - 20 then button.Rotation = button.Rotation + 2 end end
We can also see that we're adding twice here instead of just once. That doesn't seem right, and it probably isn't, let's drop it.
button = script.Parent while true do wait(1) if button.Rotation == 20 then button.Rotation = button.Rotation - 2 end if button.Rotation == - 20 then button.Rotation = button.Rotation + 2 end end
Now, here's a problem. Usually, Rotation
won't be either 20
or -20
. It can be something in between. Let's use a variable for the direction
instead, and just change direction
when we get to the ends:
button = script.Parent direction = 2 while true do wait(1) button.Rotation = button.Rotation + direction if button.Rotation == 20 then direction = -2 -- Turn around! end if button.Rotation = -20 then direction = 2 -- Turn around! end end
It would also probably be better to use >=
and <=
instead of ==
, just in case the numbers don't add up to exactly 20
(e.g., if you change the numbers, or things get more complicated)
while true do wait(1) button.Rotation = button.Rotation + direction if button.Rotation >= 20 then direction = -2 end if button.Rotation <= -20 then direction = 2 end end
We could make this a little cleaner and simpler by using button.Rotation
's magnitude (absolute value) instead of the separate numbers 20
and -20
:
... if math.abs(button.Rotation) >= 20 then direction = -button.Rotation / 10 end ...
Or, instead of the linear jump back and forth, we could make things smooth by using a sin
(sine) function:
button = script.Parent time = 0 while true do time = time + wait(0.2) button.Rotation = 20 * math.sin( time ) end