mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
Ref T786, simulator context
* use identifier based "requestWeatherGrid" * injectWeatherGrid now public * clean m_lastWeatherPosition if weather is de-activated * inject weather CContextSimulator::onWeatherGridReceived 1) this automatically injects the weather, the callback is not needed 2) the callback was the part which crashed
This commit is contained in:
committed by
Mat Sutcliffe
parent
e7875c3af8
commit
58583d3ffa
@@ -314,7 +314,7 @@ namespace BlackCore
|
||||
virtual void setWeatherActivated(bool activated) = 0;
|
||||
|
||||
//! Request weather grid. Argument identifier is past in the signal to identify the requestor
|
||||
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) = 0;
|
||||
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) = 0;
|
||||
|
||||
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevationBySituation
|
||||
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) = 0;
|
||||
|
||||
@@ -55,8 +55,8 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::setSimulatorSettings
|
||||
virtual bool setSimulatorSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulatorInfo) override
|
||||
{
|
||||
Q_UNUSED(settings);
|
||||
Q_UNUSED(simulatorInfo);
|
||||
Q_UNUSED(settings)
|
||||
Q_UNUSED(simulatorInfo)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -64,7 +64,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::startSimulatorPlugin
|
||||
virtual bool startSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override
|
||||
{
|
||||
Q_UNUSED(simulatorInfo);
|
||||
Q_UNUSED(simulatorInfo)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -85,14 +85,14 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::stopSimulatorPlugin
|
||||
virtual void stopSimulatorPlugin(const BlackMisc::Simulation::CSimulatorPluginInfo &simulatorInfo) override
|
||||
{
|
||||
Q_UNUSED(simulatorInfo);
|
||||
Q_UNUSED(simulatorInfo)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc IContextSimulator::getAirportsInRange
|
||||
virtual BlackMisc::Aviation::CAirportList getAirportsInRange(bool recalculatePosition) const override
|
||||
{
|
||||
Q_UNUSED(recalculatePosition);
|
||||
Q_UNUSED(recalculatePosition)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::Aviation::CAirportList();
|
||||
}
|
||||
@@ -224,8 +224,8 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::setTimeSynchronization
|
||||
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override
|
||||
{
|
||||
Q_UNUSED(enable);
|
||||
Q_UNUSED(offset);
|
||||
Q_UNUSED(enable)
|
||||
Q_UNUSED(offset)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -254,7 +254,7 @@ namespace BlackCore
|
||||
//! \copydoc ISimulator::getInterpolationSetupPerCallsignOrDefault
|
||||
virtual BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign getInterpolationAndRenderingSetupPerCallsignOrDefault(const BlackMisc::Aviation::CCallsign &callsign) const override
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(callsign)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign();
|
||||
}
|
||||
@@ -262,15 +262,15 @@ namespace BlackCore
|
||||
//! \copydoc BlackMisc::Simulation::IInterpolationSetupProvider::setInterpolationSetupGlobal
|
||||
virtual void setInterpolationAndRenderingSetupGlobal(const BlackMisc::Simulation::CInterpolationAndRenderingSetupGlobal &setup) override
|
||||
{
|
||||
Q_UNUSED(setup);
|
||||
Q_UNUSED(setup)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc BlackMisc::Simulation::IInterpolationSetupProvider::setInterpolationSetupsPerCallsign
|
||||
virtual bool setInterpolationAndRenderingSetupsPerCallsign(const BlackMisc::Simulation::CInterpolationSetupList &setups, bool ignoreSameAsGlobal) override
|
||||
{
|
||||
Q_UNUSED(setups);
|
||||
Q_UNUSED(ignoreSameAsGlobal);
|
||||
Q_UNUSED(setups)
|
||||
Q_UNUSED(ignoreSameAsGlobal)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -278,7 +278,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::getInterpolationMessages
|
||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(callsign)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::CStatusMessageList();
|
||||
}
|
||||
@@ -293,7 +293,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::iconForModel
|
||||
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override
|
||||
{
|
||||
Q_UNUSED(modelString);
|
||||
Q_UNUSED(modelString)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::CPixmap();
|
||||
}
|
||||
@@ -301,16 +301,16 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::highlightAircraft
|
||||
virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override
|
||||
{
|
||||
Q_UNUSED(aircraftToHighlight);
|
||||
Q_UNUSED(enableHighlight);
|
||||
Q_UNUSED(displayTime);
|
||||
Q_UNUSED(aircraftToHighlight)
|
||||
Q_UNUSED(enableHighlight)
|
||||
Q_UNUSED(displayTime)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc IContextSimulator::followAircraft
|
||||
virtual bool followAircraft(const BlackMisc::Aviation::CCallsign &callsign) override
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(callsign)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -324,7 +324,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::resetToModelMatchingAircraft
|
||||
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(callsign)
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::doMatchingAgain
|
||||
virtual bool doMatchingAgain(const BlackMisc::Aviation::CCallsign &callsign) override
|
||||
{
|
||||
Q_UNUSED(callsign);
|
||||
Q_UNUSED(callsign)
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -352,22 +352,22 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::setWeatherActivated
|
||||
virtual void setWeatherActivated(bool activated) override
|
||||
{
|
||||
Q_UNUSED(activated);
|
||||
Q_UNUSED(activated)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc IContextSimulator::requestWeatherGrid
|
||||
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override
|
||||
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override
|
||||
{
|
||||
Q_UNUSED(weatherGrid);
|
||||
Q_UNUSED(identifier);
|
||||
Q_UNUSED(position)
|
||||
Q_UNUSED(identifier)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc IContextSimulator::requestWeatherGrid
|
||||
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override
|
||||
{
|
||||
Q_UNUSED(situation);
|
||||
Q_UNUSED(situation)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -375,8 +375,8 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::findClosestElevationWithinRange
|
||||
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override
|
||||
{
|
||||
Q_UNUSED(reference);
|
||||
Q_UNUSED(range);
|
||||
Q_UNUSED(reference)
|
||||
Q_UNUSED(range)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::Geo::CElevationPlane::null();
|
||||
}
|
||||
@@ -392,7 +392,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::enableMatchingMessages
|
||||
virtual void enableMatchingMessages(BlackMisc::Simulation::MatchingLog enable) override
|
||||
{
|
||||
Q_UNUSED(enable);
|
||||
Q_UNUSED(enable)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
@@ -406,8 +406,8 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::parseCommandLine
|
||||
virtual bool parseCommandLine(const QString &commandLine, const BlackMisc::CIdentifier &originator) override
|
||||
{
|
||||
Q_UNUSED(commandLine);
|
||||
Q_UNUSED(originator);
|
||||
Q_UNUSED(commandLine)
|
||||
Q_UNUSED(originator)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -415,7 +415,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::getCurrentMatchingStatistics
|
||||
virtual BlackMisc::Simulation::CMatchingStatistics getCurrentMatchingStatistics(bool missingOnly) const override
|
||||
{
|
||||
Q_UNUSED(missingOnly);
|
||||
Q_UNUSED(missingOnly)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return BlackMisc::Simulation::CMatchingStatistics();
|
||||
}
|
||||
@@ -423,15 +423,15 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::setMatchingSetup
|
||||
virtual void setMatchingSetup(const BlackMisc::Simulation::CAircraftMatcherSetup &setup) override
|
||||
{
|
||||
Q_UNUSED(setup);
|
||||
Q_UNUSED(setup)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
}
|
||||
|
||||
//! \copydoc IContextSimulator::testRemoteAircraft
|
||||
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override
|
||||
{
|
||||
Q_UNUSED(aircraft);
|
||||
Q_UNUSED(add);
|
||||
Q_UNUSED(aircraft)
|
||||
Q_UNUSED(add)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -439,9 +439,9 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::testUpdateRemoteAircraft
|
||||
virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override
|
||||
{
|
||||
Q_UNUSED(cs);
|
||||
Q_UNUSED(situation);
|
||||
Q_UNUSED(parts);
|
||||
Q_UNUSED(cs)
|
||||
Q_UNUSED(situation)
|
||||
Q_UNUSED(parts)
|
||||
logEmptyContextWarning(Q_FUNC_INFO);
|
||||
return false;
|
||||
}
|
||||
@@ -456,7 +456,7 @@ namespace BlackCore
|
||||
//! \copydoc IContextSimulator::copyFsxTerrainProbe
|
||||
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override
|
||||
{
|
||||
Q_UNUSED(simulator);
|
||||
Q_UNUSED(simulator)
|
||||
return BlackMisc::CStatusMessageList();
|
||||
}
|
||||
|
||||
|
||||
@@ -77,7 +77,8 @@ namespace BlackCore
|
||||
m_plugins->collectPlugins();
|
||||
this->restoreSimulatorPlugins();
|
||||
|
||||
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::weatherGridReceived, Qt::QueuedConnection);
|
||||
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::weatherGridReceived, Qt::QueuedConnection);
|
||||
connect(&m_weatherManager, &CWeatherManager::weatherGridReceived, this, &CContextSimulator::onWeatherGridReceived, Qt::QueuedConnection);
|
||||
connect(&m_aircraftMatcher, &CAircraftMatcher::setupChanged, this, &CContextSimulator::matchingSetupChanged);
|
||||
connect(&CCentralMultiSimulatorModelSetCachesProvider::modelCachesInstance(), &CCentralMultiSimulatorModelSetCachesProvider::cacheChanged, this, &CContextSimulator::modelSetChanged);
|
||||
|
||||
@@ -870,6 +871,16 @@ namespace BlackCore
|
||||
emit this->addingRemoteModelFailed(remoteAircraft, disabled, failover, message);
|
||||
}
|
||||
|
||||
void CContextSimulator::onWeatherGridReceived(const CWeatherGrid &weatherGrid, const CIdentifier &identifier)
|
||||
{
|
||||
if (!this->isSimulatorPluginAvailable()) { return; }
|
||||
if (!m_simulatorPlugin.second) { return; }
|
||||
if (m_simulatorPlugin.second->identifier() == identifier)
|
||||
{
|
||||
m_simulatorPlugin.second->injectWeatherGrid(weatherGrid);
|
||||
}
|
||||
}
|
||||
|
||||
void CContextSimulator::xCtxUpdateSimulatorCockpitFromContext(const CSimulatedAircraft &ownAircraft, const CIdentifier &originator)
|
||||
{
|
||||
if (!this->isSimulatorAvailable()) { return; }
|
||||
@@ -1141,10 +1152,10 @@ namespace BlackCore
|
||||
m_simulatorPlugin.second->setWeatherActivated(activated);
|
||||
}
|
||||
|
||||
void CContextSimulator::requestWeatherGrid(const CWeatherGrid &weatherGrid, const CIdentifier &identifier)
|
||||
void CContextSimulator::requestWeatherGrid(const CCoordinateGeodetic &position, const CIdentifier &identifier)
|
||||
{
|
||||
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << identifier; }
|
||||
m_weatherManager.requestWeatherGrid(weatherGrid, identifier);
|
||||
m_weatherManager.requestWeatherGrid(position, identifier);
|
||||
}
|
||||
|
||||
bool CContextSimulator::requestElevationBySituation(const CAircraftSituation &situation)
|
||||
@@ -1240,7 +1251,7 @@ namespace BlackCore
|
||||
{
|
||||
const bool s = QMetaObject::invokeMethod(listener, &ISimulatorListener::stop);
|
||||
Q_ASSERT_X(s, Q_FUNC_INFO, "Cannot invoke stop");
|
||||
Q_UNUSED(s);
|
||||
Q_UNUSED(s)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace BlackCore
|
||||
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual bool isWeatherActivated() const override;
|
||||
virtual void setWeatherActivated(bool activated) override;
|
||||
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override;
|
||||
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override;
|
||||
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override;
|
||||
virtual int doMatchingsAgain() override;
|
||||
@@ -236,6 +236,9 @@ namespace BlackCore
|
||||
//! Failed adding remote aircraft
|
||||
void onAddingRemoteAircraftFailed(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, bool disabled, bool requestFailover, const BlackMisc::CStatusMessage &message);
|
||||
|
||||
//! Weather request was received
|
||||
void onWeatherGridReceived(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier);
|
||||
|
||||
//! Relay status message to simulator under consideration of settings
|
||||
void relayStatusMessageToSimulator(const BlackMisc::CStatusMessage &message);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace BlackCore
|
||||
// connect signals, asserts when failures
|
||||
QDBusConnection con = QDBusConnection::sessionBus();
|
||||
CContextSimulatorProxy c(CDBusServer::coreServiceName(), con, CCoreFacadeConfig::Remote, nullptr);
|
||||
Q_UNUSED(c);
|
||||
Q_UNUSED(c)
|
||||
}
|
||||
|
||||
void CContextSimulatorProxy::relaySignals(const QString &serviceName, QDBusConnection &connection)
|
||||
@@ -104,7 +104,7 @@ namespace BlackCore
|
||||
s = connection.connect(serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
|
||||
"validatedModelSet", this, SIGNAL(validatedModelSet(BlackMisc::Simulation::CSimulatorInfo, BlackMisc::Simulation::CAircraftModelList, BlackMisc::Simulation::CAircraftModelList, bool, BlackMisc::CStatusMessageList)));
|
||||
Q_ASSERT(s);
|
||||
Q_UNUSED(s);
|
||||
Q_UNUSED(s)
|
||||
this->relayBaseClassSignals(serviceName, connection, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName());
|
||||
}
|
||||
|
||||
@@ -318,9 +318,9 @@ namespace BlackCore
|
||||
m_dBusInterface->callDBus(QLatin1String("setWeatherActivated"), activated);
|
||||
}
|
||||
|
||||
void CContextSimulatorProxy::requestWeatherGrid(const Weather::CWeatherGrid &weatherGrid, const CIdentifier &identifier)
|
||||
void CContextSimulatorProxy::requestWeatherGrid(const CCoordinateGeodetic &position, const CIdentifier &identifier)
|
||||
{
|
||||
m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), weatherGrid, identifier);
|
||||
m_dBusInterface->callDBus(QLatin1String("requestWeatherGrid"), position, identifier);
|
||||
}
|
||||
|
||||
bool CContextSimulatorProxy::requestElevationBySituation(const CAircraftSituation &situation)
|
||||
|
||||
@@ -100,7 +100,7 @@ namespace BlackCore
|
||||
virtual bool resetToModelMatchingAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||
virtual bool isWeatherActivated() const override;
|
||||
virtual void setWeatherActivated(bool activated) override;
|
||||
virtual void requestWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid, const BlackMisc::CIdentifier &identifier) override;
|
||||
virtual void requestWeatherGrid(const BlackMisc::Geo::CCoordinateGeodetic &position, const BlackMisc::CIdentifier &identifier) override;
|
||||
virtual bool requestElevationBySituation(const BlackMisc::Aviation::CAircraftSituation &situation) override;
|
||||
virtual BlackMisc::Geo::CElevationPlane findClosestElevationWithinRange(const BlackMisc::Geo::CCoordinateGeodetic &reference, const BlackMisc::PhysicalQuantities::CLength &range) const override;
|
||||
virtual BlackMisc::CStatusMessageList getMatchingMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
|
||||
@@ -148,6 +148,10 @@ namespace BlackCore
|
||||
this->injectWeatherGrid(CWeatherGrid::getByScenario(selectedWeatherScenario));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_lastWeatherPosition = {}; // clean up so next time we fetch weather again
|
||||
}
|
||||
}
|
||||
|
||||
void ISimulator::setFlightNetworkConnected(bool connected)
|
||||
|
||||
@@ -270,6 +270,9 @@ namespace BlackCore
|
||||
//! \remark public for testing purposes
|
||||
virtual void callbackReceivedRequestedElevation(const BlackMisc::Geo::CElevationPlane &plane, const BlackMisc::Aviation::CCallsign &callsign, bool isWater);
|
||||
|
||||
//! Inject weather grid to simulator
|
||||
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid);
|
||||
|
||||
//! Allows to print out simulator specific statistics
|
||||
virtual QString getStatisticsSimulatorSpecific() const { return QString(); }
|
||||
|
||||
@@ -524,9 +527,6 @@ namespace BlackCore
|
||||
//! Kill timer if id is valid
|
||||
void safeKillTimer();
|
||||
|
||||
//! Inject weather grid to simulator
|
||||
virtual void injectWeatherGrid(const BlackMisc::Weather::CWeatherGrid &weatherGrid);
|
||||
|
||||
//! Blink the highlighted aircraft
|
||||
void blinkHighlightedAircraft();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user