mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 06:35:52 +08:00
Ref T259, Ref T243 remove aircraft parts and situations from interpolator
* no longer using the add parts/situations signals * will use the remote aircraft provider parts directly Result: all parts/situations are stored only once in memory and in one single place
This commit is contained in:
@@ -314,23 +314,6 @@ namespace BlackSimPlugin
|
||||
return CSimulatorCommon::physicallyRemoveAllRemoteAircraft();
|
||||
}
|
||||
|
||||
void CSimulatorEmulated::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
const CCallsign cs = situation.getCallsign();
|
||||
if (!m_interpolators.contains(cs)) { return; }
|
||||
CInterpolatorMulti *im = m_interpolators[cs];
|
||||
Q_ASSERT_X(im, Q_FUNC_INFO, "no interpolator");
|
||||
im->addAircraftSituation(situation);
|
||||
}
|
||||
|
||||
void BlackSimPlugin::Emulated::CSimulatorEmulated::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts)
|
||||
{
|
||||
if (!m_interpolators.contains(callsign)) { return; }
|
||||
CInterpolatorMulti *im = m_interpolators[callsign];
|
||||
Q_ASSERT_X(im, Q_FUNC_INFO, "no interpolator");
|
||||
im->addAircraftParts(parts);
|
||||
}
|
||||
|
||||
bool CSimulatorEmulated::parseDetails(const CSimpleCommandParser &parser)
|
||||
{
|
||||
if (m_monitorWidget && parser.isKnownCommand())
|
||||
|
||||
@@ -124,12 +124,6 @@ namespace BlackSimPlugin
|
||||
// just logged
|
||||
virtual int physicallyRemoveAllRemoteAircraft() override;
|
||||
|
||||
//! \name Remote aircraft provider overrides
|
||||
//! @{
|
||||
virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||
//! @}
|
||||
|
||||
//! \copydoc BlackCore::CSimulatorCommon::parseDetails
|
||||
virtual bool parseDetails(const BlackMisc::CSimpleCommandParser &parser) override;
|
||||
|
||||
|
||||
@@ -205,8 +205,8 @@ namespace BlackSimPlugin
|
||||
if (!m_simulator) { return; }
|
||||
ui->le_PhysicallyAddedAircraft->setText(QString::number(m_simulator->getStatisticsPhysicallyAddedAircraft()));
|
||||
ui->le_PhysicallyRemovedAircraft->setText(QString::number(m_simulator->getStatisticsPhysicallyRemovedAircraft()));
|
||||
ui->le_SituationAdded->setText(QString::number(m_simulator->getStatisticsSituationAdded()));
|
||||
ui->le_PartsAdded->setText(QString::number(m_simulator->getStatisticsPartsAdded()));
|
||||
// ui->le_SituationAdded->setText(QString::number(m_simulator->getStatisticsSituationAdded()));
|
||||
// ui->le_PartsAdded->setText(QString::number(m_simulator->getStatisticsPartsAdded()));
|
||||
ui->le_AircraftRendered->setText(QString::number(m_simulator->m_renderedAircraft.size()));
|
||||
ui->le_PartsEnabledAircraft->setText(QString::number(m_simulator->getRemoteAircraftSupportingPartsCount()));
|
||||
}
|
||||
|
||||
@@ -415,20 +415,6 @@ namespace BlackSimPlugin
|
||||
m_fsuipc->write(weatherGrid);
|
||||
}
|
||||
|
||||
void CSimulatorFs9::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
const auto it = m_hashFs9Clients.find(situation.getCallsign());
|
||||
if (it == m_hashFs9Clients.end()) { return; }
|
||||
QTimer::singleShot(0, it->data(), [client = *it, situation] { client->getInterpolator()->addAircraftSituation(situation); });
|
||||
}
|
||||
|
||||
void CSimulatorFs9::onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const CAircraftParts &parts)
|
||||
{
|
||||
const auto it = m_hashFs9Clients.find(callsign);
|
||||
if (it == m_hashFs9Clients.end()) { return; }
|
||||
QTimer::singleShot(0, it->data(), [client = *it, parts] { client->getInterpolator()->addAircraftParts(parts); });
|
||||
}
|
||||
|
||||
CSimulatorFs9Listener::CSimulatorFs9Listener(const CSimulatorPluginInfo &info,
|
||||
const QSharedPointer<CFs9Host> &fs9Host,
|
||||
const QSharedPointer<CLobbyClient> &lobbyClient) :
|
||||
|
||||
@@ -80,12 +80,6 @@ namespace BlackSimPlugin
|
||||
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override;
|
||||
//! @}
|
||||
|
||||
//! \name Remote aircraft provider overrides
|
||||
//! @{
|
||||
virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||
//! @}
|
||||
|
||||
private:
|
||||
//! Dispatch FSUIPC reading
|
||||
//! \remark very frequently called
|
||||
|
||||
@@ -28,38 +28,6 @@ namespace BlackSimPlugin
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign()))
|
||||
{
|
||||
m_interpolator->attachLogger(logger);
|
||||
|
||||
// if available set situation and parts
|
||||
if (aircraft.isPartsSynchronized()) { this->addAircraftParts(aircraft.getParts()); }
|
||||
if (aircraft.getSituation().hasValidTimestamp()) { this->addAircraftSituation(aircraft.getSituation()); }
|
||||
}
|
||||
|
||||
CSimConnectObject::CSimConnectObject(const CAircraftSituation &situation) :
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(situation.getCallsign()))
|
||||
{
|
||||
if (situation.hasValidTimestamp()) { this->addAircraftSituation(situation); }
|
||||
}
|
||||
|
||||
CSimConnectObject::CSimConnectObject(const CAircraftParts &parts, const CCallsign &callsign) :
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(callsign))
|
||||
{
|
||||
if (parts.hasValidTimestamp()) { this->addAircraftParts(parts); }
|
||||
}
|
||||
|
||||
void CSimConnectObject::addAircraftParts(const CAircraftParts &parts)
|
||||
{
|
||||
Q_ASSERT(m_interpolator);
|
||||
Q_ASSERT(parts.hasValidTimestamp());
|
||||
m_interpolator->addAircraftParts(parts);
|
||||
m_aircraft.setParts(parts);
|
||||
}
|
||||
|
||||
void CSimConnectObject::addAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
Q_ASSERT(m_interpolator);
|
||||
Q_ASSERT(situation.hasValidTimestamp());
|
||||
m_interpolator->addAircraftSituation(situation);
|
||||
m_aircraft.setSituation(situation); // update with last situation
|
||||
}
|
||||
|
||||
void CSimConnectObject::invalidatePartsAsSent()
|
||||
|
||||
@@ -34,12 +34,6 @@ namespace BlackSimPlugin
|
||||
DWORD requestId,
|
||||
BlackMisc::Simulation::CInterpolationLogger *logger);
|
||||
|
||||
//! Constructor providing initial situation
|
||||
CSimConnectObject(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||
|
||||
//! Constructor providing initial parts
|
||||
CSimConnectObject(const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Aviation::CCallsign &callsign);
|
||||
|
||||
//! Destructor
|
||||
~CSimConnectObject() {}
|
||||
|
||||
@@ -55,12 +49,6 @@ namespace BlackSimPlugin
|
||||
//! Set the aircraft
|
||||
void setAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) { m_aircraft = aircraft; }
|
||||
|
||||
//! 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; }
|
||||
|
||||
|
||||
@@ -1465,46 +1465,6 @@ namespace BlackSimPlugin
|
||||
CSimulatorFsCommon::clearAllRemoteAircraftData();
|
||||
}
|
||||
|
||||
void CSimulatorFsxCommon::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
if (m_simConnectObjects.contains(situation.getCallsign()))
|
||||
{
|
||||
m_simConnectObjects[situation.getCallsign()].addAircraftSituation(situation);
|
||||
}
|
||||
else
|
||||
{
|
||||
// trace for future usage
|
||||
if (m_simConnectObjectsPositionAndPartsTraces.contains(situation.getCallsign()))
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces[situation.getCallsign()].addAircraftSituation(situation);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces.insert(situation.getCallsign(), CSimConnectObject(situation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSimulatorFsxCommon::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts)
|
||||
{
|
||||
if (m_simConnectObjects.contains(callsign))
|
||||
{
|
||||
m_simConnectObjects[callsign].addAircraftParts(parts);
|
||||
}
|
||||
else
|
||||
{
|
||||
// trace for future usage
|
||||
if (m_simConnectObjectsPositionAndPartsTraces.contains(callsign))
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces[callsign].addAircraftParts(parts);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces.insert(callsign, CSimConnectObject(parts, callsign));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)
|
||||
{
|
||||
static const QString positionStr("Lat: %1deg lng: %2deg alt: %3ft pitch: %4deg bank: %5deg hdg: %6deg airspeed: %7kts onGround: %8");
|
||||
|
||||
@@ -148,12 +148,6 @@ namespace BlackSimPlugin
|
||||
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid) override;
|
||||
//! @}
|
||||
|
||||
//! \name Remote aircraft provider overrides
|
||||
//! @{
|
||||
virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||
//! @}
|
||||
|
||||
//! Timer event (our SimConnect event loop), runs dispatch
|
||||
//! \sa m_timerId
|
||||
//! \sa CSimulatorFsxCommon::dispatch
|
||||
|
||||
@@ -546,82 +546,6 @@ namespace BlackSimPlugin
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSimulatorXPlane::onRemoteProviderAddedAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
Q_ASSERT(isConnected());
|
||||
if (c_driverInterpolation)
|
||||
{
|
||||
if (m_xplaneAircraftObjects.contains(situation.getCallsign()))
|
||||
{
|
||||
m_xplaneAircraftObjects[situation.getCallsign()].addAircraftSituation(situation);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using namespace PhysicalQuantities;
|
||||
m_trafficProxy->addPlanePosition(situation.getCallsign().asString(),
|
||||
situation.latitude().value(CAngleUnit::deg()),
|
||||
situation.longitude().value(CAngleUnit::deg()),
|
||||
situation.getAltitude().value(CLengthUnit::ft()),
|
||||
situation.getPitch().value(CAngleUnit::deg()),
|
||||
situation.getBank().value(CAngleUnit::deg()),
|
||||
situation.getHeading().value(CAngleUnit::deg()),
|
||||
situation.getMSecsSinceEpoch() - QDateTime::currentMSecsSinceEpoch(),
|
||||
situation.getTimeOffsetMs());
|
||||
|
||||
if (! isRemoteAircraftSupportingParts(situation.getCallsign()))
|
||||
{
|
||||
// if aircraft not supporting parts then guess the basics (onGround, gear, lights)
|
||||
//! \todo not working for VTOL
|
||||
CAircraftParts parts;
|
||||
parts.setMSecsSinceEpoch(situation.getMSecsSinceEpoch());
|
||||
parts.setTimeOffsetMs(situation.getTimeOffsetMs());
|
||||
if (situation.getGroundSpeed() < CSpeed(50, CSpeedUnit::kts()))
|
||||
{
|
||||
const auto nearestAirport = std::min_element(m_airportsInRange.cbegin(), m_airportsInRange.cend(), [&situation](auto &&a, auto &&b)
|
||||
{
|
||||
return calculateEuclideanDistanceSquared(situation, a) < calculateEuclideanDistanceSquared(situation, b);
|
||||
});
|
||||
if (nearestAirport != m_airportsInRange.cend() && situation.getAltitude() - nearestAirport->getElevation() < CLength(50, CLengthUnit::ft()))
|
||||
{
|
||||
parts.setOnGround(true);
|
||||
parts.setGearDown(true);
|
||||
}
|
||||
}
|
||||
if (situation.getAltitude() < CAltitude(10000, CLengthUnit::ft()))
|
||||
{
|
||||
parts.setLights({ true, true, true, true, true, true, true, true });
|
||||
}
|
||||
else
|
||||
{
|
||||
parts.setLights({ true, false, false, true, true, true, true, true });
|
||||
}
|
||||
onRemoteProviderAddedAircraftParts(situation.getCallsign(), parts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSimulatorXPlane::onRemoteProviderAddedAircraftParts(const CCallsign &callsign, const CAircraftParts &parts)
|
||||
{
|
||||
Q_ASSERT(this->isConnected());
|
||||
if (c_driverInterpolation)
|
||||
{
|
||||
if (m_xplaneAircraftObjects.contains(callsign))
|
||||
{
|
||||
m_xplaneAircraftObjects[callsign].addAircraftParts(parts);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_trafficProxy->addPlaneSurfaces(callsign.asString(), parts.isGearDown() ? 1 : 0,
|
||||
parts.getFlapsPercent() / 100.0, parts.isSpoilersOut() ? 1 : 0, parts.isSpoilersOut() ? 1 : 0, parts.getFlapsPercent() / 100.0,
|
||||
0, parts.isAnyEngineOn() ? 0 : 0.75, 0, 0, 0,
|
||||
parts.getLights().isLandingOn(), parts.getLights().isBeaconOn(), parts.getLights().isStrobeOn(), parts.getLights().isNavOn(),
|
||||
0, parts.isOnGround(), parts.getMSecsSinceEpoch() - QDateTime::currentMSecsSinceEpoch(), parts.getTimeOffsetMs());
|
||||
m_trafficProxy->setPlaneTransponder(callsign.asString(), 2000, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
bool CSimulatorXPlane::physicallyRemoveRemoteAircraft(const CCallsign &callsign)
|
||||
{
|
||||
Q_ASSERT(isConnected());
|
||||
|
||||
@@ -108,12 +108,6 @@ namespace BlackSimPlugin
|
||||
static QDBusConnection connectionFromString(const QString &str);
|
||||
|
||||
protected:
|
||||
//! \name Remote aircraft provider overrides
|
||||
//! @{
|
||||
virtual void onRemoteProviderAddedAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual void onRemoteProviderAddedAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||
//! @}
|
||||
|
||||
//! \copydoc BlackCore::ISimulator::isConnected
|
||||
virtual bool isConnected() const override;
|
||||
|
||||
|
||||
@@ -26,39 +26,15 @@ namespace BlackSimPlugin
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign()))
|
||||
{
|
||||
m_interpolator->attachLogger(logger);
|
||||
|
||||
// if available set situation and parts
|
||||
if (aircraft.isPartsSynchronized()) { this->addAircraftParts(aircraft.getParts()); }
|
||||
if (aircraft.getSituation().hasValidTimestamp()) { this->addAircraftSituation(aircraft.getSituation()); }
|
||||
}
|
||||
|
||||
CXPlaneMPAircraft::CXPlaneMPAircraft(const CAircraftSituation &situation) :
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(situation.getCallsign()))
|
||||
{
|
||||
if (situation.hasValidTimestamp()) { this->addAircraftSituation(situation); }
|
||||
}
|
||||
{ }
|
||||
|
||||
CXPlaneMPAircraft::CXPlaneMPAircraft(const CAircraftParts &parts, const CCallsign &callsign) :
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(callsign))
|
||||
{
|
||||
if (parts.hasValidTimestamp()) { this->addAircraftParts(parts); }
|
||||
}
|
||||
|
||||
void CXPlaneMPAircraft::addAircraftParts(const CAircraftParts &parts)
|
||||
{
|
||||
Q_ASSERT(m_interpolator);
|
||||
Q_ASSERT(parts.hasValidTimestamp());
|
||||
m_interpolator->addAircraftParts(parts);
|
||||
m_aircraft.setParts(parts);
|
||||
}
|
||||
|
||||
void CXPlaneMPAircraft::addAircraftSituation(const CAircraftSituation &situation)
|
||||
{
|
||||
Q_ASSERT(m_interpolator);
|
||||
Q_ASSERT(situation.hasValidTimestamp());
|
||||
m_interpolator->addAircraftSituation(situation);
|
||||
m_aircraft.setSituation(situation); // update with last situation
|
||||
}
|
||||
{ }
|
||||
|
||||
bool CXPlaneMPAircraft::isSameAsSent(const CAircraftSituation &position) const
|
||||
{
|
||||
|
||||
@@ -53,12 +53,6 @@ namespace BlackSimPlugin
|
||||
//! Set the aircraft
|
||||
void setAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) { m_aircraft = aircraft; }
|
||||
|
||||
//! Add parts for interpolator
|
||||
void addAircraftParts(const BlackMisc::Aviation::CAircraftParts &parts);
|
||||
|
||||
//! Add situation for interpolator
|
||||
void addAircraftSituation(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||
|
||||
//! Parts as sent to simulator
|
||||
const BlackMisc::Aviation::CAircraftParts &getPartsAsSent() const { return m_partsAsSent; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user