fullscreen, mouse grab, stuff
authorJohn Tsiombikas <nuclear@mutantstargoat.com>
Mon, 14 Nov 2016 15:08:53 +0000 (17:08 +0200)
committerJohn Tsiombikas <nuclear@mutantstargoat.com>
Mon, 14 Nov 2016 15:08:53 +0000 (17:08 +0200)
src/app.cc
src/app.h
src/main.cc

index 96b3f86..065e581 100644 (file)
@@ -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);
        }
 }
index 7efb44f..2867309 100644 (file)
--- 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_
index 45b5632..f21c406 100644 (file)
@@ -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();