mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-05-02 15:15:39 +08:00
refs #895, add initial parts when aircraft is added in FSX
plus some utility functions
This commit is contained in:
committed by
Mathew Sutcliffe
parent
a27717cf8b
commit
03b8739158
@@ -54,9 +54,15 @@ namespace BlackMisc
|
|||||||
//! Add a new aircraft situation
|
//! Add a new aircraft situation
|
||||||
void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
|
void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||||
|
|
||||||
|
//! Any aircraft situations?
|
||||||
|
bool hasAircraftSituations() const { return !m_aircraftSituations.isEmpty(); }
|
||||||
|
|
||||||
//! Add a new aircraft parts
|
//! Add a new aircraft parts
|
||||||
void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
|
void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
|
||||||
|
|
||||||
|
//! Any aircraft parts?
|
||||||
|
bool hasAircraftParts() const { return !m_aircraftParts.isEmpty(); }
|
||||||
|
|
||||||
//! Takes input between 0 and 1 and returns output between 0 and 1 smoothed with an S-shaped curve.
|
//! Takes input between 0 and 1 and returns output between 0 and 1 smoothed with an S-shaped curve.
|
||||||
//!
|
//!
|
||||||
//! Useful for making interpolation seem smoother, efficiently as it just uses simple arithmetic.
|
//! Useful for making interpolation seem smoother, efficiently as it just uses simple arithmetic.
|
||||||
|
|||||||
@@ -30,6 +30,16 @@ namespace BlackSimPlugin
|
|||||||
m_interpolator->attachLogger(logger);
|
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()
|
void CSimConnectObject::invalidatePartsAsSent()
|
||||||
{
|
{
|
||||||
DataDefinitionRemoteAircraftPartsWithoutLights dd;
|
DataDefinitionRemoteAircraftPartsWithoutLights dd;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace BlackSimPlugin
|
|||||||
//! Constructor
|
//! Constructor
|
||||||
CSimConnectObject();
|
CSimConnectObject();
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor, providing initial situation/parts
|
||||||
CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft,
|
CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft,
|
||||||
DWORD requestId,
|
DWORD requestId,
|
||||||
BlackMisc::Simulation::CInterpolationLogger *logger);
|
BlackMisc::Simulation::CInterpolationLogger *logger);
|
||||||
@@ -56,6 +56,12 @@ namespace BlackSimPlugin
|
|||||||
//! Interpolator
|
//! Interpolator
|
||||||
BlackMisc::Simulation::CInterpolatorSpline *getInterpolator() const { return m_interpolator.data(); }
|
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)
|
//! Get current lights (requested from simulator)
|
||||||
const BlackMisc::Aviation::CAircraftLights &getCurrentLightsInSimulator() const { return m_currentLightsInSim; }
|
const BlackMisc::Aviation::CAircraftLights &getCurrentLightsInSimulator() const { return m_currentLightsInSim; }
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,8 @@ namespace BlackSimPlugin
|
|||||||
// we will request a new aircraft by request ID, later we will receive its object id
|
// we will request a new aircraft by request ID, later we will receive its object id
|
||||||
// so far this object id is -1
|
// so far this object id is -1
|
||||||
addedAircraft.setRendered(false);
|
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);
|
m_simConnectObjects.insert(callsign, simObject);
|
||||||
adding = true;
|
adding = true;
|
||||||
}
|
}
|
||||||
@@ -906,7 +907,7 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
// get interpolated situation
|
// get interpolated situation
|
||||||
CInterpolationStatus interpolatorStatus;
|
CInterpolationStatus interpolatorStatus;
|
||||||
CInterpolationHints hints(m_hints[simObj.getCallsign()]);
|
CInterpolationHints hints(m_hints[callsign]);
|
||||||
hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts);
|
hints.setAircraftParts(useAircraftParts ? parts : CAircraftParts(), useAircraftParts);
|
||||||
hints.setLoggingInterpolation(logInterpolationAndParts);
|
hints.setLoggingInterpolation(logInterpolationAndParts);
|
||||||
const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus);
|
const CAircraftSituation interpolatedSituation = simObj.getInterpolator()->getInterpolatedSituation(currentTimestamp, setup, hints, interpolatorStatus);
|
||||||
@@ -1274,13 +1275,13 @@ namespace BlackSimPlugin
|
|||||||
void CSimulatorFsxCommon::ps_remoteProviderAddAircraftSituation(const CAircraftSituation &situation)
|
void CSimulatorFsxCommon::ps_remoteProviderAddAircraftSituation(const CAircraftSituation &situation)
|
||||||
{
|
{
|
||||||
if (!m_simConnectObjects.contains(situation.getCallsign())) { return; }
|
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)
|
void CSimulatorFsxCommon::ps_remoteProviderAddAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts)
|
||||||
{
|
{
|
||||||
if (!m_simConnectObjects.contains(callsign)) { return; }
|
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)
|
QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)
|
||||||
|
|||||||
Reference in New Issue
Block a user