diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-06-07 15:03:12 +0400 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-06-07 15:03:12 +0400 |
commit | c16444e624040bd51a86b5dfd743396eaed970d1 (patch) | |
tree | 8224a39a10bd2b16968394d2e185c1413c57ed13 /source/gameengine/Ketsji | |
parent | b468bf726c50d3126fac2664164e1be0d6e209c5 (diff) |
Python updates:
Added scene module
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/KX_Camera.cpp | 31 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 22 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp | 9 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h | 1 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_Scene.cpp | 108 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_Scene.h | 39 |
6 files changed, 172 insertions, 38 deletions
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp index 4ed7b1e62d0..5d455a70ed1 100644 --- a/source/gameengine/Ketsji/KX_Camera.cpp +++ b/source/gameengine/Ketsji/KX_Camera.cpp @@ -515,14 +515,14 @@ KX_PYMETHODDEF_DOC(KX_Camera, sphereInsideFrustum, MT_Point3 centre = MT_Point3FromPyList(pycentre); if (PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, "Expected list for argument centre."); + PyErr_SetString(PyExc_TypeError, "sphereInsideFrustum: Expected list for argument centre."); Py_Return; } return PyInt_FromLong(SphereInsideFrustum(centre, radius)); /* new ref */ } - PyErr_SetString(PyExc_TypeError, "Expected arguments: (centre, radius)"); + PyErr_SetString(PyExc_TypeError, "sphereInsideFrustum: Expected arguments: (centre, radius)"); Py_Return; } @@ -558,8 +558,8 @@ KX_PYMETHODDEF_DOC(KX_Camera, boxInsideFrustum, unsigned int num_points = PySequence_Size(pybox); if (num_points != 8) { - PyErr_Format(PyExc_TypeError, "Expected eight (8) points, got %d", num_points); - Py_Return; + PyErr_Format(PyExc_TypeError, "boxInsideFrustum: Expected eight (8) points, got %d", num_points); + return NULL; } MT_Point3 box[8]; @@ -569,17 +569,14 @@ KX_PYMETHODDEF_DOC(KX_Camera, boxInsideFrustum, box[p] = MT_Point3FromPyList(item); Py_DECREF(item); if (PyErr_Occurred()) - { - Py_Return; - } + return NULL; } return PyInt_FromLong(BoxInsideFrustum(box)); /* new ref */ } - PyErr_SetString(PyExc_TypeError, "Expected argument: list of points."); - - Py_Return; + PyErr_SetString(PyExc_TypeError, "boxInsideFrustum: Expected argument: list of points."); + return NULL; } KX_PYMETHODDEF_DOC(KX_Camera, pointInsideFrustum, @@ -603,13 +600,13 @@ KX_PYMETHODDEF_DOC(KX_Camera, pointInsideFrustum, { MT_Point3 point = MT_Point3FromPyList(pypoint); if (PyErr_Occurred()) - Py_Return; + return NULL; return PyInt_FromLong(PointInsideFrustum(point)); /* new ref */ } - PyErr_SetString(PyExc_TypeError, "Expected point argument."); - Py_Return; + PyErr_SetString(PyExc_TypeError, "pointInsideFrustum: Expected point argument."); + return NULL; } KX_PYMETHODDEF_DOC(KX_Camera, getCameraToWorld, @@ -686,14 +683,12 @@ KX_PYMETHODDEF_DOC(KX_Camera, setProjectionMatrix, { MT_Matrix4x4 mat = MT_Matrix4x4FromPyObject(pymat); if (PyErr_Occurred()) - { - Py_Return; - } + return NULL; SetProjectionMatrix(mat); Py_Return; } - PyErr_SetString(PyExc_TypeError, "Expected 4x4 list as matrix argument."); - Py_Return; + PyErr_SetString(PyExc_TypeError, "setProjectionMatrix: Expected 4x4 list as matrix argument."); + return NULL; } diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index f4736f4c423..1b6d55f68e9 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -160,7 +160,7 @@ static PyObject* gPyGetSpectrum(PyObject* self, -static void gPyStartDSP(PyObject* self, +static PyObject* gPyStartDSP(PyObject* self, PyObject* args, PyObject* kwds) { @@ -172,13 +172,15 @@ static void gPyStartDSP(PyObject* self, { audiodevice->StartUsingDSP(); usedsp = true; + Py_Return; } } + return NULL; } -static void gPyStopDSP(PyObject* self, +static PyObject* gPyStopDSP(PyObject* self, PyObject* args, PyObject* kwds) { @@ -190,16 +192,32 @@ static void gPyStopDSP(PyObject* self, { audiodevice->StopUsingDSP(); usedsp = false; + Py_Return; } } + return NULL; } +static STR_String gPyGetCurrentScene_doc = +"getCurrentScene()\n" +"Gets a reference to the current scene.\n"; +static PyObject* gPyGetCurrentScene(PyObject* self, + PyObject* args, + PyObject* kwds) +{ + Py_INCREF(gp_KetsjiScene); + return (PyObject*) gp_KetsjiScene; +} + + static struct PyMethodDef game_methods[] = { {"getCurrentController", (PyCFunction) SCA_PythonController::sPyGetCurrentController, METH_VARARGS, SCA_PythonController::sPyGetCurrentController__doc__}, + {"getCurrentScene", (PyCFunction) gPyGetCurrentScene, + METH_VARARGS, gPyGetCurrentScene_doc.Ptr()}, {"addActiveActuator",(PyCFunction) SCA_PythonController::sPyAddActiveActuator, METH_VARARGS, SCA_PythonController::sPyAddActiveActuator__doc__}, {"getRandomFloat",(PyCFunction) gPyGetRandomFloat, diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp index 2480724986b..f26e9873863 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp @@ -84,6 +84,7 @@ PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = { PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = { {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_VARARGS, SetMesh_doc}, + KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, getMesh), {NULL,NULL} //Sentinel }; @@ -123,7 +124,13 @@ PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self, return NULL; } - +KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh, +"getMesh() -> string\n" +"Returns the name of the mesh to be substituted.\n" +) +{ + return PyString_FromString(const_cast<char *>(m_mesh->GetName().ReadPtr())); +} /* ------------------------------------------------------------------------- */ /* Native functions */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h index cc7bd8c9c6a..e38cf412539 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h @@ -82,6 +82,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator /* 1. setMesh */ KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,SetMesh); + KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,getMesh); }; 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()); +} diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index a468a8d1861..c32cd4182aa 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -49,6 +49,8 @@ #include "RAS_FramingManager.h" #include "RAS_Rect.h" +#include "PyObjectPlus.h" + /** * @section Forward declarations */ @@ -86,9 +88,9 @@ class SG_IObject; * The KX_Scene holds all data for an independent scene. It relates * KX_Objects to the specific objects in the modules. * */ -class KX_Scene : public SCA_IScene +class KX_Scene : public SCA_IScene, public PyObjectPlus { - //Py_Header; + Py_Header; protected: RAS_BucketManager* m_bucketmanager; CListValue* m_tempObjectList; @@ -245,6 +247,11 @@ protected: void MarkVisible(SG_Tree *node, RAS_IRasterizer* rasty); void MarkSubTreeVisible(SG_Tree *node, RAS_IRasterizer* rasty, bool visible); + + /** + * This stores anything from python + */ + PyObject* m_attrlist; public: KX_Scene(class SCA_IInputDevice* keyboarddevice, @@ -486,25 +493,25 @@ public: */ void SetNodeTree(SG_Tree* root); -#if 0 - KX_PYMETHOD_DOC(KX_Scene, GetLightList); - KX_PYMETHOD_DOC(KX_Scene, GetObjectList); - KX_PYMETHOD_DOC(KX_Scene, GetName); - - KX_PYMETHOD_DOC(KX_Scene, GetActiveCamera); - KX_PYMETHOD_DOC(KX_Scene, SetActiveCamera); - KX_PYMETHOD_DOC(KX_Scene, FindCamera); + KX_PYMETHOD_DOC(KX_Scene, getLightList); + KX_PYMETHOD_DOC(KX_Scene, getObjectList); + KX_PYMETHOD_DOC(KX_Scene, getName); +/* + KX_PYMETHOD_DOC(KX_Scene, getActiveCamera); + KX_PYMETHOD_DOC(KX_Scene, getActiveCamera); + KX_PYMETHOD_DOC(KX_Scene, findCamera); - KX_PYMETHOD_DOC(KX_Scene, SetGravity); + KX_PYMETHOD_DOC(KX_Scene, getGravity); - KX_PYMETHOD_DOC(KX_Scene, SetActivityCulling); - KX_PYMETHOD_DOC(KX_Scene, SetActivityCullingRadius); + KX_PYMETHOD_DOC(KX_Scene, setActivityCulling); + KX_PYMETHOD_DOC(KX_Scene, setActivityCullingRadius); - KX_PYMETHOD_DOC(KX_Scene, SetSceneViewport); - KX_PYMETHOD_DOC(KX_Scene, GetSceneViewport); + KX_PYMETHOD_DOC(KX_Scene, setSceneViewport); + KX_PYMETHOD_DOC(KX_Scene, setSceneViewport); + */ virtual PyObject* _getattr(const STR_String& attr); /* name, active_camera, gravity, suspended, viewport, framing, activity_culling, activity_culling_radius */ -#endif + virtual int KX_Scene::_setattr(const STR_String &attr, PyObject *pyvalue); }; typedef std::vector<KX_Scene*> KX_SceneList; |