home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / pup_idol.swf / scripts / Box2D / Collision / Shapes / b2CircleShape.as < prev    next >
Encoding:
Text File  |  2008-08-07  |  5.0 KB  |  133 lines

  1. package Box2D.Collision.Shapes
  2. {
  3.    import Box2D.Collision.b2AABB;
  4.    import Box2D.Collision.b2BroadPhase;
  5.    import Box2D.Collision.b2Pair;
  6.    import Box2D.Collision.b2Proxy;
  7.    import Box2D.Common.Math.b2Mat22;
  8.    import Box2D.Common.Math.b2Math;
  9.    import Box2D.Common.Math.b2Vec2;
  10.    import Box2D.Dynamics.b2Body;
  11.    
  12.    public class b2CircleShape extends b2Shape
  13.    {
  14.        
  15.       
  16.       public var m_localPosition:b2Vec2;
  17.       
  18.       public var m_radius:Number;
  19.       
  20.       public function b2CircleShape(param1:b2ShapeDef, param2:b2Body, param3:b2Vec2)
  21.       {
  22.          var _loc5_:Number = NaN;
  23.          var _loc6_:Number = NaN;
  24.          m_localPosition = new b2Vec2();
  25.          super(param1,param2);
  26.          var _loc4_:b2CircleDef = param1 as b2CircleDef;
  27.          m_localPosition.Set(param1.localPosition.x - param3.x,param1.localPosition.y - param3.y);
  28.          m_type = b2Shape.e_circleShape;
  29.          m_radius = _loc4_.radius;
  30.          m_R.SetM(m_body.m_R);
  31.          _loc5_ = m_R.col1.x * m_localPosition.x + m_R.col2.x * m_localPosition.y;
  32.          _loc6_ = m_R.col1.y * m_localPosition.x + m_R.col2.y * m_localPosition.y;
  33.          m_position.x = m_body.m_position.x + _loc5_;
  34.          m_position.y = m_body.m_position.y + _loc6_;
  35.          m_maxRadius = Math.sqrt(_loc5_ * _loc5_ + _loc6_ * _loc6_) + m_radius;
  36.          var _loc7_:b2AABB;
  37.          (_loc7_ = new b2AABB()).minVertex.Set(m_position.x - m_radius,m_position.y - m_radius);
  38.          _loc7_.maxVertex.Set(m_position.x + m_radius,m_position.y + m_radius);
  39.          var _loc8_:b2BroadPhase;
  40.          if((_loc8_ = m_body.m_world.m_broadPhase).InRange(_loc7_))
  41.          {
  42.             m_proxyId = _loc8_.CreateProxy(_loc7_,this);
  43.          }
  44.          else
  45.          {
  46.             m_proxyId = b2Pair.b2_nullProxy;
  47.          }
  48.          if(m_proxyId == b2Pair.b2_nullProxy)
  49.          {
  50.             m_body.Freeze();
  51.          }
  52.       }
  53.       
  54.       override public function Synchronize(param1:b2Vec2, param2:b2Mat22, param3:b2Vec2, param4:b2Mat22) : void
  55.       {
  56.          m_R.SetM(param4);
  57.          m_position.x = param4.col1.x * m_localPosition.x + param4.col2.x * m_localPosition.y + param3.x;
  58.          m_position.y = param4.col1.y * m_localPosition.x + param4.col2.y * m_localPosition.y + param3.y;
  59.          if(m_proxyId == b2Pair.b2_nullProxy)
  60.          {
  61.             return;
  62.          }
  63.          var _loc5_:Number = param1.x + (param2.col1.x * m_localPosition.x + param2.col2.x * m_localPosition.y);
  64.          var _loc6_:Number = param1.y + (param2.col1.y * m_localPosition.x + param2.col2.y * m_localPosition.y);
  65.          var _loc7_:Number = Math.min(_loc5_,m_position.x);
  66.          var _loc8_:Number = Math.min(_loc6_,m_position.y);
  67.          var _loc9_:Number = Math.max(_loc5_,m_position.x);
  68.          var _loc10_:Number = Math.max(_loc6_,m_position.y);
  69.          var _loc11_:b2AABB;
  70.          (_loc11_ = new b2AABB()).minVertex.Set(_loc7_ - m_radius,_loc8_ - m_radius);
  71.          _loc11_.maxVertex.Set(_loc9_ + m_radius,_loc10_ + m_radius);
  72.          var _loc12_:b2BroadPhase;
  73.          if((_loc12_ = m_body.m_world.m_broadPhase).InRange(_loc11_))
  74.          {
  75.             _loc12_.MoveProxy(m_proxyId,_loc11_);
  76.          }
  77.          else
  78.          {
  79.             m_body.Freeze();
  80.          }
  81.       }
  82.       
  83.       override public function Support(param1:Number, param2:Number, param3:b2Vec2) : void
  84.       {
  85.          var _loc4_:Number = Math.sqrt(param1 * param1 + param2 * param2);
  86.          param1 /= _loc4_;
  87.          param2 /= _loc4_;
  88.          param3.Set(m_position.x + m_radius * param1,m_position.y + m_radius * param2);
  89.       }
  90.       
  91.       override public function QuickSync(param1:b2Vec2, param2:b2Mat22) : void
  92.       {
  93.          m_R.SetM(param2);
  94.          m_position.x = param2.col1.x * m_localPosition.x + param2.col2.x * m_localPosition.y + param1.x;
  95.          m_position.y = param2.col1.y * m_localPosition.x + param2.col2.y * m_localPosition.y + param1.y;
  96.       }
  97.       
  98.       override public function TestPoint(param1:b2Vec2) : Boolean
  99.       {
  100.          var _loc2_:b2Vec2 = new b2Vec2();
  101.          _loc2_.SetV(param1);
  102.          _loc2_.Subtract(m_position);
  103.          return b2Math.b2Dot(_loc2_,_loc2_) <= m_radius * m_radius;
  104.       }
  105.       
  106.       override public function ResetProxy(param1:b2BroadPhase) : void
  107.       {
  108.          if(m_proxyId == b2Pair.b2_nullProxy)
  109.          {
  110.             return;
  111.          }
  112.          var _loc2_:b2Proxy = param1.GetProxy(m_proxyId);
  113.          param1.DestroyProxy(m_proxyId);
  114.          _loc2_ = null;
  115.          var _loc3_:b2AABB = new b2AABB();
  116.          _loc3_.minVertex.Set(m_position.x - m_radius,m_position.y - m_radius);
  117.          _loc3_.maxVertex.Set(m_position.x + m_radius,m_position.y + m_radius);
  118.          if(param1.InRange(_loc3_))
  119.          {
  120.             m_proxyId = param1.CreateProxy(_loc3_,this);
  121.          }
  122.          else
  123.          {
  124.             m_proxyId = b2Pair.b2_nullProxy;
  125.          }
  126.          if(m_proxyId == b2Pair.b2_nullProxy)
  127.          {
  128.             m_body.Freeze();
  129.          }
  130.       }
  131.    }
  132. }
  133.