Commit: bccc6c393c70cc6466f044917348fb50d43ef021
Author: Porteries Tristan
Date:   Mon Aug 10 22:42:52 2015 +0200
Branches: master
https://developer.blender.org/rBbccc6c393c70cc6466f044917348fb50d43ef021

BGE: Fix T33187 constraints replication for libloaded objects.

Reviewers: Moguri

===================================================================

M       source/gameengine/Converter/BL_BlenderDataConversion.cpp
M       source/gameengine/Ketsji/KX_Scene.cpp

===================================================================

diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp 
b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 2de3ea0..3d94b02 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -2318,7 +2318,13 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
 
                        /* Store constraints of grouped and instanced objects 
for all layers */
                        gameobj->AddConstraint(dat);
-                                               
+
+                       /** if it's during libload we only add constraints in 
the object but
+                        * doesn't create it. Constraint will be replicated 
later in scene->MergeScene
+                        */
+                       if (libloading)
+                               continue;
+
                        /* Skipped already converted constraints. 
                         * This will happen when a group instance is made from 
a linked group instance
                         * and both are on the active layer. */
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp 
b/source/gameengine/Ketsji/KX_Scene.cpp
index 83126e8..37ef44d 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<KX_GameObject *> 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
         */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to