forked from bartvdbraak/blender
Fix T35552: LibLoading objects with Collision sensors gives an error
The collision sensors were not being properly unregistered from the physics system before they were merged into the current scene.
This commit is contained in:
parent
27cbb28659
commit
1a8b17661f
@ -1864,7 +1864,7 @@ short KX_Scene::GetAnimationFPS()
|
||||
return m_blenderScene->r.frs_sec;
|
||||
}
|
||||
|
||||
static void MergeScene_LogicBrick(SCA_ILogicBrick* brick, KX_Scene *to)
|
||||
static void MergeScene_LogicBrick(SCA_ILogicBrick* brick, KX_Scene *from, KX_Scene *to)
|
||||
{
|
||||
SCA_LogicManager *logicmgr= to->GetLogicManager();
|
||||
|
||||
@ -1874,7 +1874,10 @@ static void MergeScene_LogicBrick(SCA_ILogicBrick* brick, KX_Scene *to)
|
||||
/* near sensors have physics controllers */
|
||||
KX_TouchSensor *touch_sensor = dynamic_cast<class KX_TouchSensor *>(brick);
|
||||
if (touch_sensor) {
|
||||
KX_TouchEventManager *tmgr = (KX_TouchEventManager*)from->GetLogicManager()->FindEventManager(SCA_EventManager::TOUCH_EVENTMGR);
|
||||
touch_sensor->UnregisterSumo(tmgr);
|
||||
touch_sensor->GetPhysicsController()->SetPhysicsEnvironment(to->GetPhysicsEnvironment());
|
||||
touch_sensor->RegisterSumo(tmgr);
|
||||
}
|
||||
|
||||
// If we end up replacing a KX_TouchEventManager, we need to make sure
|
||||
@ -1912,7 +1915,7 @@ static void MergeScene_GameObject(KX_GameObject* gameobj, KX_Scene *to, KX_Scene
|
||||
|
||||
for (ita = actuators.begin(); !(ita==actuators.end()); ++ita)
|
||||
{
|
||||
MergeScene_LogicBrick(*ita, to);
|
||||
MergeScene_LogicBrick(*ita, from, to);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1923,7 +1926,7 @@ static void MergeScene_GameObject(KX_GameObject* gameobj, KX_Scene *to, KX_Scene
|
||||
|
||||
for (its = sensors.begin(); !(its==sensors.end()); ++its)
|
||||
{
|
||||
MergeScene_LogicBrick(*its, to);
|
||||
MergeScene_LogicBrick(*its, from, to);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1934,17 +1937,17 @@ static void MergeScene_GameObject(KX_GameObject* gameobj, KX_Scene *to, KX_Scene
|
||||
for (itc = controllers.begin(); !(itc==controllers.end()); ++itc)
|
||||
{
|
||||
SCA_IController *cont= *itc;
|
||||
MergeScene_LogicBrick(cont, to);
|
||||
MergeScene_LogicBrick(cont, from, to);
|
||||
|
||||
vector<SCA_ISensor*> linkedsensors = cont->GetLinkedSensors();
|
||||
vector<SCA_IActuator*> linkedactuators = cont->GetLinkedActuators();
|
||||
|
||||
for (vector<SCA_IActuator*>::iterator ita = linkedactuators.begin();!(ita==linkedactuators.end());++ita) {
|
||||
MergeScene_LogicBrick(*ita, to);
|
||||
MergeScene_LogicBrick(*ita, from, to);
|
||||
}
|
||||
|
||||
for (vector<SCA_ISensor*>::iterator its = linkedsensors.begin();!(its==linkedsensors.end());++its) {
|
||||
MergeScene_LogicBrick(*its, to);
|
||||
MergeScene_LogicBrick(*its, from, to);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user