From 55a65d98dd6d94d69228fdb04590d1d5e6c600a2 Mon Sep 17 00:00:00 2001 From: ceski <56656010+ceski-1@users.noreply.github.com> Date: Mon, 2 Sep 2024 00:07:38 -0700 Subject: [PATCH] Add extra gyro calibration step, increase calibration time (#1875) Give players time to place gamepad on a flat surface. --- src/i_gyro.c | 11 ++++++++--- src/i_gyro.h | 1 + src/mn_setup.c | 7 ++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/i_gyro.c b/src/i_gyro.c index 189ed641..c26c7664 100644 --- a/src/i_gyro.c +++ b/src/i_gyro.c @@ -224,7 +224,12 @@ void I_UpdateGyroCalibrationState(void) switch (cal.state) { case GYRO_CALIBRATION_INACTIVE: - if (!motion.calibrating) + cal.state = GYRO_CALIBRATION_STARTING; + cal.start_time = I_GetTimeMS(); + break; + + case GYRO_CALIBRATION_STARTING: + if (I_GetTimeMS() - cal.start_time > 1500) { motion.calibrating = true; ClearGyroCalibration(); @@ -234,7 +239,7 @@ void I_UpdateGyroCalibrationState(void) break; case GYRO_CALIBRATION_ACTIVE: - if (I_GetTimeMS() - cal.start_time > 1000) + if (I_GetTimeMS() - cal.start_time > 3000) { motion.calibrating = false; PostProcessCalibration(); @@ -244,7 +249,7 @@ void I_UpdateGyroCalibrationState(void) break; case GYRO_CALIBRATION_COMPLETE: - if (I_GetTimeMS() - cal.finish_time > 1000) + if (I_GetTimeMS() - cal.finish_time > 1500) { cal.state = GYRO_CALIBRATION_INACTIVE; } diff --git a/src/i_gyro.h b/src/i_gyro.h index 1dfd52e5..3796f66f 100644 --- a/src/i_gyro.h +++ b/src/i_gyro.h @@ -38,6 +38,7 @@ extern float gyro_axes[NUM_GYRO_AXES]; // Calculated gyro values. typedef enum gyro_calibration_state_e { GYRO_CALIBRATION_INACTIVE, + GYRO_CALIBRATION_STARTING, GYRO_CALIBRATION_ACTIVE, GYRO_CALIBRATION_COMPLETE, } gyro_calibration_state_t; diff --git a/src/mn_setup.c b/src/mn_setup.c index 64881bac..052e064a 100644 --- a/src/mn_setup.c +++ b/src/mn_setup.c @@ -1091,8 +1091,13 @@ static void DrawGyroCalibration(void) case GYRO_CALIBRATION_INACTIVE: break; - case GYRO_CALIBRATION_ACTIVE: + case GYRO_CALIBRATION_STARTING: block_input = true; + DrawNotification("Starting calibration...", CR_GRAY); + I_UpdateGyroCalibrationState(); + break; + + case GYRO_CALIBRATION_ACTIVE: DrawNotification("Calibrating, please wait...", CR_GRAY); I_UpdateGyroCalibrationState(); break;