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" { extern "C" {
#endif #endif
#define SHAPE_BOX "Box"
#define SHAPE_CYLINDER "CylinderZ"
typedef struct _EPhysics_Body_Callback EPhysics_Body_Callback; typedef struct _EPhysics_Body_Callback EPhysics_Body_Callback;
typedef struct _EPhysics_Body_Evas_Stacking EPhysics_Body_Evas_Stacking; typedef struct _EPhysics_Body_Evas_Stacking EPhysics_Body_Evas_Stacking;
typedef struct _EPhysics_Body_Soft_Body_Slice EPhysics_Body_Soft_Body_Slice; 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); _ephysics_cloth_face_objs_update(body);
else if (body->type == EPHYSICS_BODY_TYPE_RIGID) 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); _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); _ephysics_box_face_objs_update(body);
} }
} }
@ -1922,6 +1919,7 @@ ephysics_body_soft_circle_add(EPhysics_World *world)
if (!body) if (!body)
goto no_body; goto no_body;
body->shape = EPHYSICS_BODY_SHAPE_CYLINDER;
body->slices = 19; body->slices = 19;
body->points_deform = (int *)malloc(body->slices * sizeof(int)); body->points_deform = (int *)malloc(body->slices * sizeof(int));
if (!body->points_deform) if (!body->points_deform)
@ -1977,6 +1975,7 @@ ephysics_body_circle_add(EPhysics_World *world)
ephysics_world_lock_take(world); ephysics_world_lock_take(world);
body = _ephysics_body_rigid_body_add(world, collision_shape, "circle", 0.5, body = _ephysics_body_rigid_body_add(world, collision_shape, "circle", 0.5,
0.5, 0.5); 0.5, 0.5);
body->shape = EPHYSICS_BODY_SHAPE_CYLINDER;
ephysics_world_lock_release(world); ephysics_world_lock_release(world);
return body; return body;
} }
@ -2020,6 +2019,7 @@ ephysics_body_soft_box_add(EPhysics_World *world)
if (!body) if (!body)
goto no_body; goto no_body;
body->shape = EPHYSICS_BODY_SHAPE_BOX;
body->slices = 16; body->slices = 16;
body->points_deform = (int *)malloc(body->slices * sizeof(int)); body->points_deform = (int *)malloc(body->slices * sizeof(int));
if (!body->points_deform) if (!body->points_deform)
@ -2070,6 +2070,7 @@ ephysics_body_box_add(EPhysics_World *world)
ephysics_world_lock_take(world); ephysics_world_lock_take(world);
body = _ephysics_body_rigid_body_add(world, collision_shape, "box", 0.5, body = _ephysics_body_rigid_body_add(world, collision_shape, "box", 0.5,
0.5, 0.5); 0.5, 0.5);
body->shape = EPHYSICS_BODY_SHAPE_BOX;
ephysics_world_lock_release(world); ephysics_world_lock_release(world);
return body; return body;
} }
@ -2194,6 +2195,7 @@ ephysics_body_shape_add(EPhysics_World *world, EPhysics_Shape *shape)
"generic", (cm_x - min_x) / range_x, "generic", (cm_x - min_x) / range_x,
1 - (cm_y - min_y) / range_y, 1 - (cm_y - min_y) / range_y,
(cm_z - min_z) / range_z); (cm_z - min_z) / range_z);
body->shape = EPHYSICS_BODY_SHAPE_CUSTOM;
ephysics_world_lock_release(world); ephysics_world_lock_release(world);
return body; 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) if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_set(body, face, evas_obj, return _ephysics_body_cloth_face_evas_object_set(body, face, evas_obj,
use_obj_pos); 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, return _ephysics_body_cylinder_face_evas_object_set(body, face, evas_obj,
use_obj_pos); 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, return _ephysics_body_box_face_evas_object_set(body, face, evas_obj,
use_obj_pos); 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) if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_get(body, face); 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); 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); return _ephysics_body_box_face_evas_object_get(body, face);
ERR("Can't handle body %p type.", body); 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) if (body->type == EPHYSICS_BODY_TYPE_CLOTH)
return _ephysics_body_cloth_face_evas_object_unset(body, face); 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); 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); return _ephysics_body_box_face_evas_object_unset(body, face);
ERR("Can't handle body %p type.", body); 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_Dragging_Data EPhysics_Dragging_Data;
typedef struct _EPhysics_Body_Soft_Body_Data EPhysics_Body_Soft_Body_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 typedef enum _EPhysics_World_Boundary
{ {
EPHYSICS_WORLD_BOUNDARY_TOP, EPHYSICS_WORLD_BOUNDARY_TOP,
@ -131,6 +139,7 @@ struct _EPhysics_Body {
int slices; int slices;
int *points_deform; int *points_deform;
EPhysics_Body_Type type; EPhysics_Body_Type type;
EPhysics_Body_Shape shape;
int cloth_columns; int cloth_columns;
int cloth_rows; int cloth_rows;
int material_index; int material_index;