Ref T275, Ref T280, parts guessing and interpolating can have different ratios

This commit is contained in:
Klaus Basan
2018-06-18 20:49:12 +02:00
parent 65c94cf2c3
commit 3f14be6517
2 changed files with 21 additions and 9 deletions

View File

@@ -283,7 +283,11 @@ namespace BlackMisc
CAircraftParts CInterpolator<Derived>::getInterpolatedOrGuessedParts(int aircraftNumber)
{
Q_ASSERT_X(m_partsToSituationInterpolationRatio >= 1 && m_partsToSituationInterpolationRatio < 11, Q_FUNC_INFO, "Wrong ratio");
if (!m_unitTest && !m_lastParts.isNull() && ((m_interpolatedSituationsCounter + aircraftNumber) % m_partsToSituationInterpolationRatio) == 0)
const bool needParts = m_unitTest || m_lastParts.isNull();
const bool doInterpolation = needParts || ((m_interpolatedSituationsCounter + aircraftNumber) % m_partsToSituationInterpolationRatio == 0);
const bool doGuess = needParts || ((m_interpolatedSituationsCounter + aircraftNumber) % m_partsToSituationGuessingRatio == 0);
if (!doGuess && !doInterpolation)
{
m_currentPartsStatus = m_lastPartsStatus;
m_currentPartsStatus.setReusedParts(true);
@@ -301,6 +305,13 @@ namespace BlackMisc
// the parts are still empty
if (!m_currentPartsStatus.isSupportingParts())
{
if (!doGuess)
{
m_currentPartsStatus = m_lastPartsStatus;
m_currentPartsStatus.setReusedParts(true);
return m_lastParts;
}
// check if model has been thru model matching
parts.guessParts(m_lastSituation, m_pastSituationsChange, m_model);
this->logParts(parts, 0, false);

View File

@@ -267,14 +267,15 @@ namespace BlackMisc
CAircraftModel m_model; //!< corresponding model
// values for current interpolation step
qint64 m_currentTimeMsSinceEpoch = -1; //!< current time
Aviation::CAircraftSituationList m_currentSituations; //!< current situations
Aviation::CAircraftSituationChange m_pastSituationsChange; //!< situations change of provider (i.e. network) situations
CInterpolationAndRenderingSetupPerCallsign m_currentSetup; //!< used setup
CInterpolationStatus m_currentInterpolationStatus; //!< this step's situation status
CPartsStatus m_currentPartsStatus; //!< this step's parts status
CPartsStatus m_lastPartsStatus; //!< status for last parts, used when last parts are re-used because of m_partsToSituationInterpolationRatio
int m_partsToSituationInterpolationRatio = 2; //!< ratio between parts and situation interpolation, 1..always, 2..every 2nd situation
qint64 m_currentTimeMsSinceEpoch = -1; //!< current time
Aviation::CAircraftSituationList m_currentSituations; //!< current situations
Aviation::CAircraftSituationChange m_pastSituationsChange; //!< situations change of provider (i.e. network) situations
CInterpolationAndRenderingSetupPerCallsign m_currentSetup; //!< used setup
CInterpolationStatus m_currentInterpolationStatus; //!< this step's situation status
CPartsStatus m_currentPartsStatus; //!< this step's parts status
CPartsStatus m_lastPartsStatus; //!< status for last parts, used when last parts are re-used because of m_partsToSituationInterpolationRatio
int m_partsToSituationInterpolationRatio = 2; //!< ratio between parts and situation interpolation, 1..always, 2..every 2nd situation
int m_partsToSituationGuessingRatio = 5; //!< ratio between parts guessing and situation interpolation
Aviation::CAircraftSituation m_lastSituation { Aviation::CAircraftSituation::null() }; //!< latest interpolation
Aviation::CAircraftParts m_lastParts { Aviation::CAircraftParts::null() }; //!< latest parts
PhysicalQuantities::CLength m_currentSceneryOffset { PhysicalQuantities::CLength::null() }; //!< calculated scenery offset if any