package net.flashpunk.tweens.misc
{
import net.flashpunk.FP;
import net.flashpunk.Tween;
/**
* Tweens from one angle to another.
*/
public class AngleTween extends Tween
{
/**
* The current value.
*/
public var angle:Number = 0;
/**
* Constructor.
* @param complete Optional completion callback.
* @param type Tween type.
*/
public function AngleTween(complete:Function = null, type:uint = 0)
{
super(0, type, complete);
}
/**
* Tweens the value from one angle to another.
* @param fromAngle Start angle.
* @param toAngle End angle.
* @param duration Duration of the tween.
* @param ease Optional easer function.
*/
public function tween(fromAngle:Number, toAngle:Number, duration:Number, ease:Function = null):void
{
_start = angle = fromAngle;
var d:Number = toAngle - angle,
a:Number = Math.abs(d);
if (a > 181) _range = (360 - a) * (d > 0 ? -1 : 1);
else if (a < 179) _range = d;
else _range = FP.choose(180, -180);
_target = duration;
_ease = ease;
start();
}
/** @private Updates the Tween. */
override public function update():void
{
super.update();
angle = (_start + _range * _t) % 360;
if (angle < 0) angle += 360;
}
/** @private */ private var _start:Number;
/** @private */ private var _range:Number;
}
}