forked from bartvdbraak/blender
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).
This commit is contained in:
parent
c119fb6e51
commit
bf0440add8
@ -116,8 +116,8 @@ public:
|
||||
/** set the level detection on or off */
|
||||
void SetLevel(bool lvl);
|
||||
|
||||
void RegisterToManager();
|
||||
void UnregisterToManager();
|
||||
virtual void RegisterToManager();
|
||||
virtual void UnregisterToManager();
|
||||
|
||||
virtual float GetNumber();
|
||||
|
||||
|
@ -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());
|
||||
|
@ -184,7 +184,10 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll
|
||||
client_info->m_gameobject :
|
||||
NULL);
|
||||
|
||||
if (gameobj && (gameobj != parent) && client_info->isActor())
|
||||
// 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 && (gameobj != parent) && client_info->isActor())
|
||||
{
|
||||
if (!m_colliders->SearchValue(gameobj))
|
||||
m_colliders->Add(gameobj->AddRef());
|
||||
|
Loading…
Reference in New Issue
Block a user