I have tried making a smooth animation that will always start smooth and stop smooth. When I try to go from 0 to 180, it stops quicker then how it started. In the reverse, it starts quicker then how it stops.
function STRotate(to,speed,set,con) local to=to local from=set.Rotation local doNEG=1 if from>=to then doNEG=-1 print("fliper") end local sin,rad=math.sin,math.rad for i = from,to,doNEG*4 do print(from + sin(rad(i))*(to - from),"--",from,i,to) set.Rotation = from + sin(rad(i))*(to - from) wait() end wait(6) end while wait() do print("ONE") STRotate(90,.05,script.Parent.Frame.Back) print("TWO") STRotate(0,.05,script.Parent.Frame.Back) end
EDIT: I now have a different code, but for some random reason, I can't make it stop getting a really big negative number on the first three results.
-- For all easing functions: -- t = time == how much time has to pass for the tweening to complete -- b = begin == starting property value -- c = change == ending - beginning -- d = duration == running time. How much time has passed *right now* local function inOutBack(t, b, c, d, s) s = (s or 1.70158) * 1.525 t = t / d * 2 if t < 1 then return c / 2 * (t * t * ((s + 1) * t - s)) + b end t = t - 2 return c / 2 * (t * t * ((s + 1) * t + s) + 2) + b end function STRotate(to,speed,set,con) local from=set.Rotation.Z print(from.."----"..to) if from>to then local holdfrom=from local holdto=to to=holdfrom from=holdto end local timer=4 for i = 1,timer,.05 do local num=inOutBack(timer,from,from-to,i) print(timer," \ ",from," \ ",from-to," \ ",i," \ ",num) script.Parent.Rotation=Vector3.new(0,0,num) wait(.1) end wait(2) end while wait() do print("ONE") STRotate(20,.01,script.Parent) print("TWO") STRotate(80,.01,script.Parent) end