mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-28 03:35:38 +08:00
refs #435 Read installed models from X-Plane via xbus
This commit is contained in:
committed by
Mathew Sutcliffe
parent
d24488d38f
commit
25cdff54f3
@@ -151,6 +151,23 @@ namespace BlackSimPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSimulatorXPlane::ps_installedModelsUpdated(const QStringList &modelStrings, const QStringList &icaos, const QStringList &airlines, const QStringList &liveries)
|
||||||
|
{
|
||||||
|
m_installedModels.clear();
|
||||||
|
auto modelStringsIt = modelStrings.begin();
|
||||||
|
auto icaosIt = icaos.begin();
|
||||||
|
auto airlinesIt = airlines.begin();
|
||||||
|
auto liveriesIt = liveries.begin();
|
||||||
|
for (; modelStringsIt != modelStrings.end() && icaosIt != icaos.end() && airlinesIt != airlines.end() && liveriesIt != liveries.end(); ++modelStringsIt, ++icaosIt, ++airlinesIt, ++liveriesIt)
|
||||||
|
{
|
||||||
|
using namespace BlackMisc::Simulation;
|
||||||
|
CAircraftIcaoData icaoData {*icaosIt, *airlinesIt};
|
||||||
|
icaoData.setLivery(*liveriesIt);
|
||||||
|
CAircraftModel aircraftModel { *modelStringsIt, CAircraftModel::TypeModelMapping, QString(), icaoData };
|
||||||
|
m_installedModels.push_back(aircraftModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool CSimulatorXPlane::isConnected() const
|
bool CSimulatorXPlane::isConnected() const
|
||||||
{
|
{
|
||||||
return m_service && m_traffic;
|
return m_service && m_traffic;
|
||||||
@@ -168,7 +185,9 @@ namespace BlackSimPlugin
|
|||||||
// FIXME duplication
|
// FIXME duplication
|
||||||
connect(m_service, &CXBusServiceProxy::aircraftModelChanged, this, &CSimulatorXPlane::ps_emitOwnAircraftModelChanged);
|
connect(m_service, &CXBusServiceProxy::aircraftModelChanged, this, &CSimulatorXPlane::ps_emitOwnAircraftModelChanged);
|
||||||
connect(m_service, &CXBusServiceProxy::airportsInRangeUpdated, this, &CSimulatorXPlane::ps_setAirportsInRange);
|
connect(m_service, &CXBusServiceProxy::airportsInRangeUpdated, this, &CSimulatorXPlane::ps_setAirportsInRange);
|
||||||
|
connect(m_traffic, &CXBusTrafficProxy::installedModelsUpdated, this, &CSimulatorXPlane::ps_installedModelsUpdated);
|
||||||
m_service->updateAirportsInRange();
|
m_service->updateAirportsInRange();
|
||||||
|
m_traffic->updateInstalledModels();
|
||||||
m_watcher->setConnection(m_conn);
|
m_watcher->setConnection(m_conn);
|
||||||
emitSimulatorCombinedStatus();
|
emitSimulatorCombinedStatus();
|
||||||
return true;
|
return true;
|
||||||
@@ -243,12 +262,10 @@ namespace BlackSimPlugin
|
|||||||
Q_UNUSED(message);
|
Q_UNUSED(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
BlackMisc::Simulation::CAircraftModelList CSimulatorXPlane::getInstalledModels() const
|
CAircraftModelList CSimulatorXPlane::getInstalledModels() const
|
||||||
{
|
{
|
||||||
Q_ASSERT(isConnected());
|
Q_ASSERT(isConnected());
|
||||||
//! \todo XP driver, function not available
|
return m_installedModels;
|
||||||
CLogMessage(this).error("Function not avialable");
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimulatorXPlane::reloadInstalledModels()
|
void CSimulatorXPlane::reloadInstalledModels()
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "blackcore/simulator_common.h"
|
#include "blackcore/simulator_common.h"
|
||||||
#include "blackmisc/simulation/ownaircraftprovider.h"
|
#include "blackmisc/simulation/ownaircraftprovider.h"
|
||||||
|
#include "blackmisc/simulation/aircraftmodellist.h"
|
||||||
#include "blackmisc/pixmap.h"
|
#include "blackmisc/pixmap.h"
|
||||||
#include <QDBusConnection>
|
#include <QDBusConnection>
|
||||||
|
|
||||||
@@ -129,6 +130,7 @@ namespace BlackSimPlugin
|
|||||||
void ps_emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, const QString &icao);
|
void ps_emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, const QString &icao);
|
||||||
void ps_fastTimerTimeout();
|
void ps_fastTimerTimeout();
|
||||||
void ps_slowTimerTimeout();
|
void ps_slowTimerTimeout();
|
||||||
|
void ps_installedModelsUpdated(const QStringList &modelStrings, const QStringList &icaos, const QStringList &airlines, const QStringList &liveries);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QDBusConnection m_conn { "default" };
|
QDBusConnection m_conn { "default" };
|
||||||
@@ -138,6 +140,7 @@ namespace BlackSimPlugin
|
|||||||
QTimer *m_fastTimer { nullptr };
|
QTimer *m_fastTimer { nullptr };
|
||||||
QTimer *m_slowTimer { nullptr };
|
QTimer *m_slowTimer { nullptr };
|
||||||
BlackMisc::Aviation::CAirportList m_airportsInRange; //!< aiports in range of own aircraft
|
BlackMisc::Aviation::CAirportList m_airportsInRange; //!< aiports in range of own aircraft
|
||||||
|
BlackMisc::Simulation::CAircraftModelList m_installedModels;
|
||||||
|
|
||||||
//! \todo Add units to members? pitchDeg?, altitudeFt?
|
//! \todo Add units to members? pitchDeg?, altitudeFt?
|
||||||
struct // data is written by DBus async method callbacks
|
struct // data is written by DBus async method callbacks
|
||||||
|
|||||||
@@ -64,6 +64,11 @@ namespace BlackSimPlugin
|
|||||||
return m_dbusInterface->callDBusRet<bool>(QLatin1String("isDrawingLabels"));
|
return m_dbusInterface->callDBusRet<bool>(QLatin1String("isDrawingLabels"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CXBusTrafficProxy::updateInstalledModels() const
|
||||||
|
{
|
||||||
|
m_dbusInterface->callDBus(QLatin1String("updateInstalledModels"));
|
||||||
|
}
|
||||||
|
|
||||||
void CXBusTrafficProxy::addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery)
|
void CXBusTrafficProxy::addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery)
|
||||||
{
|
{
|
||||||
m_dbusInterface->callDBus(QLatin1String("addPlane"), callsign, aircraftIcao, airlineIcao, livery);
|
m_dbusInterface->callDBus(QLatin1String("addPlane"), callsign, aircraftIcao, airlineIcao, livery);
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void relaySignals();
|
void relaySignals();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
//! \copydoc XBus::CTraffic::installedModelsUpdated
|
||||||
|
void installedModelsUpdated(const QStringList &modelStrings, const QStringList &icaos, const QStringList &airlines, const QStringList &liveries);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
//! \copydoc XBus::CTraffic::initialize
|
//! \copydoc XBus::CTraffic::initialize
|
||||||
bool initialize();
|
bool initialize();
|
||||||
@@ -72,6 +76,9 @@ namespace BlackSimPlugin
|
|||||||
//! \copydoc XBus::CTraffic::isDrawingLabels
|
//! \copydoc XBus::CTraffic::isDrawingLabels
|
||||||
bool isDrawingLabels() const;
|
bool isDrawingLabels() const;
|
||||||
|
|
||||||
|
//! \copydoc XBus::CTraffic::updateInstalledModels
|
||||||
|
void updateInstalledModels() const;
|
||||||
|
|
||||||
//! \copydoc XBus::CTraffic::addPlane
|
//! \copydoc XBus::CTraffic::addPlane
|
||||||
void addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery);
|
void addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery);
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <XPLM/XPLMProcessing.h>
|
#include <XPLM/XPLMProcessing.h>
|
||||||
#include <XPLM/XPLMUtilities.h>
|
#include <XPLM/XPLMUtilities.h>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QStringList>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@@ -148,6 +149,30 @@ namespace XBus
|
|||||||
return XPMPDrawingAircraftLabels();
|
return XPMPDrawingAircraftLabels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CTraffic::updateInstalledModels()
|
||||||
|
{
|
||||||
|
int numberOfModels = XPMPGetNumberOfInstalledModels();
|
||||||
|
QStringList modelNames;
|
||||||
|
QStringList icaos;
|
||||||
|
QStringList airlines;
|
||||||
|
QStringList liveries;
|
||||||
|
|
||||||
|
for (int i = 0; i < numberOfModels; ++i)
|
||||||
|
{
|
||||||
|
const char *modelName = nullptr;
|
||||||
|
const char *icao = nullptr;
|
||||||
|
const char *airline = nullptr;
|
||||||
|
const char *livery = nullptr;
|
||||||
|
XPMPGetModelInfo(i, &modelName, &icao, &airline, &livery);
|
||||||
|
modelNames.append(QString::fromLocal8Bit(modelName));
|
||||||
|
icaos.append(QString::fromLocal8Bit(icao));
|
||||||
|
airlines.append(QString::fromLocal8Bit(airline));
|
||||||
|
liveries.append(QString::fromLocal8Bit(livery));
|
||||||
|
}
|
||||||
|
|
||||||
|
emit installedModelsUpdated(modelNames, icaos, airlines, liveries);
|
||||||
|
}
|
||||||
|
|
||||||
void CTraffic::addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery)
|
void CTraffic::addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery)
|
||||||
{
|
{
|
||||||
auto id = XPMPCreatePlane(qPrintable(aircraftIcao), qPrintable(airlineIcao), qPrintable(livery), getPlaneData, static_cast<void *>(this));
|
auto id = XPMPCreatePlane(qPrintable(aircraftIcao), qPrintable(airlineIcao), qPrintable(livery), getPlaneData, static_cast<void *>(this));
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
#include "datarefs.h"
|
#include "datarefs.h"
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
|
#include <QVector>
|
||||||
|
#include <QStringList>
|
||||||
#include "XPMPMultiplayer.h"
|
#include "XPMPMultiplayer.h"
|
||||||
|
|
||||||
//! \cond PRIVATE
|
//! \cond PRIVATE
|
||||||
@@ -53,6 +55,10 @@ namespace XBus
|
|||||||
//! Called by XPluginStart
|
//! Called by XPluginStart
|
||||||
static void initLegacyData();
|
static void initLegacyData();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
//! Installed models updated.
|
||||||
|
void installedModelsUpdated(const QStringList &modelStrings, const QStringList &icaos, const QStringList &airlines, const QStringList &liveries);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
//! Initialize the multiplayer planes rendering and return true if successful
|
//! Initialize the multiplayer planes rendering and return true if successful
|
||||||
bool initialize();
|
bool initialize();
|
||||||
@@ -72,6 +78,9 @@ namespace XBus
|
|||||||
//! Get whether the plugin draws type and callsign labels above aircraft
|
//! Get whether the plugin draws type and callsign labels above aircraft
|
||||||
bool isDrawingLabels() const;
|
bool isDrawingLabels() const;
|
||||||
|
|
||||||
|
//! Called by newly connected client to cause installedModelsUpdated to be emitted.
|
||||||
|
void updateInstalledModels();
|
||||||
|
|
||||||
//! Introduce a new traffic aircraft
|
//! Introduce a new traffic aircraft
|
||||||
void addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery);
|
void addPlane(const QString &callsign, const QString &aircraftIcao, const QString &airlineIcao, const QString &livery);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user