only calibrate controllers while in controls setup

calibration will need its own screen eventually
This commit is contained in:
minenice55 2026-04-05 16:38:35 -04:00
parent 03554c03ed
commit 41e1899809
2 changed files with 16 additions and 10 deletions

View file

@ -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);

View file

@ -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
#undef GyroCalibrationTrust
#undef GyroCalibrationStart
#undef GyroCalibrationRollingAvgSamples