diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2008-10-17 13:24:35 +0400 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2008-10-17 13:24:35 +0400 |
commit | bf0440add886761706476b69b5355ec7d94650c2 (patch) | |
tree | 47f0813742aebb493ebdca7a17e76b166784b8aa /source/gameengine/Ketsji/KX_NearSensor.cpp | |
parent | c119fb6e51b07faec288c5b20739b773f24cc748 (diff) |
BGE bug fix (continuation of previous bug fix):
- Forgot to make SCA_ISensor::UnregisterToManager() virtual to intercept active-inactive transition on collision sensor to clear colliders reference.
- Don't record collision on inactive sensor.
This situation occurs when an object with an inactive collision sensor collides with an object with an active collision sensor: the collision handler triggers both sensors.
The result of this bug was pending references that eventually cause temporary memory leak (until the sensor is reactivated).
Diffstat (limited to 'source/gameengine/Ketsji/KX_NearSensor.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_NearSensor.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 397aedb3fa3..bae87c28123 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -252,8 +252,10 @@ bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData client_info->m_gameobject : NULL); - // these checks are done already in BroadPhaseFilterCollision() - if (gameobj /*&& (gameobj != parent)*/) + // Add the same check as in SCA_ISensor::Activate(), + // we don't want to record collision when the sensor is not active. + if (m_links && !m_suspended && + gameobj /* done in BroadPhaseFilterCollision() && (gameobj != parent)*/) { if (!m_colliders->SearchValue(gameobj)) m_colliders->Add(gameobj->AddRef()); |