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;
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;
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;
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);
}
}
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_
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();