refs #895, add initial parts when aircraft is added in FSX

plus some utility functions
This commit is contained in:
Klaus Basan
2017-03-04 23:46:45 +01:00
committed by Mathew Sutcliffe
parent a27717cf8b
commit 03b8739158
4 changed files with 28 additions and 5 deletions

View File

@@ -30,6 +30,16 @@ namespace BlackSimPlugin
m_interpolator->attachLogger(logger);
}
void CSimConnectObject::addAircraftParts(const CAircraftParts &parts)
{
m_interpolator->addAircraftParts(parts);
}
void CSimConnectObject::addAircraftSituation(const CAircraftSituation &situation)
{
m_interpolator->addAircraftSituation(situation);
}
void CSimConnectObject::invalidatePartsAsSent()
{
DataDefinitionRemoteAircraftPartsWithoutLights dd;

View File

@@ -36,7 +36,7 @@ namespace BlackSimPlugin
//! Constructor
CSimConnectObject();
//! Constructor
//! Constructor, providing initial situation/parts
CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft,
DWORD requestId,
BlackMisc::Simulation::CInterpolationLogger *logger);
@@ -56,6 +56,12 @@ namespace BlackSimPlugin
//! Interpolator
BlackMisc::Simulation::CInterpolatorSpline *getInterpolator() const { return m_interpolator.data(); }
//! Add parts for interpolator
void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
//! Add situation for interpolator
void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
//! Get current lights (requested from simulator)
const BlackMisc::Aviation::CAircraftLights &getCurrentLightsInSimulator() const { return m_currentLightsInSim; }

View File

@@ -175,7 +175,8 @@ namespace BlackSimPlugin
// we will request a new aircraft by request ID, later we will receive its object id
// so far this object id is -1
addedAircraft.setRendered(false);
const CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger);
CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger);
if (addedAircraft.isPartsSynchronized()) { simObject.addAircraftParts(addedAircraft.getParts()); }
m_simConnectObjects.insert(callsign, simObject);
adding = true;
}
@@ -906,7 +907,7 @@ namespace BlackSimPlugin
// get interpolated situation
CInterpolationStatus interpolatorStatus;
CInterpolationHints hints(m_hints[simObj.getCallsign()]);
CInterpolationHints hints(m_hints[callsign]);
hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts);
hints.setLoggingInterpolation(logInterpolationAndParts);
const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus);
@@ -1274,13 +1275,13 @@ namespace BlackSimPlugin
void CSimulatorFsxCommon::ps_remoteProviderAddAircraftSituation(const CAircraftSituation &situation)
{
if (!m_simConnectObjects.contains(situation.getCallsign())) { return; }
m_simConnectObjects[situation.getCallsign()].getInterpolator()->addAircraftSituation(situation);
m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation);
}
void CSimulatorFsxCommon::ps_remoteProviderAddAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts)
{
if (!m_simConnectObjects.contains(callsign)) { return; }
m_simConnectObjects[callsign].getInterpolator()->addAircraftParts(parts);
m_simConnectObjects[callsign].addAircraftParts(parts);
}
QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)