home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Aventura / aether.swf / scripts / Vector.as < prev    next >
Text File  |  2008-09-11  |  6KB  |  194 lines

  1. package
  2. {
  3.    import flash.display.MovieClip;
  4.    
  5.    public class Vector
  6.    {
  7.       
  8.       private static var convert:Number = Math.PI / 180;
  9.        
  10.       
  11.       public var x:Number;
  12.       
  13.       public var y:Number;
  14.       
  15.       public function Vector(param1:Number, param2:Number)
  16.       {
  17.          super();
  18.          x = param1;
  19.          y = param2;
  20.       }
  21.       
  22.       public static function add(param1:Vector, param2:Vector) : Vector
  23.       {
  24.          return new Vector(param2.x + param1.x,param2.y + param1.y);
  25.       }
  26.       
  27.       public static function subtract(param1:Vector, param2:Vector) : Vector
  28.       {
  29.          return new Vector(param1.x - param2.x,param1.y - param2.y);
  30.       }
  31.       
  32.       public static function dot(param1:Vector, param2:Vector) : Number
  33.       {
  34.          return param2.x * param1.x + param2.y * param1.y;
  35.       }
  36.       
  37.       public static function angle(param1:Vector, param2:Vector) : Number
  38.       {
  39.          if(param2.length * param1.length == 0)
  40.          {
  41.             return 0;
  42.          }
  43.          return Math.acos(dot(param1,param2) / (param2.length * param1.length)) / convert;
  44.       }
  45.       
  46.       public static function comp(param1:Vector, param2:Vector) : Number
  47.       {
  48.          if(param1.length * param2.length == 0)
  49.          {
  50.             return 0;
  51.          }
  52.          return Math.abs(param1.x / param1.length - param2.x / param2.length) + Math.abs(param1.y / param1.length - param2.y / param2.length);
  53.       }
  54.       
  55.       public static function angle2(param1:Vector, param2:Vector) : Number
  56.       {
  57.          var _loc3_:Number = NaN;
  58.          _loc3_ = angle(param1,param2);
  59.          if(_loc3_ == 0)
  60.          {
  61.             return 0;
  62.          }
  63.          if(comp(param1.rotateNew(_loc3_),param2) < 0.0001)
  64.          {
  65.             return _loc3_;
  66.          }
  67.          return -_loc3_;
  68.       }
  69.       
  70.       public function rotate(param1:Number) : void
  71.       {
  72.          var _loc2_:Number = NaN;
  73.          var _loc3_:Number = NaN;
  74.          var _loc4_:Number = NaN;
  75.          var _loc5_:Number = NaN;
  76.          param1 *= convert;
  77.          _loc2_ = Math.sin(param1);
  78.          _loc3_ = Math.cos(param1);
  79.          _loc4_ = x * _loc3_ - y * _loc2_;
  80.          _loc5_ = x * _loc2_ + y * _loc3_;
  81.          x = _loc4_;
  82.          y = _loc5_;
  83.       }
  84.       
  85.       public function rotateNew(param1:Number) : Vector
  86.       {
  87.          var _loc2_:Number = NaN;
  88.          var _loc3_:Number = NaN;
  89.          param1 *= convert;
  90.          _loc2_ = Math.sin(param1);
  91.          _loc3_ = Math.cos(param1);
  92.          return new Vector(x * _loc3_ - y * _loc2_,x * _loc2_ + y * _loc3_);
  93.       }
  94.       
  95.       public function get length() : Number
  96.       {
  97.          return Math.sqrt(x * x + y * y);
  98.       }
  99.       
  100.       public function perpendicular(param1:Number = -1) : Vector
  101.       {
  102.          return new Vector(param1 * y,-param1 * x);
  103.       }
  104.       
  105.       public function set length(param1:Number) : void
  106.       {
  107.          norm();
  108.          scale(param1);
  109.       }
  110.       
  111.       public function scale(param1:Number) : void
  112.       {
  113.          x *= param1;
  114.          y *= param1;
  115.       }
  116.       
  117.       public function render(param1:Vector, param2:Number, param3:MovieClip) : void
  118.       {
  119.          var _loc4_:Vector = null;
  120.          var _loc5_:Vector = null;
  121.          param3.graphics.lineStyle(3,16777215,100);
  122.          param3.graphics.moveTo(param1.x,param1.y);
  123.          param3.graphics.lineTo(param1.x + x * param2,param1.y + y * param2);
  124.          (_loc4_ = new Vector(-x,-y)).norm();
  125.          _loc4_.scale(7);
  126.          _loc4_.rotate(-45);
  127.          param3.graphics.lineTo(param1.x + x * param2 + _loc4_.x,param1.y + y * param2 + _loc4_.y);
  128.          param3.graphics.moveTo(param1.x + x * param2,param1.y + y * param2);
  129.          _loc4_.rotate(90);
  130.          param3.graphics.lineTo(param1.x + x * param2 + _loc4_.x,param1.y + y * param2 + _loc4_.y);
  131.          param3.graphics.lineStyle(2,0,100);
  132.          param3.graphics.moveTo(param1.x,param1.y);
  133.          param3.graphics.lineTo(param1.x + x * param2,param1.y + y * param2);
  134.          (_loc5_ = new Vector(-x,-y)).norm();
  135.          _loc5_.scale(7);
  136.          _loc5_.rotate(-45);
  137.          param3.graphics.lineTo(param1.x + x * param2 + _loc5_.x,param1.y + y * param2 + _loc5_.y);
  138.          param3.graphics.moveTo(param1.x + x * param2,param1.y + y * param2);
  139.          _loc5_.rotate(90);
  140.          param3.graphics.lineTo(param1.x + x * param2 + _loc5_.x,param1.y + y * param2 + _loc5_.y);
  141.       }
  142.       
  143.       public function constrain(param1:Number, param2:String = "Greater") : *
  144.       {
  145.          if(param2 == "Greater")
  146.          {
  147.             if(length > param1)
  148.             {
  149.                norm();
  150.                scale(param1);
  151.             }
  152.          }
  153.          if(param2 == "Always")
  154.          {
  155.             norm();
  156.             scale(param1);
  157.          }
  158.          if(param2 == "Less")
  159.          {
  160.             if(length < param1)
  161.             {
  162.                norm();
  163.                scale(param1);
  164.             }
  165.          }
  166.       }
  167.       
  168.       public function get length2() : Number
  169.       {
  170.          return x * x + y * y;
  171.       }
  172.       
  173.       public function norm() : void
  174.       {
  175.          var _loc1_:Number = NaN;
  176.          _loc1_ = length;
  177.          if(_loc1_ != 0)
  178.          {
  179.             x /= _loc1_;
  180.             y /= _loc1_;
  181.          }
  182.       }
  183.       
  184.       public function reflect(param1:Vector) : Vector
  185.       {
  186.          var _loc2_:Vector = null;
  187.          _loc2_ = new Vector(param1.x,param1.y);
  188.          _loc2_.norm();
  189.          _loc2_.scale(2 * dot(this,_loc2_));
  190.          return subtract(this,_loc2_);
  191.       }
  192.    }
  193. }
  194.