forked from enlightenment/efl
ephysics: sandbox apply actions on restart
Patch by: Ricardo de Almeida Gonzaga <ricardo@profusion.mobi> SVN revision: 78195
This commit is contained in:
parent
d7757986c2
commit
e7b72f567a
|
@ -32,9 +32,21 @@ struct _World_Data {
|
||||||
struct _Body_Data {
|
struct _Body_Data {
|
||||||
World_Data *wd;
|
World_Data *wd;
|
||||||
EPhysics_Body *body;
|
EPhysics_Body *body;
|
||||||
Evas_Object *sl_hardness;
|
struct {
|
||||||
|
struct {
|
||||||
|
Evas_Object *x, *y, *relx, *rely;
|
||||||
|
}impulse;
|
||||||
|
struct {
|
||||||
|
Evas_Object *x, *y, *relx, *rely, *torque;
|
||||||
|
}force;
|
||||||
|
struct {
|
||||||
|
Evas_Object *x, *y, *angular;
|
||||||
|
}velocity;
|
||||||
|
Evas_Object *hardness;
|
||||||
|
}controls;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*** Sandbox Callbacks ***/
|
/*** Sandbox Callbacks ***/
|
||||||
static void
|
static void
|
||||||
_body_del(void *data __UNUSED__, EPhysics_Body *body __UNUSED__,
|
_body_del(void *data __UNUSED__, EPhysics_Body *body __UNUSED__,
|
||||||
|
@ -128,13 +140,13 @@ _type_set_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
body = ephysics_body_soft_circle_add(world);
|
body = ephysics_body_soft_circle_add(world);
|
||||||
ephysics_body_soft_body_hardness_set(
|
ephysics_body_soft_body_hardness_set(
|
||||||
body, elm_slider_value_get(bd->sl_hardness));
|
body, elm_slider_value_get(bd->controls.hardness));
|
||||||
elm_object_disabled_set(bd->sl_hardness, EINA_FALSE);
|
elm_object_disabled_set(bd->controls.hardness, EINA_FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
body = ephysics_body_circle_add(world);
|
body = ephysics_body_circle_add(world);
|
||||||
elm_object_disabled_set(bd->sl_hardness, EINA_TRUE);
|
elm_object_disabled_set(bd->controls.hardness, EINA_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ephysics_body_evas_object_set(body, body_image, EINA_TRUE);
|
ephysics_body_evas_object_set(body, body_image, EINA_TRUE);
|
||||||
|
@ -146,6 +158,14 @@ _type_set_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
|
||||||
ephysics_body_sleeping_threshold_set(body, lin_sleeping, ang_sleeping);
|
ephysics_body_sleeping_threshold_set(body, lin_sleeping, ang_sleeping);
|
||||||
ephysics_body_material_set(body, material);
|
ephysics_body_material_set(body, material);
|
||||||
|
|
||||||
|
ephysics_body_force_apply(body,
|
||||||
|
elm_slider_value_get(bd->controls.force.x),
|
||||||
|
elm_slider_value_get(bd->controls.force.y), 0,
|
||||||
|
elm_slider_value_get(bd->controls.force.relx),
|
||||||
|
elm_slider_value_get(bd->controls.force.rely), 0);
|
||||||
|
ephysics_body_torque_apply(body, 0, 0,
|
||||||
|
elm_slider_value_get(bd->controls.force.torque));
|
||||||
|
|
||||||
bd->body = body;
|
bd->body = body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,10 +458,21 @@ static void
|
||||||
_simulate_body(Body_Data *bd, Evas_Coord x, Evas_Coord y)
|
_simulate_body(Body_Data *bd, Evas_Coord x, Evas_Coord y)
|
||||||
{
|
{
|
||||||
ephysics_body_stop(bd->body);
|
ephysics_body_stop(bd->body);
|
||||||
ephysics_body_forces_clear(bd->body);
|
|
||||||
ephysics_body_geometry_set(bd->body, x, y, -15, 70, 70, 30);
|
ephysics_body_geometry_set(bd->body, x, y, -15, 70, 70, 30);
|
||||||
|
ephysics_body_impulse_apply(bd->body,
|
||||||
/*FIXME TODO apply impulses, velocities, forces ... */
|
elm_slider_value_get(bd->controls.impulse.x),
|
||||||
|
elm_slider_value_get(bd->controls.impulse.y), 0,
|
||||||
|
elm_slider_value_get(bd->controls.impulse.relx),
|
||||||
|
elm_slider_value_get(bd->controls.impulse.rely),
|
||||||
|
0);
|
||||||
|
ephysics_body_linear_velocity_set(bd->body,
|
||||||
|
elm_slider_value_get(
|
||||||
|
bd->controls.velocity.x),
|
||||||
|
elm_slider_value_get(
|
||||||
|
bd->controls.velocity.y), 0);
|
||||||
|
ephysics_body_angular_velocity_set(bd->body, 0, 0,
|
||||||
|
elm_slider_value_get(
|
||||||
|
bd->controls.velocity.angular));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -691,13 +722,17 @@ _menu_body_page_add(World_Data *wd, Body_Data *bd, const char *pg_label)
|
||||||
_label_add(bx, "Impulse X");
|
_label_add(bx, "Impulse X");
|
||||||
aux_widget = _slider_add(bx, "X (kg * p/s)", "%1.3f",
|
aux_widget = _slider_add(bx, "X (kg * p/s)", "%1.3f",
|
||||||
-9999, 9999, 0);
|
-9999, 9999, 0);
|
||||||
|
bd->controls.impulse.x = aux_widget;
|
||||||
widget = _slider_add(bx, "Rel Position X", "%1.2f",
|
widget = _slider_add(bx, "Rel Position X", "%1.2f",
|
||||||
-360, 360, 0);
|
-360, 360, 0);
|
||||||
|
bd->controls.impulse.relx = widget;
|
||||||
evas_object_data_set(aux_widget, "relx", widget);
|
evas_object_data_set(aux_widget, "relx", widget);
|
||||||
_label_add(bx, "Impulse Y");
|
_label_add(bx, "Impulse Y");
|
||||||
widget = _slider_add(bx, "Y (kg * p/s)", "%1.3f", -9999, 9999, 0);
|
widget = _slider_add(bx, "Y (kg * p/s)", "%1.3f", -9999, 9999, 0);
|
||||||
|
bd->controls.impulse.y = widget;
|
||||||
evas_object_data_set(aux_widget, "y", widget);
|
evas_object_data_set(aux_widget, "y", widget);
|
||||||
widget = _slider_add(bx, "Rel Position Y", "%1.2f", -360, 360, 0);
|
widget = _slider_add(bx, "Rel Position Y", "%1.2f", -360, 360, 0);
|
||||||
|
bd->controls.impulse.rely = widget;
|
||||||
evas_object_data_set(aux_widget, "rely", widget);
|
evas_object_data_set(aux_widget, "rely", widget);
|
||||||
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
||||||
_impulse_x_x_set_cb, bd);
|
_impulse_x_x_set_cb, bd);
|
||||||
|
@ -715,12 +750,16 @@ _menu_body_page_add(World_Data *wd, Body_Data *bd, const char *pg_label)
|
||||||
|
|
||||||
_label_add(bx, "Force X");
|
_label_add(bx, "Force X");
|
||||||
aux_widget = _slider_add(bx, "X (kg * p/s/s)", "%1.3f", -1999, 1999, 0);
|
aux_widget = _slider_add(bx, "X (kg * p/s/s)", "%1.3f", -1999, 1999, 0);
|
||||||
|
bd->controls.force.x = aux_widget;
|
||||||
widget = _slider_add(bx, "Rel Position X", "%1.2f", -360, 360, 0);
|
widget = _slider_add(bx, "Rel Position X", "%1.2f", -360, 360, 0);
|
||||||
|
bd->controls.force.relx = widget;
|
||||||
evas_object_data_set(aux_widget, "relx", widget);
|
evas_object_data_set(aux_widget, "relx", widget);
|
||||||
_label_add(bx, "Force Y");
|
_label_add(bx, "Force Y");
|
||||||
widget = _slider_add(bx, "Y (kg * p/s/s)", "%1.3f", -1999, 1999, 0);
|
widget = _slider_add(bx, "Y (kg * p/s/s)", "%1.3f", -1999, 1999, 0);
|
||||||
|
bd->controls.force.y = widget;
|
||||||
evas_object_data_set(aux_widget, "y", widget);
|
evas_object_data_set(aux_widget, "y", widget);
|
||||||
widget = _slider_add(bx, "Rel Position Y", "%1.2f", -360, 360, 0);
|
widget = _slider_add(bx, "Rel Position Y", "%1.2f", -360, 360, 0);
|
||||||
|
bd->controls.force.rely = widget;
|
||||||
evas_object_data_set(aux_widget, "rely", widget);
|
evas_object_data_set(aux_widget, "rely", widget);
|
||||||
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
||||||
_force_x_x_set_cb, bd);
|
_force_x_x_set_cb, bd);
|
||||||
|
@ -736,11 +775,14 @@ _menu_body_page_add(World_Data *wd, Body_Data *bd, const char *pg_label)
|
||||||
evas_object_smart_callback_add(widget, "delay,changed",
|
evas_object_smart_callback_add(widget, "delay,changed",
|
||||||
_force_y_rel_set_cb, bd);
|
_force_y_rel_set_cb, bd);
|
||||||
widget = _slider_add(bx, "Torque", "%1.3f", -100, 100, 0);
|
widget = _slider_add(bx, "Torque", "%1.3f", -100, 100, 0);
|
||||||
|
bd->controls.force.torque = widget;
|
||||||
evas_object_smart_callback_add(widget, "delay,changed", _torque_set_cb, bd);
|
evas_object_smart_callback_add(widget, "delay,changed", _torque_set_cb, bd);
|
||||||
|
|
||||||
_label_add(bx, "Linear Velocity");
|
_label_add(bx, "Linear Velocity");
|
||||||
aux_widget = _slider_add(bx, "X (p/s)", "%1.2f", -1499, 1499, 0);
|
aux_widget = _slider_add(bx, "X (p/s)", "%1.2f", -1499, 1499, 0);
|
||||||
|
bd->controls.velocity.x = aux_widget;
|
||||||
widget = _slider_add(bx, "Y (p/s)", "%1.2f", -1499, 1499, 0);
|
widget = _slider_add(bx, "Y (p/s)", "%1.2f", -1499, 1499, 0);
|
||||||
|
bd->controls.velocity.y = widget;
|
||||||
evas_object_data_set(aux_widget, "y", widget);
|
evas_object_data_set(aux_widget, "y", widget);
|
||||||
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
evas_object_smart_callback_add(aux_widget, "delay,changed",
|
||||||
_linear_velocity_x_set_cb, bd);
|
_linear_velocity_x_set_cb, bd);
|
||||||
|
@ -749,15 +791,16 @@ _menu_body_page_add(World_Data *wd, Body_Data *bd, const char *pg_label)
|
||||||
_linear_velocity_y_set_cb, bd);
|
_linear_velocity_y_set_cb, bd);
|
||||||
|
|
||||||
widget = _slider_add(bx, "Angular Velocity (º/s)", "%1.2f", -360, 360, 0);
|
widget = _slider_add(bx, "Angular Velocity (º/s)", "%1.2f", -360, 360, 0);
|
||||||
|
bd->controls.velocity.angular = widget;
|
||||||
evas_object_smart_callback_add(widget, "delay,changed",
|
evas_object_smart_callback_add(widget, "delay,changed",
|
||||||
_angular_velocity_set_cb, bd);
|
_angular_velocity_set_cb, bd);
|
||||||
|
|
||||||
bx = _category_add(bxbody, "Soft Body", EINA_TRUE);
|
bx = _category_add(bxbody, "Soft Body", EINA_TRUE);
|
||||||
widget = _slider_add(bx, "Hardness (%)", "%1.2f%", 0, 100, 100);
|
widget = _slider_add(bx, "Hardness (%)", "%1.2f%", 0, 100, 100);
|
||||||
|
bd->controls.hardness = widget;
|
||||||
elm_object_disabled_set(widget, EINA_TRUE);
|
elm_object_disabled_set(widget, EINA_TRUE);
|
||||||
evas_object_smart_callback_add(widget, "delay,changed", _hardness_set_cb,
|
evas_object_smart_callback_add(widget, "delay,changed", _hardness_set_cb,
|
||||||
bd);
|
bd);
|
||||||
bd->sl_hardness = widget;
|
|
||||||
|
|
||||||
it = elm_naviframe_item_insert_before(wd->nf,
|
it = elm_naviframe_item_insert_before(wd->nf,
|
||||||
evas_object_data_get(wd->nf, "world"),
|
evas_object_data_get(wd->nf, "world"),
|
||||||
|
|
Loading…
Reference in New Issue