ephysics: collision detection inform z coordinate

SVN revision: 77778
This commit is contained in:
Bruno Dilly 2012-10-10 19:17:13 +00:00
parent 8b9c28f003
commit f7c2009910
3 changed files with 11 additions and 7 deletions

View File

@ -19,18 +19,18 @@ _collision_cb(void *data, EPhysics_Body *body __UNUSED__, void *event_info)
EPhysics_Body *contact_body;
Collision_Data *collision_data = data;
EPhysics_Body_Collision *collision = event_info;
int x, y;
int x, y, z;
contact_body = ephysics_body_collision_contact_body_get(collision);
if (contact_body != collision_data->sphere2) return;
ephysics_body_collision_position_get(collision, &x, &y);
ephysics_body_collision_position_get(collision, &x, &y, &z);
evas_object_move(collision_data->impact, x - 10, y - 40);
elm_object_signal_emit(collision_data->impact, "impact,show",
"ephysics_test");
INF("Collision Detected at (%i, %i)", x, y);
INF("Collision Detected at (%i, %i, %i)", x, y, z);
}
static void

View File

@ -2489,14 +2489,15 @@ EAPI void *ephysics_body_event_callback_del_full(EPhysics_Body *body, EPhysics_C
* where the collision occurred.
*
* @param collision The body collision data of interest.
* @param x The x pointer to set the x coordinate to.
* @param y The y pointer to set the y coordinate to.
* @param x The x coordinate of collision point, in pixels.
* @param y The y coordinate of collision point, in pixels.
* @param z The z coordinate of collision point, in pixels.
*
* @see EPHYSICS_CALLBACK_BODY_COLLISION and @ref
* ephysics_body_event_callback_add() for collision callback.
* @ingroup EPhysics_Body
*/
EAPI void ephysics_body_collision_position_get(const EPhysics_Body_Collision *collision, Evas_Coord *x, Evas_Coord *y);
EAPI void ephysics_body_collision_position_get(const EPhysics_Body_Collision *collision, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
/**
* @brief

View File

@ -30,6 +30,7 @@ struct _EPhysics_Body_Collision {
EPhysics_Body *contact_body;
Evas_Coord x;
Evas_Coord y;
Evas_Coord z;
};
typedef struct _EPhysics_Body_Soft_Body_Slice
@ -1116,7 +1117,7 @@ ephysics_body_evas_object_update_select(EPhysics_Body *body)
}
EAPI void
ephysics_body_collision_position_get(const EPhysics_Body_Collision *collision, Evas_Coord *x, Evas_Coord *y)
ephysics_body_collision_position_get(const EPhysics_Body_Collision *collision, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z)
{
if (!collision)
{
@ -1126,6 +1127,7 @@ ephysics_body_collision_position_get(const EPhysics_Body_Collision *collision, E
if (x) *x = collision->x;
if (y) *y = collision->y;
if (z) *z = collision->z;
}
EAPI EPhysics_Body *
@ -1167,6 +1169,7 @@ ephysics_body_contact_processed(EPhysics_Body *body, EPhysics_Body *contact_body
collision->contact_body = contact_body;
collision->x = position.getX() * rate;
collision->y = wh + wy - (position.getY() * rate);
collision->z = position.getZ() * rate;
_ephysics_body_event_callback_call(body, EPHYSICS_CALLBACK_BODY_COLLISION,
(void *) collision);