#define FAR_CLIP 10000.0
static void draw_scene();
+static void toggle_flight();
long time_msec;
int win_width, win_height;
static float user_eye_height = 165;
static float walk_speed = 300.0f;
-static float mouse_speed = 1.0f;
+static float mouse_speed = 0.5f;
static bool show_walk_mesh, noclip = false;
static bool have_headtracking, should_swap;
static int prev_mx, prev_my;
static bool bnstate[8];
static bool keystate[256];
+static bool gpad_bnstate[64];
static Vec2 joy_move, joy_look;
static float joy_deadzone = 0.01;
if(keystate[(int)'a']) {
dir.x -= speed;
}
- if(keystate[(int)'q']) {
+ if(keystate[(int)'q'] || gpad_bnstate[GPAD_UP]) {
cam_pos.y += speed;
}
- if(keystate[(int)'z']) {
+ if(keystate[(int)'z'] || gpad_bnstate[GPAD_DOWN]) {
cam_pos.y -= speed;
}
case '\n':
case '\r':
+ printf("%d\n", key);
if(mod & MOD_ALT) {
app_toggle_fullscreen();
}
break;
case 'f':
- {
- static float prev_walk_speed = -1.0;
- if(prev_walk_speed < 0.0) {
- noclip = true;
- prev_walk_speed = walk_speed;
- walk_speed = 1000.0;
- show_message("fly mode\n");
- } else {
- noclip = false;
- walk_speed = prev_walk_speed;
- prev_walk_speed = -1.0;
- show_message("walk mode\n");
- }
- }
+ toggle_flight();
break;
case 'p':
bnstate[bn] = pressed;
}
-static inline void mouse_look(int dx, int dy)
+static inline void mouse_look(float dx, float dy)
{
float scrsz = (float)win_height;
cam_theta += dx * 512.0 / scrsz;
if(cam_phi > 90) cam_phi = 90;
}
-static void mouse_zoom(int dx, int dy)
+static void mouse_zoom(float dx, float dy)
{
cam_dist += dy * 0.1;
if(cam_dist < 0.0) cam_dist = 0.0;
void app_gamepad_button(int bn, bool pressed)
{
+ gpad_bnstate[bn] = pressed;
+
+ if(pressed) {
+ switch(bn) {
+ case GPAD_LSTICK:
+ toggle_flight();
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+static void toggle_flight()
+{
+ static float prev_walk_speed = -1.0;
+ if(prev_walk_speed < 0.0) {
+ noclip = true;
+ prev_walk_speed = walk_speed;
+ walk_speed = 1000.0;
+ show_message("fly mode\n");
+ } else {
+ noclip = false;
+ walk_speed = prev_walk_speed;
+ prev_walk_speed = -1.0;
+ show_message("walk mode\n");
+ }
}
case SDL_MOUSEMOTION:
if(mouse_grabbed) {
- // XXX xrel/yrel seems faster by default
- app_mouse_delta(ev->motion.xrel * 0.75, ev->motion.yrel * 0.75);
+ app_mouse_delta(ev->motion.xrel, ev->motion.yrel);
} else {
app_mouse_motion(ev->motion.x * scale_factor, ev->motion.y * scale_factor);
}
case SDL_CONTROLLERAXISMOTION:
app_gamepad_axis(ev->caxis.axis, ev->caxis.value / 32768.0f);
break;
+
+ case SDL_CONTROLLERBUTTONDOWN:
+ case SDL_CONTROLLERBUTTONUP:
+ app_gamepad_button(ev->cbutton.button, ev->type == SDL_CONTROLLERBUTTONDOWN);
+ break;
}
}