home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / pup_idol.swf / scripts / Box2D / Dynamics / Joints / b2MouseJoint.as < prev    next >
Encoding:
Text File  |  2008-08-07  |  5.9 KB  |  167 lines

  1. package Box2D.Dynamics.Joints
  2. {
  3.    import Box2D.Common.Math.b2Mat22;
  4.    import Box2D.Common.Math.b2Math;
  5.    import Box2D.Common.Math.b2Vec2;
  6.    import Box2D.Common.b2Settings;
  7.    import Box2D.Dynamics.b2Body;
  8.    import Box2D.Dynamics.b2TimeStep;
  9.    
  10.    public class b2MouseJoint extends b2Joint
  11.    {
  12.        
  13.       
  14.       private var K1:b2Mat22;
  15.       
  16.       public var m_beta:Number;
  17.       
  18.       private var K:b2Mat22;
  19.       
  20.       private var K2:b2Mat22;
  21.       
  22.       public var m_target:b2Vec2;
  23.       
  24.       public var m_gamma:Number;
  25.       
  26.       public var m_impulse:b2Vec2;
  27.       
  28.       public var m_ptpMass:b2Mat22;
  29.       
  30.       public var m_C:b2Vec2;
  31.       
  32.       public var m_maxForce:Number;
  33.       
  34.       public var m_localAnchor:b2Vec2;
  35.       
  36.       public function b2MouseJoint(param1:b2MouseJointDef)
  37.       {
  38.          var _loc3_:Number = NaN;
  39.          K = new b2Mat22();
  40.          K1 = new b2Mat22();
  41.          K2 = new b2Mat22();
  42.          m_localAnchor = new b2Vec2();
  43.          m_target = new b2Vec2();
  44.          m_impulse = new b2Vec2();
  45.          m_ptpMass = new b2Mat22();
  46.          m_C = new b2Vec2();
  47.          super(param1);
  48.          m_target.SetV(param1.target);
  49.          var _loc2_:Number = m_target.x - m_body2.m_position.x;
  50.          _loc3_ = m_target.y - m_body2.m_position.y;
  51.          m_localAnchor.x = _loc2_ * m_body2.m_R.col1.x + _loc3_ * m_body2.m_R.col1.y;
  52.          m_localAnchor.y = _loc2_ * m_body2.m_R.col2.x + _loc3_ * m_body2.m_R.col2.y;
  53.          m_maxForce = param1.maxForce;
  54.          m_impulse.SetZero();
  55.          var _loc4_:Number = m_body2.m_mass;
  56.          var _loc5_:Number = 2 * b2Settings.b2_pi * param1.frequencyHz;
  57.          var _loc6_:Number = 2 * _loc4_ * param1.dampingRatio * _loc5_;
  58.          var _loc7_:Number = _loc4_ * _loc5_ * _loc5_;
  59.          m_gamma = 1 / (_loc6_ + param1.timeStep * _loc7_);
  60.          m_beta = param1.timeStep * _loc7_ / (_loc6_ + param1.timeStep * _loc7_);
  61.       }
  62.       
  63.       public function SetTarget(param1:b2Vec2) : void
  64.       {
  65.          m_body2.WakeUp();
  66.          m_target = param1;
  67.       }
  68.       
  69.       override public function GetAnchor2() : b2Vec2
  70.       {
  71.          var _loc1_:b2Vec2 = b2Math.b2MulMV(m_body2.m_R,m_localAnchor);
  72.          _loc1_.Add(m_body2.m_position);
  73.          return _loc1_;
  74.       }
  75.       
  76.       override public function GetAnchor1() : b2Vec2
  77.       {
  78.          return m_target;
  79.       }
  80.       
  81.       override public function PrepareVelocitySolver() : void
  82.       {
  83.          var _loc1_:b2Body = null;
  84.          var _loc2_:b2Mat22 = null;
  85.          var _loc3_:Number = NaN;
  86.          var _loc4_:Number = NaN;
  87.          var _loc5_:Number = NaN;
  88.          var _loc6_:Number = NaN;
  89.          _loc1_ = m_body2;
  90.          _loc2_ = _loc1_.m_R;
  91.          _loc3_ = _loc2_.col1.x * m_localAnchor.x + _loc2_.col2.x * m_localAnchor.y;
  92.          _loc4_ = _loc2_.col1.y * m_localAnchor.x + _loc2_.col2.y * m_localAnchor.y;
  93.          _loc5_ = _loc1_.m_invMass;
  94.          _loc6_ = _loc1_.m_invI;
  95.          K1.col1.x = _loc5_;
  96.          K1.col2.x = 0;
  97.          K1.col1.y = 0;
  98.          K1.col2.y = _loc5_;
  99.          K2.col1.x = _loc6_ * _loc4_ * _loc4_;
  100.          K2.col2.x = -_loc6_ * _loc3_ * _loc4_;
  101.          K2.col1.y = -_loc6_ * _loc3_ * _loc4_;
  102.          K2.col2.y = _loc6_ * _loc3_ * _loc3_;
  103.          K.SetM(K1);
  104.          K.AddM(K2);
  105.          K.col1.x += m_gamma;
  106.          K.col2.y += m_gamma;
  107.          K.Invert(m_ptpMass);
  108.          m_C.x = _loc1_.m_position.x + _loc3_ - m_target.x;
  109.          m_C.y = _loc1_.m_position.y + _loc4_ - m_target.y;
  110.          _loc1_.m_angularVelocity *= 0.98;
  111.          var _loc7_:Number = m_impulse.x;
  112.          var _loc8_:Number = m_impulse.y;
  113.          _loc1_.m_linearVelocity.x += _loc5_ * _loc7_;
  114.          _loc1_.m_linearVelocity.y += _loc5_ * _loc8_;
  115.          _loc1_.m_angularVelocity += _loc6_ * (_loc3_ * _loc8_ - _loc4_ * _loc7_);
  116.       }
  117.       
  118.       override public function GetReactionTorque(param1:Number) : Number
  119.       {
  120.          return 0;
  121.       }
  122.       
  123.       override public function GetReactionForce(param1:Number) : b2Vec2
  124.       {
  125.          var _loc2_:b2Vec2 = new b2Vec2();
  126.          _loc2_.SetV(m_impulse);
  127.          _loc2_.Multiply(param1);
  128.          return _loc2_;
  129.       }
  130.       
  131.       override public function SolvePositionConstraints() : Boolean
  132.       {
  133.          return true;
  134.       }
  135.       
  136.       override public function SolveVelocityConstraints(param1:b2TimeStep) : void
  137.       {
  138.          var _loc3_:b2Mat22 = null;
  139.          var _loc2_:b2Body = m_body2;
  140.          _loc3_ = _loc2_.m_R;
  141.          var _loc4_:Number = _loc3_.col1.x * m_localAnchor.x + _loc3_.col2.x * m_localAnchor.y;
  142.          var _loc5_:Number = _loc3_.col1.y * m_localAnchor.x + _loc3_.col2.y * m_localAnchor.y;
  143.          var _loc6_:Number = _loc2_.m_linearVelocity.x + -_loc2_.m_angularVelocity * _loc5_;
  144.          var _loc7_:Number = _loc2_.m_linearVelocity.y + _loc2_.m_angularVelocity * _loc4_;
  145.          _loc3_ = m_ptpMass;
  146.          var _loc8_:Number = _loc6_ + m_beta * param1.inv_dt * m_C.x + m_gamma * m_impulse.x;
  147.          var _loc9_:Number = _loc7_ + m_beta * param1.inv_dt * m_C.y + m_gamma * m_impulse.y;
  148.          var _loc10_:Number = -(_loc3_.col1.x * _loc8_ + _loc3_.col2.x * _loc9_);
  149.          var _loc11_:Number = -(_loc3_.col1.y * _loc8_ + _loc3_.col2.y * _loc9_);
  150.          var _loc12_:Number = m_impulse.x;
  151.          var _loc13_:Number = m_impulse.y;
  152.          m_impulse.x += _loc10_;
  153.          m_impulse.y += _loc11_;
  154.          var _loc14_:Number;
  155.          if((_loc14_ = m_impulse.Length()) > param1.dt * m_maxForce)
  156.          {
  157.             m_impulse.Multiply(param1.dt * m_maxForce / _loc14_);
  158.          }
  159.          _loc10_ = m_impulse.x - _loc12_;
  160.          _loc11_ = m_impulse.y - _loc13_;
  161.          _loc2_.m_linearVelocity.x += _loc2_.m_invMass * _loc10_;
  162.          _loc2_.m_linearVelocity.y += _loc2_.m_invMass * _loc11_;
  163.          _loc2_.m_angularVelocity += _loc2_.m_invI * (_loc4_ * _loc11_ - _loc5_ * _loc10_);
  164.       }
  165.    }
  166. }
  167.