From: John Tsiombikas Date: Mon, 14 Nov 2016 15:08:53 +0000 (+0200) Subject: fullscreen, mouse grab, stuff X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=commitdiff_plain;h=458f4c5972fc6b0ba43ea42c3b8d5c211d8f3f3d fullscreen, mouse grab, stuff --- diff --git a/src/app.cc b/src/app.cc index 96b3f86..065e581 100644 --- a/src/app.cc +++ b/src/app.cc @@ -24,7 +24,7 @@ static Vec3 cam_pos; static float floor_y; // last floor height static float user_eye_height = 165; -static float walk_speed = 400.0f; +static float walk_speed = 300.0f; static bool show_walk_mesh, noclip = false; static int prev_mx, prev_my; @@ -250,6 +250,15 @@ void app_keyboard(int key, bool pressed) app_quit(); break; + case 'f': + app_toggle_fullscreen(); + break; + + case '`': + app_toggle_grab_mouse(); + show_message("mouse %s", app_is_mouse_grabbed() ? "grabbed" : "released"); + break; + case 'w': if(mod & MOD_CTRL) { show_walk_mesh = !show_walk_mesh; @@ -288,6 +297,21 @@ void app_mouse_button(int bn, bool pressed, int x, int y) bnstate[bn] = pressed; } +static inline void mouse_look(int dx, int dy) +{ + cam_theta += dx * 0.5; + cam_phi += dy * 0.5; + + if(cam_phi < -90) cam_phi = -90; + if(cam_phi > 90) cam_phi = 90; +} + +static void mouse_zoom(int dx, int dy) +{ + cam_dist += dy * 0.1; + if(cam_dist < 0.0) cam_dist = 0.0; +} + void app_mouse_motion(int x, int y) { int dx = x - prev_mx; @@ -297,20 +321,19 @@ void app_mouse_motion(int x, int y) if(!dx && !dy) return; - app_mouse_delta(dx, dy); + if(bnstate[0]) { + mouse_look(dx, dy); + } + if(bnstate[2]) { + mouse_zoom(dx, dy); + } } void app_mouse_delta(int dx, int dy) { - if(bnstate[0]) { - cam_theta += dx * 0.5; - cam_phi += dy * 0.5; - - if(cam_phi < -90) cam_phi = -90; - if(cam_phi > 90) cam_phi = 90; - } if(bnstate[2]) { - cam_dist += dy * 0.1; - if(cam_dist < 0.0) cam_dist = 0.0; + mouse_zoom(dx, dy); + } else { + mouse_look(dx, dy); } } diff --git a/src/app.h b/src/app.h index 7efb44f..2867309 100644 --- a/src/app.h +++ b/src/app.h @@ -28,4 +28,12 @@ void app_quit(); void app_swap_buffers(); unsigned int app_get_modifiers(); +void app_resize(int x, int y); +void app_fullscreen(bool fs); +void app_toggle_fullscreen(); +bool app_is_fullscreen(); +void app_grab_mouse(bool grab); +void app_toggle_grab_mouse(); +bool app_is_mouse_grabbed(); + #endif // APP_H_ diff --git a/src/main.cc b/src/main.cc index 45b5632..f21c406 100644 --- a/src/main.cc +++ b/src/main.cc @@ -90,6 +90,47 @@ unsigned int app_get_modifiers() return modkeys; } +void app_resize(int x, int y) +{ + SDL_SetWindowSize(win, x, y); +} + +void app_fullscreen(bool fs) +{ + SDL_SetWindowFullscreen(win, fs ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); + fullscreen = fs; +} + +void app_toggle_fullscreen() +{ + app_fullscreen(!fullscreen); +} + +bool app_is_fullscreen() +{ + return fullscreen; +} + +void app_grab_mouse(bool grab) +{ + /*SDL_SetWindowGrab(win, grab ? SDL_TRUE : SDL_FALSE); + SDL_ShowCursor(grab ? 1 : 0); + */ + SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE); + mouse_grabbed = grab; +} + +void app_toggle_grab_mouse() +{ + app_grab_mouse(!mouse_grabbed); +} + +bool app_is_mouse_grabbed() +{ + return mouse_grabbed; +} + + static bool init() { glewInit();