Commit: 0e0af4f77222002ddf029095ca36fea71c9ab049
Author: Ines Almeida
Date:   Mon Jan 12 20:10:07 2015 +0100
Branches: master
https://developer.blender.org/rB0e0af4f77222002ddf029095ca36fea71c9ab049

BGE: python API cleanup - adding proper initialization to GameTypes

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

M       source/gameengine/Ketsji/KX_PythonInitTypes.cpp
M       source/gameengine/Ketsji/KX_PythonInitTypes.h

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

diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp 
b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
index 7d38ce5..5c1ad56 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
@@ -171,8 +171,10 @@ void initPyTypes(void)
  * .....
  */
 
+       /* Use existing module where possible */
+       PyObject *mod  = initGameTypesPythonBinding();
+
        /* For now just do PyType_Ready */
-       PyObject *mod = PyModule_New("GameTypes");
        PyObject *dict = PyModule_GetDict(mod);
        PyDict_SetItemString(PySys_GetObject("modules"), "GameTypes", mod);
        Py_DECREF(mod);
@@ -269,4 +271,42 @@ void initPyTypes(void)
 #endif
 }
 
+
+PyDoc_STRVAR(GameTypes_module_documentation,
+"This module provides access to the game engine data types."
+);
+static struct PyModuleDef GameTypes_module_def = {
+       PyModuleDef_HEAD_INIT,
+       "GameTypes",  /* m_name */
+       GameTypes_module_documentation,  /* m_doc */
+       0,  /* m_size */
+       NULL,  /* m_methods */
+       NULL,  /* m_reload */
+       NULL,  /* m_traverse */
+       NULL,  /* m_clear */
+       NULL,  /* m_free */
+};
+
+
+PyMODINIT_FUNC initGameTypesPythonBinding(void)
+{
+       PyObject *m;
+
+       /* Use existing module where possible */
+       m = PyImport_ImportModule( "GameTypes" );
+       if (m) {
+               Py_DECREF(m);
+               return m;
+       }
+       else {
+               PyErr_Clear();
+
+               // Create the module and add the functions
+               m = PyModule_Create(&GameTypes_module_def);
+               PyDict_SetItemString(PySys_GetObject("modules"), 
GameTypes_module_def.m_name, m);
+       }
+
+       return m;
+}
+
 #endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h 
b/source/gameengine/Ketsji/KX_PythonInitTypes.h
index d8ee4f7..4d7d26f 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.h
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h
@@ -33,7 +33,9 @@
 #define __KX_PYTHON_INIT_TYPES__
 
 #ifdef WITH_PYTHON
+#include <Python.h>
 void initPyTypes(void);
+PyMODINIT_FUNC initGameTypesPythonBinding(void);
 #endif
 
 #endif  /* __KX_PYTHON_INIT_TYPES__ */

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to