/** * VERSION: 0.5 * DATE: 2010-11-30 * AS3 * UPDATES AND DOCS AT: http://www.greensock.com/ **/ package com.greensock.easing { /** * Most easing equations give a smooth, gradual transition between the start and end values, but SteppedEase provides * an easy way to define a specific number of steps that the transition should take. For example, if mc.x is 0 and you * want to tween it to 100 with 5 steps (20, 40, 60, 80, and 100) over the course of 2 seconds, you'd do:

* * TweenLite.to(mc, 2, {x:100, ease:SteppedEase.create(5)});

* * EXAMPLE CODE

* import com.greensock.TweenLite;
* import com.greensock.easing.SteppedEase;

* * TweenLite.to(mc, 2, {x:100, ease:SteppedEase.create(5)});

* * //or create an instance directly
* var steppedEase:SteppedEase = new SteppedEase(5);
* TweenLite.to(mc, 3, {y:300, ease:steppedEase.ease}); *


* * Note: SteppedEase is optimized for use with the GreenSock tweenining platform, so it isn't intended to be used with other engines. * Specifically, its easing equation always returns values between 0 and 1.

* * Copyright 2011, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for corporate Club GreenSock members, the software agreement that was issued with the corporate membership. * * @author Jack Doyle, jack@greensock.com */ public class SteppedEase { /** @private **/ private var _steps:int; /** @private **/ private var _stepAmount:Number; /** * Constructor * * @param steps Number of steps between the start and the end values. */ public function SteppedEase(steps:int) { _stepAmount = 1 / steps; _steps = steps + 1; } /** * This static function provides a quick way to create a SteppedEase and immediately reference its ease function * in a tween, like:

* * TweenLite.to(mc, 2, {x:100, ease:SteppedEase.create(5)});
*
* * @param steps Number of steps between the start and the end values. * @return The easing function that can be plugged into a tween */ public static function create(steps:int):Function { var se:SteppedEase = new SteppedEase(steps); return se.ease; } /** * Easing function that interpolates values. * * @param t time * @param b start (should always be 0) * @param c change (should always be 1) * @param d duration * @return Result of the ease */ public function ease(t:Number, b:Number, c:Number, d:Number):Number { var ratio:Number = t / d; if (ratio < 0) { ratio = 0; } else if (ratio >= 1) { ratio = 0.999999999; } return ((_steps * ratio) >> 0) * _stepAmount; } /** Number of steps between the start and the end values. **/ public function get steps():int { return _steps - 1; } } }