mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 10:55:32 +08:00
refs #811, airports default implementation
* if no sim data are available use reader data * merge airport data for FSX * Added "network" in .pro (needed for network classes such as readers)
This commit is contained in:
@@ -114,7 +114,7 @@ namespace BlackCore
|
|||||||
//! Display a text message
|
//! Display a text message
|
||||||
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0;
|
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0;
|
||||||
|
|
||||||
//! Airports in range from simulator
|
//! Airports in range from simulator, or if not available from web service
|
||||||
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0;
|
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0;
|
||||||
|
|
||||||
//! Set time synchronization between simulator and user's computer time
|
//! Set time synchronization between simulator and user's computer time
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
|
using namespace BlackMisc::Geo;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::PhysicalQuantities;
|
using namespace BlackMisc::PhysicalQuantities;
|
||||||
@@ -62,8 +63,8 @@ namespace BlackCore
|
|||||||
);
|
);
|
||||||
|
|
||||||
// timer
|
// timer
|
||||||
this->m_oneSecondTimer.setObjectName(this->objectName().append(":m_oneSecondTimer"));
|
|
||||||
connect(&m_oneSecondTimer, &QTimer::timeout, this, &CSimulatorCommon::ps_oneSecondTimer);
|
connect(&m_oneSecondTimer, &QTimer::timeout, this, &CSimulatorCommon::ps_oneSecondTimer);
|
||||||
|
this->m_oneSecondTimer.setObjectName(this->objectName().append(":m_oneSecondTimer"));
|
||||||
this->m_oneSecondTimer.start(1000);
|
this->m_oneSecondTimer.start(1000);
|
||||||
|
|
||||||
// swift data
|
// swift data
|
||||||
@@ -76,14 +77,14 @@ namespace BlackCore
|
|||||||
CLogMessage(this).info("Initialized simulator driver %1") << m_simulatorPluginInfo.toQString();
|
CLogMessage(this).info("Initialized simulator driver %1") << m_simulatorPluginInfo.toQString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSimulatorCommon::~CSimulatorCommon() { }
|
||||||
|
|
||||||
const CLogCategoryList &CSimulatorCommon::getLogCategories()
|
const CLogCategoryList &CSimulatorCommon::getLogCategories()
|
||||||
{
|
{
|
||||||
static const CLogCategoryList cats( { CLogCategory::driver(), CLogCategory::plugin() });
|
static const CLogCategoryList cats({ CLogCategory::driver(), CLogCategory::plugin() });
|
||||||
return cats;
|
return cats;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSimulatorCommon::~CSimulatorCommon() { }
|
|
||||||
|
|
||||||
bool CSimulatorCommon::logicallyAddRemoteAircraft(const CSimulatedAircraft &remoteAircraft)
|
bool CSimulatorCommon::logicallyAddRemoteAircraft(const CSimulatedAircraft &remoteAircraft)
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(remoteAircraft.hasModelString(), Q_FUNC_INFO, "Missing model string");
|
Q_ASSERT_X(remoteAircraft.hasModelString(), Q_FUNC_INFO, "Missing model string");
|
||||||
@@ -106,6 +107,12 @@ namespace BlackCore
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CSimulatorCommon::maxAirportsInRange() const
|
||||||
|
{
|
||||||
|
// might change in future or become a setting or such
|
||||||
|
return 20;
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorCommon::blinkHighlightedAircraft()
|
void CSimulatorCommon::blinkHighlightedAircraft()
|
||||||
{
|
{
|
||||||
if (m_highlightedAircraft.isEmpty() || m_highlightEndTimeMsEpoch < 1) { return; }
|
if (m_highlightedAircraft.isEmpty() || m_highlightEndTimeMsEpoch < 1) { return; }
|
||||||
@@ -216,6 +223,17 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAirportList CSimulatorCommon::getAirportsInRange() const
|
||||||
|
{
|
||||||
|
// default implementation
|
||||||
|
if (!sApp->hasWebDataServices()) { return CAirportList(); }
|
||||||
|
|
||||||
|
const CAirportList airports = sApp->getWebDataServices()->getAirports();
|
||||||
|
if (airports.isEmpty()) { return airports; }
|
||||||
|
const CCoordinateGeodetic ownPosition = this->getOwnAircraftPosition();
|
||||||
|
return airports.findClosest(maxAirportsInRange(), ownPosition);
|
||||||
|
}
|
||||||
|
|
||||||
CAircraftModel CSimulatorCommon::reverseLookupModel(const CAircraftModel &model)
|
CAircraftModel CSimulatorCommon::reverseLookupModel(const CAircraftModel &model)
|
||||||
{
|
{
|
||||||
bool modified = false;
|
bool modified = false;
|
||||||
@@ -373,4 +391,15 @@ namespace BlackCore
|
|||||||
m_aircraftToAddAgainWhenRemoved.clear();
|
m_aircraftToAddAgainWhenRemoved.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CAirportList CSimulatorCommon::getWebServiceAirports() const
|
||||||
|
{
|
||||||
|
if (!sApp->hasWebDataServices()) { return CAirportList(); }
|
||||||
|
return sApp->getWebDataServices()->getAirports();
|
||||||
|
}
|
||||||
|
|
||||||
|
CAirport CSimulatorCommon::getWebServiceAirport(const CAirportIcaoCode &icao) const
|
||||||
|
{
|
||||||
|
if (!sApp->hasWebDataServices()) { return CAirport(); }
|
||||||
|
return sApp->getWebDataServices()->getAirports().findFirstByIcao(icao);
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ namespace BlackCore
|
|||||||
virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override;
|
virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override;
|
||||||
virtual const BlackMisc::Simulation::CSimulatorPluginInfo &getSimulatorPluginInfo() const override;
|
virtual const BlackMisc::Simulation::CSimulatorPluginInfo &getSimulatorPluginInfo() const override;
|
||||||
virtual const BlackMisc::Simulation::CSimulatorInternals &getSimulatorInternals() const override;
|
virtual const BlackMisc::Simulation::CSimulatorInternals &getSimulatorInternals() const override;
|
||||||
|
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
|
||||||
virtual void unload() override;
|
virtual void unload() override;
|
||||||
virtual int physicallyRemoveMultipleRemoteAircraft(const BlackMisc::Aviation::CCallsignSet &callsigns) override;
|
virtual int physicallyRemoveMultipleRemoteAircraft(const BlackMisc::Aviation::CCallsignSet &callsigns) override;
|
||||||
//! @}
|
//! @}
|
||||||
@@ -100,6 +101,9 @@ namespace BlackCore
|
|||||||
virtual void ps_remoteProviderRemovedAircraft(const BlackMisc::Aviation::CCallsign &callsign);
|
virtual void ps_remoteProviderRemovedAircraft(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
//! All swift data read from DB
|
||||||
|
virtual void ps_allSwiftDataRead();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info,
|
CSimulatorCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info,
|
||||||
@@ -108,11 +112,14 @@ namespace BlackCore
|
|||||||
BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider,
|
BlackMisc::Weather::IWeatherGridProvider *weatherGridProvider,
|
||||||
QObject *parent);
|
QObject *parent);
|
||||||
|
|
||||||
//! \copydoc ISimulator::logicallyAddRemoteAircraft
|
//! \name Interface implementations
|
||||||
|
//! @{
|
||||||
virtual bool logicallyAddRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
|
virtual bool logicallyAddRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
|
||||||
|
|
||||||
//! \copydoc ISimulator::logicallyRemoveRemoteAircraft
|
|
||||||
virtual bool logicallyRemoveRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
virtual bool logicallyRemoveRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
|
||||||
|
//! @}
|
||||||
|
|
||||||
|
//! Max.airports in range
|
||||||
|
int maxAirportsInRange() const;
|
||||||
|
|
||||||
//! Reset state
|
//! Reset state
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
@@ -120,6 +127,12 @@ namespace BlackCore
|
|||||||
//! Clear all aircraft related data
|
//! Clear all aircraft related data
|
||||||
virtual void clearAllAircraft();
|
virtual void clearAllAircraft();
|
||||||
|
|
||||||
|
//! Airports from web services
|
||||||
|
BlackMisc::Aviation::CAirportList getWebServiceAirports() const;
|
||||||
|
|
||||||
|
//! Airport from web services by ICAO code
|
||||||
|
BlackMisc::Aviation::CAirport getWebServiceAirport(const BlackMisc::Aviation::CAirportIcaoCode &icao) const;
|
||||||
|
|
||||||
//! Blink the highlighted aircraft
|
//! Blink the highlighted aircraft
|
||||||
void blinkHighlightedAircraft();
|
void blinkHighlightedAircraft();
|
||||||
|
|
||||||
@@ -150,10 +163,6 @@ namespace BlackCore
|
|||||||
//! Lookup against DB data
|
//! Lookup against DB data
|
||||||
static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model);
|
static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model);
|
||||||
|
|
||||||
private slots:
|
|
||||||
//! All swift data read from DB
|
|
||||||
void ps_allSwiftDataRead();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_blinkCycle = false; //!< use for highlighting
|
bool m_blinkCycle = false; //!< use for highlighting
|
||||||
qint64 m_highlightEndTimeMsEpoch = 0; //!< end highlighting
|
qint64 m_highlightEndTimeMsEpoch = 0; //!< end highlighting
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
load(common_pre)
|
load(common_pre)
|
||||||
|
|
||||||
QT += core dbus concurrent xml
|
QT += core dbus concurrent xml network
|
||||||
|
|
||||||
TARGET = simulatorfscommon
|
TARGET = simulatorfscommon
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
|
|||||||
@@ -8,17 +8,18 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "simulatorfscommon.h"
|
#include "simulatorfscommon.h"
|
||||||
|
#include "blackcore/webdataservices.h"
|
||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/stringutils.h"
|
#include "blackmisc/stringutils.h"
|
||||||
|
|
||||||
using namespace BlackMisc::PhysicalQuantities;
|
|
||||||
using namespace BlackMisc::Simulation;
|
|
||||||
using namespace BlackMisc::Simulation::FsCommon;
|
|
||||||
using namespace BlackMisc::Aviation;
|
|
||||||
using namespace BlackMisc::Network;
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
|
using namespace BlackMisc::PhysicalQuantities;
|
||||||
|
using namespace BlackMisc::Aviation;
|
||||||
|
using namespace BlackMisc::Geo;
|
||||||
|
using namespace BlackMisc::Network;
|
||||||
using namespace BlackMisc::Simulation;
|
using namespace BlackMisc::Simulation;
|
||||||
using namespace BlackMisc::Simulation::FsCommon;
|
using namespace BlackMisc::Simulation::FsCommon;
|
||||||
|
using namespace BlackCore;
|
||||||
|
|
||||||
namespace BlackSimPlugin
|
namespace BlackSimPlugin
|
||||||
{
|
{
|
||||||
@@ -80,7 +81,11 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
CAirportList CSimulatorFsCommon::getAirportsInRange() const
|
CAirportList CSimulatorFsCommon::getAirportsInRange() const
|
||||||
{
|
{
|
||||||
return m_airportsInRange;
|
if (!m_airportsInRangeFromSimulator.isEmpty())
|
||||||
|
{
|
||||||
|
return m_airportsInRangeFromSimulator;
|
||||||
|
}
|
||||||
|
return CSimulatorCommon::getAirportsInRange();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSimulatorFsCommon::changeRemoteAircraftModel(const CSimulatedAircraft &aircraft)
|
bool CSimulatorFsCommon::changeRemoteAircraftModel(const CSimulatedAircraft &aircraft)
|
||||||
@@ -104,5 +109,15 @@ namespace BlackSimPlugin
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorFsCommon::ps_allSwiftDataRead()
|
||||||
|
{
|
||||||
|
const CAirportList webServiceAirports = this->getWebServiceAirports();
|
||||||
|
if (!webServiceAirports.isEmpty())
|
||||||
|
{
|
||||||
|
this->m_airportsInRangeFromSimulator.updateMissingParts(webServiceAirports);
|
||||||
|
}
|
||||||
|
CSimulatorCommon::ps_allSwiftDataRead();
|
||||||
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ namespace BlackSimPlugin
|
|||||||
virtual bool changeRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override;
|
virtual bool changeRemoteAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
//! \copydoc BlackCore::CSimulatorCommon::ps_allSwiftDataRead
|
||||||
|
virtual void ps_allSwiftDataRead() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CSimulatorFsCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info,
|
CSimulatorFsCommon(const BlackMisc::Simulation::CSimulatorPluginInfo &info,
|
||||||
@@ -64,7 +68,7 @@ namespace BlackSimPlugin
|
|||||||
bool m_simPaused = false; //!< Simulator paused?
|
bool m_simPaused = false; //!< Simulator paused?
|
||||||
bool m_simTimeSynced = false; //!< Time synchronized?
|
bool m_simTimeSynced = false; //!< Time synchronized?
|
||||||
BlackMisc::PhysicalQuantities::CTime m_syncTimeOffset; //!< time offset
|
BlackMisc::PhysicalQuantities::CTime m_syncTimeOffset; //!< time offset
|
||||||
BlackMisc::Aviation::CAirportList m_airportsInRange; //!< airports in range of own aircraft
|
BlackMisc::Aviation::CAirportList m_airportsInRangeFromSimulator; //!< airports in range of own aircraft
|
||||||
|
|
||||||
// cockpit as set in SIM
|
// cockpit as set in SIM
|
||||||
BlackMisc::Aviation::CComSystem m_simCom1; //!< cockpit COM1 state in simulator
|
BlackMisc::Aviation::CComSystem m_simCom1; //!< cockpit COM1 state in simulator
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ namespace BlackSimPlugin
|
|||||||
}
|
}
|
||||||
case SIMCONNECT_RECV_ID_AIRPORT_LIST:
|
case SIMCONNECT_RECV_ID_AIRPORT_LIST:
|
||||||
{
|
{
|
||||||
const CLength maxDistance(200.0, CLengthUnit::NM());
|
static const CLength maxDistance(200.0, CLengthUnit::NM());
|
||||||
const CCoordinateGeodetic posAircraft(simulatorFsx->getOwnAircraftPosition());
|
const CCoordinateGeodetic posAircraft(simulatorFsx->getOwnAircraftPosition());
|
||||||
SIMCONNECT_RECV_AIRPORT_LIST *pAirportList = (SIMCONNECT_RECV_AIRPORT_LIST *) pData;
|
SIMCONNECT_RECV_AIRPORT_LIST *pAirportList = (SIMCONNECT_RECV_AIRPORT_LIST *) pData;
|
||||||
for (unsigned i = 0; i < pAirportList->dwArraySize; ++i)
|
for (unsigned i = 0; i < pAirportList->dwArraySize; ++i)
|
||||||
@@ -224,11 +224,14 @@ namespace BlackSimPlugin
|
|||||||
CAirport airport(CAirportIcaoCode(icao), pos);
|
CAirport airport(CAirportIcaoCode(icao), pos);
|
||||||
const CLength d = airport.calculcateAndUpdateRelativeDistanceAndBearing(posAircraft);
|
const CLength d = airport.calculcateAndUpdateRelativeDistanceAndBearing(posAircraft);
|
||||||
if (d > maxDistance) { continue; }
|
if (d > maxDistance) { continue; }
|
||||||
simulatorFsx->m_airportsInRange.replaceOrAddByIcao(airport);
|
airport.updateMissingParts(simulatorFsx->getWebServiceAirport(icao));
|
||||||
|
simulatorFsx->m_airportsInRangeFromSimulator.replaceOrAddByIcao(airport);
|
||||||
}
|
}
|
||||||
if (simulatorFsx->m_airportsInRange.size() > 20)
|
|
||||||
|
if (simulatorFsx->m_airportsInRangeFromSimulator.size() > simulatorFsx->maxAirportsInRange())
|
||||||
{
|
{
|
||||||
simulatorFsx->m_airportsInRange.removeIfOutsideRange(posAircraft, maxDistance, true);
|
simulatorFsx->m_airportsInRangeFromSimulator.sortByDistanceToOwnAircraft();
|
||||||
|
simulatorFsx->m_airportsInRangeFromSimulator.truncate(simulatorFsx->maxAirportsInRange());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -351,6 +351,7 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void CSimulatorXPlane::ps_setAirportsInRange(const QStringList &icaos, const QStringList &names, const BlackMisc::CSequence<double> &lats, const BlackMisc::CSequence<double> &lons, const BlackMisc::CSequence<double> &alts)
|
void CSimulatorXPlane::ps_setAirportsInRange(const QStringList &icaos, const QStringList &names, const BlackMisc::CSequence<double> &lats, const BlackMisc::CSequence<double> &lons, const BlackMisc::CSequence<double> &alts)
|
||||||
{
|
{
|
||||||
|
//! \todo restrict to maxAirportsInRange()
|
||||||
m_airportsInRange.clear();
|
m_airportsInRange.clear();
|
||||||
auto icaoIt = icaos.begin();
|
auto icaoIt = icaos.begin();
|
||||||
auto nameIt = names.begin();
|
auto nameIt = names.begin();
|
||||||
|
|||||||
Reference in New Issue
Block a user