[Bf-blender-cvs] [bccc6c3] master: BGE: Fix T33187 constraints replication for libloaded objects.
Porteries Tristan
noreply at git.blender.org
Tue Aug 11 11:31:15 CEST 2015
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
*/
More information about the Bf-blender-cvs
mailing list