small bge edits
authorCampbell Barton <ideasman42@gmail.com>
Wed, 8 Apr 2009 17:40:09 +0000 (17:40 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 8 Apr 2009 17:40:09 +0000 (17:40 +0000)
- Only try and remove light objects from the light list.
- Only loop over mesh verts once when getting the bounding box
- dont return None from python attribute localInertia when theres no physics objects. better return a vector still.
- add names to send message PyArg_ParseTuple functions.

source/gameengine/Converter/BL_BlenderDataConversion.cpp
source/gameengine/Ketsji/KX_GameObject.cpp
source/gameengine/Ketsji/KX_PythonInit.cpp
source/gameengine/Ketsji/KX_Scene.cpp

index 3c77f122758284adfdbf8b5c022f404ee4710971..50a660e77c950249b678e387eb0c9a8892592547 100644 (file)
@@ -1120,6 +1120,7 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
        BoundBox *bb;
        MT_Point3 min, max;
        float mloc[3], msize[3];
+       float radius=0.0f, vert_radius, *co;
        int a;
        
        if(me->bb==0) me->bb= (struct BoundBox *)MEM_callocN(sizeof(BoundBox), "boundbox");
@@ -1132,7 +1133,15 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
        
        mvert= me->mvert;
        for(a=0; a<me->totvert; a++, mvert++) {
-               DO_MINMAX(mvert->co, min, max);
+               co= mvert->co;
+               
+               /* bounds */
+               DO_MINMAX(co, min, max);
+               
+               /* radius */
+               vert_radius= co[0]*co[0] + co[1]*co[1] + co[2]*co[2];
+               if (vert_radius > radius)
+                       radius= vert_radius;
        }
                
        if(me->totvert) {
@@ -1158,13 +1167,6 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
        bb->vec[0][2]=bb->vec[3][2]=bb->vec[4][2]=bb->vec[7][2]= loc[2]-size[2];
        bb->vec[1][2]=bb->vec[2][2]=bb->vec[5][2]=bb->vec[6][2]= loc[2]+size[2];
 
-       float radius = 0;
-       for (a=0, mvert = me->mvert; a < me->totvert; a++, mvert++)
-       {
-               float vert_radius = MT_Vector3(mvert->co).length2();
-               if (vert_radius > radius)
-                       radius = vert_radius;
-       } 
        return sqrt(radius);
 }
                
index 5085b52adda371e0226bffca79c0e911c10f67e1..13e839d9d2e08949bfecc56cdf8c9ab3208b0c91 100644 (file)
@@ -1325,7 +1325,7 @@ PyObject* KX_GameObject::pyattr_get_localInertia(void *self_v, const KX_PYATTRIB
        {
                return PyObjectFrom(self->GetPhysicsController()->GetLocalInertia());
        }
-       Py_RETURN_NONE;
+       return Py_BuildValue("fff", 0.0f, 0.0f, 0.0f);
 }
 
 PyObject* KX_GameObject::pyattr_get_orientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
@@ -2349,7 +2349,7 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_GameObject, sendMessage,
        char* to = "";
        const STR_String& from = GetName();
 
-       if (!PyArg_ParseTuple(args, "s|sss", &subject, &body, &to))
+       if (!PyArg_ParseTuple(args, "s|sss:sendMessage", &subject, &body, &to))
                return NULL;
 
        KX_GetActiveScene()->GetNetworkScene()->SendMessage(to, from, subject, body);
index 57c84050397e03b6dd114308ca367145d5e717c6..8302855577db302f7654b908e1eab674293b1f12 100644 (file)
@@ -184,7 +184,7 @@ static PyObject* gPySendMessage(PyObject*, PyObject* args)
        char* to = "";
        char* from = "";
 
-       if (!PyArg_ParseTuple(args, "s|sss", &subject, &body, &to, &from))
+       if (!PyArg_ParseTuple(args, "s|sss:sendMessage", &subject, &body, &to, &from))
                return NULL;
 
        gp_KetsjiScene->GetNetworkScene()->SendMessage(to, from, subject, body);
index 7eed1cc387b14bbbbc68e73f3a1c6713a112c5a6..0bd7d7270e16c6c27ef01096072a8119299dc795 100644 (file)
@@ -956,7 +956,7 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj)
        
        newobj->RemoveMeshes();
        ret = 1;
-       if (m_lightlist->RemoveValue(newobj)) // TODO - use newobj->IsLight() test when its merged in from apricot. - Campbell
+       if (newobj->IsLight() && m_lightlist->RemoveValue(newobj))
                ret = newobj->Release();
        if (m_objectlist->RemoveValue(newobj))
                ret = newobj->Release();