home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Puzzle / filler.swf / scripts / org / cove / ape / AbstractParticle.as < prev    next >
Encoding:
Text File  |  2008-09-02  |  6.2 KB  |  246 lines

  1. package org.cove.ape
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.utils.getQualifiedClassName;
  5.    
  6.    public class AbstractParticle extends AbstractItem
  7.    {
  8.        
  9.       
  10.       private var _collidable:Boolean;
  11.       
  12.       private var _multisample:int;
  13.       
  14.       private var collision:Collision;
  15.       
  16.       internal var prev:Vector;
  17.       
  18.       private var _kfr:Number;
  19.       
  20.       internal var curr:Vector;
  21.       
  22.       private var _invMass:Number;
  23.       
  24.       internal var interval:Interval;
  25.       
  26.       private var _mass:Number;
  27.       
  28.       private var temp:Vector;
  29.       
  30.       private var _friction:Number;
  31.       
  32.       private var forces:Vector;
  33.       
  34.       internal var samp:Vector;
  35.       
  36.       private var _center:Vector;
  37.       
  38.       private var _fixed:Boolean;
  39.       
  40.       public function AbstractParticle(param1:Number, param2:Number, param3:Boolean, param4:Number, param5:Number, param6:Number)
  41.       {
  42.          super();
  43.          if(getQualifiedClassName(this) == "org.cove.ape::AbstractParticle")
  44.          {
  45.             throw new ArgumentError("AbstractParticle can\'t be instantiated directly");
  46.          }
  47.          interval = new Interval(0,0);
  48.          curr = new Vector(param1,param2);
  49.          prev = new Vector(param1,param2);
  50.          samp = new Vector();
  51.          temp = new Vector();
  52.          fixed = param3;
  53.          forces = new Vector();
  54.          collision = new Collision(new Vector(),new Vector());
  55.          collidable = true;
  56.          this.mass = param4;
  57.          this.elasticity = param5;
  58.          this.friction = param6;
  59.          setStyle();
  60.          _center = new Vector();
  61.          _multisample = 0;
  62.       }
  63.       
  64.       public function set friction(param1:Number) : void
  65.       {
  66.          if(param1 < 0 || param1 > 1)
  67.          {
  68.             throw new ArgumentError("Legal friction must be >= 0 and <=1");
  69.          }
  70.          _friction = param1;
  71.       }
  72.       
  73.       public function get px() : Number
  74.       {
  75.          return curr.x;
  76.       }
  77.       
  78.       public function get py() : Number
  79.       {
  80.          return curr.y;
  81.       }
  82.       
  83.       public function set py(param1:Number) : void
  84.       {
  85.          curr.y = param1;
  86.          prev.y = param1;
  87.       }
  88.       
  89.       internal function getComponents(param1:Vector) : Collision
  90.       {
  91.          var _loc2_:Vector = null;
  92.          var _loc3_:Number = NaN;
  93.          _loc2_ = velocity;
  94.          _loc3_ = param1.dot(_loc2_);
  95.          collision.vn = param1.mult(_loc3_);
  96.          collision.vt = _loc2_.minus(collision.vn);
  97.          return collision;
  98.       }
  99.       
  100.       public function set mass(param1:Number) : void
  101.       {
  102.          if(param1 <= 0)
  103.          {
  104.             throw new ArgumentError("mass may not be set <= 0");
  105.          }
  106.          _mass = param1;
  107.          _invMass = 1 / _mass;
  108.       }
  109.       
  110.       public function get fixed() : Boolean
  111.       {
  112.          return _fixed;
  113.       }
  114.       
  115.       public function set px(param1:Number) : void
  116.       {
  117.          curr.x = param1;
  118.          prev.x = param1;
  119.       }
  120.       
  121.       internal function initDisplay() : void
  122.       {
  123.          displayObject.x = displayObjectOffset.x;
  124.          displayObject.y = displayObjectOffset.y;
  125.          displayObject.rotation = displayObjectRotation;
  126.          sprite.addChild(displayObject);
  127.       }
  128.       
  129.       internal function get invMass() : Number
  130.       {
  131.          return fixed ? 0 : _invMass;
  132.       }
  133.       
  134.       public function setDisplay(param1:DisplayObject, param2:Number = 0, param3:Number = 0, param4:Number = 0) : void
  135.       {
  136.          displayObject = param1;
  137.          displayObjectRotation = param4;
  138.          displayObjectOffset = new Vector(param2,param3);
  139.       }
  140.       
  141.       public function get position() : Vector
  142.       {
  143.          return new Vector(curr.x,curr.y);
  144.       }
  145.       
  146.       public function get multisample() : int
  147.       {
  148.          return _multisample;
  149.       }
  150.       
  151.       internal function resolveCollision(param1:Vector, param2:Vector, param3:Vector, param4:Number, param5:int, param6:AbstractParticle) : void
  152.       {
  153.          curr.plusEquals(param1);
  154.          velocity = param2;
  155.       }
  156.       
  157.       public function set fixed(param1:Boolean) : void
  158.       {
  159.          _fixed = param1;
  160.       }
  161.       
  162.       public function addMasslessForce(param1:Vector) : void
  163.       {
  164.          forces.plusEquals(param1);
  165.       }
  166.       
  167.       public function set velocity(param1:Vector) : void
  168.       {
  169.          prev = curr.minus(param1);
  170.       }
  171.       
  172.       public function set multisample(param1:int) : void
  173.       {
  174.          _multisample = param1;
  175.       }
  176.       
  177.       public function get elasticity() : Number
  178.       {
  179.          return _kfr;
  180.       }
  181.       
  182.       public function set position(param1:Vector) : void
  183.       {
  184.          curr.copy(param1);
  185.          prev.copy(param1);
  186.       }
  187.       
  188.       public function get center() : Vector
  189.       {
  190.          _center.setTo(px,py);
  191.          return _center;
  192.       }
  193.       
  194.       public function update(param1:Number) : void
  195.       {
  196.          var _loc2_:Vector = null;
  197.          if(fixed)
  198.          {
  199.             return;
  200.          }
  201.          addForce(APEngine.force);
  202.          addMasslessForce(APEngine.masslessForce);
  203.          temp.copy(curr);
  204.          _loc2_ = velocity.plus(forces.multEquals(param1));
  205.          curr.plusEquals(_loc2_.multEquals(APEngine.damping));
  206.          prev.copy(temp);
  207.          forces.setTo(0,0);
  208.       }
  209.       
  210.       public function set collidable(param1:Boolean) : void
  211.       {
  212.          _collidable = param1;
  213.       }
  214.       
  215.       public function get velocity() : Vector
  216.       {
  217.          return curr.minus(prev);
  218.       }
  219.       
  220.       public function get collidable() : Boolean
  221.       {
  222.          return _collidable;
  223.       }
  224.       
  225.       public function addForce(param1:Vector) : void
  226.       {
  227.          forces.plusEquals(param1.mult(invMass));
  228.       }
  229.       
  230.       public function set elasticity(param1:Number) : void
  231.       {
  232.          _kfr = param1;
  233.       }
  234.       
  235.       public function get friction() : Number
  236.       {
  237.          return _friction;
  238.       }
  239.       
  240.       public function get mass() : Number
  241.       {
  242.          return _mass;
  243.       }
  244.    }
  245. }
  246.