diff options
author | Joerg Mueller <nexyon@gmail.com> | 2010-08-16 16:14:09 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2010-08-16 16:14:09 +0400 |
commit | 0be08725adec7659ca612e2d068e62d4d7a926c6 (patch) | |
tree | 3b2c827a67432387148dc9b3c7def927e9116cfd /source/gameengine/Ketsji/KX_PolyProxy.cpp | |
parent | 25fec1592efade86233c0ba71212dc973b618ad1 (diff) |
Py API (GSoC): Second merging commit
Rough summary of fixes/changes:
- Blender Py API: GameLogic -> bge.logic
- Blender Py API: Implemented missing KX_PYATTRIBUTE_TODOs and -DUMMYs.
- Fix for [#22924] KX_PolygonMaterial.diffuse does not return expected list[r,g,b]
- Py API: Renaming _owner attribute of mathutils classes to owner.
- Fix some minor errors in mathutils and blf.
- Enabling game engine autoplay again based on a patch by Dalai:
* The biggest 3D view in the open scene is used, if there is none, blender opens the file normally and raises an error.
* The 3D view are is made fullscreen.
* Quad view, header, properties and toolbox panel are all hidden to get the maximum view.
* If the game engine full screen setting is set, the game starts in fullscreen.
- Fix for ipo conversion on file transition in the game engine.
Diffstat (limited to 'source/gameengine/Ketsji/KX_PolyProxy.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_PolyProxy.cpp | 161 |
1 files changed, 79 insertions, 82 deletions
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp index 837c79c77b3..9395e57e68b 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.cpp +++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp @@ -72,90 +72,19 @@ PyMethodDef KX_PolyProxy::Methods[] = { }; PyAttributeDef KX_PolyProxy::Attributes[] = { - /* All dummy's so they come up in a dir() */ - //KX_PYATTRIBUTE_TODO("DummyProps"), - KX_PYATTRIBUTE_DUMMY("matname"), - KX_PYATTRIBUTE_DUMMY("texture"), - KX_PYATTRIBUTE_DUMMY("material"), - KX_PYATTRIBUTE_DUMMY("matid"), - KX_PYATTRIBUTE_DUMMY("v1"), - KX_PYATTRIBUTE_DUMMY("v2"), - KX_PYATTRIBUTE_DUMMY("v3"), - KX_PYATTRIBUTE_DUMMY("v4"), - KX_PYATTRIBUTE_DUMMY("visible"), - KX_PYATTRIBUTE_DUMMY("collide"), + KX_PYATTRIBUTE_RO_FUNCTION("material_name", KX_PolyProxy, pyattr_get_material_name), + KX_PYATTRIBUTE_RO_FUNCTION("texture_name", KX_PolyProxy, pyattr_get_texture_name), + KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolyProxy, pyattr_get_material), + KX_PYATTRIBUTE_RO_FUNCTION("material_id", KX_PolyProxy, pyattr_get_material_id), + KX_PYATTRIBUTE_RO_FUNCTION("v1", KX_PolyProxy, pyattr_get_v1), + KX_PYATTRIBUTE_RO_FUNCTION("v2", KX_PolyProxy, pyattr_get_v2), + KX_PYATTRIBUTE_RO_FUNCTION("v3", KX_PolyProxy, pyattr_get_v3), + KX_PYATTRIBUTE_RO_FUNCTION("v4", KX_PolyProxy, pyattr_get_v4), + KX_PYATTRIBUTE_RO_FUNCTION("visible", KX_PolyProxy, pyattr_get_visible), + KX_PYATTRIBUTE_RO_FUNCTION("collide", KX_PolyProxy, pyattr_get_collide), { NULL } //Sentinel }; -#if 0 -PyObject* KX_PolyProxy::py_getattro(PyObject *attr) -{ - char *attr_str= _PyUnicode_AsString(attr); - if (!strcmp(attr_str, "matname")) - { - return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName()); - } - if (!strcmp(attr_str, "texture")) - { - return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName()); - } - if (!strcmp(attr_str, "material")) - { - RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial(); - if(polymat->GetFlag() & RAS_BLENDERMAT) - { - KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat); - return mat->GetProxy(); - } - else - { - KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat); - return mat->GetProxy(); - } - } - if (!strcmp(attr_str, "matid")) - { - // we'll have to scan through the material bucket of the mes and compare with - // the one of the polygon - RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial(); - unsigned int matid; - for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++) - { - RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid); - if (meshMat->m_bucket == polyBucket) - // found it - break; - } - return PyLong_FromSsize_t(matid); - } - if (!strcmp(attr_str, "v1")) - { - return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 0)); - } - if (!strcmp(attr_str, "v2")) - { - return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 1)); - } - if (!strcmp(attr_str, "v3")) - { - return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 2)); - } - if (!strcmp(attr_str, "v4")) - { - return PyLong_FromSsize_t(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffsetAbs(m_mesh, 3):0)); - } - if (!strcmp(attr_str, "visible")) - { - return PyLong_FromSsize_t(m_polygon->IsVisible()); - } - if (!strcmp(attr_str, "collide")) - { - return PyLong_FromSsize_t(m_polygon->IsCollider()); - } - // py_getattro_up(CValue); // XXX -- todo, make all these attributes -} -#endif - KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon) : m_polygon(polygon), m_mesh((RAS_MeshObject*)mesh) @@ -179,7 +108,75 @@ CValue* KX_PolyProxy::GetReplica() { return NULL;} // stuff for python integration -KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex, +PyObject* KX_PolyProxy::pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PygetMaterialName(); +} + +PyObject* KX_PolyProxy::pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PygetTextureName(); +} + +PyObject* KX_PolyProxy::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PygetMaterial(); +} + +PyObject* KX_PolyProxy::pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PygetMaterialIndex(); +} + +PyObject* KX_PolyProxy::pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + + return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 0)); +} + +PyObject* KX_PolyProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + + return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 1)); +} + +PyObject* KX_PolyProxy::pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + + return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 2)); +} + +PyObject* KX_PolyProxy::pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + + if (3 < self->m_polygon->VertexCount()) + { + return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 3)); + } + return PyLong_FromSsize_t(0); +} + +PyObject* KX_PolyProxy::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PyisVisible(); +} + +PyObject* KX_PolyProxy::pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v); + return self->PyisCollider(); +} + +KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex, "getMaterialIndex() : return the material index of the polygon in the mesh\n") { RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial(); |