diff --git a/legacy/ephysics/src/bin/ephysics_logo.c b/legacy/ephysics/src/bin/ephysics_logo.c index 9a0dc927c1..308b2e8ed8 100644 --- a/legacy/ephysics/src/bin/ephysics_logo.c +++ b/legacy/ephysics/src/bin/ephysics_logo.c @@ -266,7 +266,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__) EINA_FALSE, EINA_TRUE); /* make the "E" logo get into the viewport by applying an horizontal force */ - ephysics_body_central_impulse_apply(letter_body, 390, 0); + ephysics_body_central_impulse_apply(letter_body, 390, 0, 0); elm_run(); diff --git a/legacy/ephysics/src/bin/ephysics_sandbox.c b/legacy/ephysics/src/bin/ephysics_sandbox.c index 3710c11d40..b3fbcab43f 100644 --- a/legacy/ephysics/src/bin/ephysics_sandbox.c +++ b/legacy/ephysics/src/bin/ephysics_sandbox.c @@ -261,8 +261,8 @@ _body_impulse_x_x_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) rel_x = elm_spinner_value_get(evas_object_data_get(obj, "relx")); rel_y = elm_spinner_value_get(evas_object_data_get(obj, "rely")); - ephysics_body_impulse_apply(body, elm_spinner_value_get(obj), y, rel_x, - rel_y); + ephysics_body_impulse_apply(body, elm_spinner_value_get(obj), y, 0, + rel_x, rel_y, 0); } static void @@ -280,7 +280,8 @@ _body_impulse_x_rel_cb(void *data, Evas_Object *obj, y = elm_spinner_value_get(evas_object_data_get(aux, "y")); rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely")); - ephysics_body_impulse_apply(body, x, y, elm_spinner_value_get(obj), rel_y); + ephysics_body_impulse_apply(body, x, y, 0, + elm_spinner_value_get(obj), rel_y, 0); } static void @@ -297,8 +298,8 @@ _body_impulse_y_y_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx")); rel_y = elm_spinner_value_get(evas_object_data_get(aux, "rely")); - ephysics_body_impulse_apply(body, x, elm_spinner_value_get(obj), rel_x, - rel_y); + ephysics_body_impulse_apply(body, x, elm_spinner_value_get(obj), 0, + rel_x, rel_y, 0); } static void @@ -316,7 +317,8 @@ _body_impulse_y_rel_cb(void *data, Evas_Object *obj, y = elm_spinner_value_get(evas_object_data_get(aux, "y")); rel_x = elm_spinner_value_get(evas_object_data_get(aux, "relx")); - ephysics_body_impulse_apply(body, x, y, rel_x, elm_spinner_value_get(obj)); + ephysics_body_impulse_apply(body, x, y, 0, + rel_x, 0, elm_spinner_value_get(obj)); } static void @@ -715,7 +717,7 @@ _sandie_body_add(Evas_Object *win, EPhysics_World *world, int x, int y) body = ephysics_body_circle_add(world); ephysics_body_evas_object_set(body, body_image, EINA_TRUE); ephysics_body_mass_set(body, 20); - ephysics_body_central_impulse_apply(body, 8201, 2110); + ephysics_body_central_impulse_apply(body, 8201, 2110, 0); ephysics_body_event_callback_add(body, EPHYSICS_CALLBACK_BODY_DEL, _body_del, NULL); diff --git a/legacy/ephysics/src/bin/test_bouncing_ball.c b/legacy/ephysics/src/bin/test_bouncing_ball.c index beb87e04ba..7ba51b0680 100644 --- a/legacy/ephysics/src/bin/test_bouncing_ball.c +++ b/legacy/ephysics/src/bin/test_bouncing_ball.c @@ -14,13 +14,13 @@ _on_keydown(void *data, Evas_Object *obj __UNUSED__, Evas_Object *src __UNUSED__ return EINA_FALSE; if (strcmp(ev->keyname, "Up") == 0) - ephysics_body_central_impulse_apply(body, 0, -300); + ephysics_body_central_impulse_apply(body, 0, -300, 0); else if (strcmp(ev->keyname, "Down") == 0) - ephysics_body_central_impulse_apply(body, 0, 300); + ephysics_body_central_impulse_apply(body, 0, 300, 0); else if (strcmp(ev->keyname, "Right") == 0) - ephysics_body_central_impulse_apply(body, 300, 0); + ephysics_body_central_impulse_apply(body, 300, 0, 0); else if (strcmp(ev->keyname, "Left") == 0) - ephysics_body_central_impulse_apply(body, -300, 0); + ephysics_body_central_impulse_apply(body, -300, 0, 0); return EINA_TRUE; } diff --git a/legacy/ephysics/src/bin/test_camera.c b/legacy/ephysics/src/bin/test_camera.c index f542a1d9d2..2c9adb6187 100644 --- a/legacy/ephysics/src/bin/test_camera.c +++ b/legacy/ephysics/src/bin/test_camera.c @@ -103,7 +103,7 @@ _world_populate(Camera_Data *camera_data) update_object_cb, shadow); camera_data->base.bodies = eina_list_append(camera_data->base.bodies, fall_body); - ephysics_body_central_impulse_apply(fall_body, 300, 0); + ephysics_body_central_impulse_apply(fall_body, 300, 0, 0); shadow = elm_layout_add(camera_data->base.win); elm_layout_file_set( diff --git a/legacy/ephysics/src/bin/test_camera_track.c b/legacy/ephysics/src/bin/test_camera_track.c index 2e482f1422..631bf72fdc 100644 --- a/legacy/ephysics/src/bin/test_camera_track.c +++ b/legacy/ephysics/src/bin/test_camera_track.c @@ -131,7 +131,7 @@ _world_populate(Track_Data *track_data) ephysics_body_restitution_set(body, 0.95); ephysics_body_friction_set(body, 1); ephysics_body_damping_set(body, 0.1, 0); - ephysics_body_central_impulse_apply(body, 90, 0); + ephysics_body_central_impulse_apply(body, 90, 0, 0); track_data->body = body; track_data->base.bodies = eina_list_append(track_data->base.bodies, body); } diff --git a/legacy/ephysics/src/bin/test_collision_detection.c b/legacy/ephysics/src/bin/test_collision_detection.c index 6aa8d83beb..b5a4359640 100644 --- a/legacy/ephysics/src/bin/test_collision_detection.c +++ b/legacy/ephysics/src/bin/test_collision_detection.c @@ -95,7 +95,7 @@ _world_populate(Collision_Data *collision_data) update_object_cb, sh2); ephysics_body_restitution_set(sphere_body2, 1); ephysics_body_friction_set(sphere_body2, 0.4); - ephysics_body_central_impulse_apply(sphere_body2, 360, 0); + ephysics_body_central_impulse_apply(sphere_body2, 360, 0, 0); collision_data->sphere2 = sphere_body2; collision_data->base.bodies = eina_list_append( collision_data->base.bodies, sphere_body2); diff --git a/legacy/ephysics/src/bin/test_collision_filter.c b/legacy/ephysics/src/bin/test_collision_filter.c index 5df2ea5112..4759b6103f 100644 --- a/legacy/ephysics/src/bin/test_collision_filter.c +++ b/legacy/ephysics/src/bin/test_collision_filter.c @@ -35,7 +35,7 @@ _world_populate(Test_Data *test_data) ephysics_body_friction_set(fall_body, 0.1); ephysics_body_collision_group_add(fall_body, colors[row]); if (column + row == 1) - ephysics_body_central_impulse_apply(fall_body, 600 * row - 300, 0); + ephysics_body_central_impulse_apply(fall_body, 600 * row - 300, 0, 0); test_data->bodies = eina_list_append(test_data->bodies, fall_body); } } diff --git a/legacy/ephysics/src/bin/test_collision_speed.c b/legacy/ephysics/src/bin/test_collision_speed.c index 42f5c230df..6c4ce25a4b 100644 --- a/legacy/ephysics/src/bin/test_collision_speed.c +++ b/legacy/ephysics/src/bin/test_collision_speed.c @@ -23,7 +23,7 @@ _shoot(void *data, Evas_Object *obj, void *event_info __UNUSED__) impulse = elm_spinner_value_get(speed_data->sp); elm_object_disabled_set(obj, EINA_TRUE); - ephysics_body_central_impulse_apply(speed_data->ball, impulse * rate, 0); + ephysics_body_central_impulse_apply(speed_data->ball, impulse * rate, 0, 0); } static void diff --git a/legacy/ephysics/src/bin/test_delete.c b/legacy/ephysics/src/bin/test_delete.c index 84a85f1a0f..781910bb32 100644 --- a/legacy/ephysics/src/bin/test_delete.c +++ b/legacy/ephysics/src/bin/test_delete.c @@ -114,7 +114,7 @@ _world_populate(Collision_Data *collision_data) update_object_cb, sh2); ephysics_body_restitution_set(sphere_body2, 1); ephysics_body_friction_set(sphere_body2, 0.4); - ephysics_body_central_impulse_apply(sphere_body2, 360, 0); + ephysics_body_central_impulse_apply(sphere_body2, 360, 0, 0); collision_data->sphere2 = sphere_body2; collision_data->base.bodies = eina_list_append( collision_data->base.bodies, sphere_body2); diff --git a/legacy/ephysics/src/bin/test_growing_balls.c b/legacy/ephysics/src/bin/test_growing_balls.c index 8770f91717..cc246ad605 100644 --- a/legacy/ephysics/src/bin/test_growing_balls.c +++ b/legacy/ephysics/src/bin/test_growing_balls.c @@ -44,7 +44,7 @@ _add_sphere(Test_Data *test_data, const char *group, int size, int x, int y) sphere_body = ephysics_body_circle_add(test_data->world); ephysics_body_evas_object_set(sphere_body, sphere, EINA_TRUE); ephysics_body_restitution_set(sphere_body, 0.5); - ephysics_body_central_impulse_apply(sphere_body, 300, 0); + ephysics_body_central_impulse_apply(sphere_body, 300, 0, 0); test_data->bodies = eina_list_append(test_data->bodies, sphere_body); } diff --git a/legacy/ephysics/src/bin/test_jumping_balls.c b/legacy/ephysics/src/bin/test_jumping_balls.c index 3d6a54dad2..0bd15f7495 100644 --- a/legacy/ephysics/src/bin/test_jumping_balls.c +++ b/legacy/ephysics/src/bin/test_jumping_balls.c @@ -23,7 +23,7 @@ _jump(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) elm_object_disabled_set(bt, EINA_TRUE); bodies = ephysics_world_bodies_get(world); EINA_LIST_FOREACH(bodies, l, body) - ephysics_body_central_impulse_apply(body, 0, -300); + ephysics_body_central_impulse_apply(body, 0, -300, 0); eina_list_free(bodies); } diff --git a/legacy/ephysics/src/bin/test_rotating_forever.c b/legacy/ephysics/src/bin/test_rotating_forever.c index 40c2a0c77e..11cc77158d 100644 --- a/legacy/ephysics/src/bin/test_rotating_forever.c +++ b/legacy/ephysics/src/bin/test_rotating_forever.c @@ -99,7 +99,7 @@ _world_populate(Test_Data *test_data) EPHYSICS_CALLBACK_BODY_UPDATE, _update_object_cb, NULL); - ephysics_body_torque_impulse_apply(body, 1); + ephysics_body_torque_impulse_apply(body, 0, 0, 1); cube = elm_image_add(test_data->win); elm_image_file_set( @@ -116,7 +116,7 @@ _world_populate(Test_Data *test_data) EPHYSICS_CALLBACK_BODY_UPDATE, _update_object_cb, NULL); - ephysics_body_impulse_apply(body, 30, 0, 0, -10); + ephysics_body_impulse_apply(body, 30, 0, 0, 0, -10, 0); cube = elm_image_add(test_data->win); elm_image_file_set( diff --git a/legacy/ephysics/src/bin/test_slider.c b/legacy/ephysics/src/bin/test_slider.c index f2c49cef13..3dea4a0bf0 100644 --- a/legacy/ephysics/src/bin/test_slider.c +++ b/legacy/ephysics/src/bin/test_slider.c @@ -94,7 +94,7 @@ _world_populate(Test_Data *test_data) constraint = ephysics_constraint_slider_add(box_body3); ephysics_constraint_slider_linear_limit_set(constraint, WIDTH - 120, 0, 0, 0); - ephysics_body_central_impulse_apply(box_body3, -240, 0); + ephysics_body_central_impulse_apply(box_body3, -240, 0, 0); test_data->constraints = eina_list_append(test_data->constraints, constraint); @@ -124,7 +124,7 @@ _world_populate(Test_Data *test_data) constraint = ephysics_constraint_slider_add(box_body4); ephysics_constraint_slider_linear_limit_set(constraint, WIDTH / 3, 0, 0, 0); - ephysics_body_central_impulse_apply(box_body4, -600, 0); + ephysics_body_central_impulse_apply(box_body4, -600, 0, 0); test_data->constraints = eina_list_append(test_data->constraints, constraint); diff --git a/legacy/ephysics/src/bin/test_velocity.c b/legacy/ephysics/src/bin/test_velocity.c index 1862bb7412..e2149d7834 100644 --- a/legacy/ephysics/src/bin/test_velocity.c +++ b/legacy/ephysics/src/bin/test_velocity.c @@ -25,13 +25,13 @@ _on_keydown(void *data, Evas_Object *obj __UNUSED__, Evas_Object *src __UNUSED__ return EINA_FALSE; if (strcmp(ev->keyname, "Up") == 0) - ephysics_body_central_impulse_apply(body, 0, -300); + ephysics_body_central_impulse_apply(body, 0, -300, 0); else if (strcmp(ev->keyname, "Down") == 0) - ephysics_body_central_impulse_apply(body, 0, 300); + ephysics_body_central_impulse_apply(body, 0, 300, 0); else if (strcmp(ev->keyname, "Right") == 0) - ephysics_body_central_impulse_apply(body, 300, 0); + ephysics_body_central_impulse_apply(body, 300, 0, 0); else if (strcmp(ev->keyname, "Left") == 0) - ephysics_body_central_impulse_apply(body, -300, 0); + ephysics_body_central_impulse_apply(body, -300, 0, 0); return EINA_TRUE; } diff --git a/legacy/ephysics/src/lib/EPhysics.h b/legacy/ephysics/src/lib/EPhysics.h index 99bd96e126..63526c28e9 100644 --- a/legacy/ephysics/src/lib/EPhysics.h +++ b/legacy/ephysics/src/lib/EPhysics.h @@ -2626,7 +2626,7 @@ EAPI double ephysics_body_friction_get(const EPhysics_Body *body); * After a impulse of 30 kg * p / s in the same direction is applied, * the velocity will be * 45 p/s. * - * (0, 30) + (0, 300) / 2 = (0, 30) + (0, 15) = (0, 45) + * (0, 30, 0) + (0, 300, 0) / 2 = (0, 30, 0) + (0, 15, 0) = (0, 45, 0) * * When a impulse is applied over a body, it will has its velocity changed. * This impulse will be applied on body's center, so it won't implies in @@ -2638,13 +2638,14 @@ EAPI double ephysics_body_friction_get(const EPhysics_Body *body); * @param body The physics body that will receive the impulse. * @param x The axis x component of impulse. * @param y The axis y component of impulse. + * @param z The axis z component of impulse. * * @see ephysics_body_torque_impulse_apply(). * @see ephysics_body_impulse_apply(). * * @ingroup EPhysics_Body */ -EAPI void ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, double y); +EAPI void ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, double y, double z); /** * @brief @@ -2657,6 +2658,10 @@ EAPI void ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, dou * torque impulse and body's inertia. * * @param body The physics body that will receive the impulse. + * @param pitch Impulse to rotate body around Z axis (rotate on y - z plane). + * Negative values will impulse body on counter clockwise rotation. + * @param yaw Impulse to rotate body around Y axis (rotate on x - z plane). + * Negative values will impulse body on counter clockwise rotation. * @param roll Impulse to rotate body around Z axis (rotate on x - y plane). * Negative values will impulse body on counter clockwise rotation. * @@ -2665,7 +2670,7 @@ EAPI void ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, dou * * @ingroup EPhysics_Body */ -EAPI void ephysics_body_torque_impulse_apply(EPhysics_Body *body, double roll); +EAPI void ephysics_body_torque_impulse_apply(EPhysics_Body *body, double pitch, double yaw, double roll); /** * @brief @@ -2688,8 +2693,10 @@ EAPI void ephysics_body_torque_impulse_apply(EPhysics_Body *body, double roll); * @param body The physics body that will receive the impulse. * @param x The axis x component of impulse. * @param y The axis y component of impulse. + * @param z The axis z component of impulse. * @param pos_x The axis x component of the relative position to apply impulse. * @param pos_y The axis y component of the relative position to apply impulse. + * @param pos_z The axis z component of the relative position to apply impulse. * * @note Impulse is measured in kg * p / s and position in pixels * (Evas coordinates). @@ -2699,7 +2706,7 @@ EAPI void ephysics_body_torque_impulse_apply(EPhysics_Body *body, double roll); * * @ingroup EPhysics_Body */ -EAPI void ephysics_body_impulse_apply(EPhysics_Body *body, double x, double y, Evas_Coord pos_x, Evas_Coord pos_y); +EAPI void ephysics_body_impulse_apply(EPhysics_Body *body, double x, double y, double z, Evas_Coord pos_x, Evas_Coord pos_y, Evas_Coord pos_z); /** * @brief diff --git a/legacy/ephysics/src/lib/ephysics_body.cpp b/legacy/ephysics/src/lib/ephysics_body.cpp index f3cdd78c3f..a88c073100 100644 --- a/legacy/ephysics/src/lib/ephysics_body.cpp +++ b/legacy/ephysics/src/lib/ephysics_body.cpp @@ -2418,7 +2418,7 @@ ephysics_body_world_get(const EPhysics_Body *body) } EAPI void -ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, double y) +ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, double y, double z) { double rate; @@ -2432,12 +2432,13 @@ ephysics_body_central_impulse_apply(EPhysics_Body *body, double x, double y) ephysics_world_lock_take(body->world); ephysics_body_activate(body, EINA_TRUE); - body->rigid_body->applyCentralImpulse(btVector3(x / rate, - y / rate, 0)); + body->rigid_body->applyCentralImpulse(btVector3(x / rate, - y / rate, + z / rate)); ephysics_world_lock_release(body->world); } EAPI void -ephysics_body_impulse_apply(EPhysics_Body *body, double x, double y, Evas_Coord pos_x, Evas_Coord pos_y) +ephysics_body_impulse_apply(EPhysics_Body *body, double x, double y, double z, Evas_Coord pos_x, Evas_Coord pos_y, Evas_Coord pos_z) { double rate; @@ -2451,9 +2452,10 @@ ephysics_body_impulse_apply(EPhysics_Body *body, double x, double y, Evas_Coord ephysics_world_lock_take(body->world); ephysics_body_activate(body, EINA_TRUE); - body->rigid_body->applyImpulse(btVector3(x / rate, - y / rate, 0), + body->rigid_body->applyImpulse(btVector3(x / rate, - y / rate, z / rate), btVector3((double) pos_x / rate, - (double) pos_y / rate, 0)); + (double) pos_y / rate, + (double) pos_z / rate)); ephysics_world_lock_release(body->world); } @@ -2487,7 +2489,7 @@ ephysics_body_linear_movement_enable_get(const EPhysics_Body *body, Eina_Bool *e } EAPI void -ephysics_body_torque_impulse_apply(EPhysics_Body *body, double roll) +ephysics_body_torque_impulse_apply(EPhysics_Body *body, double pitch, double yaw, double roll) { if (!body) { @@ -2497,7 +2499,7 @@ ephysics_body_torque_impulse_apply(EPhysics_Body *body, double roll) ephysics_world_lock_take(body->world); ephysics_body_activate(body, EINA_TRUE); - body->rigid_body->applyTorqueImpulse(btVector3(0, 0, -roll)); + body->rigid_body->applyTorqueImpulse(btVector3(-pitch, -yaw, -roll)); ephysics_world_lock_release(body->world); }