From bccc6c393c70cc6466f044917348fb50d43ef021 Mon Sep 17 00:00:00 2001 From: Porteries Tristan Date: Mon, 10 Aug 2015 22:42:52 +0200 Subject: BGE: Fix T33187 constraints replication for libloaded objects. Reviewers: Moguri --- source/gameengine/Ketsji/KX_Scene.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'source/gameengine/Ketsji/KX_Scene.cpp') diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 83126e88ce5..37ef44dafe2 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -2064,6 +2064,28 @@ bool KX_Scene::MergeScene(KX_Scene *other) MergeScene_GameObject(gameobj, this, other); } + if (env) { + env->MergeEnvironment(env_other); + CListValue *otherObjects = other->GetObjectList(); + + // List of all physics objects to merge (needed by ReplicateConstraints). + std::vector physicsObjects; + for (unsigned int i = 0; i < otherObjects->GetCount(); ++i) { + KX_GameObject *gameobj = (KX_GameObject *)otherObjects->GetValue(i); + if (gameobj->GetPhysicsController()) { + physicsObjects.push_back(gameobj); + } + } + + for (unsigned int i = 0; i < physicsObjects.size(); ++i) { + KX_GameObject *gameobj = physicsObjects[i]; + // Replicate all constraints in the right physics environment. + gameobj->GetPhysicsController()->ReplicateConstraints(gameobj, physicsObjects); + gameobj->ClearConstraints(); + } + } + + GetTempObjectList()->MergeList(other->GetTempObjectList()); other->GetTempObjectList()->ReleaseAndRemoveAll(); @@ -2079,9 +2101,6 @@ bool KX_Scene::MergeScene(KX_Scene *other) GetLightList()->MergeList(other->GetLightList()); other->GetLightList()->ReleaseAndRemoveAll(); - if (env) - env->MergeEnvironment(env_other); - /* move materials across, assume they both use the same scene-converters * Do this after lights are merged so materials can use the lights in shaders */ -- cgit v1.2.3