added minimum turn option, to discretize turns in VR
[laserbrain_demo] / src / opt.cc
index f9bcf53..15c61cc 100644 (file)
@@ -11,7 +11,10 @@ Options def_opt = {
        false,  // vr
        false,  // fullscreen
        0,              // scene file
-       true    // music
+       true,   // music
+       true,   // reflections
+       0,              // data url
+       0.0f    // minimum turn angle
 };
 
 enum {
@@ -21,6 +24,9 @@ enum {
        OPT_WINDOWED,
        OPT_SCENEFILE,
        OPT_MUSIC,
+       OPT_REFLECT,
+       OPT_DATAURL,
+       OPT_MIN_TURN,
        OPT_HELP
 };
 
@@ -32,6 +38,9 @@ static optcfg_option options[] = {
        {'w', "windowed", OPT_WINDOWED, "run in windowed mode"},
        {0, "scene", OPT_SCENEFILE, "scene file to open"},
        {'m', "music", OPT_MUSIC, "play background audio"},
+       {'r', "reflect", OPT_REFLECT, "render reflections"},
+       {0, "url", OPT_DATAURL, "data URL"},
+       {0, "minturn", OPT_MIN_TURN, "minimum turn angle"},
        {'h', "help", OPT_HELP, "print usage and exit"},
        OPTCFG_OPTIONS_END
 };
@@ -102,6 +111,27 @@ static int opt_handler(optcfg *oc, int optid, void *cls)
                opt.music = is_enabled(oc);
                break;
 
+       case OPT_REFLECT:
+               opt.reflect = is_enabled(oc);
+               break;
+
+       case OPT_DATAURL:
+               opt.data_url = strdup(optcfg_next_value(oc));
+               break;
+
+       case OPT_MIN_TURN:
+               {
+                       int deg;
+                       char *valstr = optcfg_next_value(oc);
+
+                       if(!valstr || sscanf(valstr, "%d", &deg) != 1) {
+                               fprintf(stderr, "minimum turn must be a number >= 0 in degrees\n");
+                               return -1;
+                       }
+                       opt.min_turn = deg;
+               }
+               break;
+
        case OPT_HELP:
                printf("Usage: demo [options]\nOptions:\n");
                optcfg_print_options(oc);