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

  1. package Box2D.Dynamics
  2. {
  3.    import Box2D.Collision.Shapes.b2Shape;
  4.    import Box2D.Collision.b2PairCallback;
  5.    import Box2D.Dynamics.Contacts.b2Contact;
  6.    import Box2D.Dynamics.Contacts.b2ContactNode;
  7.    import Box2D.Dynamics.Contacts.b2NullContact;
  8.    
  9.    public class b2ContactManager extends b2PairCallback
  10.    {
  11.        
  12.       
  13.       public var m_world:b2World;
  14.       
  15.       public var m_destroyImmediate:Boolean;
  16.       
  17.       public var m_nullContact:b2NullContact;
  18.       
  19.       public function b2ContactManager()
  20.       {
  21.          m_nullContact = new b2NullContact();
  22.          super();
  23.          m_world = null;
  24.          m_destroyImmediate = false;
  25.       }
  26.       
  27.       public function Collide() : void
  28.       {
  29.          var _loc1_:b2Body = null;
  30.          var _loc2_:b2Body = null;
  31.          var _loc3_:b2ContactNode = null;
  32.          var _loc4_:b2ContactNode = null;
  33.          var _loc6_:int = 0;
  34.          var _loc7_:int = 0;
  35.          var _loc5_:b2Contact = m_world.m_contactList;
  36.          while(_loc5_ != null)
  37.          {
  38.             if(!(_loc5_.m_shape1.m_body.IsSleeping() && _loc5_.m_shape2.m_body.IsSleeping()))
  39.             {
  40.                _loc6_ = _loc5_.GetManifoldCount();
  41.                _loc5_.Evaluate();
  42.                _loc7_ = _loc5_.GetManifoldCount();
  43.                if(_loc6_ == 0 && _loc7_ > 0)
  44.                {
  45.                   _loc1_ = _loc5_.m_shape1.m_body;
  46.                   _loc2_ = _loc5_.m_shape2.m_body;
  47.                   _loc3_ = _loc5_.m_node1;
  48.                   _loc4_ = _loc5_.m_node2;
  49.                   _loc3_.contact = _loc5_;
  50.                   _loc3_.other = _loc2_;
  51.                   _loc3_.prev = null;
  52.                   _loc3_.next = _loc1_.m_contactList;
  53.                   if(_loc3_.next != null)
  54.                   {
  55.                      _loc3_.next.prev = _loc5_.m_node1;
  56.                   }
  57.                   _loc1_.m_contactList = _loc5_.m_node1;
  58.                   _loc4_.contact = _loc5_;
  59.                   _loc4_.other = _loc1_;
  60.                   _loc4_.prev = null;
  61.                   _loc4_.next = _loc2_.m_contactList;
  62.                   if(_loc4_.next != null)
  63.                   {
  64.                      _loc4_.next.prev = _loc4_;
  65.                   }
  66.                   _loc2_.m_contactList = _loc4_;
  67.                }
  68.                else if(_loc6_ > 0 && _loc7_ == 0)
  69.                {
  70.                   _loc1_ = _loc5_.m_shape1.m_body;
  71.                   _loc2_ = _loc5_.m_shape2.m_body;
  72.                   _loc3_ = _loc5_.m_node1;
  73.                   _loc4_ = _loc5_.m_node2;
  74.                   if(_loc3_.prev)
  75.                   {
  76.                      _loc3_.prev.next = _loc3_.next;
  77.                   }
  78.                   if(_loc3_.next)
  79.                   {
  80.                      _loc3_.next.prev = _loc3_.prev;
  81.                   }
  82.                   if(_loc3_ == _loc1_.m_contactList)
  83.                   {
  84.                      _loc1_.m_contactList = _loc3_.next;
  85.                   }
  86.                   _loc3_.prev = null;
  87.                   _loc3_.next = null;
  88.                   if(_loc4_.prev)
  89.                   {
  90.                      _loc4_.prev.next = _loc4_.next;
  91.                   }
  92.                   if(_loc4_.next)
  93.                   {
  94.                      _loc4_.next.prev = _loc4_.prev;
  95.                   }
  96.                   if(_loc4_ == _loc2_.m_contactList)
  97.                   {
  98.                      _loc2_.m_contactList = _loc4_.next;
  99.                   }
  100.                   _loc4_.prev = null;
  101.                   _loc4_.next = null;
  102.                }
  103.             }
  104.             _loc5_ = _loc5_.m_next;
  105.          }
  106.       }
  107.       
  108.       public function CleanContactList() : void
  109.       {
  110.          var _loc2_:b2Contact = null;
  111.          var _loc1_:b2Contact = m_world.m_contactList;
  112.          while(_loc1_ != null)
  113.          {
  114.             _loc2_ = _loc1_;
  115.             _loc1_ = _loc1_.m_next;
  116.             if(_loc2_.m_flags & b2Contact.e_destroyFlag)
  117.             {
  118.                DestroyContact(_loc2_);
  119.                _loc2_ = null;
  120.             }
  121.          }
  122.       }
  123.       
  124.       public function DestroyContact(param1:b2Contact) : void
  125.       {
  126.          var _loc2_:b2Body = null;
  127.          var _loc3_:b2Body = null;
  128.          var _loc4_:b2ContactNode = null;
  129.          var _loc5_:b2ContactNode = null;
  130.          if(param1.m_prev)
  131.          {
  132.             param1.m_prev.m_next = param1.m_next;
  133.          }
  134.          if(param1.m_next)
  135.          {
  136.             param1.m_next.m_prev = param1.m_prev;
  137.          }
  138.          if(param1 == m_world.m_contactList)
  139.          {
  140.             m_world.m_contactList = param1.m_next;
  141.          }
  142.          if(param1.GetManifoldCount() > 0)
  143.          {
  144.             _loc2_ = param1.m_shape1.m_body;
  145.             _loc3_ = param1.m_shape2.m_body;
  146.             _loc4_ = param1.m_node1;
  147.             _loc5_ = param1.m_node2;
  148.             _loc2_.WakeUp();
  149.             _loc3_.WakeUp();
  150.             if(_loc4_.prev)
  151.             {
  152.                _loc4_.prev.next = _loc4_.next;
  153.             }
  154.             if(_loc4_.next)
  155.             {
  156.                _loc4_.next.prev = _loc4_.prev;
  157.             }
  158.             if(_loc4_ == _loc2_.m_contactList)
  159.             {
  160.                _loc2_.m_contactList = _loc4_.next;
  161.             }
  162.             _loc4_.prev = null;
  163.             _loc4_.next = null;
  164.             if(_loc5_.prev)
  165.             {
  166.                _loc5_.prev.next = _loc5_.next;
  167.             }
  168.             if(_loc5_.next)
  169.             {
  170.                _loc5_.next.prev = _loc5_.prev;
  171.             }
  172.             if(_loc5_ == _loc3_.m_contactList)
  173.             {
  174.                _loc3_.m_contactList = _loc5_.next;
  175.             }
  176.             _loc5_.prev = null;
  177.             _loc5_.next = null;
  178.          }
  179.          b2Contact.Destroy(param1,m_world.m_blockAllocator);
  180.          --m_world.m_contactCount;
  181.       }
  182.       
  183.       override public function PairRemoved(param1:*, param2:*, param3:*) : void
  184.       {
  185.          if(param3 == null)
  186.          {
  187.             return;
  188.          }
  189.          var _loc4_:b2Contact;
  190.          if((_loc4_ = param3 as b2Contact) != m_nullContact)
  191.          {
  192.             if(m_destroyImmediate == true)
  193.             {
  194.                DestroyContact(_loc4_);
  195.                _loc4_ = null;
  196.             }
  197.             else
  198.             {
  199.                _loc4_.m_flags |= b2Contact.e_destroyFlag;
  200.             }
  201.          }
  202.       }
  203.       
  204.       override public function PairAdded(param1:*, param2:*) : *
  205.       {
  206.          var _loc8_:b2Shape = null;
  207.          var _loc9_:b2Body = null;
  208.          var _loc3_:b2Shape = param1 as b2Shape;
  209.          var _loc4_:b2Shape = param2 as b2Shape;
  210.          var _loc5_:b2Body = _loc3_.m_body;
  211.          var _loc6_:b2Body = _loc4_.m_body;
  212.          if(_loc5_.IsStatic() && _loc6_.IsStatic())
  213.          {
  214.             return m_nullContact;
  215.          }
  216.          if(_loc3_.m_body == _loc4_.m_body)
  217.          {
  218.             return m_nullContact;
  219.          }
  220.          if(_loc6_.IsConnected(_loc5_))
  221.          {
  222.             return m_nullContact;
  223.          }
  224.          if(m_world.m_filter != null && m_world.m_filter.ShouldCollide(_loc3_,_loc4_) == false)
  225.          {
  226.             return m_nullContact;
  227.          }
  228.          if(_loc6_.m_invMass == 0)
  229.          {
  230.             _loc8_ = _loc3_;
  231.             _loc3_ = _loc4_;
  232.             _loc4_ = _loc8_;
  233.             _loc9_ = _loc5_;
  234.             _loc5_ = _loc6_;
  235.             _loc6_ = _loc9_;
  236.          }
  237.          var _loc7_:b2Contact;
  238.          if((_loc7_ = b2Contact.Create(_loc3_,_loc4_,m_world.m_blockAllocator)) == null)
  239.          {
  240.             return m_nullContact;
  241.          }
  242.          _loc7_.m_prev = null;
  243.          _loc7_.m_next = m_world.m_contactList;
  244.          if(m_world.m_contactList != null)
  245.          {
  246.             m_world.m_contactList.m_prev = _loc7_;
  247.          }
  248.          m_world.m_contactList = _loc7_;
  249.          ++m_world.m_contactCount;
  250.          return _loc7_;
  251.       }
  252.    }
  253. }
  254.