ephysics: use integer on body struct to store shape

Instead of comparing strings to return of bullet collision shapes



SVN revision: 79044
This commit is contained in:
Bruno Dilly 2012-11-09 18:53:04 +00:00
parent 3d9cf4bd2b
commit 02d3fdb54b
2 changed files with 22 additions and 11 deletions

View File

@ -17,9 +17,6 @@
extern "C" {
#endif
#define SHAPE_BOX "Box"
#define SHAPE_CYLINDER "CylinderZ"
typedef struct _EPhysics_Body_Callback EPhysics_Body_Callback;
typedef struct _EPhysics_Body_Evas_Stacking EPhysics_Body_Evas_Stacking;
typedef struct _EPhysics_Body_Soft_Body_Slice EPhysics_Body_Soft_Body_Slice;
@ -1098,9 +1095,9 @@ _ephysics_body_evas_object_default_update(EPhysics_Body *body)
_ephysics_cloth_face_objs_update(body);
else if (body->type == EPHYSICS_BODY_TYPE_RIGID)
{
if (!(strcmp(body->collision_shape->getName(), SHAPE_CYLINDER)))
if (body->shape == EPHYSICS_BODY_SHAPE_CYLINDER)
_ephysics_cylinder_face_objs_update(body);
else if (!(strcmp(body->collision_shape->getName(), SHAPE_BOX)))
else if (body->shape == EPHYSICS_BODY_SHAPE_BOX)
_ephysics_box_face_objs_update(body);
}
}
@ -1922,6 +1919,7 @@ ephysics_body_soft_circle_add(EPhysics_World *world)
if (!body)
goto no_body;
body->shape = EPHYSICS_BODY_SHAPE_CYLINDER;
body->slices = 19;
body->points_deform = (int *)malloc(body->slices * sizeof(int));
if (!body->points_deform)
@ -1977,6 +1975,7 @@ ephysics_body_circle_add(EPhysics_World *world)
ephysics_world_lock_take(world);
body = _ephysics_body_rigid_body_add(world, collision_shape, "circle", 0.5,
0.5, 0.5);
body->shape = EPHYSICS_BODY_SHAPE_CYLINDER;
ephysics_world_lock_release(world);
return body;
}
@ -2020,6 +2019,7 @@ ephysics_body_soft_box_add(EPhysics_World *world)
if (!body)
goto no_body;
body->shape = EPHYSICS_BODY_SHAPE_BOX;
body->slices = 16;
body->points_deform = (int *)malloc(body->slices * sizeof(int));
if (!body->points_deform)
@ -2070,6 +2070,7 @@ ephysics_body_box_add(EPhysics_World *world)
ephysics_world_lock_take(world);
body = _ephysics_body_rigid_body_add(world, collision_shape, "box", 0.5,
0.5, 0.5);
body->shape = EPHYSICS_BODY_SHAPE_BOX;
ephysics_world_lock_release(world);
return body;
}
@ -2194,6 +2195,7 @@ ephysics_body_shape_add(EPhysics_World *world, EPhysics_Shape *shape)
"generic", (cm_x - min_x) / range_x,
1 - (cm_y - min_y) / range_y,
(cm_z - min_z) / range_z);
body->shape = EPHYSICS_BODY_SHAPE_CUSTOM;
ephysics_world_lock_release(world);
return body;
}
@ -3917,10 +3919,10 @@ ephysics_body_face_evas_object_set(EPhysics_Body *body, EPhysics_Body_Face face,
if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_set(body, face, evas_obj,
use_obj_pos);
if (strcmp(body->collision_shape->getName(), SHAPE_CYLINDER))
if (body->shape == EPHYSICS_BODY_SHAPE_CYLINDER)
return _ephysics_body_cylinder_face_evas_object_set(body, face, evas_obj,
use_obj_pos);
if (strcmp(body->collision_shape->getName(), SHAPE_BOX))
if (body->shape == EPHYSICS_BODY_SHAPE_BOX)
return _ephysics_body_box_face_evas_object_set(body, face, evas_obj,
use_obj_pos);
@ -3938,9 +3940,9 @@ ephysics_body_face_evas_object_get(const EPhysics_Body *body, EPhysics_Body_Face
if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_get(body, face);
if (strcmp(body->collision_shape->getName(), SHAPE_CYLINDER))
if (body->shape == EPHYSICS_BODY_SHAPE_CYLINDER)
return _ephysics_body_cylinder_face_evas_object_get(body, face);
if (strcmp(body->collision_shape->getName(), SHAPE_BOX))
if (body->shape == EPHYSICS_BODY_SHAPE_BOX)
return _ephysics_body_box_face_evas_object_get(body, face);
ERR("Can't handle body %p type.", body);
@ -3958,9 +3960,9 @@ ephysics_body_face_evas_object_unset(EPhysics_Body *body, EPhysics_Body_Face fac
if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_unset(body, face);
if (strcmp(body->collision_shape->getName(), SHAPE_CYLINDER))
if (body->shape == EPHYSICS_BODY_SHAPE_CYLINDER)
return _ephysics_body_cylinder_face_evas_object_unset(body, face);
if (strcmp(body->collision_shape->getName(), SHAPE_BOX))
if (body->shape == EPHYSICS_BODY_SHAPE_BOX)
return _ephysics_body_box_face_evas_object_unset(body, face);
ERR("Can't handle body %p type.", body);

View File

@ -55,6 +55,14 @@ typedef struct _EPhysics_Point EPhysics_Point;
typedef struct _EPhysics_Dragging_Data EPhysics_Dragging_Data;
typedef struct _EPhysics_Body_Soft_Body_Data EPhysics_Body_Soft_Body_Data;
typedef enum _EPhysics_Body_Shape
{
EPHYSICS_BODY_SHAPE_BOX,
EPHYSICS_BODY_SHAPE_CUSTOM,
EPHYSICS_BODY_SHAPE_CYLINDER,
EPHYSICS_BODY_SHAPE_LAST,
} EPhysics_Body_Shape;
typedef enum _EPhysics_World_Boundary
{
EPHYSICS_WORLD_BOUNDARY_TOP,
@ -131,6 +139,7 @@ struct _EPhysics_Body {
int slices;
int *points_deform;
EPhysics_Body_Type type;
EPhysics_Body_Shape shape;
int cloth_columns;
int cloth_rows;
int material_index;