[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16188] trunk/blender/source/gameengine: Added GameLogic.globalDict, this is a place where data can be stored even when new blend files are loaded .

Campbell Barton ideasman42 at gmail.com
Tue Aug 19 13:53:24 CEST 2008


Revision: 16188
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16188
Author:   campbellbarton
Date:     2008-08-19 13:53:24 +0200 (Tue, 19 Aug 2008)

Log Message:
-----------
Added GameLogic.globalDict, this is a place where data can be stored even when new blend files are loaded. Using for apricot so frankie can go into levels in new blendfiles keeping his inventory, currently it dosnt work for the blenderplayer which stops python before loading new blend files.

Modified Paths:
--------------
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp

Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2008-08-19 11:26:18 UTC (rev 16187)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2008-08-19 11:53:24 UTC (rev 16188)
@@ -116,7 +116,9 @@
 	// Acquire Python's GIL (global interpreter lock)
 	// so we can safely run Python code and API calls
 	PyGILState_STATE gilstate = PyGILState_Ensure();
-
+	
+	PyObject *pyGlobalDict = PyDict_New(); /* python utility storage, spans blend file loading */
+	
 	bgl::InitExtensions(true);
 
 	do
@@ -310,6 +312,7 @@
 			initRasterizer(rasterizer, canvas);
 			PyObject *gameLogic = initGameLogic(startscene);
 			PyDict_SetItemString(dictionaryobject, "GameLogic", gameLogic); // Same as importing the module.
+			PyDict_SetItemString(PyModule_GetDict(gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
 			initGameKeys();
 			initPythonConstraintBinding();
 			initMathutils();
@@ -384,6 +387,7 @@
 				// which allows the scene to safely delete them :)
 				// see: (space.c)->start_game
 				PyDict_Clear(PyModule_GetDict(gameLogic));
+				PyDict_SetItemString(PyModule_GetDict(gameLogic), "globalDict", pyGlobalDict);
 				
 				ketsjiengine->StopEngine();
 				exitGamePythonScripting();

Modified: trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-08-19 11:26:18 UTC (rev 16187)
+++ trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2008-08-19 11:53:24 UTC (rev 16188)
@@ -733,6 +733,10 @@
 
 	// Add some symbolic constants to the module
 	d = PyModule_GetDict(m);
+	
+	// can be overwritten later for gameEngine instances that can load new blend files and re-initialize this module
+	// for now its safe to make sure it exists for other areas such as the web plugin
+	PyDict_SetItemString(d, "globalDict", PyDict_New());
 
 	ErrorObject = PyString_FromString("GameLogic.error");
 	PyDict_SetItemString(d, "error", ErrorObject);





More information about the Bf-blender-cvs mailing list