[Bf-blender-cvs] [c8f6313] master: Fix T45428: Sometimes in a dupligroup linked actuators are not triggered

Dalai Felinto noreply at git.blender.org
Thu Jul 16 18:22:10 CEST 2015


Commit: c8f6313487dfbbee030c6796220cc0d91228d658
Author: Dalai Felinto
Date:   Thu Jul 16 12:37:42 2015 -0300
Branches: master
https://developer.blender.org/rBc8f6313487dfbbee030c6796220cc0d91228d658

Fix T45428: Sometimes in a dupligroup linked actuators are not triggered

Revert "BGE: Cleanup : merge 3 loop in 1 in function DupliGroupRecurse."

This reverts commit 371e5f25a054759014efa27c6fe4d497854ed64e.

The fix is basically to revert the cleanup commit 371e5f25 (and 3d658bf7)
Also 5dc22fbbf had to be adapted to the reverted code.

Conflicts:
	source/gameengine/Ketsji/KX_Scene.cpp

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

M	source/gameengine/Ketsji/KX_Scene.cpp

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

diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 1959b3d..fd709a8 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -819,38 +819,47 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
 	// the logic must be replicated first because we need
 	// the new logic bricks before relinking
 	vector<KX_GameObject*>::iterator git;
-	for (git = m_logicHierarchicalGameObjects.begin(); git != m_logicHierarchicalGameObjects.end(); ++git) {
-		KX_GameObject *gameobj = *git;
-
-		if (gameobj->GetBlenderGroupObject() == blgroupobj) {
-			// set references for dupli-group
-			// groupobj holds a list of all objects, that belongs to this group
-			groupobj->AddInstanceObjects(gameobj);
-			// every object gets the reference to its dupli-group object
-			gameobj->SetDupliGroupObject(groupobj);
-		}
-
-		gameobj->ReParentLogic();
-
-		//	relink any pointers as necessary, sort of a temporary solution
+	for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
+	{
+		(*git)->ReParentLogic();
+	}
+	
+	//	relink any pointers as necessary, sort of a temporary solution
+	for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
+	{
 		// this will also relink the actuator to objects within the hierarchy
-		gameobj->Relink(&m_map_gameobject_to_replica);
+		(*git)->Relink(&m_map_gameobject_to_replica);
 		// add the object in the layer of the parent
-		gameobj->SetLayer(groupobj->GetLayer());
+		(*git)->SetLayer(groupobj->GetLayer());
+	}
 
-		// replicate crosslinks etc. between logic bricks
-		ReplicateLogic(gameobj);
+	// replicate crosslinks etc. between logic bricks
+	for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
+	{
+		ReplicateLogic((*git));
+	}
 	
-		// now look if object in the hierarchy have dupli group and recurse
+	// now look if object in the hierarchy have dupli group and recurse
+	for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
+	{
 		/* Replicate all constraints. */
-		if (gameobj->GetPhysicsController()) {
-			gameobj->GetPhysicsController()->ReplicateConstraints(gameobj, m_logicHierarchicalGameObjects);
-			gameobj->ClearConstraints();
+		if ((*git)->GetPhysicsController()) {
+			(*git)->GetPhysicsController()->ReplicateConstraints((*git), m_logicHierarchicalGameObjects);
+			(*git)->ClearConstraints();
 		}
 
-		if (gameobj != groupobj && gameobj->IsDupliGroup())
+		if ((*git) != groupobj && (*git)->IsDupliGroup())
 			// can't instantiate group immediately as it destroys m_logicHierarchicalGameObjects
-			duplilist.push_back(gameobj);
+			duplilist.push_back((*git));
+
+		if ((*git)->GetBlenderGroupObject() == blgroupobj) {
+			// set references for dupli-group
+			// groupobj holds a list of all objects, that belongs to this group
+			groupobj->AddInstanceObjects((*git));
+
+			// every object gets the reference to its dupli-group object
+			(*git)->SetDupliGroupObject(groupobj);
+		}
 	}
 
 	for (git = duplilist.begin(); !(git == duplilist.end()); ++git)




More information about the Bf-blender-cvs mailing list