home *** CD-ROM | disk | FTP | other *** search
- package Box2D.Collision.Shapes
- {
- import Box2D.Collision.b2AABB;
- import Box2D.Collision.b2BroadPhase;
- import Box2D.Collision.b2Pair;
- import Box2D.Collision.b2Proxy;
- import Box2D.Common.Math.b2Mat22;
- import Box2D.Common.Math.b2Math;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Dynamics.b2Body;
-
- public class b2CircleShape extends b2Shape
- {
-
-
- public var m_localPosition:b2Vec2;
-
- public var m_radius:Number;
-
- public function b2CircleShape(param1:b2ShapeDef, param2:b2Body, param3:b2Vec2)
- {
- var _loc5_:Number = NaN;
- var _loc6_:Number = NaN;
- m_localPosition = new b2Vec2();
- super(param1,param2);
- var _loc4_:b2CircleDef = param1 as b2CircleDef;
- m_localPosition.Set(param1.localPosition.x - param3.x,param1.localPosition.y - param3.y);
- m_type = b2Shape.e_circleShape;
- m_radius = _loc4_.radius;
- m_R.SetM(m_body.m_R);
- _loc5_ = m_R.col1.x * m_localPosition.x + m_R.col2.x * m_localPosition.y;
- _loc6_ = m_R.col1.y * m_localPosition.x + m_R.col2.y * m_localPosition.y;
- m_position.x = m_body.m_position.x + _loc5_;
- m_position.y = m_body.m_position.y + _loc6_;
- m_maxRadius = Math.sqrt(_loc5_ * _loc5_ + _loc6_ * _loc6_) + m_radius;
- var _loc7_:b2AABB;
- (_loc7_ = new b2AABB()).minVertex.Set(m_position.x - m_radius,m_position.y - m_radius);
- _loc7_.maxVertex.Set(m_position.x + m_radius,m_position.y + m_radius);
- var _loc8_:b2BroadPhase;
- if((_loc8_ = m_body.m_world.m_broadPhase).InRange(_loc7_))
- {
- m_proxyId = _loc8_.CreateProxy(_loc7_,this);
- }
- else
- {
- m_proxyId = b2Pair.b2_nullProxy;
- }
- if(m_proxyId == b2Pair.b2_nullProxy)
- {
- m_body.Freeze();
- }
- }
-
- override public function Synchronize(param1:b2Vec2, param2:b2Mat22, param3:b2Vec2, param4:b2Mat22) : void
- {
- m_R.SetM(param4);
- m_position.x = param4.col1.x * m_localPosition.x + param4.col2.x * m_localPosition.y + param3.x;
- m_position.y = param4.col1.y * m_localPosition.x + param4.col2.y * m_localPosition.y + param3.y;
- if(m_proxyId == b2Pair.b2_nullProxy)
- {
- return;
- }
- var _loc5_:Number = param1.x + (param2.col1.x * m_localPosition.x + param2.col2.x * m_localPosition.y);
- var _loc6_:Number = param1.y + (param2.col1.y * m_localPosition.x + param2.col2.y * m_localPosition.y);
- var _loc7_:Number = Math.min(_loc5_,m_position.x);
- var _loc8_:Number = Math.min(_loc6_,m_position.y);
- var _loc9_:Number = Math.max(_loc5_,m_position.x);
- var _loc10_:Number = Math.max(_loc6_,m_position.y);
- var _loc11_:b2AABB;
- (_loc11_ = new b2AABB()).minVertex.Set(_loc7_ - m_radius,_loc8_ - m_radius);
- _loc11_.maxVertex.Set(_loc9_ + m_radius,_loc10_ + m_radius);
- var _loc12_:b2BroadPhase;
- if((_loc12_ = m_body.m_world.m_broadPhase).InRange(_loc11_))
- {
- _loc12_.MoveProxy(m_proxyId,_loc11_);
- }
- else
- {
- m_body.Freeze();
- }
- }
-
- override public function Support(param1:Number, param2:Number, param3:b2Vec2) : void
- {
- var _loc4_:Number = Math.sqrt(param1 * param1 + param2 * param2);
- param1 /= _loc4_;
- param2 /= _loc4_;
- param3.Set(m_position.x + m_radius * param1,m_position.y + m_radius * param2);
- }
-
- override public function QuickSync(param1:b2Vec2, param2:b2Mat22) : void
- {
- m_R.SetM(param2);
- m_position.x = param2.col1.x * m_localPosition.x + param2.col2.x * m_localPosition.y + param1.x;
- m_position.y = param2.col1.y * m_localPosition.x + param2.col2.y * m_localPosition.y + param1.y;
- }
-
- override public function TestPoint(param1:b2Vec2) : Boolean
- {
- var _loc2_:b2Vec2 = new b2Vec2();
- _loc2_.SetV(param1);
- _loc2_.Subtract(m_position);
- return b2Math.b2Dot(_loc2_,_loc2_) <= m_radius * m_radius;
- }
-
- override public function ResetProxy(param1:b2BroadPhase) : void
- {
- if(m_proxyId == b2Pair.b2_nullProxy)
- {
- return;
- }
- var _loc2_:b2Proxy = param1.GetProxy(m_proxyId);
- param1.DestroyProxy(m_proxyId);
- _loc2_ = null;
- var _loc3_:b2AABB = new b2AABB();
- _loc3_.minVertex.Set(m_position.x - m_radius,m_position.y - m_radius);
- _loc3_.maxVertex.Set(m_position.x + m_radius,m_position.y + m_radius);
- if(param1.InRange(_loc3_))
- {
- m_proxyId = param1.CreateProxy(_loc3_,this);
- }
- else
- {
- m_proxyId = b2Pair.b2_nullProxy;
- }
- if(m_proxyId == b2Pair.b2_nullProxy)
- {
- m_body.Freeze();
- }
- }
- }
- }
-