diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-07-16 04:08:06 +0400 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-07-16 04:08:06 +0400 |
commit | 7398803bf45c338062a8ce8e4960bbf53bb18d81 (patch) | |
tree | 6cbd53b00ac3191e5e6eff00fc5068d343cac4f4 /source/gameengine/Converter | |
parent | 07f294cf4a0af8797a46bc4b77ee1084ab2c552e (diff) |
Fix to not create invalid bound shapes from non mesh objects (armatures).
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r-- | source/gameengine/Converter/BL_BlenderDataConversion.cpp | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 706c923591d..e0d460d18d6 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -503,7 +503,7 @@ static PHY_ShapeProps *CreateShapePropsFromBlenderObject(struct Object* blendero -float my_boundbox_mesh(Mesh *me, float *loc, float *size) +static float my_boundbox_mesh(Mesh *me, float *loc, float *size) { MVert *mvert; BoundBox *bb; @@ -560,7 +560,7 @@ float my_boundbox_mesh(Mesh *me, float *loc, float *size) -void my_tex_space_mesh(Mesh *me) +static void my_tex_space_mesh(Mesh *me) { KeyBlock *kb; float *fp, loc[3], size[3], min[3], max[3]; @@ -610,30 +610,38 @@ void my_tex_space_mesh(Mesh *me) } -void my_get_local_bounds(Object *ob, float *centre, float *size) +static void my_get_local_bounds(Object *ob, float *centre, float *size) { BoundBox *bb= NULL; /* uses boundbox, function used by Ketsji */ - - if(ob->type==OB_MESH) { - bb= ( (Mesh *)ob->data )->bb; - if(bb==0) { - my_tex_space_mesh((struct Mesh *)ob->data); + switch (ob->type) + { + case OB_MESH: bb= ( (Mesh *)ob->data )->bb; - } + if(bb==0) + { + my_tex_space_mesh((struct Mesh *)ob->data); + bb= ( (Mesh *)ob->data )->bb; + } + break; + case OB_CURVE: + case OB_SURF: + case OB_FONT: + centre[0]= centre[1]= centre[2]= 0.0; + size[0] = size[1]=size[2]=0.0; + break; + case OB_MBALL: + bb= ob->bb; + break; } - else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) { + + if(bb==NULL) + { centre[0]= centre[1]= centre[2]= 0.0; - size[0] = size[1]=size[2]=0.0; + size[0] = size[1]=size[2]=1.0; } - else if(ob->type==OB_MBALL) { - bb= ob->bb; - } - if(bb==NULL) { - centre[0]= centre[1]= centre[2]= 0.0; - size[0] = size[1]=size[2]=0.0; - } - else { + else + { size[0]= 0.5*fabs(bb->vec[0][0] - bb->vec[4][0]); size[1]= 0.5*fabs(bb->vec[0][1] - bb->vec[2][1]); size[2]= 0.5*fabs(bb->vec[0][2] - bb->vec[1][2]); @@ -641,7 +649,7 @@ void my_get_local_bounds(Object *ob, float *centre, float *size) centre[0]= 0.5*(bb->vec[0][0] + bb->vec[4][0]); centre[1]= 0.5*(bb->vec[0][1] + bb->vec[2][1]); centre[2]= 0.5*(bb->vec[0][2] + bb->vec[1][2]); - } + } } @@ -707,6 +715,14 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj, objprop.m_boundobject.box.m_extends[1]=2.f*bb.m_extends[1]; objprop.m_boundobject.box.m_extends[2]=2.f*bb.m_extends[2]; break; + case OB_BOUND_POLYH: + if (blenderobject->type == OB_MESH) + { + objprop.m_boundclass = KX_BOUNDMESH; + break; + } + // Object is not a mesh... can't use polyheder. + // Fall through and become a sphere. case OB_BOUND_SPHERE: { objprop.m_boundclass = KX_BOUNDSPHERE; @@ -727,11 +743,6 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj, objprop.m_boundobject.c.m_height = 2.f*bb.m_extends[2]; break; } - case OB_BOUND_POLYH: - { - objprop.m_boundclass = KX_BOUNDMESH; - break; - } } } |