| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- 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
|