[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50564] trunk/blender/source/gameengine/ Ketsji/KX_Scene.cpp: BGE: LibLoaded sensors that made use of physics controllers (touch, collision) could cause various physics problems (like infinite loops in Bullet, etc).

Mitchell Stokes mogurijin at gmail.com
Thu Sep 13 02:46:52 CEST 2012


Revision: 50564
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50564
Author:   moguri
Date:     2012-09-13 00:46:50 +0000 (Thu, 13 Sep 2012)
Log Message:
-----------
BGE: LibLoaded sensors that made use of physics controllers (touch, collision) could cause various physics problems (like infinite loops in Bullet, etc). This happened because their KX_TouchEventManagers were merged prior to having their physics controllers merged, which has now been fixed. Thanks to Kupoman for hunting down the fix!

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp

Modified: trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2012-09-13 00:26:01 UTC (rev 50563)
+++ trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2012-09-13 00:46:50 UTC (rev 50564)
@@ -1727,11 +1727,6 @@
 	brick->Replace_IScene(to);
 	brick->Replace_NetworkScene(to->GetNetworkScene());
 
-	SCA_ISensor *sensor=  dynamic_cast<class SCA_ISensor *>(brick);
-	if (sensor) {
-		sensor->Replace_EventManager(logicmgr);
-	}
-
 	/* near sensors have physics controllers */
 #ifdef USE_BULLET
 	KX_TouchSensor *touch_sensor = dynamic_cast<class KX_TouchSensor *>(brick);
@@ -1739,6 +1734,14 @@
 		touch_sensor->GetPhysicsController()->SetPhysicsEnvironment(to->GetPhysicsEnvironment());
 	}
 #endif
+
+	// If we end up replacing a KX_TouchEventManager, we need to make sure
+	// physics controllers are properly in place. In other words, do this
+	// after merging physics controllers!
+	SCA_ISensor *sensor=  dynamic_cast<class SCA_ISensor *>(brick);
+	if (sensor) {
+		sensor->Replace_EventManager(logicmgr);
+	}
 }
 
 #ifdef USE_BULLET




More information about the Bf-blender-cvs mailing list