refs #364, refs #368 drivers:

* changed to CSimulatedAircraft / Simulation::CAircraftModel
* added new functions such as icons for model
This commit is contained in:
Klaus Basan
2015-01-18 22:09:06 +01:00
parent 000f9db3a4
commit b12352047b
9 changed files with 286 additions and 122 deletions

View File

@@ -13,6 +13,8 @@
using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Simulation;
namespace BlackSimPlugin
{
@@ -159,10 +161,16 @@ namespace BlackSimPlugin
void CSimulatorXPlane::ps_emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, const QString &icao)
{
emit ownAircraftModelChanged({ path, CAircraftModel::TypeOwnSimulatorModel });
Q_UNUSED(filename);
Q_UNUSED(livery);
Q_UNUSED(icao);
//! \todo change as appropriate
CSimulatedAircraft aircraft(this->getOwnAircraft());
CAircraftModel model(aircraft.getModel());
model.setModelType(CAircraftModel::TypeOwnSimulatorModel);
model.setFileName(path + "/" + filename);
CAircraftIcao aircraftIcao(icao);
aircraftIcao.setLivery(livery);
aircraft.setModel(model);
aircraft.setIcaoInfo(aircraftIcao);
emit ownAircraftModelChanged(aircraft);
}
// convert xplane squawk mode to swift squawk mode
@@ -178,11 +186,9 @@ namespace BlackSimPlugin
return mode == BlackMisc::Aviation::CTransponder::StateStandby ? 1 : 2;
}
BlackMisc::Aviation::CAircraft CSimulatorXPlane::getOwnAircraft() const
CSimulatedAircraft CSimulatorXPlane::getOwnAircraft() const
{
if (! isConnected()) { return {}; }
using namespace BlackMisc;
using namespace BlackMisc::PhysicalQuantities;
Aviation::CAircraftSituation situation;
situation.setPosition({ m_xplaneData.latitude, m_xplaneData.longitude, 0 });
situation.setAltitude({ m_xplaneData.altitude, Aviation::CAltitude::MeanSeaLevel, CLengthUnit::m() });
@@ -190,7 +196,9 @@ namespace BlackSimPlugin
situation.setPitch({ m_xplaneData.pitch, CAngleUnit::deg() });
situation.setBank({ m_xplaneData.roll, CAngleUnit::deg() });
situation.setGroundspeed({ m_xplaneData.groundspeed, CSpeedUnit::m_s() });
Aviation::CAircraft ac { {}, {}, situation };
CSimulatedAircraft ac;
ac.setSituation(situation);
ac.setModel(this->getOwnAircraftModel());
ac.setIcaoInfo(Aviation::CAircraftIcao { m_xplaneData.aircraftIcaoCode });
ac.setCom1System(Aviation::CComSystem::getCom1System({ m_xplaneData.com1Active, CFrequencyUnit::kHz() }, { m_xplaneData.com1Standby, CFrequencyUnit::kHz() }));
ac.setCom2System(Aviation::CComSystem::getCom2System({ m_xplaneData.com2Active, CFrequencyUnit::kHz() }, { m_xplaneData.com2Standby, CFrequencyUnit::kHz() }));
@@ -212,13 +220,13 @@ namespace BlackSimPlugin
Q_UNUSED(message);
}
BlackMisc::Network::CAircraftModel CSimulatorXPlane::getOwnAircraftModel() const
BlackMisc::Simulation::CAircraftModel CSimulatorXPlane::getOwnAircraftModel() const
{
if (! isConnected()) { return {}; }
return { m_xplaneData.aircraftModelPath, CAircraftModel::TypeOwnSimulatorModel };
}
BlackMisc::Network::CAircraftModelList CSimulatorXPlane::getInstalledModels() const
BlackMisc::Simulation::CAircraftModelList CSimulatorXPlane::getInstalledModels() const
{
// TODO
return {};
@@ -259,6 +267,12 @@ namespace BlackSimPlugin
}
}
CPixmap CSimulatorXPlane::iconForModel(const QString &modelString) const
{
Q_UNUSED(modelString);
return CPixmap();
}
bool CSimulatorXPlane::updateOwnSimulatorCockpit(const BlackMisc::Aviation::CAircraft &aircraft)
{
if (! isConnected()) { return false; }
@@ -288,15 +302,15 @@ namespace BlackSimPlugin
return false;
}
void CSimulatorXPlane::addRemoteAircraft(const Aviation::CAircraft &remoteAircraft, const Network::CClient &remoteClient)
void CSimulatorXPlane::addRemoteAircraft(const CSimulatedAircraft &remoteAircraft)
{
Q_UNUSED(remoteClient);
if (! isConnected()) { return; }
// KB: from what I can see here all data are available
// Is there any model matching required ????
CAircraftIcao icao = remoteAircraft.getIcaoInfo();
m_traffic->addPlane(remoteAircraft.getCallsign().asString(), icao.getAircraftDesignator(), icao.getAirlineDesignator(), icao.getLivery());
addAircraftSituation(remoteAircraft.getCallsign(), remoteAircraft.getSituation());
m_remoteAircraft.replaceOrAdd(&CSimulatedAircraft::getCallsign, remoteAircraft.getCallsign(), remoteAircraft);
}
void CSimulatorXPlane::addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
@@ -315,11 +329,18 @@ namespace BlackSimPlugin
m_traffic->setPlaneTransponder(callsign.asString(), 2000, true, false); // TODO transponder
}
void CSimulatorXPlane::removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign)
int CSimulatorXPlane::removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign)
{
if (! isConnected()) { return; }
if (! isConnected()) { return 0; }
m_traffic->removePlane(callsign.asString());
return m_remoteAircraft.removeIf(&CSimulatedAircraft::getCallsign, callsign);
}
}
}
int CSimulatorXPlane::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues)
{
return m_remoteAircraft.incrementalUpdateOrAdd(changedAircraft, changedValues);
//! \todo really update aircraft in SIM
}
} // namespace
} // namespace

