|
|
@@ -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);
|