static bool bnstate[8];
static bool keystate[256];
static Vec2 joy_move, joy_look;
-static float joy_deadzone = 0.1;
+static float joy_deadzone = 0.01;
static Mat4 view_matrix, mouse_view_matrix, proj_matrix;
static TextureSet texman;
glClearColor(0.2, 0.2, 0.2, 1.0);
scn = new Scene(&texman);
- if(!load_scene(scn, "data/museum.scene")) {
+ if(!load_scene(scn, opt.scenefile ? opt.scenefile : "data/museum.scene")) {
return false;
}
float len = sqrt(jmove_lensq);
jmove_lensq -= jdeadsq;
- dir.x += joy_move.x / len * speed;
- dir.z += joy_move.y / len * speed;
+ float mag = len * len;
+ dir.x += mag * joy_move.x / len * 2.0 * speed;
+ dir.z += mag * joy_move.y / len * 2.0 * speed;
}
if(jlook_lensq > jdeadsq) {
float len = sqrt(jlook_lensq);
jlook_lensq -= jdeadsq;
- cam_theta += joy_look.x / len * mouse_speed * 2.0;
- cam_phi += joy_look.y / len * mouse_speed * 1.0;
+ float mag = len * len;
+ cam_theta += mag * joy_look.x / len * 200.0 * dt;
+ cam_phi += mag * joy_look.y / len * 100.0 * dt;
if(cam_phi < -90.0f) cam_phi = -90.0f;
if(cam_phi > 90.0f) cam_phi = 90.0f;
}
break;
case SDL_CONTROLLERAXISMOTION:
- app_gamepad_axis(ev->caxis.axis, ev->caxis.value / 65535.0f);
+ app_gamepad_axis(ev->caxis.axis, ev->caxis.value / 32768.0f);
break;
}
}
Options def_opt = {
1280, 800,
false, // vr
- false // fullscreen
+ false, // fullscreen
+ 0 // scene file
};
enum {
OPT_SIZE,
OPT_VR,
- OPT_SRGB,
OPT_FULLSCREEN,
OPT_WINDOWED,
+ OPT_SCENEFILE,
OPT_HELP
};
{0, "vr", OPT_VR, "enable VR mode"},
{'f', "fullscreen", OPT_FULLSCREEN, "run in fullscreen mode"},
{'w', "windowed", OPT_WINDOWED, "run in windowed mode"},
+ {0, "scene", OPT_SCENEFILE, "scene file to open"},
{'h', "help", OPT_HELP, "print usage and exit"},
OPTCFG_OPTIONS_END
};
opt.fullscreen = !is_enabled(oc);
break;
+ case OPT_SCENEFILE:
+ opt.scenefile = strdup(optcfg_next_value(oc));
+ break;
+
case OPT_HELP:
printf("Usage: vrfileman [options]\nOptions:\n");
optcfg_print_options(oc);
static int arg_handler(optcfg *oc, const char *arg, void *cls)
{
- fprintf(stderr, "unexpected argument: %s\n", arg);
- return -1;
+ if(opt.scenefile) {
+ fprintf(stderr, "unexpected argument: %s\n", arg);
+ return -1;
+ }
+ opt.scenefile = arg;
+ return 0;
}
int width, height;
bool vr;
bool fullscreen;
+ const char *scenefile;
};
extern Options opt, def_opt;