package net.flashpunk.tweens.motion { /** * 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)); } // Line information. /** @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; } }