From 81283b584a7f7c38b697c438858a8b70294dd276 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sat, 10 May 2014 14:14:08 +1000 Subject: Add physics to the windows. Sure, it's just an annoying gimmick right now, but there's plans for this to be actually useful. --- src/extantz/ephysics_demo.c | 33 ++++++++++++++++++--------------- src/extantz/extantz.c | 23 +++++++++-------------- src/extantz/extantz.h | 3 ++- src/extantz/files.c | 2 +- src/extantz/woMan.c | 2 +- 5 files changed, 31 insertions(+), 32 deletions(-) (limited to 'src/extantz') diff --git a/src/extantz/ephysics_demo.c b/src/extantz/ephysics_demo.c index 6697cc9..4655dbb 100644 --- a/src/extantz/ephysics_demo.c +++ b/src/extantz/ephysics_demo.c @@ -2,8 +2,6 @@ #include -#if USE_PHYSICS - #define EPHYSICS_TEST_THEME "extantz" EPhysics_World *ephysicsAdd(globals *ourGlobals) @@ -34,37 +32,42 @@ EPhysics_World *ephysicsAdd(globals *ourGlobals) ephysics_body_restitution_set(boundary, 1); ephysics_body_friction_set(boundary, 0); - box1 = elm_image_add(ourGlobals->win); sprintf(buf, "%s/%s.edj", elm_app_data_dir_get(), EPHYSICS_TEST_THEME); - elm_image_file_set(box1, strdup(buf), "blue-cube"); - evas_object_move(box1, ourGlobals->win_w / 2 - 80, ourGlobals->win_h - 200); - evas_object_resize(box1, 70, 70); - evas_object_show(box1); + box1 = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win, + elm_obj_image_file_set(strdup(buf), "blue-cube"), + evas_obj_size_set(70, 70), + evas_obj_position_set(ourGlobals->win_w / 2 - 80, ourGlobals->win_h - 200), + evas_obj_visibility_set(EINA_TRUE) + ); box_body1 = ephysics_body_box_add(world); ephysics_body_evas_object_set(box_body1, box1, EINA_TRUE); ephysics_body_restitution_set(box_body1, 0.7); ephysics_body_friction_set(box_body1, 0); - ephysics_body_linear_velocity_set(box_body1, -150, 200, 0); + ephysics_body_linear_velocity_set(box_body1, -1500, 2000, 0); ephysics_body_angular_velocity_set(box_body1, 0, 0, 36); ephysics_body_sleeping_threshold_set(box_body1, 0.1, 0.1); + eo_unref(box1); + - box2 = elm_image_add(ourGlobals->win); - elm_image_file_set(box2, strdup(buf), "purple-cube"); - evas_object_move(box2, ourGlobals->win_w / 2 + 10, ourGlobals->win_h - 200); - evas_object_resize(box2, 70, 70); - evas_object_show(box2); + sprintf(buf, "%s/%s.edj", elm_app_data_dir_get(), EPHYSICS_TEST_THEME); + box2 = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win, + elm_obj_image_file_set(strdup(buf), "purple-cube"), + evas_obj_size_set(70, 70), + evas_obj_position_set(ourGlobals->win_w / 2 + 10, ourGlobals->win_h - 200), + evas_obj_visibility_set(EINA_TRUE) + ); box_body2 = ephysics_body_box_add(world); ephysics_body_evas_object_set(box_body2, box2, EINA_TRUE); ephysics_body_restitution_set(box_body2, 0.7); ephysics_body_friction_set(box_body2, 0); - ephysics_body_linear_velocity_set(box_body2, 80, -60, 0); + ephysics_body_linear_velocity_set(box_body2, 800, -600, 0); ephysics_body_angular_velocity_set(box_body2, 0, 0, 360); ephysics_body_sleeping_threshold_set(box_body2, 0.1, 0.1); + eo_unref(box2); ephysics_world_gravity_set(world, 0, 0, 0); return world; } -#endif diff --git a/src/extantz/extantz.c b/src/extantz/extantz.c index 5fb88f4..03979ab 100644 --- a/src/extantz/extantz.c +++ b/src/extantz/extantz.c @@ -89,6 +89,8 @@ static void _on_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA evas_obj_size_hint_min_get(NULL, &h), evas_obj_size_set(ourGlobals->win_w, h) ); + if (ourGlobals->world) + ephysics_world_render_geometry_set(ourGlobals->world, 0, 0, -50, ourGlobals->win_w, ourGlobals->win_h, 100); _resize(gld); } @@ -403,7 +405,6 @@ void overlay_add(globals *ourGlobals) EAPI_MAIN int elm_main(int argc, char **argv) { - EPhysics_World *world; GLData *gld = NULL; char buf[PATH_MAX]; // Eina_Bool gotWebKit = elm_need_web(); // Initialise ewebkit if it exists, or return EINA_FALSE if it don't. @@ -435,17 +436,15 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_config_finger_size_set(0); elm_config_scale_set(1.0); -#if USE_PHYSICS if (!ephysics_init()) return 1; -#endif gld = &ourGlobals.gld; gldata_init(gld); // Set the engine to opengl_x11, then open our window. elm_config_preferred_engine_set("opengl_x11"); - ourGlobals.mainWindow = winFangAdd(NULL, 0, 0, 50, 20, "extantz virtual world viewer", "extantz"); + ourGlobals.mainWindow = winFangAdd(NULL, 0, 0, 50, 20, "extantz virtual world viewer", "extantz", NULL); // Set preferred engine back to default from config elm_config_preferred_engine_set(NULL); @@ -514,17 +513,15 @@ EAPI_MAIN int elm_main(int argc, char **argv) // Also, GL focus gets lost when any menu is used. sigh makeMainMenu(&ourGlobals); + ourGlobals.world = ephysicsAdd(&ourGlobals); + // overlay_add(&ourGlobals); - GuiLuaLoad("test", ourGlobals.mainWindow); + GuiLuaLoad("test", ourGlobals.mainWindow, ourGlobals.world); woMan_add(&ourGlobals); - GuiLuaLoad("purkle", ourGlobals.mainWindow); + GuiLuaLoad("purkle", ourGlobals.mainWindow, ourGlobals.world); ourGlobals.files = filesAdd(&ourGlobals, (char *) elm_app_data_dir_get(), EINA_TRUE, EINA_FALSE); -#if USE_PHYSICS - world = ephysicsAdd(&ourGlobals); -#endif - - // Bump the top toolbar above the windows. + // Bump the top toolbar above the windows. evas_object_raise(ourGlobals.tb); evas_object_show(ourGlobals.mainWindow->box); @@ -532,10 +529,8 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_run(); -#if USE_PHYSICS - ephysics_world_del(world); + ephysics_world_del(ourGlobals.world); ephysics_shutdown(); -#endif if (ourGlobals.win) { diff --git a/src/extantz/extantz.h b/src/extantz/extantz.h index 684b53d..5b172c2 100644 --- a/src/extantz/extantz.h +++ b/src/extantz/extantz.h @@ -1,7 +1,6 @@ #ifndef _EXTANTZ_H_ #define _EXTANTZ_H_ -#define USE_PHYSICS 1 #define USE_IRR 0 #define USE_DEMO 1 #define DO_GEARS 0 @@ -225,6 +224,8 @@ typedef struct _globals GLData gld; Scene_Data *scene; + EPhysics_World *world; + winFang *files; } globals; diff --git a/src/extantz/files.c b/src/extantz/files.c index 7dd08fa..3aeb7f9 100644 --- a/src/extantz/files.c +++ b/src/extantz/files.c @@ -146,7 +146,7 @@ winFang *filesAdd(globals *ourGlobals, char *path, Eina_Bool multi, Eina_Bool sa Widget *wid; Evas_Object *vbox, *fs, *bt, *rd = NULL, *rdg = NULL, *hoversel; - me = winFangAdd(ourGlobals->mainWindow, ourGlobals->win_w - 380, ourGlobals->win_w - 530, 350, 500, "file selector", "files"); + me = winFangAdd(ourGlobals->mainWindow, ourGlobals->win_w - 380, ourGlobals->win_w - 530, 350, 500, "file selector", "files", ourGlobals->world); wid = widgetAdd(me, ELM_OBJ_FILESELECTOR_CLASS, me->box, NULL); fs = wid->obj; diff --git a/src/extantz/woMan.c b/src/extantz/woMan.c index cd1d5c8..2911686 100644 --- a/src/extantz/woMan.c +++ b/src/extantz/woMan.c @@ -159,7 +159,7 @@ winFang *woMan_add(globals *ourGlobals) char buf[PATH_MAX]; int i; - me = winFangAdd(ourGlobals->mainWindow, 30, 150, ourGlobals->win_w / 3, ourGlobals->win_h / 3, "virtual world manager", "woMan"); + me = winFangAdd(ourGlobals->mainWindow, 30, 150, ourGlobals->win_w / 3, ourGlobals->win_h / 3, "virtual world manager", "woMan", ourGlobals->world); // A tab thingy. tb = elm_toolbar_add(me->win); -- cgit v1.1