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 /source/gameengine/Ketsji/KX_Scene.cpp
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.
Diffstat (limited to 'source/gameengine/Ketsji/KX_Scene.cpp')
-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);
}
}
}