/*************Continuous Actionsript Tweens - source: www.ursart.com*******************/ import mx.transitions.Tween; import mx.transitions.easing.*; import mx.utils.Delegate; // class sweetTween { private var cycler:MovieClip; function sweetTween(loops, replayDelay) { //trace("class constructor: sweetTween()"); cycler = _level0.createEmptyMovieClip("sweetTween" + _level0.getNextHighestDepth(), _level0.getNextHighestDepth()); cycler.animationLoops = loops; cycler.animationDelay = replayDelay; cycler.myStartTime = cycler.myCurrentTime = cycler.finishedLoops = 0; cycler.movieclips = new Array(); cycler.myAttributes = new Array(); cycler.startValues = new Array(); cycler.endValues = new Array(); cycler.startTimes = new Array(); cycler.durations = new Array(); cycler.easings = new Array(); cycler.tweens = new Array(); cycler.played = new Array(); cycler.executionTimes = new Array(); cycler.allTweenStop = new Array(); cycler.allTweenResume = new Array(); cycler.seriesPaused = false; } public function addTween(mc, attribute, startValue, endValue, startTime, duration, easing) { //trace("public function: addTween()"); cycler.movieclips.push(mc); cycler.myAttributes.push(attribute); cycler.startValues.push(startValue); cycler.endValues.push(endValue); cycler.startTimes.push(startTime); cycler.durations.push(duration); cycler.easings.push(easing); cycler.executionTimes.push(Number(startTime + duration)); cycler.executionTimes.sort(sortNumber); cycler.timeToWait = cycler.executionTimes[(cycler.executionTimes.length) - 1] + cycler.animationDelay; } public function start() { //trace("public function: start()"); cycler.myStartTime = getTimer(); cycler.onEnterFrame = Delegate.create(this, tweenOrLoop); } public function remove() { //trace("public function: remove()"); for (var i:Number = 0; i < cycler.movieclips.length; i++) { cycler.allTweenStop = cycler.tweens[i]; cycler.allTweenStop.stop(); } removeMovieClip(cycler); } private function makeTweens() { //trace("private function: makeTweens()"); for (var i = 0; i < cycler.movieclips.length; i++) { if (cycler.myCurrentTime > cycler.startTimes[i] * 1000 && cycler.played[i] != true) { cycler.tweens[i] = new mx.transitions.Tween(cycler.movieclips[i], cycler.myAttributes[i], cycler.easings[i], cycler.startValues[i], cycler.endValues[i], cycler.durations[i], true); cycler.played[i] = true; } } } private function tweenOrLoop() { //trace("private function: tweenOrLoop " + cycler.getDepth()); cycler.myCurrentTime = getTimer() - cycler.timeToWait * 1000 * cycler.finishedLoops - cycler.myStartTime; if (cycler.myCurrentTime > cycler.timeToWait * 1000) { if (cycler.finishedLoops < cycler.animationLoops - 1) { nextLoop(); } else { for (var i = 0; i < cycler.movieclips.length; i++) { cycler.played[i] = false; } cycler.onEnterFrame = null; } } else { makeTweens(); } } private function nextLoop() { //trace("private function: nextLoop()"); cycler.onEnterFrame = null; for (var i:Number = 0; i < cycler.movieclips.length; i++) { cycler.played[i] = false; } cycler.finishedLoops = cycler.finishedLoops + 1; cycler.onEnterFrame = Delegate.create(this, tweenOrLoop); } private function sortNumber(a, b) { return a - b; } }