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:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-06-07 15:03:12 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-06-07 15:03:12 +0400
commitc16444e624040bd51a86b5dfd743396eaed970d1 (patch)
tree8224a39a10bd2b16968394d2e185c1413c57ed13 /source/gameengine/Ketsji
parentb468bf726c50d3126fac2664164e1be0d6e209c5 (diff)
Python updates:
Added scene module
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r--source/gameengine/Ketsji/KX_Camera.cpp31
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp22
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp9
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h1
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp108
-rw-r--r--source/gameengine/Ketsji/KX_Scene.h39
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;