X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=blobdiff_plain;f=src%2Fapp.cc;h=7fc5c13a581151b9acc7f0cc764724378e133f08;hp=d4b516ed5804679e2061c23a7b3309f515a15aa3;hb=92e1b315a32da123b2f8d7bb633375033a10c66d;hpb=3c48aa0de66e0b89b674d353eb6c84b2c9276013 diff --git a/src/app.cc b/src/app.cc index d4b516e..7fc5c13 100644 --- a/src/app.cc +++ b/src/app.cc @@ -20,6 +20,8 @@ #include "exman.h" #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 @@ -70,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; @@ -170,15 +171,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; @@ -226,6 +223,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 */ @@ -262,6 +261,7 @@ static void update(float dt) mscn->update(dt); exman->update(dt); + exui_update(dt); float speed = walk_speed * dt; Vec3 dir; @@ -360,13 +360,18 @@ 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 { + // set the position of the left hand at a suitable position for the exhibit UI + Vec3 dir = transpose(mouse_view_matrix.upper3x3()) * Vec3(0, 0, -1); + 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() @@ -483,6 +488,11 @@ static void draw_scene() } */ + if(debug_gui && dbg_sel_node) { + AABox bvol = dbg_sel_node->get_bounds(); + draw_geom_object(&bvol); + } + if(show_walk_mesh && mscn->walk_mesh) { glPushAttrib(GL_ENABLE_BIT); glEnable(GL_BLEND); @@ -502,6 +512,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(); }