home *** CD-ROM | disk | FTP | other *** search
- package Box2D.Collision
- {
- import Box2D.Common.*;
- import Box2D.Common.Math.*;
-
- public class b2BroadPhase
- {
-
- public static var s_validate:Boolean = false;
-
- public static const b2_nullEdge:uint = b2Settings.USHRT_MAX;
-
- public static const b2_invalid:uint = b2Settings.USHRT_MAX;
-
-
- public var m_bounds:Array;
-
- public var m_quantizationFactor:b2Vec2;
-
- public var m_worldAABB:b2AABB;
-
- public var m_freeProxy:uint;
-
- public var m_proxyCount:int;
-
- public var m_proxyPool:Array;
-
- public var m_queryResultCount:int;
-
- public var m_pairManager:b2PairManager;
-
- public var m_timeStamp:uint;
-
- public var m_queryResults:Array;
-
- public function b2BroadPhase(param1:b2AABB, param2:b2PairCallback)
- {
- var _loc3_:int = 0;
- var _loc6_:b2Proxy = null;
- var _loc7_:int = 0;
- m_pairManager = new b2PairManager();
- m_proxyPool = new Array(b2Settings.b2_maxPairs);
- m_bounds = new Array(2 * b2Settings.b2_maxProxies);
- m_queryResults = new Array(b2Settings.b2_maxProxies);
- m_quantizationFactor = new b2Vec2();
- super();
- m_pairManager.Initialize(this,param2);
- m_worldAABB = param1;
- m_proxyCount = 0;
- _loc3_ = 0;
- while(_loc3_ < b2Settings.b2_maxProxies)
- {
- m_queryResults[_loc3_] = 0;
- _loc3_++;
- }
- m_bounds = new Array(2);
- _loc3_ = 0;
- while(_loc3_ < 2)
- {
- m_bounds[_loc3_] = new Array(2 * b2Settings.b2_maxProxies);
- _loc7_ = 0;
- while(_loc7_ < 2 * b2Settings.b2_maxProxies)
- {
- m_bounds[_loc3_][_loc7_] = new b2Bound();
- _loc7_++;
- }
- _loc3_++;
- }
- var _loc4_:Number = param1.maxVertex.x;
- var _loc5_:Number = param1.maxVertex.y;
- _loc4_ -= param1.minVertex.x;
- _loc5_ -= param1.minVertex.y;
- m_quantizationFactor.x = b2Settings.USHRT_MAX / _loc4_;
- m_quantizationFactor.y = b2Settings.USHRT_MAX / _loc5_;
- _loc3_ = 0;
- while(_loc3_ < b2Settings.b2_maxProxies - 1)
- {
- _loc6_ = new b2Proxy();
- m_proxyPool[_loc3_] = _loc6_;
- _loc6_.SetNext(_loc3_ + 1);
- _loc6_.timeStamp = 0;
- _loc6_.overlapCount = b2_invalid;
- _loc6_.userData = null;
- _loc3_++;
- }
- _loc6_ = new b2Proxy();
- m_proxyPool[b2Settings.b2_maxProxies - 1] = _loc6_;
- _loc6_.SetNext(b2Pair.b2_nullProxy);
- _loc6_.timeStamp = 0;
- _loc6_.overlapCount = b2_invalid;
- _loc6_.userData = null;
- m_freeProxy = 0;
- m_timeStamp = 1;
- m_queryResultCount = 0;
- }
-
- public static function BinarySearch(param1:Array, param2:int, param3:uint) : uint
- {
- var _loc6_:int = 0;
- var _loc4_:int = 0;
- var _loc5_:int = param2 - 1;
- while(_loc4_ <= _loc5_)
- {
- _loc6_ = (_loc4_ + _loc5_) / 2;
- if(param1[_loc6_].value > param3)
- {
- _loc5_ = _loc6_ - 1;
- }
- else
- {
- if(param1[_loc6_].value >= param3)
- {
- return uint(_loc6_);
- }
- _loc4_ = _loc6_ + 1;
- }
- }
- return uint(_loc4_);
- }
-
- public function QueryAABB(param1:b2AABB, param2:*, param3:int) : int
- {
- var _loc6_:uint = 0;
- var _loc7_:uint = 0;
- var _loc12_:b2Proxy = null;
- var _loc4_:Array = new Array();
- var _loc5_:Array = new Array();
- ComputeBounds(_loc4_,_loc5_,param1);
- var _loc8_:Array = [_loc6_];
- var _loc9_:Array = [_loc7_];
- Query(_loc8_,_loc9_,_loc4_[0],_loc5_[0],m_bounds[0],2 * m_proxyCount,0);
- Query(_loc8_,_loc9_,_loc4_[1],_loc5_[1],m_bounds[1],2 * m_proxyCount,1);
- var _loc10_:int = 0;
- var _loc11_:int = 0;
- while(_loc11_ < m_queryResultCount && _loc10_ < param3)
- {
- _loc12_ = m_proxyPool[m_queryResults[_loc11_]];
- param2[_loc11_] = _loc12_.userData;
- _loc11_++;
- _loc10_++;
- }
- m_queryResultCount = 0;
- IncrementTimeStamp();
- return _loc10_;
- }
-
- public function Commit() : void
- {
- m_pairManager.Commit();
- }
-
- public function GetProxy(param1:int) : b2Proxy
- {
- if(param1 == b2Pair.b2_nullProxy || m_proxyPool[param1].IsValid() == false)
- {
- return null;
- }
- return m_proxyPool[param1];
- }
-
- private function IncrementTimeStamp() : void
- {
- var _loc1_:uint = 0;
- if(m_timeStamp == b2Settings.USHRT_MAX)
- {
- _loc1_ = 0;
- while(_loc1_ < b2Settings.b2_maxProxies)
- {
- m_proxyPool[_loc1_].timeStamp = 0;
- _loc1_++;
- }
- m_timeStamp = 1;
- }
- else
- {
- ++m_timeStamp;
- }
- }
-
- private function Query(param1:Array, param2:Array, param3:uint, param4:uint, param5:Array, param6:uint, param7:int) : void
- {
- var _loc11_:int = 0;
- var _loc12_:int = 0;
- var _loc13_:b2Proxy = null;
- var _loc8_:uint = BinarySearch(param5,param6,param3);
- var _loc9_:uint = BinarySearch(param5,param6,param4);
- var _loc10_:uint = _loc8_;
- while(_loc10_ < _loc9_)
- {
- if(param5[_loc10_].IsLower())
- {
- IncrementOverlapCount(param5[_loc10_].proxyId);
- }
- _loc10_++;
- }
- if(_loc8_ > 0)
- {
- _loc11_ = int(_loc8_ - 1);
- _loc12_ = int(param5[_loc11_].stabbingCount);
- while(_loc12_)
- {
- if(param5[_loc11_].IsLower())
- {
- _loc13_ = m_proxyPool[param5[_loc11_].proxyId];
- if(_loc8_ <= _loc13_.upperBounds[param7])
- {
- IncrementOverlapCount(param5[_loc11_].proxyId);
- _loc12_--;
- }
- }
- _loc11_--;
- }
- }
- param1[0] = _loc8_;
- param2[0] = _loc9_;
- }
-
- private function TestOverlapValidate(param1:b2Proxy, param2:b2Proxy) : Boolean
- {
- var _loc4_:Array = null;
- var _loc3_:int = 0;
- while(_loc3_ < 2)
- {
- if((_loc4_ = m_bounds[_loc3_])[param1.lowerBounds[_loc3_]].value > _loc4_[param2.upperBounds[_loc3_]].value)
- {
- return false;
- }
- if(_loc4_[param1.upperBounds[_loc3_]].value < _loc4_[param2.lowerBounds[_loc3_]].value)
- {
- return false;
- }
- _loc3_++;
- }
- return true;
- }
-
- private function ComputeBounds(param1:Array, param2:Array, param3:b2AABB) : void
- {
- var _loc4_:Number = param3.minVertex.x;
- var _loc5_:Number = param3.minVertex.y;
- _loc4_ = b2Math.b2Min(_loc4_,m_worldAABB.maxVertex.x);
- _loc5_ = b2Math.b2Min(_loc5_,m_worldAABB.maxVertex.y);
- _loc4_ = b2Math.b2Max(_loc4_,m_worldAABB.minVertex.x);
- _loc5_ = b2Math.b2Max(_loc5_,m_worldAABB.minVertex.y);
- var _loc6_:Number = param3.maxVertex.x;
- var _loc7_:Number = param3.maxVertex.y;
- _loc6_ = b2Math.b2Min(_loc6_,m_worldAABB.maxVertex.x);
- _loc7_ = b2Math.b2Min(_loc7_,m_worldAABB.maxVertex.y);
- _loc6_ = b2Math.b2Max(_loc6_,m_worldAABB.minVertex.x);
- _loc7_ = b2Math.b2Max(_loc7_,m_worldAABB.minVertex.y);
- param1[0] = uint(m_quantizationFactor.x * (_loc4_ - m_worldAABB.minVertex.x)) & b2Settings.USHRT_MAX - 1;
- param2[0] = uint(m_quantizationFactor.x * (_loc6_ - m_worldAABB.minVertex.x)) & 65535 | 1;
- param1[1] = uint(m_quantizationFactor.y * (_loc5_ - m_worldAABB.minVertex.y)) & b2Settings.USHRT_MAX - 1;
- param2[1] = uint(m_quantizationFactor.y * (_loc7_ - m_worldAABB.minVertex.y)) & 65535 | 1;
- }
-
- public function CreateProxy(param1:b2AABB, param2:*) : uint
- {
- var _loc3_:uint = 0;
- var _loc4_:b2Proxy = null;
- var _loc11_:Array = null;
- var _loc12_:uint = 0;
- var _loc13_:uint = 0;
- var _loc14_:Array = null;
- var _loc15_:Array = null;
- var _loc16_:Array = null;
- var _loc17_:int = 0;
- var _loc18_:int = 0;
- var _loc19_:b2Bound = null;
- var _loc20_:b2Bound = null;
- var _loc21_:int = 0;
- var _loc22_:b2Proxy = null;
- var _loc5_:uint = m_freeProxy;
- _loc4_ = m_proxyPool[_loc5_];
- m_freeProxy = _loc4_.GetNext();
- _loc4_.overlapCount = 0;
- _loc4_.userData = param2;
- var _loc6_:uint = uint(2 * m_proxyCount);
- var _loc7_:Array = new Array();
- var _loc8_:Array = new Array();
- ComputeBounds(_loc7_,_loc8_,param1);
- var _loc9_:int = 0;
- while(_loc9_ < 2)
- {
- _loc11_ = m_bounds[_loc9_];
- _loc14_ = [_loc12_];
- _loc15_ = [_loc13_];
- Query(_loc14_,_loc15_,_loc7_[_loc9_],_loc8_[_loc9_],_loc11_,_loc6_,_loc9_);
- _loc12_ = uint(_loc14_[0]);
- _loc13_ = uint(_loc15_[0]);
- _loc16_ = new Array();
- _loc18_ = _loc6_ - _loc13_;
- _loc17_ = 0;
- while(_loc17_ < _loc18_)
- {
- _loc16_[_loc17_] = new b2Bound();
- _loc19_ = _loc16_[_loc17_];
- _loc20_ = _loc11_[_loc13_ + _loc17_];
- _loc19_.value = _loc20_.value;
- _loc19_.proxyId = _loc20_.proxyId;
- _loc19_.stabbingCount = _loc20_.stabbingCount;
- _loc17_++;
- }
- _loc18_ = int(_loc16_.length);
- _loc21_ = _loc13_ + 2;
- _loc17_ = 0;
- while(_loc17_ < _loc18_)
- {
- _loc20_ = _loc16_[_loc17_];
- (_loc19_ = _loc11_[_loc21_ + _loc17_]).value = _loc20_.value;
- _loc19_.proxyId = _loc20_.proxyId;
- _loc19_.stabbingCount = _loc20_.stabbingCount;
- _loc17_++;
- }
- _loc16_ = new Array();
- _loc18_ = _loc13_ - _loc12_;
- _loc17_ = 0;
- while(_loc17_ < _loc18_)
- {
- _loc16_[_loc17_] = new b2Bound();
- _loc19_ = _loc16_[_loc17_];
- _loc20_ = _loc11_[_loc12_ + _loc17_];
- _loc19_.value = _loc20_.value;
- _loc19_.proxyId = _loc20_.proxyId;
- _loc19_.stabbingCount = _loc20_.stabbingCount;
- _loc17_++;
- }
- _loc18_ = int(_loc16_.length);
- _loc21_ = _loc12_ + 1;
- _loc17_ = 0;
- while(_loc17_ < _loc18_)
- {
- _loc20_ = _loc16_[_loc17_];
- (_loc19_ = _loc11_[_loc21_ + _loc17_]).value = _loc20_.value;
- _loc19_.proxyId = _loc20_.proxyId;
- _loc19_.stabbingCount = _loc20_.stabbingCount;
- _loc17_++;
- }
- _loc13_++;
- _loc11_[_loc12_].value = _loc7_[_loc9_];
- _loc11_[_loc12_].proxyId = _loc5_;
- _loc11_[_loc13_].value = _loc8_[_loc9_];
- _loc11_[_loc13_].proxyId = _loc5_;
- _loc11_[_loc12_].stabbingCount = _loc12_ == 0 ? 0 : _loc11_[_loc12_ - 1].stabbingCount;
- _loc11_[_loc13_].stabbingCount = _loc11_[_loc13_ - 1].stabbingCount;
- _loc3_ = _loc12_;
- while(_loc3_ < _loc13_)
- {
- ++_loc11_[_loc3_].stabbingCount;
- _loc3_++;
- }
- _loc3_ = _loc12_;
- while(_loc3_ < _loc6_ + 2)
- {
- _loc22_ = m_proxyPool[_loc11_[_loc3_].proxyId];
- if(_loc11_[_loc3_].IsLower())
- {
- _loc22_.lowerBounds[_loc9_] = _loc3_;
- }
- else
- {
- _loc22_.upperBounds[_loc9_] = _loc3_;
- }
- _loc3_++;
- }
- _loc9_++;
- }
- ++m_proxyCount;
- var _loc10_:int = 0;
- while(_loc10_ < m_queryResultCount)
- {
- m_pairManager.AddBufferedPair(_loc5_,m_queryResults[_loc10_]);
- _loc10_++;
- }
- m_pairManager.Commit();
- m_queryResultCount = 0;
- IncrementTimeStamp();
- return _loc5_;
- }
-
- public function DestroyProxy(param1:uint) : void
- {
- var _loc6_:Array = null;
- var _loc7_:uint = 0;
- var _loc8_:uint = 0;
- var _loc9_:uint = 0;
- var _loc10_:uint = 0;
- var _loc11_:Array = null;
- var _loc12_:int = 0;
- var _loc13_:int = 0;
- var _loc14_:b2Bound = null;
- var _loc15_:b2Bound = null;
- var _loc16_:int = 0;
- var _loc17_:uint = 0;
- var _loc18_:int = 0;
- var _loc19_:b2Proxy = null;
- var _loc2_:b2Proxy = m_proxyPool[param1];
- var _loc3_:int = 2 * m_proxyCount;
- var _loc4_:int = 0;
- while(_loc4_ < 2)
- {
- _loc6_ = m_bounds[_loc4_];
- _loc7_ = uint(_loc2_.lowerBounds[_loc4_]);
- _loc8_ = uint(_loc2_.upperBounds[_loc4_]);
- _loc9_ = uint(_loc6_[_loc7_].value);
- _loc10_ = uint(_loc6_[_loc8_].value);
- _loc11_ = new Array();
- _loc13_ = _loc8_ - _loc7_ - 1;
- _loc12_ = 0;
- while(_loc12_ < _loc13_)
- {
- _loc11_[_loc12_] = new b2Bound();
- _loc14_ = _loc11_[_loc12_];
- _loc15_ = _loc6_[_loc7_ + 1 + _loc12_];
- _loc14_.value = _loc15_.value;
- _loc14_.proxyId = _loc15_.proxyId;
- _loc14_.stabbingCount = _loc15_.stabbingCount;
- _loc12_++;
- }
- _loc13_ = int(_loc11_.length);
- _loc16_ = int(_loc7_);
- _loc12_ = 0;
- while(_loc12_ < _loc13_)
- {
- _loc15_ = _loc11_[_loc12_];
- (_loc14_ = _loc6_[_loc16_ + _loc12_]).value = _loc15_.value;
- _loc14_.proxyId = _loc15_.proxyId;
- _loc14_.stabbingCount = _loc15_.stabbingCount;
- _loc12_++;
- }
- _loc11_ = new Array();
- _loc13_ = _loc3_ - _loc8_ - 1;
- _loc12_ = 0;
- while(_loc12_ < _loc13_)
- {
- _loc11_[_loc12_] = new b2Bound();
- _loc14_ = _loc11_[_loc12_];
- _loc15_ = _loc6_[_loc8_ + 1 + _loc12_];
- _loc14_.value = _loc15_.value;
- _loc14_.proxyId = _loc15_.proxyId;
- _loc14_.stabbingCount = _loc15_.stabbingCount;
- _loc12_++;
- }
- _loc13_ = int(_loc11_.length);
- _loc16_ = int(_loc8_ - 1);
- _loc12_ = 0;
- while(_loc12_ < _loc13_)
- {
- _loc15_ = _loc11_[_loc12_];
- (_loc14_ = _loc6_[_loc16_ + _loc12_]).value = _loc15_.value;
- _loc14_.proxyId = _loc15_.proxyId;
- _loc14_.stabbingCount = _loc15_.stabbingCount;
- _loc12_++;
- }
- _loc13_ = _loc3_ - 2;
- _loc17_ = _loc7_;
- while(_loc17_ < _loc13_)
- {
- _loc19_ = m_proxyPool[_loc6_[_loc17_].proxyId];
- if(_loc6_[_loc17_].IsLower())
- {
- _loc19_.lowerBounds[_loc4_] = _loc17_;
- }
- else
- {
- _loc19_.upperBounds[_loc4_] = _loc17_;
- }
- _loc17_++;
- }
- _loc13_ = int(_loc8_ - 1);
- _loc18_ = int(_loc7_);
- while(_loc18_ < _loc13_)
- {
- --_loc6_[_loc18_].stabbingCount;
- _loc18_++;
- }
- Query([0],[0],_loc9_,_loc10_,_loc6_,_loc3_ - 2,_loc4_);
- _loc4_++;
- }
- var _loc5_:int = 0;
- while(_loc5_ < m_queryResultCount)
- {
- m_pairManager.RemoveBufferedPair(param1,m_queryResults[_loc5_]);
- _loc5_++;
- }
- m_pairManager.Commit();
- m_queryResultCount = 0;
- IncrementTimeStamp();
- _loc2_.userData = null;
- _loc2_.overlapCount = b2_invalid;
- _loc2_.lowerBounds[0] = b2_invalid;
- _loc2_.lowerBounds[1] = b2_invalid;
- _loc2_.upperBounds[0] = b2_invalid;
- _loc2_.upperBounds[1] = b2_invalid;
- _loc2_.SetNext(m_freeProxy);
- m_freeProxy = param1;
- --m_proxyCount;
- }
-
- public function TestOverlap(param1:b2BoundValues, param2:b2Proxy) : Boolean
- {
- var _loc4_:Array = null;
- var _loc3_:int = 0;
- while(_loc3_ < 2)
- {
- _loc4_ = m_bounds[_loc3_];
- if(param1.lowerValues[_loc3_] > _loc4_[param2.upperBounds[_loc3_]].value)
- {
- return false;
- }
- if(param1.upperValues[_loc3_] < _loc4_[param2.lowerBounds[_loc3_]].value)
- {
- return false;
- }
- _loc3_++;
- }
- return true;
- }
-
- public function Validate() : void
- {
- var _loc1_:b2Pair = null;
- var _loc2_:b2Proxy = null;
- var _loc3_:b2Proxy = null;
- var _loc4_:Boolean = false;
- var _loc6_:b2Bound = null;
- var _loc7_:uint = 0;
- var _loc8_:uint = 0;
- var _loc9_:uint = 0;
- var _loc10_:b2Bound = null;
- var _loc5_:int = 0;
- while(_loc5_ < 2)
- {
- _loc6_ = m_bounds[_loc5_];
- _loc7_ = uint(2 * m_proxyCount);
- _loc8_ = 0;
- _loc9_ = 0;
- while(_loc9_ < _loc7_)
- {
- if((_loc10_ = _loc6_[_loc9_]).IsLower() == true)
- {
- _loc8_++;
- }
- else
- {
- _loc8_--;
- }
- _loc9_++;
- }
- _loc5_++;
- }
- }
-
- private function IncrementOverlapCount(param1:uint) : void
- {
- var _loc2_:b2Proxy = m_proxyPool[param1];
- if(_loc2_.timeStamp < m_timeStamp)
- {
- _loc2_.timeStamp = m_timeStamp;
- _loc2_.overlapCount = 1;
- }
- else
- {
- _loc2_.overlapCount = 2;
- m_queryResults[m_queryResultCount] = param1;
- ++m_queryResultCount;
- }
- }
-
- public function InRange(param1:b2AABB) : Boolean
- {
- var _loc2_:Number = NaN;
- var _loc3_:Number = NaN;
- var _loc4_:Number = NaN;
- var _loc5_:Number = NaN;
- _loc2_ = param1.minVertex.x;
- _loc3_ = param1.minVertex.y;
- _loc2_ -= m_worldAABB.maxVertex.x;
- _loc3_ -= m_worldAABB.maxVertex.y;
- _loc4_ = m_worldAABB.minVertex.x;
- _loc5_ = m_worldAABB.minVertex.y;
- _loc4_ -= param1.maxVertex.x;
- _loc5_ -= param1.maxVertex.y;
- _loc2_ = b2Math.b2Max(_loc2_,_loc4_);
- _loc3_ = b2Math.b2Max(_loc3_,_loc5_);
- return b2Math.b2Max(_loc2_,_loc3_) < 0;
- }
-
- public function MoveProxy(param1:uint, param2:b2AABB) : void
- {
- var _loc3_:uint = 0;
- var _loc4_:uint = 0;
- var _loc5_:b2Bound = null;
- var _loc6_:b2Bound = null;
- var _loc7_:b2Bound = null;
- var _loc8_:uint = 0;
- var _loc9_:b2Proxy = null;
- var _loc14_:Array = null;
- var _loc15_:uint = 0;
- var _loc16_:uint = 0;
- var _loc17_:uint = 0;
- var _loc18_:uint = 0;
- var _loc19_:int = 0;
- var _loc20_:int = 0;
- var _loc21_:uint = 0;
- var _loc22_:b2Proxy = null;
- if(param1 == b2Pair.b2_nullProxy || b2Settings.b2_maxProxies <= param1)
- {
- return;
- }
- if(param2.IsValid() == false)
- {
- return;
- }
- var _loc10_:uint = uint(2 * m_proxyCount);
- var _loc11_:b2Proxy = m_proxyPool[param1];
- var _loc12_:b2BoundValues = new b2BoundValues();
- ComputeBounds(_loc12_.lowerValues,_loc12_.upperValues,param2);
- var _loc13_:b2BoundValues = new b2BoundValues();
- _loc3_ = 0;
- while(_loc3_ < 2)
- {
- _loc13_.lowerValues[_loc3_] = m_bounds[_loc3_][_loc11_.lowerBounds[_loc3_]].value;
- _loc13_.upperValues[_loc3_] = m_bounds[_loc3_][_loc11_.upperBounds[_loc3_]].value;
- _loc3_++;
- }
- _loc3_ = 0;
- while(_loc3_ < 2)
- {
- _loc14_ = m_bounds[_loc3_];
- _loc15_ = uint(_loc11_.lowerBounds[_loc3_]);
- _loc16_ = uint(_loc11_.upperBounds[_loc3_]);
- _loc17_ = uint(_loc12_.lowerValues[_loc3_]);
- _loc18_ = uint(_loc12_.upperValues[_loc3_]);
- _loc19_ = _loc17_ - _loc14_[_loc15_].value;
- _loc20_ = _loc18_ - _loc14_[_loc16_].value;
- _loc14_[_loc15_].value = _loc17_;
- _loc14_[_loc16_].value = _loc18_;
- if(_loc19_ < 0)
- {
- _loc4_ = _loc15_;
- while(_loc4_ > 0 && _loc17_ < _loc14_[_loc4_ - 1].value)
- {
- _loc5_ = _loc14_[_loc4_];
- _loc21_ = (_loc6_ = _loc14_[_loc4_ - 1]).proxyId;
- _loc22_ = m_proxyPool[_loc6_.proxyId];
- ++_loc6_.stabbingCount;
- if(_loc6_.IsUpper() == true)
- {
- if(TestOverlap(_loc12_,_loc22_))
- {
- m_pairManager.AddBufferedPair(param1,_loc21_);
- }
- ++_loc22_.upperBounds[_loc3_];
- ++_loc5_.stabbingCount;
- }
- else
- {
- ++_loc22_.lowerBounds[_loc3_];
- --_loc5_.stabbingCount;
- }
- --_loc11_.lowerBounds[_loc3_];
- _loc5_.Swap(_loc6_);
- _loc4_--;
- }
- }
- if(_loc20_ > 0)
- {
- _loc4_ = _loc16_;
- while(_loc4_ < _loc10_ - 1 && _loc14_[_loc4_ + 1].value <= _loc18_)
- {
- _loc5_ = _loc14_[_loc4_];
- _loc8_ = (_loc7_ = _loc14_[_loc4_ + 1]).proxyId;
- _loc9_ = m_proxyPool[_loc8_];
- ++_loc7_.stabbingCount;
- if(_loc7_.IsLower() == true)
- {
- if(TestOverlap(_loc12_,_loc9_))
- {
- m_pairManager.AddBufferedPair(param1,_loc8_);
- }
- --_loc9_.lowerBounds[_loc3_];
- ++_loc5_.stabbingCount;
- }
- else
- {
- --_loc9_.upperBounds[_loc3_];
- --_loc5_.stabbingCount;
- }
- ++_loc11_.upperBounds[_loc3_];
- _loc5_.Swap(_loc7_);
- _loc4_++;
- }
- }
- if(_loc19_ > 0)
- {
- _loc4_ = _loc15_;
- while(_loc4_ < _loc10_ - 1 && _loc14_[_loc4_ + 1].value <= _loc17_)
- {
- _loc5_ = _loc14_[_loc4_];
- _loc8_ = (_loc7_ = _loc14_[_loc4_ + 1]).proxyId;
- _loc9_ = m_proxyPool[_loc8_];
- --_loc7_.stabbingCount;
- if(_loc7_.IsUpper())
- {
- if(TestOverlap(_loc13_,_loc9_))
- {
- m_pairManager.RemoveBufferedPair(param1,_loc8_);
- }
- --_loc9_.upperBounds[_loc3_];
- --_loc5_.stabbingCount;
- }
- else
- {
- --_loc9_.lowerBounds[_loc3_];
- ++_loc5_.stabbingCount;
- }
- ++_loc11_.lowerBounds[_loc3_];
- _loc5_.Swap(_loc7_);
- _loc4_++;
- }
- }
- if(_loc20_ < 0)
- {
- _loc4_ = _loc16_;
- while(_loc4_ > 0 && _loc18_ < _loc14_[_loc4_ - 1].value)
- {
- _loc5_ = _loc14_[_loc4_];
- _loc21_ = (_loc6_ = _loc14_[_loc4_ - 1]).proxyId;
- _loc22_ = m_proxyPool[_loc21_];
- --_loc6_.stabbingCount;
- if(_loc6_.IsLower() == true)
- {
- if(TestOverlap(_loc13_,_loc22_))
- {
- m_pairManager.RemoveBufferedPair(param1,_loc21_);
- }
- ++_loc22_.lowerBounds[_loc3_];
- --_loc5_.stabbingCount;
- }
- else
- {
- ++_loc22_.upperBounds[_loc3_];
- ++_loc5_.stabbingCount;
- }
- --_loc11_.upperBounds[_loc3_];
- _loc5_.Swap(_loc6_);
- _loc4_--;
- }
- }
- _loc3_++;
- }
- }
- }
- }
-