OVR: Make adjustments to the game's input using controllers
[mercenary-reloaded.git] / src / mercenary / main.c
index b6b59be..d9fb1c7 100644 (file)
@@ -71,10 +71,10 @@ static double config_fov = FOV_JOLLY;
 static double config_benson_size = 1.0;
 static double config_fov = FOV_NOVAGEN;
 #endif
-static double config_monitor_distance = 31.5; /* inch */
+static double config_monitor_distance = 41.5; /* inch */
 #ifdef HAVE_OVR
-static double config_keyboard_distance = 28.5; /* inch */
-static double config_keyboard_height = 4.0; /* inch */
+static double config_keyboard_distance = 40.5; /* inch */
+static double config_keyboard_height = -26.0; /* inch */
 #endif
 static int config_debug_transparent = 0;
 static int config_debug_opengl = 0;
@@ -380,7 +380,7 @@ static void handle_vr_poses(void)
        double hand_right_yaw = 0.0, hand_right_pitch = 0.0, hand_right_roll = 0.0;
        double head_yaw = 0.0, head_pitch = 0.0, head_roll = 0.0;
        double stick_left_x = 0.0, stick_left_y = 0.0, stick_right_x = 0.0, stick_right_y = 0.0;
-       int thrust = 0;
+       int thrust = thrust_last;
        int joystick_set_x = 0, joystick_set_y = 0;
        static uint32_t current_time, last_time = 0, diff;
        static double increment, inc_count = 0.0;
@@ -394,49 +394,40 @@ static void handle_vr_poses(void)
                else
                        help_view++;
        }
-       if (button_left_trigger && button_right_trigger) {
+       if (button_left_thumb) {
                /* reset observer */
                reset_observer_ovr();
                osd_info("", "reset observer");
        }
        if (!help_view) {
-               if (button_a && !button_a_last) {
-                       /* keyboard A toggle */
-                       if (keyboard_on == 1)
-                               keyboard_on = 0;
-                       else
-                               keyboard_on = 1;
-               }
-               if (button_b && !button_b_last) {
-                       /* keyboard B toggle */
-                       if (keyboard_on == 2)
-                               keyboard_on = 0;
-                       else
-                               keyboard_on = 2;
-               }
                if (button_x && !button_x_last) {
                        /* 'board' pressed */
                        set_amiga_key(KEYCODE_b, 1);
                        set_amiga_key(KEYCODE_b, 0);
+                       /* important: get rid of old state */
+                       thrust = 0;
                }
                if (button_y && !button_y_last) {
                        /* 'leave' pressed */
                        set_amiga_key(KEYCODE_l, 1);
                        set_amiga_key(KEYCODE_l, 0);
                }
-               if (button_right_thumb && !button_right_thumb_last) {
-                       /* 'change orientation' pressed */
-                       double roll, pitch, yaw;
-                       mercenary_get_orientation(&roll, &pitch, &yaw);
-                       mercenary_set_orientation(yaw + hand_right_yaw);
-               }
                if (button_right_trigger && !button_right_trigger_last) {
                        /* trigger pressed */
-                       if (!keyboard_on) {
+                       if (keyboard_on) {
+                               if (vr_key) {
+                                       vr_key_pressed = vr_key;
+                                       set_amiga_key(vr_key_pressed, 1);
+                               }
+                       } else
+                       if (mercenary_get_info_walking()) {
+                               /* change orientation */
+                               double roll, pitch, yaw;
+                               mercenary_get_orientation(&roll, &pitch, &yaw);
+                               mercenary_set_orientation(yaw + hand_right_yaw);
+                       } else {
+                               /* fire button */
                                set_joystick(-1, -1, -1, -1, 1);
-                       } else if (vr_key) {
-                               vr_key_pressed = vr_key;
-                               set_amiga_key(vr_key_pressed, 1);
                        }
                }
                if (!button_right_trigger && button_right_trigger_last) {
@@ -534,9 +525,8 @@ static void handle_vr_poses(void)
                if (joystick_set_y_last && !joystick_set_y)
                        set_joystick(-1, -1, 0, 0, -1);
                /* thrust */
-               thrust = thrust_last;
                /* button to toggle between stop and escape */
-               if (button_left_thumb && !button_left_thumb_last) {
+               if (button_left_trigger && !button_left_trigger_last) {
                        /* 'escape' pressed */
                        if (thrust_last == 0)
                                thrust = -99;
@@ -614,8 +604,7 @@ static void handle_vr_poses(void)
        /* we must handle keyboard after toggeling keyboard_on,
         * so that keyboard_on will not change until keyboard is rendered */
        vr_key = 0;
-       if (keyboard_on)
-               handle_vr_keyboard(keyboard_on - 1, hand_right_x, hand_right_y, hand_right_z, hand_right_yaw, hand_right_pitch, &vr_key);
+       keyboard_on = handle_vr_keyboard(hand_right_x, hand_right_y, hand_right_z, hand_right_yaw, hand_right_pitch, &vr_key);
 }
 #endif
 
@@ -815,7 +804,7 @@ static void main_loop(void)
 #ifdef HAVE_OVR
                        /* render keyboard */
                        if (keyboard_on)
-                               render_vr_keyboard(keyboard_on - 1, camera_x, camera_y);
+                               render_vr_keyboard(camera_x, camera_y);
 
                        /* end of rendering eye */
                        end_render_ovr_eye(eye);
@@ -1384,24 +1373,22 @@ int main(int argc, char *argv[])
        text_render(help_osd[1], IMAGE_WIDTH * 2, IMAGE_HEIGHT * 2,
                "Emulation using Controller:\n"
                "        Press `Enter' button to toggle this help screen on or off.\n"
-               "        Press `A' button to emulate keyboard to control game.\n"
-               "        Press `B' button to emulate keyboard to enter alphanumeric keys.\n"
-               "        Press `A' or `B' button again to dismiss keyboard.\n"
-               "        Point right controller to a key on keyboard. The key will highlight.\n"
-               "        Pull `Trigger' on right controller enter the highlighted key.\n"
-               "        Pull `Trigger' on both controllers to reset observer position.\n"
+               "        To have a virtual keyboard, point below benson (control pannel).\n"
+               "        Point to a key on keyboard. The key will highlight.\n"
+               "        Pull `Trigger' on right controller to enter the highlighted key.\n"
+               "        Press thumb stick on left controller to reset observer position.\n"
                "\n"
                "Walking / Driving / Flying using Controller:\n"
                "        Use thumb stick on right controller, to move player / craft.\n"
                "        Point right controller towards the direction to walk to.\n"
-               "        Press thumb stick to change orientation to that direction.\n"
+               "        Pull `Trigger' on right controller to change orientation.\n"
                "        Press `X' button to board, `Y' button to leave.\n"
                "        Move thumb stick on left controller to drive/fly forward or backward.\n"
-               "        Press thumb stick on left controller stop craft.\n"
-               "        Press thumb stick on left controller for escape sequence, after stop.\n"
+               "        Pull `Trigger' on left controller stop craft.\n"
+               "        Pull `Trigger' on left controller for escape sequence, after stop.\n"
                "        Pull `Trigger' on right controller to fire.\n"
                "\n"
-               "For all other game function, use the emulated keyboards!\n"
+               "For all other game function, use the virtual or real keyboard!\n"
                ,HELP_ALPHA, 1, 2, 5, 0);
        help_views = 2;
 #endif