forked from bartvdbraak/blender
BGE: Simplify collision callback registration.
Remove list m_triggerController and just use getter CcdPhysicsController->Registered(). Reviewers: sybren, agoose77
This commit is contained in:
parent
ae0ed5e9d5
commit
e9406256d0
@ -466,14 +466,6 @@ void CcdPhysicsEnvironment::AddCcdPhysicsController(CcdPhysicsController* ctrl)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In the case of compound child controller (see also RemoveCcdPhysicsController)
|
|
||||||
* we add the controller to the trigger controlers list : m_triggerControllers
|
|
||||||
* if it use collision callbacks.
|
|
||||||
*/
|
|
||||||
if (ctrl->Registered()) {
|
|
||||||
m_triggerControllers.insert(ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
btRigidBody* body = ctrl->GetRigidBody();
|
btRigidBody* body = ctrl->GetRigidBody();
|
||||||
btCollisionObject* obj = ctrl->GetCollisionObject();
|
btCollisionObject* obj = ctrl->GetCollisionObject();
|
||||||
|
|
||||||
@ -521,16 +513,6 @@ bool CcdPhysicsEnvironment::RemoveCcdPhysicsController(CcdPhysicsController* ctr
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* In the case of compound child controller which use collision callbacks
|
|
||||||
* we remove it from the m_triggerControllers list but leave m_registerCount
|
|
||||||
* to know in AddCcdPhysicsController if we have to add it in m_triggerControllers
|
|
||||||
* and to avoid an useless added in RequestCollisionCallback, indeed we can't register
|
|
||||||
* more than one time a controller.
|
|
||||||
*/
|
|
||||||
if (ctrl->Registered()) {
|
|
||||||
m_triggerControllers.erase(ctrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
//also remove constraint
|
//also remove constraint
|
||||||
btRigidBody* body = ctrl->GetRigidBody();
|
btRigidBody* body = ctrl->GetRigidBody();
|
||||||
if (body)
|
if (body)
|
||||||
@ -2199,10 +2181,7 @@ void CcdPhysicsEnvironment::AddSensor(PHY_IPhysicsController* ctrl)
|
|||||||
bool CcdPhysicsEnvironment::RemoveCollisionCallback(PHY_IPhysicsController* ctrl)
|
bool CcdPhysicsEnvironment::RemoveCollisionCallback(PHY_IPhysicsController* ctrl)
|
||||||
{
|
{
|
||||||
CcdPhysicsController* ccdCtrl = (CcdPhysicsController*)ctrl;
|
CcdPhysicsController* ccdCtrl = (CcdPhysicsController*)ctrl;
|
||||||
if (!ccdCtrl->Unregister())
|
return ccdCtrl->Unregister();
|
||||||
return false;
|
|
||||||
m_triggerControllers.erase(ccdCtrl);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2246,11 +2225,7 @@ void CcdPhysicsEnvironment::AddTouchCallback(int response_class, PHY_ResponseCal
|
|||||||
bool CcdPhysicsEnvironment::RequestCollisionCallback(PHY_IPhysicsController* ctrl)
|
bool CcdPhysicsEnvironment::RequestCollisionCallback(PHY_IPhysicsController* ctrl)
|
||||||
{
|
{
|
||||||
CcdPhysicsController* ccdCtrl = static_cast<CcdPhysicsController*>(ctrl);
|
CcdPhysicsController* ccdCtrl = static_cast<CcdPhysicsController*>(ctrl);
|
||||||
|
return !ccdCtrl->Register();
|
||||||
if (!ccdCtrl->Register())
|
|
||||||
return false;
|
|
||||||
m_triggerControllers.insert(ccdCtrl);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CcdPhysicsEnvironment::CallbackTriggers()
|
void CcdPhysicsEnvironment::CallbackTriggers()
|
||||||
@ -2289,16 +2264,17 @@ void CcdPhysicsEnvironment::CallbackTriggers()
|
|||||||
//m_internalOwner is set in 'addPhysicsController'
|
//m_internalOwner is set in 'addPhysicsController'
|
||||||
CcdPhysicsController* ctrl0 = static_cast<CcdPhysicsController*>(rb0->getUserPointer());
|
CcdPhysicsController* ctrl0 = static_cast<CcdPhysicsController*>(rb0->getUserPointer());
|
||||||
CcdPhysicsController* ctrl1 = static_cast<CcdPhysicsController*>(rb1->getUserPointer());
|
CcdPhysicsController* ctrl1 = static_cast<CcdPhysicsController*>(rb1->getUserPointer());
|
||||||
|
bool usecallback = false;
|
||||||
|
|
||||||
std::set<CcdPhysicsController*>::const_iterator iter = m_triggerControllers.find(ctrl0);
|
// Test if one of the controller is registered and use collision callback.
|
||||||
if (iter == m_triggerControllers.end())
|
if (ctrl0->Registered())
|
||||||
{
|
usecallback = true;
|
||||||
iter = m_triggerControllers.find(ctrl1);
|
else if (ctrl1->Registered()) {
|
||||||
colliding_ctrl0 = false;
|
colliding_ctrl0 = false;
|
||||||
|
usecallback = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iter != m_triggerControllers.end())
|
if (usecallback) {
|
||||||
{
|
|
||||||
static PHY_CollData coll_data;
|
static PHY_CollData coll_data;
|
||||||
const btManifoldPoint &cp = manifold->getContactPoint(0);
|
const btManifoldPoint &cp = manifold->getContactPoint(0);
|
||||||
|
|
||||||
|
@ -291,7 +291,6 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
std::set<CcdPhysicsController*> m_controllers;
|
std::set<CcdPhysicsController*> m_controllers;
|
||||||
std::set<CcdPhysicsController*> m_triggerControllers;
|
|
||||||
|
|
||||||
PHY_ResponseCallback m_triggerCallbacks[PHY_NUM_RESPONSE];
|
PHY_ResponseCallback m_triggerCallbacks[PHY_NUM_RESPONSE];
|
||||||
void* m_triggerCallbacksUserPtrs[PHY_NUM_RESPONSE];
|
void* m_triggerCallbacksUserPtrs[PHY_NUM_RESPONSE];
|
||||||
|
Loading…
Reference in New Issue
Block a user