mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 14:55:36 +08:00
Interpolate the dynamic offset time for aircraft situations
This commit is contained in:
@@ -1758,6 +1758,7 @@ namespace BlackCore::Fsd
|
||||
|
||||
qint64 CFSDClient::receivedPositionFixTsAndGetOffsetTime(const CCallsign &callsign, qint64 markerTs)
|
||||
{
|
||||
// \fixme This logic should be in a different class
|
||||
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Need callsign");
|
||||
|
||||
if (markerTs < 0) { markerTs = QDateTime::currentMSecsSinceEpoch(); }
|
||||
@@ -1775,13 +1776,25 @@ namespace BlackCore::Fsd
|
||||
|
||||
int count = 0;
|
||||
const qint64 avgTimeMs = this->averageOffsetTimeMs(callsign, count, 3); // latest average
|
||||
qint64 offsetTime = CFsdSetup::c_positionTimeOffsetMsec;
|
||||
qint64 targetOffsetTime = CFsdSetup::c_positionTimeOffsetMsec;
|
||||
|
||||
if (avgTimeMs < CFsdSetup::c_minimumPositionTimeOffsetMsec && count >= 3)
|
||||
{
|
||||
offsetTime = CFsdSetup::c_minimumPositionTimeOffsetMsec;
|
||||
targetOffsetTime = CFsdSetup::c_minimumPositionTimeOffsetMsec;
|
||||
}
|
||||
|
||||
const qint64 previousInterpolatedOffsetTime = m_interpolatedOffsetTime.value(callsign, 0);
|
||||
qint64 offsetDiff = 0;
|
||||
if (targetOffsetTime < previousInterpolatedOffsetTime)
|
||||
{
|
||||
offsetDiff = std::max(targetOffsetTime - previousInterpolatedOffsetTime, diff / -c_offsetTimeInterpolationInverseRate);
|
||||
}
|
||||
else
|
||||
{
|
||||
offsetDiff = std::min(targetOffsetTime - previousInterpolatedOffsetTime, diff / c_offsetTimeInterpolationInverseRate);
|
||||
}
|
||||
qint64 offsetTime = previousInterpolatedOffsetTime + offsetDiff;
|
||||
m_interpolatedOffsetTime.insert(callsign, offsetTime);
|
||||
return m_additionalOffsetTime + offsetTime;
|
||||
}
|
||||
|
||||
|
||||
@@ -500,6 +500,8 @@ namespace BlackCore::Fsd
|
||||
QHash<BlackMisc::Aviation::CCallsign, PendingAtisQuery> m_pendingAtisQueries;
|
||||
QHash<BlackMisc::Aviation::CCallsign, qint64> m_lastPositionUpdate;
|
||||
QHash<BlackMisc::Aviation::CCallsign, QList<qint64>> m_lastOffsetTimes; //!< latest offset first
|
||||
QHash<BlackMisc::Aviation::CCallsign, qint64> m_interpolatedOffsetTime;
|
||||
static const int c_offsetTimeInterpolationInverseRate = 4;
|
||||
|
||||
BlackMisc::CSettingReadOnly<BlackCore::Vatsim::TRawFsdMessageSetting> m_fsdMessageSetting { this, &CFSDClient::fsdMessageSettingsChanged };
|
||||
QFile m_rawFsdMessageLogFile;
|
||||
|
||||
Reference in New Issue
Block a user