home *** CD-ROM | disk | FTP | other *** search
- package Box2D.Collision
- {
- import Box2D.Collision.Shapes.*;
- import Box2D.Common.*;
- import Box2D.Common.Math.*;
-
- public class b2Collision
- {
-
- public static const b2_nullFeature:uint = 255;
-
- private static var b2CollidePolyTempVec:b2Vec2 = new b2Vec2();
-
-
- public function b2Collision()
- {
- super();
- }
-
- public static function EdgeSeparation(param1:b2PolyShape, param2:int, param3:b2PolyShape) : Number
- {
- var _loc21_:b2Vec2 = null;
- var _loc22_:Number = NaN;
- var _loc4_:Array = param1.m_vertices;
- var _loc5_:int = param3.m_vertexCount;
- var _loc6_:Array = param3.m_vertices;
- var _loc7_:Number = Number(param1.m_normals[param2].x);
- var _loc8_:Number = Number(param1.m_normals[param2].y);
- var _loc9_:Number = _loc7_;
- var _loc10_:b2Mat22;
- _loc7_ = (_loc10_ = param1.m_R).col1.x * _loc9_ + _loc10_.col2.x * _loc8_;
- _loc8_ = _loc10_.col1.y * _loc9_ + _loc10_.col2.y * _loc8_;
- var _loc11_:Number = _loc7_;
- var _loc12_:Number = _loc8_;
- _loc10_ = param3.m_R;
- _loc9_ = _loc11_ * _loc10_.col1.x + _loc12_ * _loc10_.col1.y;
- _loc12_ = _loc11_ * _loc10_.col2.x + _loc12_ * _loc10_.col2.y;
- _loc11_ = _loc9_;
- var _loc13_:int = 0;
- var _loc14_:Number = Number.MAX_VALUE;
- var _loc15_:int = 0;
- while(_loc15_ < _loc5_)
- {
- if((_loc22_ = (_loc21_ = _loc6_[_loc15_]).x * _loc11_ + _loc21_.y * _loc12_) < _loc14_)
- {
- _loc14_ = _loc22_;
- _loc13_ = _loc15_;
- }
- _loc15_++;
- }
- _loc10_ = param1.m_R;
- var _loc16_:Number = param1.m_position.x + (_loc10_.col1.x * _loc4_[param2].x + _loc10_.col2.x * _loc4_[param2].y);
- var _loc17_:Number = param1.m_position.y + (_loc10_.col1.y * _loc4_[param2].x + _loc10_.col2.y * _loc4_[param2].y);
- _loc10_ = param3.m_R;
- var _loc18_:Number = param3.m_position.x + (_loc10_.col1.x * _loc6_[_loc13_].x + _loc10_.col2.x * _loc6_[_loc13_].y);
- var _loc19_:Number = param3.m_position.y + (_loc10_.col1.y * _loc6_[_loc13_].x + _loc10_.col2.y * _loc6_[_loc13_].y);
- _loc18_ -= _loc16_;
- _loc19_ -= _loc17_;
- return _loc18_ * _loc7_ + _loc19_ * _loc8_;
- }
-
- public static function b2TestOverlap(param1:b2AABB, param2:b2AABB) : Boolean
- {
- var _loc3_:b2Vec2 = param2.minVertex;
- var _loc4_:b2Vec2 = param1.maxVertex;
- var _loc5_:Number = _loc3_.x - _loc4_.x;
- var _loc6_:Number = _loc3_.y - _loc4_.y;
- _loc3_ = param1.minVertex;
- _loc4_ = param2.maxVertex;
- var _loc7_:Number = _loc3_.x - _loc4_.x;
- var _loc8_:Number = _loc3_.y - _loc4_.y;
- if(_loc5_ > 0 || _loc6_ > 0)
- {
- return false;
- }
- if(_loc7_ > 0 || _loc8_ > 0)
- {
- return false;
- }
- return true;
- }
-
- public static function FindIncidentEdge(param1:Array, param2:b2PolyShape, param3:int, param4:b2PolyShape) : void
- {
- var _loc21_:int = 0;
- var _loc22_:int = 0;
- var _loc25_:ClipVertex = null;
- var _loc26_:int = 0;
- var _loc27_:int = 0;
- var _loc28_:Number = NaN;
- var _loc29_:Number = NaN;
- var _loc30_:Number = NaN;
- var _loc5_:int = param2.m_vertexCount;
- var _loc6_:Array = param2.m_vertices;
- var _loc7_:int = param4.m_vertexCount;
- var _loc8_:Array = param4.m_vertices;
- var _loc9_:int = param3;
- var _loc10_:int = param3 + 1 == _loc5_ ? 0 : param3 + 1;
- var _loc11_:b2Vec2;
- var _loc12_:Number = (_loc11_ = _loc6_[_loc10_]).x;
- var _loc13_:Number = _loc11_.y;
- _loc11_ = _loc6_[_loc9_];
- _loc12_ -= _loc11_.x;
- _loc13_ -= _loc11_.y;
- var _loc14_:Number = _loc12_;
- _loc12_ = _loc13_;
- _loc13_ = -_loc14_;
- var _loc15_:Number = 1 / Math.sqrt(_loc12_ * _loc12_ + _loc13_ * _loc13_);
- _loc12_ *= _loc15_;
- _loc13_ *= _loc15_;
- var _loc16_:Number = _loc12_;
- var _loc17_:Number = _loc13_;
- _loc14_ = _loc16_;
- var _loc18_:b2Mat22;
- _loc16_ = (_loc18_ = param2.m_R).col1.x * _loc14_ + _loc18_.col2.x * _loc17_;
- _loc17_ = _loc18_.col1.y * _loc14_ + _loc18_.col2.y * _loc17_;
- var _loc19_:Number = _loc16_;
- var _loc20_:Number = _loc17_;
- _loc18_ = param4.m_R;
- _loc14_ = _loc19_ * _loc18_.col1.x + _loc20_ * _loc18_.col1.y;
- _loc20_ = _loc19_ * _loc18_.col2.x + _loc20_ * _loc18_.col2.y;
- _loc19_ = _loc14_;
- var _loc23_:Number = Number.MAX_VALUE;
- var _loc24_:int = 0;
- while(_loc24_ < _loc7_)
- {
- _loc26_ = _loc24_;
- _loc27_ = _loc24_ + 1 < _loc7_ ? _loc24_ + 1 : 0;
- _loc28_ = (_loc11_ = _loc8_[_loc27_]).x;
- _loc29_ = _loc11_.y;
- _loc11_ = _loc8_[_loc26_];
- _loc28_ -= _loc11_.x;
- _loc29_ -= _loc11_.y;
- _loc14_ = _loc28_;
- _loc28_ = _loc29_;
- _loc29_ = -_loc14_;
- _loc15_ = 1 / Math.sqrt(_loc28_ * _loc28_ + _loc29_ * _loc29_);
- _loc28_ *= _loc15_;
- _loc29_ *= _loc15_;
- if((_loc30_ = _loc28_ * _loc19_ + _loc29_ * _loc20_) < _loc23_)
- {
- _loc23_ = _loc30_;
- _loc21_ = _loc26_;
- _loc22_ = _loc27_;
- }
- _loc24_++;
- }
- (_loc11_ = (_loc25_ = param1[0]).v).SetV(_loc8_[_loc21_]);
- _loc11_.MulM(param4.m_R);
- _loc11_.Add(param4.m_position);
- _loc25_.id.features.referenceFace = param3;
- _loc25_.id.features.incidentEdge = _loc21_;
- _loc25_.id.features.incidentVertex = _loc21_;
- (_loc11_ = (_loc25_ = param1[1]).v).SetV(_loc8_[_loc22_]);
- _loc11_.MulM(param4.m_R);
- _loc11_.Add(param4.m_position);
- _loc25_.id.features.referenceFace = param3;
- _loc25_.id.features.incidentEdge = _loc21_;
- _loc25_.id.features.incidentVertex = _loc22_;
- }
-
- public static function b2CollidePolyAndCircle(param1:b2Manifold, param2:b2PolyShape, param3:b2CircleShape, param4:Boolean) : void
- {
- var _loc5_:b2ContactPoint = null;
- var _loc6_:Number = NaN;
- var _loc7_:Number = NaN;
- var _loc12_:Number = NaN;
- var _loc23_:Number = NaN;
- var _loc24_:Number = NaN;
- var _loc25_:Number = NaN;
- var _loc26_:b2Vec2 = null;
- param1.pointCount = 0;
- var _loc8_:Number = param3.m_position.x - param2.m_position.x;
- var _loc9_:Number = param3.m_position.y - param2.m_position.y;
- var _loc10_:b2Mat22 = param2.m_R;
- var _loc11_:Number = _loc8_ * _loc10_.col1.x + _loc9_ * _loc10_.col1.y;
- _loc9_ = _loc8_ * _loc10_.col2.x + _loc9_ * _loc10_.col2.y;
- _loc8_ = _loc11_;
- var _loc13_:int = 0;
- var _loc14_:Number = -Number.MAX_VALUE;
- var _loc15_:Number = param3.m_radius;
- var _loc16_:int = 0;
- while(_loc16_ < param2.m_vertexCount)
- {
- if((_loc25_ = param2.m_normals[_loc16_].x * (_loc8_ - param2.m_vertices[_loc16_].x) + param2.m_normals[_loc16_].y * (_loc9_ - param2.m_vertices[_loc16_].y)) > _loc15_)
- {
- return;
- }
- if(_loc25_ > _loc14_)
- {
- _loc14_ = _loc25_;
- _loc13_ = _loc16_;
- }
- _loc16_++;
- }
- if(_loc14_ < Number.MIN_VALUE)
- {
- param1.pointCount = 1;
- _loc26_ = param2.m_normals[_loc13_];
- param1.normal.x = _loc10_.col1.x * _loc26_.x + _loc10_.col2.x * _loc26_.y;
- param1.normal.y = _loc10_.col1.y * _loc26_.x + _loc10_.col2.y * _loc26_.y;
- (_loc5_ = param1.points[0]).id.features.incidentEdge = _loc13_;
- _loc5_.id.features.incidentVertex = b2_nullFeature;
- _loc5_.id.features.referenceFace = b2_nullFeature;
- _loc5_.id.features.flip = 0;
- _loc5_.position.x = param3.m_position.x - _loc15_ * param1.normal.x;
- _loc5_.position.y = param3.m_position.y - _loc15_ * param1.normal.y;
- _loc5_.separation = _loc14_ - _loc15_;
- return;
- }
- var _loc17_:int;
- var _loc18_:int = (_loc17_ = _loc13_) + 1 < param2.m_vertexCount ? _loc17_ + 1 : 0;
- var _loc19_:Number = param2.m_vertices[_loc18_].x - param2.m_vertices[_loc17_].x;
- var _loc20_:Number = param2.m_vertices[_loc18_].y - param2.m_vertices[_loc17_].y;
- var _loc21_:Number = Math.sqrt(_loc19_ * _loc19_ + _loc20_ * _loc20_);
- _loc19_ /= _loc21_;
- _loc20_ /= _loc21_;
- if(_loc21_ < Number.MIN_VALUE)
- {
- _loc6_ = _loc8_ - param2.m_vertices[_loc17_].x;
- _loc7_ = _loc9_ - param2.m_vertices[_loc17_].y;
- _loc12_ = Math.sqrt(_loc6_ * _loc6_ + _loc7_ * _loc7_);
- _loc6_ /= _loc12_;
- _loc7_ /= _loc12_;
- if(_loc12_ > _loc15_)
- {
- return;
- }
- param1.pointCount = 1;
- param1.normal.Set(_loc10_.col1.x * _loc6_ + _loc10_.col2.x * _loc7_,_loc10_.col1.y * _loc6_ + _loc10_.col2.y * _loc7_);
- (_loc5_ = param1.points[0]).id.features.incidentEdge = b2_nullFeature;
- _loc5_.id.features.incidentVertex = _loc17_;
- _loc5_.id.features.referenceFace = b2_nullFeature;
- _loc5_.id.features.flip = 0;
- _loc5_.position.x = param3.m_position.x - _loc15_ * param1.normal.x;
- _loc5_.position.y = param3.m_position.y - _loc15_ * param1.normal.y;
- _loc5_.separation = _loc12_ - _loc15_;
- return;
- }
- var _loc22_:Number = (_loc8_ - param2.m_vertices[_loc17_].x) * _loc19_ + (_loc9_ - param2.m_vertices[_loc17_].y) * _loc20_;
- (_loc5_ = param1.points[0]).id.features.incidentEdge = b2_nullFeature;
- _loc5_.id.features.incidentVertex = b2_nullFeature;
- _loc5_.id.features.referenceFace = b2_nullFeature;
- _loc5_.id.features.flip = 0;
- if(_loc22_ <= 0)
- {
- _loc23_ = Number(param2.m_vertices[_loc17_].x);
- _loc24_ = Number(param2.m_vertices[_loc17_].y);
- _loc5_.id.features.incidentVertex = _loc17_;
- }
- else if(_loc22_ >= _loc21_)
- {
- _loc23_ = Number(param2.m_vertices[_loc18_].x);
- _loc24_ = Number(param2.m_vertices[_loc18_].y);
- _loc5_.id.features.incidentVertex = _loc18_;
- }
- else
- {
- _loc23_ = _loc19_ * _loc22_ + param2.m_vertices[_loc17_].x;
- _loc24_ = _loc20_ * _loc22_ + param2.m_vertices[_loc17_].y;
- _loc5_.id.features.incidentEdge = _loc17_;
- }
- _loc6_ = _loc8_ - _loc23_;
- _loc7_ = _loc9_ - _loc24_;
- _loc12_ = Math.sqrt(_loc6_ * _loc6_ + _loc7_ * _loc7_);
- _loc6_ /= _loc12_;
- _loc7_ /= _loc12_;
- if(_loc12_ > _loc15_)
- {
- return;
- }
- param1.pointCount = 1;
- param1.normal.Set(_loc10_.col1.x * _loc6_ + _loc10_.col2.x * _loc7_,_loc10_.col1.y * _loc6_ + _loc10_.col2.y * _loc7_);
- _loc5_.position.x = param3.m_position.x - _loc15_ * param1.normal.x;
- _loc5_.position.y = param3.m_position.y - _loc15_ * param1.normal.y;
- _loc5_.separation = _loc12_ - _loc15_;
- }
-
- public static function FindMaxSeparation(param1:Array, param2:b2PolyShape, param3:b2PolyShape, param4:Boolean) : Number
- {
- var _loc18_:int = 0;
- var _loc19_:Number = NaN;
- var _loc20_:int = 0;
- var _loc21_:Number = NaN;
- var _loc5_:int = param2.m_vertexCount;
- var _loc6_:Number = param3.m_position.x - param2.m_position.x;
- var _loc7_:Number = param3.m_position.y - param2.m_position.y;
- var _loc8_:Number = _loc6_ * param2.m_R.col1.x + _loc7_ * param2.m_R.col1.y;
- var _loc9_:Number = _loc6_ * param2.m_R.col2.x + _loc7_ * param2.m_R.col2.y;
- var _loc10_:int = 0;
- var _loc11_:Number = -Number.MAX_VALUE;
- var _loc12_:int = 0;
- while(_loc12_ < _loc5_)
- {
- if((_loc21_ = param2.m_normals[_loc12_].x * _loc8_ + param2.m_normals[_loc12_].y * _loc9_) > _loc11_)
- {
- _loc11_ = _loc21_;
- _loc10_ = _loc12_;
- }
- _loc12_++;
- }
- var _loc13_:Number;
- if((_loc13_ = EdgeSeparation(param2,_loc10_,param3)) > 0 && param4 == false)
- {
- return _loc13_;
- }
- var _loc14_:int = _loc10_ - 1 >= 0 ? _loc10_ - 1 : _loc5_ - 1;
- var _loc15_:Number;
- if((_loc15_ = EdgeSeparation(param2,_loc14_,param3)) > 0 && param4 == false)
- {
- return _loc15_;
- }
- var _loc16_:int = _loc10_ + 1 < _loc5_ ? _loc10_ + 1 : 0;
- var _loc17_:Number;
- if((_loc17_ = EdgeSeparation(param2,_loc16_,param3)) > 0 && param4 == false)
- {
- return _loc17_;
- }
- if(_loc15_ > _loc13_ && _loc15_ > _loc17_)
- {
- _loc20_ = -1;
- _loc18_ = _loc14_;
- _loc19_ = _loc15_;
- }
- else
- {
- if(_loc17_ <= _loc13_)
- {
- param1[0] = _loc10_;
- return _loc13_;
- }
- _loc20_ = 1;
- _loc18_ = _loc16_;
- _loc19_ = _loc17_;
- }
- while(true)
- {
- if(_loc20_ == -1)
- {
- _loc10_ = _loc18_ - 1 >= 0 ? _loc18_ - 1 : _loc5_ - 1;
- }
- else
- {
- _loc10_ = _loc18_ + 1 < _loc5_ ? _loc18_ + 1 : 0;
- }
- if((_loc13_ = EdgeSeparation(param2,_loc10_,param3)) > 0 && param4 == false)
- {
- break;
- }
- if(_loc13_ <= _loc19_)
- {
- param1[0] = _loc18_;
- return _loc19_;
- }
- _loc18_ = _loc10_;
- _loc19_ = _loc13_;
- }
- return _loc13_;
- }
-
- public static function ClipSegmentToLine(param1:Array, param2:Array, param3:b2Vec2, param4:Number) : int
- {
- var _loc7_:b2Vec2 = null;
- var _loc8_:Number = NaN;
- var _loc10_:Number = NaN;
- var _loc11_:b2Vec2 = null;
- var _loc5_:int = 0;
- var _loc6_:b2Vec2 = param2[0].v;
- _loc7_ = param2[1].v;
- _loc8_ = b2Math.b2Dot(param3,param2[0].v) - param4;
- var _loc9_:Number = b2Math.b2Dot(param3,param2[1].v) - param4;
- if(_loc8_ <= 0)
- {
- var _loc12_:*;
- param1[_loc12_ = _loc5_++] = param2[0];
- }
- if(_loc9_ <= 0)
- {
- param1[_loc12_ = _loc5_++] = param2[1];
- }
- if(_loc8_ * _loc9_ < 0)
- {
- _loc10_ = _loc8_ / (_loc8_ - _loc9_);
- (_loc11_ = param1[_loc5_].v).x = _loc6_.x + _loc10_ * (_loc7_.x - _loc6_.x);
- _loc11_.y = _loc6_.y + _loc10_ * (_loc7_.y - _loc6_.y);
- if(_loc8_ > 0)
- {
- param1[_loc5_].id = param2[0].id;
- }
- else
- {
- param1[_loc5_].id = param2[1].id;
- }
- _loc5_++;
- }
- return _loc5_;
- }
-
- public static function b2CollidePoly(param1:b2Manifold, param2:b2PolyShape, param3:b2PolyShape, param4:Boolean) : void
- {
- var _loc11_:b2PolyShape = null;
- var _loc12_:b2PolyShape = null;
- var _loc13_:int = 0;
- var _loc14_:int = 0;
- var _loc40_:int = 0;
- var _loc43_:b2Vec2 = null;
- var _loc44_:Number = NaN;
- var _loc45_:b2ContactPoint = null;
- param1.pointCount = 0;
- var _loc5_:int;
- var _loc6_:Array = [_loc5_ = 0];
- var _loc7_:Number = FindMaxSeparation(_loc6_,param2,param3,param4);
- _loc5_ = int(_loc6_[0]);
- if(_loc7_ > 0 && param4 == false)
- {
- return;
- }
- var _loc8_:int;
- var _loc9_:Array = [_loc8_ = 0];
- var _loc10_:Number = FindMaxSeparation(_loc9_,param3,param2,param4);
- _loc8_ = int(_loc9_[0]);
- if(_loc10_ > 0 && param4 == false)
- {
- return;
- }
- var _loc15_:Number = 0.98;
- var _loc16_:Number = 0.001;
- if(_loc10_ > _loc15_ * _loc7_ + _loc16_)
- {
- _loc11_ = param3;
- _loc12_ = param2;
- _loc13_ = _loc8_;
- _loc14_ = 1;
- }
- else
- {
- _loc11_ = param2;
- _loc12_ = param3;
- _loc13_ = _loc5_;
- _loc14_ = 0;
- }
- var _loc17_:Array = [new ClipVertex(),new ClipVertex()];
- FindIncidentEdge(_loc17_,_loc11_,_loc13_,_loc12_);
- var _loc18_:int = _loc11_.m_vertexCount;
- var _loc19_:Array;
- var _loc20_:b2Vec2 = (_loc19_ = _loc11_.m_vertices)[_loc13_];
- var _loc21_:b2Vec2;
- var _loc22_:Number = (_loc21_ = _loc13_ + 1 < _loc18_ ? _loc19_[_loc13_ + 1] : _loc19_[0]).x - _loc20_.x;
- var _loc23_:Number = _loc21_.y - _loc20_.y;
- var _loc24_:Number = _loc21_.x - _loc20_.x;
- var _loc25_:Number = _loc21_.y - _loc20_.y;
- var _loc26_:Number = _loc24_;
- var _loc27_:b2Mat22;
- _loc24_ = (_loc27_ = _loc11_.m_R).col1.x * _loc26_ + _loc27_.col2.x * _loc25_;
- _loc25_ = _loc27_.col1.y * _loc26_ + _loc27_.col2.y * _loc25_;
- var _loc28_:Number = 1 / Math.sqrt(_loc24_ * _loc24_ + _loc25_ * _loc25_);
- _loc24_ *= _loc28_;
- _loc25_ *= _loc28_;
- var _loc29_:Number = _loc24_;
- var _loc30_:Number = _loc25_;
- _loc26_ = _loc29_;
- _loc29_ = _loc30_;
- _loc30_ = -_loc26_;
- var _loc31_:Number = _loc20_.x;
- var _loc32_:Number = _loc20_.y;
- _loc26_ = _loc31_;
- _loc31_ = (_loc27_ = _loc11_.m_R).col1.x * _loc26_ + _loc27_.col2.x * _loc32_;
- _loc32_ = _loc27_.col1.y * _loc26_ + _loc27_.col2.y * _loc32_;
- _loc31_ += _loc11_.m_position.x;
- _loc32_ += _loc11_.m_position.y;
- var _loc33_:Number = _loc21_.x;
- var _loc34_:Number = _loc21_.y;
- _loc26_ = _loc33_;
- _loc33_ = (_loc27_ = _loc11_.m_R).col1.x * _loc26_ + _loc27_.col2.x * _loc34_;
- _loc34_ = _loc27_.col1.y * _loc26_ + _loc27_.col2.y * _loc34_;
- _loc33_ += _loc11_.m_position.x;
- _loc34_ += _loc11_.m_position.y;
- var _loc35_:Number = _loc29_ * _loc31_ + _loc30_ * _loc32_;
- var _loc36_:Number = -(_loc24_ * _loc31_ + _loc25_ * _loc32_);
- var _loc37_:Number = _loc24_ * _loc33_ + _loc25_ * _loc34_;
- var _loc38_:Array = [new ClipVertex(),new ClipVertex()];
- var _loc39_:Array = [new ClipVertex(),new ClipVertex()];
- b2CollidePolyTempVec.Set(-_loc24_,-_loc25_);
- if((_loc40_ = ClipSegmentToLine(_loc38_,_loc17_,b2CollidePolyTempVec,_loc36_)) < 2)
- {
- return;
- }
- b2CollidePolyTempVec.Set(_loc24_,_loc25_);
- if((_loc40_ = ClipSegmentToLine(_loc39_,_loc38_,b2CollidePolyTempVec,_loc37_)) < 2)
- {
- return;
- }
- if(_loc14_)
- {
- param1.normal.Set(-_loc29_,-_loc30_);
- }
- else
- {
- param1.normal.Set(_loc29_,_loc30_);
- }
- var _loc41_:int = 0;
- var _loc42_:int = 0;
- while(_loc42_ < b2Settings.b2_maxManifoldPoints)
- {
- _loc43_ = _loc39_[_loc42_].v;
- if((_loc44_ = _loc29_ * _loc43_.x + _loc30_ * _loc43_.y - _loc35_) <= 0 || param4 == true)
- {
- (_loc45_ = param1.points[_loc41_]).separation = _loc44_;
- _loc45_.position.SetV(_loc39_[_loc42_].v);
- _loc45_.id.Set(_loc39_[_loc42_].id);
- _loc45_.id.features.flip = _loc14_;
- _loc41_++;
- }
- _loc42_++;
- }
- param1.pointCount = _loc41_;
- }
-
- public static function b2CollideCircle(param1:b2Manifold, param2:b2CircleShape, param3:b2CircleShape, param4:Boolean) : void
- {
- var _loc9_:Number = NaN;
- var _loc11_:Number = NaN;
- var _loc12_:Number = NaN;
- param1.pointCount = 0;
- var _loc5_:Number = param3.m_position.x - param2.m_position.x;
- var _loc6_:Number = param3.m_position.y - param2.m_position.y;
- var _loc7_:Number = _loc5_ * _loc5_ + _loc6_ * _loc6_;
- var _loc8_:Number = param2.m_radius + param3.m_radius;
- if(_loc7_ > _loc8_ * _loc8_ && param4 == false)
- {
- return;
- }
- if(_loc7_ < Number.MIN_VALUE)
- {
- _loc9_ = -_loc8_;
- param1.normal.Set(0,1);
- }
- else
- {
- _loc9_ = (_loc11_ = Math.sqrt(_loc7_)) - _loc8_;
- _loc12_ = 1 / _loc11_;
- param1.normal.x = _loc12_ * _loc5_;
- param1.normal.y = _loc12_ * _loc6_;
- }
- param1.pointCount = 1;
- var _loc10_:b2ContactPoint;
- (_loc10_ = param1.points[0]).id.key = 0;
- _loc10_.separation = _loc9_;
- _loc10_.position.x = param3.m_position.x - param3.m_radius * param1.normal.x;
- _loc10_.position.y = param3.m_position.y - param3.m_radius * param1.normal.y;
- }
- }
- }
-