Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/Ketsji/KX_Scene.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp108
1 files changed, 107 insertions, 1 deletions
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 8f912642127..c274f05558d 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -102,7 +102,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
class NG_NetworkDeviceInterface *ndi,
class SND_IAudioDevice* adi,
const STR_String& sceneName):
-
+ PyObjectPlus(&KX_Scene::Type),
m_keyboardmgr(NULL),
m_mousemgr(NULL),
m_physicsEnvironment(0),
@@ -155,6 +155,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_canvasDesignWidth = 0;
m_canvasDesignHeight = 0;
+
+ m_attrlist = PyDict_New(); /* new ref */
}
@@ -202,6 +204,8 @@ KX_Scene::~KX_Scene()
{
delete m_bucketmanager;
}
+
+ Py_DECREF(m_attrlist);
}
@@ -1115,3 +1119,105 @@ void KX_Scene::SetPhysicsEnvironment(class PHY_IPhysicsEnvironment* physEnv)
return;
}
}
+
+//----------------------------------------------------------------------------
+//Python
+
+PyMethodDef KX_Scene::Methods[] = {
+ KX_PYMETHODTABLE(KX_Scene, getLightList),
+ KX_PYMETHODTABLE(KX_Scene, getObjectList),
+ KX_PYMETHODTABLE(KX_Scene, getName),
+
+ {NULL,NULL} //Sentinel
+};
+
+PyTypeObject KX_Scene::Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0,
+ "KX_Scene",
+ sizeof(KX_Scene),
+ 0,
+ PyDestructor,
+ 0,
+ __getattr,
+ __setattr,
+ 0, //&MyPyCompare,
+ __repr,
+ 0, //&cvalue_as_number,
+ 0,
+ 0,
+ 0,
+ 0, 0, 0, 0, 0, 0
+};
+
+PyParentObject KX_Scene::Parents[] = {
+ &KX_Scene::Type,
+ &CValue::Type,
+ NULL
+};
+
+PyObject* KX_Scene::_getattr(const STR_String& attr)
+{
+ if (attr == "name")
+ return PyString_FromString(GetName());
+
+ if (attr == "active_camera")
+ {
+ KX_Camera *camera = GetActiveCamera();
+ camera->AddRef();
+ return (PyObject*) camera;
+ }
+
+ if (attr == "suspended")
+ return PyInt_FromLong(m_suspend);
+
+ if (attr == "activity_culling")
+ return PyInt_FromLong(m_activity_culling);
+
+ if (attr == "activity_culling_radius")
+ return PyFloat_FromDouble(m_activity_box_radius);
+
+ PyObject* value = PyDict_GetItemString(m_attrlist, const_cast<char *>(attr.ReadPtr()));
+ if (value)
+ {
+ Py_INCREF(value);
+ return value;
+ }
+
+ _getattr_up(PyObjectPlus);
+}
+
+int KX_Scene::_setattr(const STR_String &attr, PyObject *pyvalue)
+{
+
+ if (!PyDict_SetItemString(m_attrlist, const_cast<char *>(attr.ReadPtr()), pyvalue))
+ return 0;
+
+ return PyObjectPlus::_setattr(attr, pyvalue);
+}
+
+KX_PYMETHODDEF_DOC(KX_Scene, getLightList,
+"getLightList() -> list [KX_Light]\n"
+"Returns a list of all lights in the scene.\n"
+)
+{
+ m_lightlist->AddRef();
+ return (PyObject*) m_lightlist;
+}
+
+KX_PYMETHODDEF_DOC(KX_Scene, getObjectList,
+"getObjectList() -> list [KX_GameObject]\n"
+"Returns a list of all game objects in the scene.\n"
+)
+{
+ m_objectlist->AddRef();
+ return (PyObject*) m_objectlist;
+}
+
+KX_PYMETHODDEF_DOC(KX_Scene, getName,
+"getName() -> string\n"
+"Returns the name of the scene.\n"
+)
+{
+ return PyString_FromString(GetName());
+}