BGE: Fix T43918: adding submodule bge.app including attribute version.

This patch adds the submodule app to bge. apps contains constants similar to bpy.app, particularly version (tuple of three ints like 2.75.1).

It was requested in T43918 and set as TODO.

The patch also adds rst doc for the module.

Reviewers: moguri, kupoman, lordloki, panzergame, campbellbarton

Reviewed By: lordloki, panzergame, campbellbarton

Subscribers: marcino15

Projects: #game_logic, #game_python, #game_engine

Differential Revision: https://developer.blender.org/D1348
This commit is contained in:
Porteries Tristan 2015-06-15 21:20:47 +02:00
parent 124b25cf9d
commit 1c707a2392
4 changed files with 128 additions and 0 deletions

@ -0,0 +1,47 @@
Application Data (bge.app)
==========================
Module to access application values that remain unchanged during runtime.
.. module:: bge.app
.. data:: version
The Blender/BGE version as a tuple of 3 ints, eg. (2, 75, 1).
.. note:: Version tuples can be compared simply with (in)equality symbols;
for example, ``(2, 74, 5) <= (2, 75, 0)`` returns True (lexical order).
:type: tuple of three ints
.. data:: version_string
The Blender/BGE version formatted as a string, eg. "2.75 (sub 1)".
:type: str
.. data:: version_char
The Blender/BGE version character (for minor releases).
:type: str
.. data:: has_texture_ffmpeg
True if the BGE has been built with FFmpeg support, enabling use of :class:`~bge.texture.ImageFFmpeg` and :class:`~bge.texture.VideoFFmpeg`.
:type: bool
.. data:: has_joystick
True if the BGE has been built with joystick support.
:type: bool
.. data:: has_physics
True if the BGE has been built with physics support.
:type: bool

@ -234,6 +234,7 @@ else:
EXCLUDE_MODULES = [
"aud",
"bge",
"bge.app"
"bge.constraints",
"bge.events",
"bge.logic",
@ -1669,6 +1670,7 @@ def write_rst_contents(basepath):
fw(" bge.texture.rst\n\n")
fw(" bge.events.rst\n\n")
fw(" bge.constraints.rst\n\n")
fw(" bge.app.rst\n\n")
# rna generated change log
fw(title_string("API Info", "=", double=True))
@ -1825,6 +1827,7 @@ def copy_handwritten_rsts(basepath):
"bge.texture",
"bge.events",
"bge.constraints",
"bge.app",
"bgl", # "Blender OpenGl wrapper"
"gpu", # "GPU Shader Module"

@ -138,6 +138,7 @@ extern "C" {
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_appdir.h"
#include "BKE_blender.h"
#include "BLI_blenlib.h"
#include "GPU_material.h"
#include "MEM_guardedalloc.h"
@ -2027,6 +2028,11 @@ PyMODINIT_FUNC initBGE(void)
/* skip "bge." */
#define SUBMOD (mod_full + 4)
mod_full = "bge.app";
PyModule_AddObject(mod, SUBMOD, (submodule = initApplicationPythonBinding()));
PyDict_SetItemString(sys_modules, mod_full, submodule);
Py_INCREF(submodule);
mod_full = "bge.constraints";
PyModule_AddObject(mod, SUBMOD, (submodule = initConstraintPythonBinding()));
PyDict_SetItemString(sys_modules, mod_full, submodule);
@ -2550,6 +2556,77 @@ PyMODINIT_FUNC initGameKeysPythonBinding()
return m;
}
/* ------------------------------------------------------------------------- */
/* Application: application values that remain unchanged during runtime */
/* ------------------------------------------------------------------------- */
PyDoc_STRVAR(Application_module_documentation,
"This module contains application values that remain unchanged during runtime."
);
static struct PyModuleDef Application_module_def = {
PyModuleDef_HEAD_INIT,
"bge.app", /* m_name */
Application_module_documentation, /* m_doc */
0, /* m_size */
NULL, /* m_methods */
0, /* m_reload */
0, /* m_traverse */
0, /* m_clear */
0, /* m_free */
};
PyMODINIT_FUNC initApplicationPythonBinding()
{
PyObject *m;
PyObject *d;
m = PyModule_Create(&Application_module_def);
// Add some symbolic constants to the module
d = PyModule_GetDict(m);
PyDict_SetItemString(d, "version", Py_BuildValue("(iii)",
BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_SUBVERSION));
PyDict_SetItemString(d, "version_string", PyUnicode_FromFormat("%d.%02d (sub %d)",
BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_SUBVERSION));
PyDict_SetItemString(d, "version_char", PyUnicode_FromString(
STRINGIFY(BLENDER_VERSION_CHAR)));
PyDict_SetItemString(d, "has_texture_ffmpeg",
#ifdef WITH_FFMPEG
Py_True
#else
Py_False
#endif
);
PyDict_SetItemString(d, "has_joystick",
#ifdef WITH_SDL
Py_True
#else
Py_False
#endif
);
PyDict_SetItemString(d, "has_physics",
#ifdef WITH_BULLET
Py_True
#else
Py_False
#endif
);
// Check for errors
if (PyErr_Occurred()) {
PyErr_Print();
PyErr_Clear();
}
return m;
}
// utility function for loading and saving the globalDict
int saveGamePythonConfig( char **marshal_buffer)
{

@ -48,6 +48,7 @@ extern bool gUseVisibilityTemp;
#ifdef WITH_PYTHON
PyMODINIT_FUNC initBGE(void);
PyMODINIT_FUNC initApplicationPythonBinding(void);
PyMODINIT_FUNC initGameLogicPythonBinding(void);
PyMODINIT_FUNC initGameKeysPythonBinding(void);
PyMODINIT_FUNC initRasterizerPythonBinding(void);