DolphinQt: Make Calibration autocomplete when data is "sensible" and stick is returned to neutral position.

This commit is contained in:
Jordan Woyak
2025-05-29 23:28:16 -05:00
parent fa9f71e482
commit 6a0963908d
4 changed files with 45 additions and 19 deletions

View File

@ -5,6 +5,7 @@
#include <algorithm>
#include <chrono>
#include <cmath>
#include <ranges>
#include <string>
#include <vector>
@ -277,6 +278,16 @@ bool CalibrationBuilder::IsCalibrationDataSensible() const
return stats.StandardDeviation() < REASONABLE_DEVIATION;
}
bool CalibrationBuilder::IsComplete() const
{
if (!IsCalibrationDataSensible())
return false;
const auto half_calibration =
0.5 * GetCalibrationRadiusAtAngle(std::atan2(m_prev_point.y, m_prev_point.x) + MathUtil::TAU);
return m_prev_point.LengthSquared() < (half_calibration * half_calibration);
}
ControlState CalibrationBuilder::GetCalibrationRadiusAtAngle(double angle) const
{
return ControllerEmu::ReshapableInput::GetCalibrationDataRadiusAtAngle(m_calibration_data, angle);

View File

@ -85,6 +85,10 @@ public:
// Used to update the UI to encourage the user to click the "Finish" button.
bool IsCalibrationDataSensible() const;
// Returns true when the calibration data seems sensible,
// and the input then approaches the center position.
bool IsComplete() const;
// Grabs the calibration value at the provided angle.
// Used to render the calibration in the UI while it's in progress.
ControlState GetCalibrationRadiusAtAngle(double angle) const;