cc = cc or {} cc.tweenfunc = cc.tweenfunc or BaseClass() function cc.tweenfunc.easeIn(time, rate) return math.pow(time, rate) end function cc.tweenfunc.easeOut(time, rate) return math.pow(time, 1 / rate) end function cc.tweenfunc.easeInOut(time, rate) time = time * 2 if (time < 1) then return 0.5 * math.pow(time, rate) else return (1.0 - 0.5 * math.pow(2 - time, rate)) end end -- Sine Ease function cc.tweenfunc.sineEaseIn(time) return -1 * math.cos(time * M_PI_2) + 1; end function cc.tweenfunc.sineEaseOut(time) return math.sin(time * M_PI_2); end function cc.tweenfunc.sineEaseInOut(time) return -0.5 * (math.cos(M_PI * time) - 1); end -- Quad Ease function cc.tweenfunc.quadEaseIn(time) return time * time; end function cc.tweenfunc.quadEaseOut(time) return -1 * time * (time - 2); end function cc.tweenfunc.quadEaseInOut(time) time = time*2; if (time < 1) then return 0.5 * time * time; end time = time - 1 return -0.5 * (time * (time - 2) - 1); end -- Cubic Ease function cc.tweenfunc.cubicEaseIn(time) return time * time * time; end function cc.tweenfunc.cubicEaseOut(time) time = time - 1; return (time * time * time + 1); end function cc.tweenfunc.cubicEaseInOut(time) time = time*2; if (time < 1) then return 0.5 * time * time * time; end time = time - 2; return 0.5 * (time * time * time + 2); end -- Quart Ease function cc.tweenfunc.quartEaseIn(time) return time * time * time * time; end function cc.tweenfunc.quartEaseOut(time) time = time - 1; return -(time * time * time * time - 1); end function cc.tweenfunc.quartEaseInOut(time) time = time*2; if (time < 1) then return 0.5 * time * time * time * time; end time = time - 2; return -0.5 * (time * time * time * time - 2); end -- Quint Ease function cc.tweenfunc.quintEaseIn(time) return time * time * time * time * time; end function cc.tweenfunc.quintEaseOut(time) time = time - 1 return (time * time * time * time * time + 1); end function cc.tweenfunc.quintEaseInOut(time) time = time*2; if (time < 1) then return 0.5 * time * time * time * time * time; end time = time - 2; return 0.5 * (time * time * time * time * time + 2); end -- Expo Ease function cc.tweenfunc.expoEaseIn(time) return time == 0 and 0 or math.pow(2, 10 * (time/1 - 1)) - 1 * 0.001; end function cc.tweenfunc.expoEaseOut(time) return time == 1 and 1 or (-math.pow(2, -10 * time / 1) + 1); end function cc.tweenfunc.expoEaseInOut(time) time = time / 0.5; if (time < 1) then time = 0.5 * math.pow(2, 10 * (time - 1)); else time = 0.5 * (-math.pow(2, -10 * (time - 1)) + 2); end return time; end -- Circ Ease function cc.tweenfunc.circEaseIn(time) return -1 * (math.sqrt(1 - time * time) - 1); end function cc.tweenfunc.circEaseOut(time) time = time - 1; return math.sqrt(1 - time * time); end function cc.tweenfunc.circEaseInOut(time) time = time * 2; if (time < 1) then return -0.5 * (math.sqrt(1 - time * time) - 1); end time = time - 2; return 0.5 * (math.sqrt(1 - time * time) + 1); end function cc.tweenfunc.elasticEaseOut( time, period ) local newT = 0 if time == 0 or time == 1 then newT = time else local s = period / 4 newT = math.pow(2, -10 * time) * math.sin((time - s) * M_PI_X_2 / period) + 1; end return newT end function cc.tweenfunc.elasticEaseIn(time, period) local newT = 0; if (time == 0 or time == 1) then newT = time; else local s = period / 4; time = time - 1; newT = -math.pow(2, 10 * time) * math.sin((time - s) * M_PI_X_2 / period); end return newT end function cc.tweenfunc.elasticEaseInOut(time, period) local newT = 0; if (time == 0 or time == 1) then newT = time; else time = time * 2; if (not period or period == 0) then period = 0.3 * 1.5; end local s = period / 4; time = time - 1; if (time < 0) then newT = -0.5 * math.pow(2, 10 * time) * math.sin((time -s) * M_PI_X_2 / period); else newT = math.pow(2, -10 * time) * math.sin((time - s) * M_PI_X_2 / period) * 0.5 + 1; end end return newT; end -- Back Ease function cc.tweenfunc.backEaseIn(time) local overshoot = 1.70158; return time * time * ((overshoot + 1) * time - overshoot); end function cc.tweenfunc.backEaseOut(time) local overshoot = 1.70158; time = time - 1; return time * time * ((overshoot + 1) * time + overshoot) + 1; end function cc.tweenfunc.backEaseInOut(time) local overshoot = 1.70158 * 1.525; time = time * 2; if (time < 1) then return (time * time * ((overshoot + 1) * time - overshoot)) / 2; else time = time - 2; return (time * time * ((overshoot + 1) * time + overshoot)) / 2 + 1; end end -- Bounce Ease function cc.tweenfunc.bounceTime(time) if (time < 1 / 2.75) then return 7.5625 * time * time; elseif (time < 2 / 2.75) then time = time - 1.5 / 2.75; return 7.5625 * time * time + 0.75; elseif(time < 2.5 / 2.75) then time = time - 2.25 / 2.75; return 7.5625 * time * time + 0.9375; end time = time - 2.625 / 2.75; return 7.5625 * time * time + 0.984375; end function cc.tweenfunc.bounceEaseIn(time) return 1 - cc.tweenfunc.bounceTime(1 - time); end function cc.tweenfunc.bounceEaseOut(time) return cc.tweenfunc.bounceTime(time); end function cc.tweenfunc.bounceEaseInOut(time) local newT = 0; if (time < 0.5) then time = time * 2; newT = (1 - cc.tweenfunc.bounceTime(1 - time)) * 0.5; else newT = cc.tweenfunc.bounceTime(time * 2 - 1) * 0.5 + 0.5; end return newT; end -- Custom Ease function cc.tweenfunc.customEase(time, easingParam) if (easingParam) then local tt = 1-time; return easingParam[1]*tt*tt*tt + 3*easingParam[3]*time*tt*tt + 3*easingParam[5]*time*time*tt + easingParam[7]*time*time*time; end return time; end function cc.tweenfunc.quadraticIn(time) return math.pow(time,2); end function cc.tweenfunc.quadraticOut(time) return -time*(time-2); end function cc.tweenfunc.quadraticInOut(time) local resultTime = time; time = time*2; if (time < 1) then resultTime = time * time * 0.5; else time = time - 1 resultTime = -0.5 * (time * (time - 2) - 1); end return resultTime; end function cc.tweenfunc.bezieratFunction( a, b, c, d, t ) return (math.pow(1-t,3) * a + 3*t*(math.pow(1-t,2))*b + 3*math.pow(t,2)*(1-t)*c + math.pow(t,3)*d ); end