|
|
@@ -0,0 +1,263 @@
|
|
|
+class "TweenManager"
|
|
|
+
|
|
|
+function TweenManager:TweenManager()
|
|
|
+ self.tweens = {}
|
|
|
+end
|
|
|
+
|
|
|
+function TweenManager:addTween(tween)
|
|
|
+ self.tweens[count(self.tweens)+1] = tween
|
|
|
+end
|
|
|
+
|
|
|
+function TweenManager:Update(elapsed)
|
|
|
+ for i=#self.tweens,1,-1 do
|
|
|
+ self.tweens[i]:Update(elapsed)
|
|
|
+ if self.tweens[i].complete == true then
|
|
|
+ table.remove(self.tweens, i)
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+class "Tween" (EventDispatcher)
|
|
|
+
|
|
|
+Tween.EASE_NONE = 0
|
|
|
+Tween.EASE_IN_QUAD = 1
|
|
|
+Tween.EASE_OUT_QUAD = 2
|
|
|
+Tween.EASE_INOUT_QUAD = 3
|
|
|
+Tween.EASE_IN_CUBIC= 4
|
|
|
+Tween.EASE_OUT_CUBIC= 5
|
|
|
+Tween.EASE_INOUT_CUBIC= 6
|
|
|
+Tween.EASE_IN_QUART= 7
|
|
|
+Tween.EASE_OUT_QUART= 8
|
|
|
+Tween.EASE_INOUT_QUART= 9
|
|
|
+Tween.EASE_IN_QUINT= 10
|
|
|
+Tween.EASE_OUT_QUINT= 11
|
|
|
+Tween.EASE_INOUT_QUINT= 12
|
|
|
+Tween.EASE_IN_SINE= 13
|
|
|
+Tween.EASE_OUT_SINE= 14
|
|
|
+Tween.EASE_INOUT_SINE= 15
|
|
|
+Tween.EASE_IN_EXPO= 16
|
|
|
+Tween.EASE_OUT_EXPO= 17
|
|
|
+Tween.EASE_INOUT_EXPO= 18
|
|
|
+Tween.EASE_IN_CIRC= 19
|
|
|
+Tween.EASE_OUT_CIRC= 20
|
|
|
+Tween.EASE_INOUT_CIRC= 21
|
|
|
+Tween.EASE_IN_BOUNCE= 22
|
|
|
+Tween.EASE_OUT_BOUNCE = 23
|
|
|
+Tween.EASE_INOUT_BOUNCE = 24
|
|
|
+
|
|
|
+function Tween.fEASE_IN_QUAD(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return cVal*t*t + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_QUAD(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return -cVal * t*(t-2.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_QUAD(t, startVal, cVal, endTime)
|
|
|
+ t = t / (endTime/2.0)
|
|
|
+ if t < 1.0 then return cVal/2.0*t*t + startVal end
|
|
|
+ t = t - 1
|
|
|
+ return -cVal/2.0 * (t*(t-2.0) - 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_CUBIC(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return cVal*t*t*t + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_CUBIC(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ t = t - 1
|
|
|
+ return cVal*(t*t*t + 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_CUBIC(t, startVal, cVal, endTime)
|
|
|
+ t = t / (endTime/2.0)
|
|
|
+ if t < 1.0 then return cVal/2.0*t*t*t + startVal end
|
|
|
+ t = t - 2.0
|
|
|
+ return cVal/2.0*(t*t*t + 2.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_QUART(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return cVal*t*t*t*t + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_QUART(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ t = t - 1
|
|
|
+ return -cVal * (t*t*t*t - 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_QUART(t, startVal, cVal, endTime)
|
|
|
+ t = t / (endTime/2.0)
|
|
|
+ if t < 1.0 then return (cVal/2.0*t*t*t*t) + startVal end
|
|
|
+ t = t - 2.0
|
|
|
+ return -cVal/2.0 * (t*t*t*t - 2.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_QUINT(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return cVal*t*t*t*t*t + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_QUINT(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ t = t - 1
|
|
|
+ return cVal*(t*t*t*t*t + 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_QUINT(t, startVal, cVal, endTime)
|
|
|
+ t = t / (endTime / 2.0)
|
|
|
+ if t < 1.0 then
|
|
|
+ return (cVal/2.0*t*t*t*t*t) + startVal
|
|
|
+ else
|
|
|
+ t = t - 2.0
|
|
|
+ return ((cVal/2.0)*((t*t*t*t*t) + 2.0)) + startVal
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_SINE(t, startVal, cVal, endTime)
|
|
|
+ return -cVal * cos(t/endTime * (pi/2.0)) + cVal + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_SINE(t, startVal, cVal, endTime)
|
|
|
+ return cVal * sin(t/endTime * (pi/2.0)) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_SINE(t, startVal, cVal, endTime)
|
|
|
+ return -cVal/2.0 * (cos(pi*t/endTime) - 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_EXPO(t, startVal, cVal, endTime)
|
|
|
+ return (cVal * pow( 2.0, 10.0 * (t/endTime - 1.0) ) + startVal)
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_EXPO(t, startVal, cVal, endTime)
|
|
|
+ return cVal * ( -pow( 2.0, -10.0 * t/endTime ) + 1.0 ) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_EXPO(t, startVal, cVal, endTime)
|
|
|
+ t = t / (endTime/2.0)
|
|
|
+ if t < 1.0 then return cVal/2.0 * pow( 2.0, 10.0 * (t - 1.0) ) + startVal end
|
|
|
+ t = t - 1
|
|
|
+ return cVal/2.0 * ( -pow( 2.0, -10.0 * t) + 2.0 ) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_CIRC(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ return -cVal * (sqrt(1.0 - t*t) - 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_OUT_CIRC(t, startVal, cVal, endTime)
|
|
|
+ t = t/endTime
|
|
|
+ t = t - 1
|
|
|
+ return cVal * sqrt(1.0 - t*t) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_INOUT_CIRC(t, startVal, cVal, endTime)
|
|
|
+ t = t/(endTime/2.0)
|
|
|
+ if t < 1.0 then return -cVal/2.0 * (sqrt(1.0 - t*t) - 1.0) + startVal end
|
|
|
+ t = t - 2.0
|
|
|
+ return cVal/2.0 * (sqrt(1.0 - t*t) + 1.0) + startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_IN_BOUNCE(t, startVal, cVal, endTime)
|
|
|
+ t = t / endTime
|
|
|
+ if t < 1/2.75 then
|
|
|
+ return cVal*(7.5625*t*t) + startVal
|
|
|
+ elseif t < (2/2.75) then
|
|
|
+ t = t - (1.5/2.75)
|
|
|
+ return cVal*(7.5625*(t)*t + .75) + startVal
|
|
|
+ elseif (t < (2.5/2.75)) then
|
|
|
+ t = t - (2.25/2.75)
|
|
|
+ return cVal*(7.5625*(t)*t + .9375) + startVal
|
|
|
+ else
|
|
|
+ t = t - (2.625/2.75)
|
|
|
+ return cVal*(7.5625*(t)*t + .984375) + startVal
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
+function Tween.fEASE_NONE(t, startVal, cVal, endTime)
|
|
|
+ return cVal*t/endTime+startVal
|
|
|
+end
|
|
|
+
|
|
|
+Tween.fEASE_OUT_BOUNCE = Tween.fEASE_IN_BOUNCE
|
|
|
+Tween.fEASE_INOUT_BOUNCE = Tween.fEASE_IN_BOUNCE
|
|
|
+
|
|
|
+Tween.interpolateFunctions = {}
|
|
|
+
|
|
|
+
|
|
|
+Tween.interpolateFunctions[Tween.EASE_NONE] = Tween.fEASE_NONE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_QUAD] = Tween.fEASE_IN_QUAD
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_QUAD] = Tween.fEASE_OUT_QUAD
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_QUAD] = Tween.fEASE_INOUT_QUAD
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_CUBIC] = Tween.fEASE_IN_CUBIC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_CUBIC] = Tween.fEASE_OUT_CUBIC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_CUBIC] = Tween.fEASE_INOUT_CUBIC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_QUART] = Tween.fEASE_IN_QUART
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_QUART] = Tween.fEASE_OUT_QUART
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_QUART] = Tween.fEASE_INOUT_QUART
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_QUINT] = Tween.fEASE_IN_QUINT
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_QUINT] = Tween.fEASE_OUT_QUINT
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_QUINT] = Tween.fEASE_INOUT_QUINT
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_SINE] = Tween.fEASE_IN_SINE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_SINE] = Tween.fEASE_OUT_SINE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_SINE] = Tween.fEASE_INOUT_SINE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_EXPO] = Tween.fEASE_IN_EXPO
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_EXPO] = Tween.fEASE_OUT_EXPO
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_EXPO] = Tween.fEASE_INOUT_EXPO
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_CIRC] = Tween.fEASE_IN_CIRC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_CIRC] = Tween.fEASE_OUT_CIRC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_CIRC] = Tween.fEASE_INOUT_CIRC
|
|
|
+Tween.interpolateFunctions[Tween.EASE_IN_BOUNCE] = Tween.fEASE_IN_BOUNCE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_OUT_BOUNCE] = Tween.fEASE_OUT_BOUNCE
|
|
|
+Tween.interpolateFunctions[Tween.EASE_INOUT_BOUNCE] = Tween.fEASE_INOUT_BOUNCE
|
|
|
+
|
|
|
+function Tween.fEASE_NONE(t, startVal, cVal, endTime)
|
|
|
+ return cVal*t/endTime+startVal
|
|
|
+end
|
|
|
+
|
|
|
+function Tween:Tween(target, key, easeType, startVal, endVal, time, repeating, waitTime)
|
|
|
+ EventDispatcher.EventDispatcher(self)
|
|
|
+ self.target = target
|
|
|
+ self.key = key
|
|
|
+ self.easeType = easeType
|
|
|
+ self.startVal = startVal
|
|
|
+ self.endVal = endVal
|
|
|
+ self.endTime = time
|
|
|
+ self.repeating = repeating
|
|
|
+ self.waitTime =waitTime
|
|
|
+ self.cVal = endVal - startVal
|
|
|
+ self.tweenTime = 0
|
|
|
+ self.complete = false
|
|
|
+ Services.TweenManager:addTween(self)
|
|
|
+end
|
|
|
+
|
|
|
+function Tween:Reset()
|
|
|
+ self.tweenTime = 0
|
|
|
+ self.complete = false
|
|
|
+end
|
|
|
+
|
|
|
+function Tween:Update(elapsed)
|
|
|
+ if self.tweenTime >= self.endTime + self.waitTime then
|
|
|
+ if self.repeating == true then
|
|
|
+ self:Reset()
|
|
|
+ else
|
|
|
+ self.target[self.key] = self.endVal
|
|
|
+ self.complete = true
|
|
|
+ return
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ if self.tweenTime > self.waitTime then
|
|
|
+ self.target[self.key] = self:interpolateTween()
|
|
|
+ end
|
|
|
+ self.tweenTime = self.tweenTime + elapsed
|
|
|
+end
|
|
|
+
|
|
|
+function Tween:interpolateTween()
|
|
|
+ return Tween.interpolateFunctions[self.easeType](self.tweenTime - self.waitTime, self.startVal, self.cVal, self.endTime)
|
|
|
+end
|