only calibrate controllers while in controls setup
calibration will need its own screen eventually
This commit is contained in:
parent
03554c03ed
commit
41e1899809
2 changed files with 16 additions and 10 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in a new issue