View File

@@ -1,14 +1,19 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* Copyright (C) 2013
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKSIMPLUGIN_SIMULATOR_XPLANE_H
#define BLACKSIMPLUGIN_SIMULATOR_XPLANE_H
//! \file
#include "blackcore/simulator.h"
#include "blackmisc/pixmap.h"
#include <QDBusConnection>
class QDBusServiceWatcher;
@@ -58,17 +63,23 @@ namespace BlackSimPlugin
virtual bool disconnectFrom() override;
//! \copydoc BlackCore::ISimulator::getOwnAircraft
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const override;
virtual BlackMisc::Simulation::CSimulatedAircraft getOwnAircraft() const override;
//! \copydoc ISimulator::addRemoteAircraft()
virtual void addRemoteAircraft(const BlackMisc::Aviation::CAircraft &remoteAircraft, const BlackMisc::Network::CClient &remoteClient) override;
virtual void addRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft) override;
//! \copydoc BlackCore::ISimulator::getRemoteAircraft
virtual BlackMisc::Simulation::CSimulatedAircraftList getRemoteAircraft() const override { return m_remoteAircraft; }
//! \copydoc BlackCore::ISimulator::addAircraftSituation
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign,
const BlackMisc::Aviation::CAircraftSituation &situation) override;
//! \copydoc BlackCore::ISimulator::removeRemoteAircraft
virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
virtual int removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
//! \copydoc ISimulator::changeRemoteAircraft
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) override;
//! \copydoc BlackCore::ISimulator::updateOwnSimulatorCockpit
virtual bool updateOwnSimulatorCockpit(const BlackMisc::Aviation::CAircraft &aircraft) override;
@@ -83,13 +94,10 @@ namespace BlackSimPlugin
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override;
//! \copydoc BlackCore::ISimulator::getAircraftModel
virtual BlackMisc::Network::CAircraftModel getOwnAircraftModel() const override;
virtual BlackMisc::Simulation::CAircraftModel getOwnAircraftModel() const override;
//! \copydoc BlackCore::ISimulator::getInstalledModels
virtual BlackMisc::Network::CAircraftModelList getInstalledModels() const override;
//! \copydoc BlackCore::ISimulator::getCurrentlyMatchedModels
virtual BlackMisc::Network::CAircraftModelList getCurrentlyMatchedModels() const override { return BlackMisc::Network::CAircraftModelList(); }
virtual BlackMisc::Simulation::CAircraftModelList getInstalledModels() const override;
//! Airports in range
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
@@ -100,6 +108,9 @@ namespace BlackSimPlugin
//! \copydoc ISimulator::getTimeSynchronizationOffset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); }
//! \copydoc ISimulator::iconForModel
virtual BlackMisc::CPixmap iconForModel(const QString &modelString) const override;
private slots:
void ps_serviceRegistered(const QString &serviceName);
void ps_serviceUnregistered();
@@ -117,6 +128,7 @@ namespace BlackSimPlugin
QTimer *m_slowTimer { nullptr };
BlackMisc::Aviation::CAirportList m_airports;
BlackMisc::Simulation::CSimulatedAircraftList m_remoteAircraft;
struct // data is written by DBus async method callbacks
{