home *** CD-ROM | disk | FTP | other *** search
- package classes.basic.Path
- {
- import classes.basic.Algorithm.TFDijkstra;
- import flash.display.MovieClip;
- import flash.geom.Point;
-
- public class TFPath
- {
-
-
- private var arNodes:Array;
-
- private var arCurrPath:Array;
-
- private var iBaseSpeed:Number;
-
- private var iCurrentSpeed:Number;
-
- private var weightMatrix:Array;
-
- private var iTimePos:Number;
-
- private var bConstSpeed:Boolean;
-
- private var bCalcSpeed:Boolean;
-
- private var mcObject:MovieClip;
-
- private var nodeEnd:TFPathNode;
-
- public function TFPath(param1:Number, param2:Boolean, param3:MovieClip)
- {
- super();
- arNodes = new Array();
- iBaseSpeed = param1;
- iCurrentSpeed = param1;
- bConstSpeed = param2;
- bCalcSpeed = true;
- mcObject = param3;
- arCurrPath = null;
- nodeEnd = null;
- iTimePos = 0;
- }
-
- public static function nodeDistance(param1:TFPathNode, param2:TFPathNode) : Number
- {
- return distance(param1.getPoint(),param2.getPoint());
- }
-
- private static function distance(param1:Point, param2:Point) : Number
- {
- var _loc3_:Point = null;
- _loc3_ = new Point(param2.x - param1.x,param2.y - param1.y);
- return Math.sqrt(_loc3_.x * _loc3_.x + _loc3_.y * _loc3_.y);
- }
-
- public static function getPathUsingAlgorithm(param1:Array, param2:TFPathNode, param3:TFPathNode, param4:Function, param5:Array) : Array
- {
- return param4(param1,param2,param3,param5);
- }
-
- public static function getPosition(param1:TFPathNode, param2:TFPathNode, param3:Number) : Point
- {
- return Point.interpolate(param1.getPoint(),param2.getPoint(),param3);
- }
-
- private function calcSpeed(param1:TFPathNode, param2:TFPathNode) : *
- {
- var _loc3_:Number = NaN;
- _loc3_ = nodeDistance(param1,param2);
- if(_loc3_ == 0)
- {
- iCurrentSpeed = iBaseSpeed;
- }
- else
- {
- iCurrentSpeed = iBaseSpeed / _loc3_;
- }
- bCalcSpeed = false;
- }
-
- public function getWeightMatrix() : Array
- {
- var _loc1_:Number = NaN;
- var _loc2_:Number = NaN;
- var _loc3_:Number = NaN;
- var _loc4_:Array = null;
- var _loc5_:String = null;
- var _loc6_:TFPathNode = null;
- var _loc7_:Array = null;
- var _loc8_:Number = NaN;
- _loc1_ = arNodes.length;
- _loc4_ = new Array(_loc1_);
- _loc2_ = 0;
- while(_loc2_ < _loc1_)
- {
- _loc5_ = String(arNodes[_loc2_].getName());
- _loc4_[_loc5_] = new Array(_loc1_);
- _loc3_ = 0;
- while(_loc3_ < _loc1_)
- {
- _loc4_[_loc5_][arNodes[_loc3_].getName()] = 99999999;
- _loc3_++;
- }
- _loc4_[_loc5_][_loc5_] = 0;
- _loc2_++;
- }
- _loc2_ = 0;
- while(_loc2_ < _loc1_)
- {
- _loc8_ = (_loc7_ = (_loc6_ = arNodes[_loc2_]).getNeighbors()).length;
- _loc3_ = 0;
- while(_loc3_ < _loc8_)
- {
- _loc4_[arNodes[_loc2_].getName()][_loc7_[_loc3_].getName()] = nodeDistance(arNodes[_loc2_],_loc7_[_loc3_]);
- _loc3_++;
- }
- _loc2_++;
- }
- return _loc4_;
- }
-
- public function createPathNode(param1:MovieClip) : *
- {
- arNodes.push(new TFPathNode(param1));
- }
-
- public function setPath(param1:TFPathNode, param2:TFPathNode) : Boolean
- {
- var _loc3_:Array = null;
- _loc3_ = this.getWeightMatrix();
- nodeEnd = param2;
- arCurrPath = getPathUsingAlgorithm(arNodes,param1,param2,TFDijkstra.calculate,_loc3_);
- nodeEnd.playAnimDest();
- return arCurrPath.length > 0;
- }
-
- public function pushNeighbor(param1:Number, param2:Number) : *
- {
- arNodes[param1].pushNeighbor(arNodes[param2]);
- }
-
- public function process(param1:Function, param2:Object) : Boolean
- {
- var _loc3_:Boolean = false;
- var _loc4_:Point = null;
- _loc3_ = false;
- if(arCurrPath == null)
- {
- return true;
- }
- if(iTimePos == 1)
- {
- iTimePos = 0;
- arCurrPath.splice(0,1);
- bCalcSpeed = true;
- }
- if(arCurrPath.length == 1 || arCurrPath.length == 0)
- {
- arCurrPath = null;
- nodeEnd.stopAnimDest();
- nodeEnd = null;
- _loc3_ = true;
- }
- else
- {
- if(bCalcSpeed == true && bConstSpeed == true)
- {
- calcSpeed(arCurrPath[0],arCurrPath[1]);
- }
- if(param1 != null && param2 != null && arCurrPath[1] != null && arCurrPath[0] != null && (iTimePos == 0 || iTimePos == 1))
- {
- param1.call(param2,mcObject,arCurrPath[0],arCurrPath[1]);
- }
- iTimePos += iCurrentSpeed;
- if(iTimePos > 1)
- {
- iTimePos = 1;
- }
- _loc4_ = getPosition(arCurrPath[1],arCurrPath[0],iTimePos);
- mcObject.visible = false;
- mcObject.x = _loc4_.x;
- mcObject.y = _loc4_.y;
- mcObject.visible = true;
- }
- return _loc3_;
- }
-
- public function getNode(param1:Number) : TFPathNode
- {
- return arNodes[param1];
- }
-
- public function getNodes() : Array
- {
- return arNodes;
- }
- }
- }
-