X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fapp.cc;h=0ac331bec6ef2b68cdf3c24fc0471b91bee195d7;hp=8aaaee301ddcb35dae1625055a33b62e6f4cda7b;hb=d97ea0009ec59bdbf0c438b2d1e015936b20fd85;hpb=fc00873a180b1b7272d94a32dcc40d0d44ed2b72 diff --git a/src/app.cc b/src/app.cc index 8aaaee3..0ac331b 100644 --- a/src/app.cc +++ b/src/app.cc @@ -21,6 +21,7 @@ #include "blob_exhibit.h" #include "dbg_gui.h" #include "geomdraw.h" +#include "ui_exhibit.h" #define NEAR_CLIP 5.0 #define FAR_CLIP 10000.0 @@ -71,7 +72,6 @@ static unsigned int sdr_post_gamma; static long prev_msec; static ExhibitManager *exman; -static BlobExhibit *blobs; static bool show_blobs; ExSelection exsel_active, exsel_hover; @@ -147,8 +147,6 @@ bool app_init(int argc, char **argv) float ambient[] = {0.0, 0.0, 0.0, 0.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); - glClearColor(1, 1, 1, 1); - init_audio(); if(!init_vrhands()) { @@ -171,15 +169,11 @@ bool app_init(int argc, char **argv) //return false; } */ - - blobs = new BlobExhibit; - blobs->node = new SceneNode; - blobs->init(); - blobs->node->set_position(Vec3(-680, 160, -100)); - blobs->node->set_scaling(Vec3(28, 28, 28)); - blobs->node->update(0); - - exman->add(blobs); + if(!exui_init()) { + error_log("failed to initialize exhibit ui system\n"); + return false; + } + exui_setnode(&exslot_left.node); if(!(sdr_ltmap_notex = create_program_load("sdr/lightmap.v.glsl", "sdr/lightmap-notex.p.glsl"))) { return false; @@ -227,6 +221,8 @@ void app_cleanup() delete rend; + exui_shutdown(); + /* this must be destroyed before the scene graph to detach exhibit nodes * before the scene tries to delete them recursively */ @@ -263,6 +259,7 @@ static void update(float dt) mscn->update(dt); exman->update(dt); + exui_update(dt); float speed = walk_speed * dt; Vec3 dir; @@ -361,13 +358,19 @@ static void update(float dt) exsel_hover = exman->select(ray); } - if(!exslot_left.empty()) exslot_left.node.update(dt); - if(!exslot_right.empty()) exslot_right.node.update(dt); - // update hand-tracking if(have_handtracking) { update_vrhands(&avatar); + } else { + // TODO do this properly + // set the position of the left hand at a suitable position for the exhibit UI + dir = rotate(Vec3(-0.46, -0.1, -1), Vec3(0, 1, 0), deg_to_rad(-avatar.body_rot)); + exslot_left.node.set_position(avatar.pos + dir * 30); // magic: distance in front } + + if(!exslot_right.empty()) exslot_right.node.update(dt); + // always update the left slot, because it's the anchor point of the exhibit ui + exslot_left.node.update(dt); } void app_display() @@ -382,6 +385,8 @@ void app_display() ImGui::ShowTestWindow(); } + glClearColor(1, 1, 1, 1); + if(opt.vr) { // VR mode goatvr_draw_start(); @@ -508,6 +513,8 @@ static void draw_scene() glPopAttrib(); } + exui_draw(); + print_text(Vec2(9 * win_width / 10, 20), Vec3(1, 1, 0), "fps: %.1f", framerate); draw_ui(); } @@ -610,6 +617,22 @@ void app_keyboard(int key, bool pressed) case 'x': exman->load(mscn, "data/exhibits"); break; + + case KEY_UP: + exui_scroll(-1); + break; + + case KEY_DOWN: + exui_scroll(1); + break; + + case KEY_LEFT: + exui_change_tab(-1); + break; + + case KEY_RIGHT: + exui_change_tab(1); + break; } }