mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 15:15:39 +08:00
refs #852 IInterpolator::getPartsBeforeTime renamed to getInterpolatedParts
and returns a single CAircraftParts object, not a list.
This commit is contained in:
@@ -39,23 +39,24 @@ namespace BlackMisc
|
|||||||
return currentSituation;
|
return currentSituation;
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftPartsList IInterpolator::getPartsBeforeTime(const CAircraftPartsList &parts, qint64 cutoffTime, IInterpolator::PartsStatus &partsStatus) const
|
CAircraftParts IInterpolator::getInterpolatedParts(const CAircraftPartsList &parts, qint64 currentTimeMsSinceEpoch, IInterpolator::PartsStatus &partsStatus) const
|
||||||
{
|
{
|
||||||
partsStatus.reset();
|
partsStatus.reset();
|
||||||
partsStatus.setSupportsParts(true);
|
partsStatus.setSupportsParts(true);
|
||||||
|
|
||||||
if (cutoffTime < 0) { return parts; }
|
if (parts.isEmpty()) { return {}; }
|
||||||
return parts.findBefore(cutoffTime);
|
if (currentTimeMsSinceEpoch < 0) { return parts.front(); }
|
||||||
|
return parts.findBefore(currentTimeMsSinceEpoch).front();
|
||||||
}
|
}
|
||||||
|
|
||||||
CAircraftPartsList IInterpolator::getPartsBeforeTime(const CCallsign &callsign, qint64 cutoffTime, IInterpolator::PartsStatus &partsStatus) const
|
CAircraftParts IInterpolator::getInterpolatedParts(const CCallsign &callsign, qint64 currentTimeMsSinceEpoch, IInterpolator::PartsStatus &partsStatus) const
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "empty callsign");
|
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "empty callsign");
|
||||||
partsStatus.reset();
|
partsStatus.reset();
|
||||||
|
|
||||||
partsStatus.setSupportsParts(this->isRemoteAircraftSupportingParts(callsign));
|
partsStatus.setSupportsParts(this->isRemoteAircraftSupportingParts(callsign));
|
||||||
if (!partsStatus.isSupportingParts()) { return {}; }
|
if (!partsStatus.isSupportingParts()) { return {}; }
|
||||||
return this->remoteAircraftParts(callsign, cutoffTime);
|
return this->getInterpolatedParts(this->remoteAircraftParts(callsign, -1), currentTimeMsSinceEpoch, partsStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IInterpolator::setInterpolatorSetup(const CInterpolationAndRenderingSetup &setup)
|
void IInterpolator::setInterpolatorSetup(const CInterpolationAndRenderingSetup &setup)
|
||||||
|
|||||||
@@ -105,13 +105,13 @@ namespace BlackMisc
|
|||||||
|
|
||||||
//! Parts before given offset time (aka pending parts)
|
//! Parts before given offset time (aka pending parts)
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
virtual BlackMisc::Aviation::CAircraftPartsList getPartsBeforeTime(
|
virtual BlackMisc::Aviation::CAircraftParts getInterpolatedParts(
|
||||||
const BlackMisc::Aviation::CAircraftPartsList &parts, qint64 cutoffTime,
|
const BlackMisc::Aviation::CAircraftPartsList &parts, qint64 cutoffTime,
|
||||||
PartsStatus &partsStatus) const;
|
PartsStatus &partsStatus) const;
|
||||||
|
|
||||||
//! Parts before given offset time (aka pending parts)
|
//! Parts before given offset time (aka pending parts)
|
||||||
//! \threadsafe
|
//! \threadsafe
|
||||||
virtual BlackMisc::Aviation::CAircraftPartsList getPartsBeforeTime(
|
virtual BlackMisc::Aviation::CAircraftParts getInterpolatedParts(
|
||||||
const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTime,
|
const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTime,
|
||||||
PartsStatus &partsStatus) const;
|
PartsStatus &partsStatus) const;
|
||||||
|
|
||||||
|
|||||||
@@ -903,8 +903,8 @@ namespace BlackSimPlugin
|
|||||||
// situation is used to anticipate parts if other client does not send them
|
// situation is used to anticipate parts if other client does not send them
|
||||||
if (enableAircraftParts)
|
if (enableAircraftParts)
|
||||||
{
|
{
|
||||||
CAircraftPartsList parts;
|
CAircraftParts parts;
|
||||||
parts = this->m_interpolator->getPartsBeforeTime(callsign, interpolatedSituation.getMSecsSinceEpoch(), partsStatus);
|
parts = this->m_interpolator->getInterpolatedParts(callsign, interpolatedSituation.getMSecsSinceEpoch(), partsStatus);
|
||||||
updateRemoteAircraftParts(simObj, parts, partsStatus, interpolatedSituation, isOnGround); // update and retrieve parts in the same step
|
updateRemoteAircraftParts(simObj, parts, partsStatus, interpolatedSituation, isOnGround); // update and retrieve parts in the same step
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -916,7 +916,7 @@ namespace BlackSimPlugin
|
|||||||
m_statsUpdateAircraftTimeAvgMs = m_statsUpdateAircraftTimeTotalMs / m_statsUpdateAircraftCountMs;
|
m_statsUpdateAircraftTimeAvgMs = m_statsUpdateAircraftTimeTotalMs / m_statsUpdateAircraftCountMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSimulatorFsx::updateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftPartsList &parts, IInterpolator::PartsStatus partsStatus, const CAircraftSituation &interpolatedSituation, bool isOnGround) const
|
bool CSimulatorFsx::updateRemoteAircraftParts(const CSimConnectObject &simObj, const CAircraftParts &parts, IInterpolator::PartsStatus partsStatus, const CAircraftSituation &interpolatedSituation, bool isOnGround) const
|
||||||
{
|
{
|
||||||
if (!simObj.hasValidRequestAndObjectId()) { return false; }
|
if (!simObj.hasValidRequestAndObjectId()) { return false; }
|
||||||
|
|
||||||
@@ -924,27 +924,23 @@ namespace BlackSimPlugin
|
|||||||
DataDefinitionRemoteAircraftParts ddRemoteAircraftParts;
|
DataDefinitionRemoteAircraftParts ddRemoteAircraftParts;
|
||||||
if (partsStatus.isSupportingParts())
|
if (partsStatus.isSupportingParts())
|
||||||
{
|
{
|
||||||
// parts is supported, but do we need to update?
|
|
||||||
if (parts.isEmpty()) { return false; }
|
|
||||||
|
|
||||||
// we have parts
|
// we have parts
|
||||||
CAircraftParts newestParts = parts.front();
|
ddRemoteAircraftParts.lightStrobe = parts.getLights().isStrobeOn() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.lightStrobe = newestParts.getLights().isStrobeOn() ? 1 : 0;
|
ddRemoteAircraftParts.lightLanding = parts.getLights().isLandingOn() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.lightLanding = newestParts.getLights().isLandingOn() ? 1 : 0;
|
// ddRemoteAircraftParts.lightTaxi = parts.getLights().isTaxiOn() ? 1 : 0;
|
||||||
// ddRemoteAircraftParts.lightTaxi = newestParts.getLights().isTaxiOn() ? 1 : 0;
|
ddRemoteAircraftParts.lightBeacon = parts.getLights().isBeaconOn() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.lightBeacon = newestParts.getLights().isBeaconOn() ? 1 : 0;
|
ddRemoteAircraftParts.lightNav = parts.getLights().isNavOn() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.lightNav = newestParts.getLights().isNavOn() ? 1 : 0;
|
ddRemoteAircraftParts.lightLogo = parts.getLights().isLogoOn() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.lightLogo = newestParts.getLights().isLogoOn() ? 1 : 0;
|
ddRemoteAircraftParts.flapsLeadingEdgeLeftPercent = parts.getFlapsPercent() / 100.0;
|
||||||
ddRemoteAircraftParts.flapsLeadingEdgeLeftPercent = newestParts.getFlapsPercent() / 100.0;
|
ddRemoteAircraftParts.flapsLeadingEdgeRightPercent = parts.getFlapsPercent() / 100.0;
|
||||||
ddRemoteAircraftParts.flapsLeadingEdgeRightPercent = newestParts.getFlapsPercent() / 100.0;
|
ddRemoteAircraftParts.flapsTrailingEdgeLeftPercent = parts.getFlapsPercent() / 100.0;
|
||||||
ddRemoteAircraftParts.flapsTrailingEdgeLeftPercent = newestParts.getFlapsPercent() / 100.0;
|
ddRemoteAircraftParts.flapsTrailingEdgeRightPercent = parts.getFlapsPercent() / 100.0;
|
||||||
ddRemoteAircraftParts.flapsTrailingEdgeRightPercent = newestParts.getFlapsPercent() / 100.0;
|
ddRemoteAircraftParts.spoilersHandlePosition = parts.isSpoilersOut() ? 1 : 0;
|
||||||
ddRemoteAircraftParts.spoilersHandlePosition = newestParts.isSpoilersOut() ? 1 : 0;
|
ddRemoteAircraftParts.gearHandlePosition = isOnGround || parts.isGearDown() ? 1 : 0; // on ground we always show gear
|
||||||
ddRemoteAircraftParts.gearHandlePosition = isOnGround || newestParts.isGearDown() ? 1 : 0; // on ground we always show gear
|
ddRemoteAircraftParts.engine1Combustion = parts.isEngineOn(1) ? 1 : 0;
|
||||||
ddRemoteAircraftParts.engine1Combustion = newestParts.isEngineOn(1) ? 1 : 0;
|
ddRemoteAircraftParts.engine2Combustion = parts.isEngineOn(2) ? 1 : 0;
|
||||||
ddRemoteAircraftParts.engine2Combustion = newestParts.isEngineOn(2) ? 1 : 0;
|
ddRemoteAircraftParts.engine3Combustion = parts.isEngineOn(3) ? 1 : 0;
|
||||||
ddRemoteAircraftParts.engine3Combustion = newestParts.isEngineOn(3) ? 1 : 0;
|
ddRemoteAircraftParts.engine4Combustion = parts.isEngineOn(4) ? 1 : 0;
|
||||||
ddRemoteAircraftParts.engine4Combustion = newestParts.isEngineOn(4) ? 1 : 0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ namespace BlackSimPlugin
|
|||||||
void updateRemoteAircraft();
|
void updateRemoteAircraft();
|
||||||
|
|
||||||
//! Update remote airacraft parts (send to FSX)
|
//! Update remote airacraft parts (send to FSX)
|
||||||
bool updateRemoteAircraftParts(const CSimConnectObject &simObj, const BlackMisc::Aviation::CAircraftPartsList &parts,
|
bool updateRemoteAircraftParts(const CSimConnectObject &simObj, const BlackMisc::Aviation::CAircraftParts &parts,
|
||||||
BlackMisc::Simulation::IInterpolator::PartsStatus partsStatus, const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, bool isOnGround) const;
|
BlackMisc::Simulation::IInterpolator::PartsStatus partsStatus, const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, bool isOnGround) const;
|
||||||
|
|
||||||
//! Called when data about our own aircraft are received
|
//! Called when data about our own aircraft are received
|
||||||
|
|||||||
@@ -75,7 +75,8 @@ namespace BlackMiscTest
|
|||||||
provider->insertNewSituation(s);
|
provider->insertNewSituation(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < IRemoteAircraftProvider::MaxPartsPerCallsign; i++)
|
constexpr int partsCount = 10;
|
||||||
|
for (int i = 0; i < partsCount; i++)
|
||||||
{
|
{
|
||||||
CAircraftParts p(getTestParts(i, ts, deltaT));
|
CAircraftParts p(getTestParts(i, ts, deltaT));
|
||||||
provider->insertNewAircraftParts(cs, p);
|
provider->insertNewAircraftParts(cs, p);
|
||||||
@@ -86,7 +87,7 @@ namespace BlackMiscTest
|
|||||||
|
|
||||||
// check if all situations / parts have been received
|
// check if all situations / parts have been received
|
||||||
QVERIFY2(provider->remoteAircraftSituations(cs).size() == IRemoteAircraftProvider::MaxSituationsPerCallsign, "Missing situations");
|
QVERIFY2(provider->remoteAircraftSituations(cs).size() == IRemoteAircraftProvider::MaxSituationsPerCallsign, "Missing situations");
|
||||||
QVERIFY2(provider->remoteAircraftParts(cs).size() == IRemoteAircraftProvider::MaxPartsPerCallsign, "Missing parts");
|
QVERIFY2(provider->remoteAircraftParts(cs).size() == partsCount, "Missing parts");
|
||||||
|
|
||||||
// interpolation functional check
|
// interpolation functional check
|
||||||
IInterpolator::InterpolationStatus status;
|
IInterpolator::InterpolationStatus status;
|
||||||
@@ -149,10 +150,9 @@ namespace BlackMiscTest
|
|||||||
for (qint64 currentTime = ts - 2 * deltaT; currentTime < ts; currentTime += 250)
|
for (qint64 currentTime = ts - 2 * deltaT; currentTime < ts; currentTime += 250)
|
||||||
{
|
{
|
||||||
IInterpolator::PartsStatus partsStatus;
|
IInterpolator::PartsStatus partsStatus;
|
||||||
CAircraftPartsList pl(interpolator.getPartsBeforeTime(cs, ts, partsStatus));
|
CAircraftParts pl(interpolator.getInterpolatedParts(cs, ts, partsStatus));
|
||||||
fetchedParts++;
|
fetchedParts++;
|
||||||
QVERIFY2(partsStatus.isSupportingParts(), "Parts not supported");
|
QVERIFY2(partsStatus.isSupportingParts(), "Parts not supported");
|
||||||
QVERIFY2(!pl.isEmpty(), "Parts empty");
|
|
||||||
}
|
}
|
||||||
timeMs = timer.elapsed();
|
timeMs = timer.elapsed();
|
||||||
qDebug() << timeMs << "ms" << "for" << fetchedParts << "fetched parts";
|
qDebug() << timeMs << "ms" << "for" << fetchedParts << "fetched parts";
|
||||||
|
|||||||
Reference in New Issue
Block a user