package net.flashpunk.tweens.motion
{
import flash.geom.Point;
/**
* Determines motion along a line, from one point to another.
*/
public class LinearMotion extends Motion
{
/**
* Constructor.
* @param complete Optional completion callback.
* @param type Tween type.
*/
public function LinearMotion(complete:Function = null, type:uint = 0)
{
super(0,complete, type, null);
}
/**
* Starts moving along a line.
* @param fromX X start.
* @param fromY Y start.
* @param toX X finish.
* @param toY Y finish.
* @param duration Duration of the movement.
* @param ease Optional easer function.
*/
public function setMotion(fromX:Number, fromY:Number, toX:Number, toY:Number, duration:Number, ease:Function = null):void
{
_distance = -1;
x = _fromX = fromX;
y = _fromY = fromY;
_moveX = toX - fromX;
_moveY = toY - fromY;
_target = duration;
_ease = ease;
start();
}
/**
* Starts moving along a line at the speed.
* @param fromX X start.
* @param fromY Y start.
* @param toX X finish.
* @param toY Y finish.
* @param speed Speed of the movement.
* @param ease Optional easer function.
*/
public function setMotionSpeed(fromX:Number, fromY:Number, toX:Number, toY:Number, speed:Number, ease:Function = null):void
{
_distance = -1;
x = _fromX = fromX;
y = _fromY = fromY;
_moveX = toX - fromX;
_moveY = toY - fromY;
_target = distance / speed;
_ease = ease;
start();
}
/** @private Updates the Tween. */
override public function update():void
{
super.update();
x = _fromX + _moveX * _t;
y = _fromY + _moveY * _t;
}
/**
* Length of the current line of movement.
*/
public function get distance():Number
{
if (_distance >= 0) return _distance;
return (_distance = Math.sqrt(_moveX * _moveX + _moveY * _moveY));
}
/** @private */ private var _fromX:Number = 0;
/** @private */ private var _fromY:Number = 0;
/** @private */ private var _moveX:Number = 0;
/** @private */ private var _moveY:Number = 0;
/** @private */ private var _distance:Number = - 1;
}
}