Explorar el Código

Fix #1000. Fire NOT_COLLIDING on removal if colliding.

Ken Whatmough hace 12 años
padre
commit
4e7ebdac0d
Se han modificado 1 ficheros con 10 adiciones y 1 borrados
  1. 10 1
      gameplay/src/PhysicsController.cpp

+ 10 - 1
gameplay/src/PhysicsController.cpp

@@ -538,7 +538,7 @@ void PhysicsController::update(float elapsedTime)
     // set to COLLISION and the DIRTY bit is cleared. Then, after collision processing 
     // is finished, if a given status is still dirty, the COLLISION bit is cleared.
     //
-    // If an entry was marked for removal in the last frame, remove it now.
+    // If an entry was marked for removal in the last frame, fire NOT_COLLIDING if appropriate and remove it now.
 
     // Dirty the collision status cache entries.
     std::map<PhysicsCollisionObject::CollisionPair, CollisionInfo>::iterator iter = _collisionStatus.begin();
@@ -546,6 +546,15 @@ void PhysicsController::update(float elapsedTime)
     {
         if ((iter->second._status & REMOVE) != 0)
         {
+            if ((iter->second._status & COLLISION) != 0 && iter->first.objectB)
+            {
+                size_t size = iter->second._listeners.size();
+                for (size_t i = 0; i < size; i++)
+                {
+                    iter->second._listeners[i]->collisionEvent(PhysicsCollisionObject::CollisionListener::NOT_COLLIDING, iter->first);
+                }
+            }
+
             std::map<PhysicsCollisionObject::CollisionPair, CollisionInfo>::iterator eraseIter = iter;
             iter++;
             _collisionStatus.erase(eraseIter);