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
end
if button.Rotation = -20 then
direction = 2
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