From 44f45894c2fca8f7e0b7bbfff0e50f24e6c993a5 Mon Sep 17 00:00:00 2001 From: Kester Maddock Date: Fri, 4 Jun 2004 03:00:13 +0000 Subject: Miscellaneous Fixes: Add Python Mapping method to CListValue Fix Bernoulli bool distribution python method for random actuator Fix Python IpoActuator methods setProperty and force acts local Make data objects private Better sort method for polygon materials - much easier to understand --- source/gameengine/Expressions/ListValue.cpp | 17 ++++++-- source/gameengine/GameLogic/SCA_ILogicBrick.h | 2 +- source/gameengine/GameLogic/SCA_RandomActuator.cpp | 2 +- source/gameengine/Ketsji/KX_CameraActuator.h | 4 +- source/gameengine/Ketsji/KX_ConstraintActuator.h | 2 +- source/gameengine/Ketsji/KX_GameActuator.h | 1 + source/gameengine/Ketsji/KX_IpoActuator.cpp | 6 +++ source/gameengine/Ketsji/KX_IpoActuator.h | 2 +- source/gameengine/Ketsji/KX_RadarSensor.cpp | 23 ++++++++++ source/gameengine/Ketsji/KX_RadarSensor.h | 1 + .../gameengine/Rasterizer/RAS_IPolygonMaterial.cpp | 49 ++++------------------ .../gameengine/Rasterizer/RAS_IPolygonMaterial.h | 4 ++ source/gameengine/Rasterizer/RAS_IRasterizer.h | 12 +++++- .../gameengine/Rasterizer/RAS_MaterialBucket.cpp | 4 +- .../RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp | 4 +- .../RAS_VAOpenGLRasterizer.cpp | 4 +- 16 files changed, 76 insertions(+), 61 deletions(-) (limited to 'source/gameengine') diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp index 6984e5663db..3ee8a5a3501 100644 --- a/source/gameengine/Expressions/ListValue.cpp +++ b/source/gameengine/Expressions/ListValue.cpp @@ -28,8 +28,6 @@ int listvalue_bufferlen(PyObject* list) return ( ((CListValue*)list)->GetCount()); } - - PyObject* listvalue_buffer_item(PyObject* list,int index) { if (index >= 0 && index < ((CListValue*) list)->GetCount()) @@ -45,6 +43,19 @@ PyObject* listvalue_buffer_item(PyObject* list,int index) return NULL; } +PyObject* listvalue_mapping_subscript(PyObject* list,PyObject* pyindex) +{ + if (PyString_Check(pyindex)) + { + STR_String index(PyString_AsString(pyindex)); + CValue *item = ((CListValue*) list)->FindValue(index); + if (item) + return (PyObject*) item; + + } + Py_Error(PyExc_IndexError, "Python ListIndex out of range"); + Py_Return; +} /* just slice it into a python list... */ @@ -157,7 +168,7 @@ static PySequenceMethods listvalue_as_sequence = { /* Is this one used ? */ static PyMappingMethods instance_as_mapping = { (inquiry)listvalue_bufferlen, /*mp_length*/ - 0,//(binaryfunc)instance_subscript, /*mp_subscript*/ + (binaryfunc)listvalue_mapping_subscript, /*mp_subscript*/ 0,//(objobjargproc)instance_ass_subscript, /*mp_ass_subscript*/ }; diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h index 5199f66f409..588c5ca7aba 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.h +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h @@ -39,6 +39,7 @@ class SCA_ILogicBrick : public CValue { Py_Header; +protected: SCA_IObject* m_gameobj; int m_Execute_Priority; int m_Execute_Ueber_Priority; @@ -48,7 +49,6 @@ class SCA_ILogicBrick : public CValue STR_String m_text; STR_String m_name; //unsigned long m_drawcolor; -protected: void RegisterEvent(CValue* eventval); void RemoveEvent(); CValue* GetEvent(); diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp index 4bc0e2539f0..d483f400064 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp +++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp @@ -495,7 +495,7 @@ PyObject* SCA_RandomActuator::PySetBoolBernouilli(PyObject* self, return NULL; } - m_distribution = KX_RANDOMACT_BOOL_CONST; + m_distribution = KX_RANDOMACT_BOOL_BERNOUILLI; m_parameter1 = paraArg; enforceConstraints(); Py_Return; diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h index 21d4af64135..cb061206a21 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.h +++ b/source/gameengine/Ketsji/KX_CameraActuator.h @@ -48,10 +48,8 @@ class KX_CameraActuator : public SCA_IActuator { - -private : Py_Header; - +private : /** Object that will be tracked. */ const CValue *m_ob; diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.h b/source/gameengine/Ketsji/KX_ConstraintActuator.h index 800a1ae10fb..c1c58b3b664 100644 --- a/source/gameengine/Ketsji/KX_ConstraintActuator.h +++ b/source/gameengine/Ketsji/KX_ConstraintActuator.h @@ -41,7 +41,7 @@ class KX_ConstraintActuator : public SCA_IActuator { Py_Header; - +protected: // Damp time (int), int m_dampTime; // min (float), diff --git a/source/gameengine/Ketsji/KX_GameActuator.h b/source/gameengine/Ketsji/KX_GameActuator.h index b3acd3b7400..19908a37e54 100644 --- a/source/gameengine/Ketsji/KX_GameActuator.h +++ b/source/gameengine/Ketsji/KX_GameActuator.h @@ -41,6 +41,7 @@ class KX_GameActuator : public SCA_IActuator { Py_Header; +protected: int m_mode; bool m_restart; STR_String m_filename; diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp index 6d2b8dc49eb..7a894db6647 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.cpp +++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp @@ -428,6 +428,10 @@ PyMethodDef KX_IpoActuator::Methods[] = { METH_VARARGS, SetType_doc}, {"getType", (PyCFunction) KX_IpoActuator::sPyGetType, METH_VARARGS, GetType_doc}, + {"setForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPySetForceIpoActsLocal, + METH_VARARGS, SetForceIpoActsLocal_doc}, + {"getForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPyGetForceIpoActsLocal, + METH_VARARGS, GetForceIpoActsLocal_doc}, {NULL,NULL} //Sentinel }; @@ -494,6 +498,8 @@ PyObject* KX_IpoActuator::PySetProperty(PyObject* self, return NULL; } + m_propname = propertyName; + Py_Return; } diff --git a/source/gameengine/Ketsji/KX_IpoActuator.h b/source/gameengine/Ketsji/KX_IpoActuator.h index 49c06a74ece..e2f877c7f7c 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.h +++ b/source/gameengine/Ketsji/KX_IpoActuator.h @@ -40,7 +40,7 @@ class KX_IpoActuator : public SCA_IActuator { Py_Header; - +protected: bool m_bNegativeEvent; /** Begin frame of the ipo. */ diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp index d167349789c..798ebdfc944 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.cpp +++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp @@ -77,6 +77,29 @@ KX_RadarSensor::~KX_RadarSensor() } +CValue* KX_RadarSensor::GetReplica() +{ + KX_RadarSensor* replica = new KX_RadarSensor(*this); + replica->m_colliders = new CListValue(); + replica->m_bCollision = false; + replica->m_bTriggered= false; + replica->m_hitObject = NULL; + replica->m_bLastTriggered = false; + // this will copy properties and so on... + CValue::AddDataToReplica(replica); + + replica->m_client_info = new KX_ClientObjectInfo(m_client_info->m_clientobject, KX_ClientObjectInfo::RADAR); + + replica->m_sumoObj = new SM_Object(DT_NewCone(m_coneradius, m_coneheight),NULL,NULL,NULL); + replica->m_sumoObj->setMargin(m_Margin); + replica->m_sumoObj->setClientObject(replica->m_client_info); + + replica->SynchronizeTransform(); + + return replica; +} + + /** * Transforms the collision object. A cone is not correctly centered * for usage. */ diff --git a/source/gameengine/Ketsji/KX_RadarSensor.h b/source/gameengine/Ketsji/KX_RadarSensor.h index 055041f749c..0e055357f18 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.h +++ b/source/gameengine/Ketsji/KX_RadarSensor.h @@ -77,6 +77,7 @@ public: KX_RadarSensor(); virtual ~KX_RadarSensor(); virtual void SynchronizeTransform(); + virtual CValue* GetReplica(); /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp index b5b47598b1b..babecdd585a 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp @@ -57,7 +57,8 @@ RAS_IPolyMaterial::RAS_IPolyMaterial(const STR_String& texname, m_transparant(transparant), m_zsort(zsort), m_lightlayer(lightlayer), - m_bIsTriangle(bIsTriangle) + m_bIsTriangle(bIsTriangle), + m_polymatid(m_newpolymatid++) { m_shininess = 35.0; m_specular = MT_Vector3(0.5,0.5,0.5); @@ -84,48 +85,10 @@ bool RAS_IPolyMaterial::Equals(const RAS_IPolyMaterial& lhs) const bool RAS_IPolyMaterial::Less(const RAS_IPolyMaterial& rhs) const { - /** - * @warning STL requires lhs.Less(rhs) == rhs.Less(lhs) implies lhs.Equals(rhs). - * This function *must* return different values for lhs.Less(rhs) and rhs.Less(lhs) if - * !lhs.Equals(rhs) !! - */ - if (m_materialname.hash() < rhs.m_materialname.hash()) - return true; - - if (m_materialname.hash() > rhs.m_materialname.hash() || - m_texturename.hash() > rhs.m_texturename.hash()) + if (Equals(rhs)) return false; - - if (m_texturename.hash() < rhs.m_texturename.hash() || - m_lightlayer < rhs.m_lightlayer) - return true; - - if (m_lightlayer > rhs.m_lightlayer || - m_bIsTriangle > rhs.m_bIsTriangle) - return false; - - if (m_bIsTriangle < rhs.m_bIsTriangle || - m_drawingmode < rhs.m_drawingmode) - return true; - - if (m_drawingmode > rhs.m_drawingmode || - m_transparant > !rhs.m_transparant) - return false; - - if (m_transparant < rhs.m_transparant || - m_tileyrep < rhs.m_tileyrep) - return true; - - if (m_tileyrep > rhs.m_tileyrep || - m_tilexrep > rhs.m_tilexrep) - return false; - - if (m_tilexrep < rhs.m_tilexrep || - m_tile < rhs.m_tile) - return true; - - return !(m_tile > rhs.m_tile || - m_zsort > rhs.m_zsort); + + return m_polymatid < rhs.m_polymatid; } int RAS_IPolyMaterial::GetLightLayer() const @@ -167,3 +130,5 @@ const STR_String& RAS_IPolyMaterial::GetTextureName() const { return m_texturename; } + +unsigned int RAS_IPolyMaterial::m_newpolymatid = 0; diff --git a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h index 93c6d829e85..648a8b63464 100644 --- a/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h +++ b/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h @@ -60,6 +60,10 @@ protected: int m_lightlayer; bool m_bIsTriangle; + unsigned int m_polymatid; + + static unsigned int m_newpolymatid; + public: MT_Vector3 m_diffuse; diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h index 815c095e583..21e47e12050 100644 --- a/source/gameengine/Rasterizer/RAS_IRasterizer.h +++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h @@ -299,13 +299,21 @@ public: float frustfar, bool perspective = true )=0; - + /** + * Sets the specular colour component of the lighting equation. + */ virtual void SetSpecularity(float specX, float specY, float specZ, float specval)=0; - + + /** + * Sets the specular exponent component of the lighting equation. + */ virtual void SetShinyness(float shiny)=0; + /** + * Sets the diffuse colour component of the lighting equation. + */ virtual void SetDiffuse(float difX, float difY, float difZ, diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp index faaeafb0d05..83e981b840a 100644 --- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp +++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp @@ -257,9 +257,9 @@ void RAS_MaterialBucket::Render(const MT_Transform& cameratrans, if (m_meshSlots.begin()== m_meshSlots.end()) return; - rendertools->SetViewMat(cameratrans); + //rendertools->SetViewMat(cameratrans); - rasty->SetMaterial(*m_material); + //rasty->SetMaterial(*m_material); if (m_meshSlots.size() >0) { diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp index 5df296970a3..3e93a7a74b9 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp @@ -686,7 +686,7 @@ void RAS_OpenGLRasterizer::IndexPrimitives_Ex(const vecVertexArray & vertexarray numindices = indexarray.size(); if (!numindices) - break; + continue; int vindex=0; switch (mode) @@ -777,7 +777,7 @@ void RAS_OpenGLRasterizer::IndexPrimitives_Ex(const vecVertexArray & vertexarray mv1 = MT_Point3(vertexarray[(indexarray[vindex])].getLocalXYZ()); mv2 = MT_Point3(vertexarray[(indexarray[vindex+1])].getLocalXYZ()); mv3 = MT_Point3(vertexarray[(indexarray[vindex+2])].getLocalXYZ()); - mv4 = MT_Point3(vertexarray[(indexarray[vindex+2])].getLocalXYZ()); + mv4 = MT_Point3(vertexarray[(indexarray[vindex+3])].getLocalXYZ()); fnor = (((mv2-mv1).cross(mv3-mv2))+((mv4-mv3).cross(mv1-mv4))).safe_normalized(); diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp index c0d90bb3c09..50b786bb120 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp +++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_VAOpenGLRasterizer.cpp @@ -183,8 +183,6 @@ void RAS_VAOpenGLRasterizer::IndexPrimitives( const vecVertexArray& vertexarrays glColor3d(0,0,0); } // use glDrawElements to draw each vertexarray - static bool doWarning = true; - for (vt=0;vtsize(); if (!numindices) - break; + continue; glVertexPointer(3,GL_FLOAT,vtxstride,vertexarray->getLocalXYZ()); glTexCoordPointer(2,GL_FLOAT,vtxstride,vertexarray->getUV1()); -- cgit v1.2.3