diff --git a/src/g_game.c b/src/g_game.c index 005603746..ad20b510b 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1471,7 +1471,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) vector3_t gyro = G_PlayerInputSensor(forplayer, GYROSCOPE); G_UpdateGamepadAutoCalibration(forplayer, accel, gyro, - (paused || P_AutoPause() || (menustack[0] == MN_OP_CONTROLSETUP))); + (menustack[0] == MN_OP_CONTROLSETUP)); G_UpdateGamepadGyro(forplayer, gyro); G_UpdateGamepadGravity(forplayer, G_GetGamepadCalibratedGyro(forplayer), accel); diff --git a/src/g_input.c b/src/g_input.c index 4a6b93930..6a4a278fa 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -1233,7 +1233,8 @@ void Command_Setcontrol4_f(void) // accelerometer and gyro stuff // when holding the controller still (shaking and turning included), correct this quickly to resolve error -#define GyroCalibrationRollingAvgSamples (TICRATE) +#define GyroCalibrationRollingAvgSamples (TICRATE/2) +#define GyroCalibrationStart (TICRATE/2) #define GyroCalibrationTrust (1*FRACUNIT/100) boolean localgyrocalibrating[MAXSPLITSCREENPLAYERS]; @@ -1323,7 +1324,7 @@ void G_UpdateGamepadAutoCalibration(INT32 p, vector3_t accel, vector3_t gyro, bo else { // incomplete calibration - if (localgyrocalibrating[p] && localgyrocalibrationsamples[p] <= GyroCalibrationRollingAvgSamples) + if (localgyrocalibrating[p] && localgyrocalibrationsamples[p] <= (GyroCalibrationRollingAvgSamples + GyroCalibrationStart)) { FV3_Copy(&localgyrocalibrationoffset[p], &localgyrocalibrationlastoffset[p]); localgyrocalibrationsamples[p] = 0; @@ -1348,12 +1349,15 @@ void G_UpdateGamepadGyro(INT32 p, vector3_t gyro) if (localgyrocalibrating[p]) { localgyrocalibrationsamples[p]++; - FV3_Load( - &localgyrocalibrationoffset[p], - (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].x) + gyro.x)/GyroCalibrationRollingAvgSamples, - (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].y) + gyro.y)/GyroCalibrationRollingAvgSamples, - (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].z) + gyro.z)/GyroCalibrationRollingAvgSamples - ); + if (localgyrocalibrationsamples[p] > GyroCalibrationStart) + { + FV3_Load( + &localgyrocalibrationoffset[p], + (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].x) + gyro.x)/GyroCalibrationRollingAvgSamples, + (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].y) + gyro.y)/GyroCalibrationRollingAvgSamples, + (((GyroCalibrationRollingAvgSamples-1)*localgyrocalibrationoffset[p].z) + gyro.z)/GyroCalibrationRollingAvgSamples + ); + } } CONS_Debug(DBG_IMU, "Gyro calibration samples: %d\n", localgyrocalibrationsamples[p]); @@ -1563,4 +1567,6 @@ boolean G_GetGamepadCanUseTilt(INT32 p) #undef CorrectionMinimumSpeed #undef SmoothingHalfTime -#undef GyroCalibrationTrust \ No newline at end of file +#undef GyroCalibrationTrust +#undef GyroCalibrationStart +#undef GyroCalibrationRollingAvgSamples \ No newline at end of file