Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2014-05-02 11:08:00 +0400
committerMitchell Stokes <mogurijin@gmail.com>2014-05-02 11:08:00 +0400
commit1a8b17661f61efc743f5e311afa8041015ed7dac (patch)
tree45ae82f239c0afe75d9e218c018f23eeb2d1cccb
parent27cbb28659c1bb5d5a0c4a4371ca2a6a02842f5b (diff)
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.
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index b2dca147f67..5a33a612d2e 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -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);
}
}
}