mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-12 07:15:34 +08:00
Ref T717, function to send parts/situation for testing and in the model browser
This commit is contained in:
@@ -316,6 +316,9 @@ namespace BlackCore
|
|||||||
//! Test a remote aircraft
|
//! Test a remote aircraft
|
||||||
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) = 0;
|
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) = 0;
|
||||||
|
|
||||||
|
//! Test update remote aircraft
|
||||||
|
virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) = 0;
|
||||||
|
|
||||||
//! Get matching setup
|
//! Get matching setup
|
||||||
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const = 0;
|
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -419,6 +419,16 @@ namespace BlackCore
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! \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);
|
||||||
|
logEmptyContextWarning(Q_FUNC_INFO);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//! \copydoc IContextSimulator::setMatchingSetup
|
//! \copydoc IContextSimulator::setMatchingSetup
|
||||||
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override
|
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1019,6 +1019,14 @@ namespace BlackCore
|
|||||||
return added;
|
return added;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CContextSimulator::testUpdateRemoteAircraft(const CCallsign cs, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!m_simulatorPlugin.second || !m_simulatorPlugin.second->isConnected()) { return false; }
|
||||||
|
CAircraftSituation s = situation; // make sure to have correct callsign
|
||||||
|
s.setCallsign(cs);
|
||||||
|
return m_simulatorPlugin.second->testSendSituationAndParts(cs, s, parts);
|
||||||
|
}
|
||||||
|
|
||||||
bool CContextSimulator::parseCommandLine(const QString &commandLine, const CIdentifier &originator)
|
bool CContextSimulator::parseCommandLine(const QString &commandLine, const CIdentifier &originator)
|
||||||
{
|
{
|
||||||
Q_UNUSED(originator);
|
Q_UNUSED(originator);
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ namespace BlackCore
|
|||||||
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override;
|
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override;
|
||||||
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override;
|
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override;
|
||||||
|
virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
|
|
||||||
// also in IAircraftModelSetProvider
|
// also in IAircraftModelSetProvider
|
||||||
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
|
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
|
||||||
|
|||||||
@@ -375,5 +375,10 @@ namespace BlackCore
|
|||||||
return m_dBusInterface->callDBusRet<bool>(QLatin1String("testRemoteAircraft"), aircraft, add);
|
return m_dBusInterface->callDBusRet<bool>(QLatin1String("testRemoteAircraft"), aircraft, add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CContextSimulatorProxy::testUpdateRemoteAircraft(const CCallsign cs, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
return m_dBusInterface->callDBusRet<bool>(QLatin1String("testUpdateRemoteAircraft"), cs, situation, parts);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ namespace BlackCore
|
|||||||
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override;
|
virtual BlackMisc::Simulation::CAircraftMatcherSetup getMatchingSetup() const override;
|
||||||
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
virtual BlackMisc::CStatusMessageList copyFsxTerrainProbe(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
|
||||||
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override;
|
virtual bool testRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, bool add) override;
|
||||||
|
virtual bool testUpdateRemoteAircraft(const BlackMisc::Aviation::CCallsign cs, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -215,6 +215,9 @@ namespace BlackCore
|
|||||||
//! Test mode?
|
//! Test mode?
|
||||||
bool isTestMode() const { return m_test; }
|
bool isTestMode() const { return m_test; }
|
||||||
|
|
||||||
|
//! Send situation/parts for testing
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) = 0;
|
||||||
|
|
||||||
//! Debug function to check state after all aircraft have been removed
|
//! Debug function to check state after all aircraft have been removed
|
||||||
//! \remarks only in local developer builds
|
//! \remarks only in local developer builds
|
||||||
virtual BlackMisc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const;
|
virtual BlackMisc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const;
|
||||||
|
|||||||
@@ -183,6 +183,14 @@ namespace BlackSimPlugin
|
|||||||
return m_interpolators[callsign]->getInterpolationMessages(setup.getInterpolatorMode());
|
return m_interpolators[callsign]->getInterpolationMessages(setup.getInterpolatorMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorEmulated::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!m_renderedAircraft.containsCallsign(callsign)) { return false; }
|
||||||
|
m_renderedAircraft.setAircraftSituation(callsign, situation);
|
||||||
|
m_renderedAircraft.setAircraftPartsSynchronized(callsign, parts);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorEmulated::highlightAircraft(const CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const CTime &displayTime)
|
void CSimulatorEmulated::highlightAircraft(const CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const CTime &displayTime)
|
||||||
{
|
{
|
||||||
if (canLog()) { m_monitorWidget->appendReceivingCall(Q_FUNC_INFO, aircraftToHighlight.toQString(), boolToTrueFalse(enableHighlight), displayTime.toQString()); }
|
if (canLog()) { m_monitorWidget->appendReceivingCall(Q_FUNC_INFO, aircraftToHighlight.toQString(), boolToTrueFalse(enableHighlight), displayTime.toQString()); }
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ namespace BlackSimPlugin
|
|||||||
virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
virtual BlackMisc::Aviation::CCallsignSet physicallyRenderedAircraft() const override;
|
virtual BlackMisc::Aviation::CCallsignSet physicallyRenderedAircraft() const override;
|
||||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
|
|
||||||
// ----- functions just logged -------
|
// ----- functions just logged -------
|
||||||
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;
|
||||||
|
|||||||
@@ -94,16 +94,16 @@ namespace BlackSimPlugin
|
|||||||
QDBusPendingReply<QStringList, QList<double>, QList<double>, QList<double>, QList<double>> reply = *watcher;
|
QDBusPendingReply<QStringList, QList<double>, QList<double>, QList<double>, QList<double>> reply = *watcher;
|
||||||
if (!reply.isError())
|
if (!reply.isError())
|
||||||
{
|
{
|
||||||
const QStringList callsigns = reply.argumentAt<0>();
|
const QStringList callsigns = reply.argumentAt<0>();
|
||||||
const QList<double> latitudesDeg = reply.argumentAt<1>();
|
const QList<double> latitudesDeg = reply.argumentAt<1>();
|
||||||
const QList<double> longitudesDeg = reply.argumentAt<2>();
|
const QList<double> longitudesDeg = reply.argumentAt<2>();
|
||||||
const QList<double> elevationsM = reply.argumentAt<3>();
|
const QList<double> elevationsM = reply.argumentAt<3>();
|
||||||
const QList<double> verticalOffsets = reply.argumentAt<4>();
|
const QList<double> verticalOffsets = reply.argumentAt<4>();
|
||||||
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets);
|
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets);
|
||||||
}
|
}
|
||||||
watcher->deleteLater();
|
watcher->deleteLater();
|
||||||
};
|
};
|
||||||
m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftData"), callback, callsigns);
|
m_dbusInterface->callDBusAsync(QLatin1String("getRemoteAircraftData"), callback, callsigns);
|
||||||
}
|
}
|
||||||
}
|
} // ns
|
||||||
}
|
} // ns
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
#define BLACKSIMPLUGIN_FLIGHTGEAR_TRAFFIC_PROXY_H
|
#define BLACKSIMPLUGIN_FLIGHTGEAR_TRAFFIC_PROXY_H
|
||||||
|
|
||||||
#include "blackmisc/genericdbusinterface.h"
|
#include "blackmisc/genericdbusinterface.h"
|
||||||
|
#include "blackmisc/aviation/aircraftsituation.h"
|
||||||
|
#include "blackmisc/aviation/aircraftparts.h"
|
||||||
#include "blackmisc/aviation/callsign.h"
|
#include "blackmisc/aviation/callsign.h"
|
||||||
#include "blackmisc/geo/elevationplane.h"
|
#include "blackmisc/geo/elevationplane.h"
|
||||||
|
|
||||||
@@ -47,21 +49,34 @@ namespace BlackSimPlugin
|
|||||||
const int s = callsigns.size();
|
const int s = callsigns.size();
|
||||||
if (s != latitudesDeg.size()) { return false; }
|
if (s != latitudesDeg.size()) { return false; }
|
||||||
if (s != longitudesDeg.size()) { return false; }
|
if (s != longitudesDeg.size()) { return false; }
|
||||||
if (s != altitudesFt.size()) { return false; }
|
if (s != altitudesFt.size()) { return false; }
|
||||||
if (s != pitchesDeg.size()) { return false; }
|
if (s != pitchesDeg.size()) { return false; }
|
||||||
if (s != rollsDeg.size()) { return false; }
|
if (s != rollsDeg.size()) { return false; }
|
||||||
if (s != headingsDeg.size()) { return false; }
|
if (s != headingsDeg.size()) { return false; }
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList callsigns; //!< List of callsigns
|
//! Push back the latest situation
|
||||||
|
void push_back(const BlackMisc::Aviation::CAircraftSituation &situation)
|
||||||
|
{
|
||||||
|
this->callsigns.push_back(situation.getCallsign().asString());
|
||||||
|
this->latitudesDeg.push_back(situation.latitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg()));
|
||||||
|
this->longitudesDeg.push_back(situation.longitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg()));
|
||||||
|
this->altitudesFt.push_back(situation.getAltitude().value(BlackMisc::PhysicalQuantities::CLengthUnit::ft()));
|
||||||
|
this->pitchesDeg.push_back(situation.getPitch().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg()));
|
||||||
|
this->rollsDeg.push_back(situation.getBank().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg()));
|
||||||
|
this->headingsDeg.push_back(situation.getHeading().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg()));
|
||||||
|
this->onGrounds.push_back(situation.getOnGround() == BlackMisc::Aviation::CAircraftSituation::OnGround);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList callsigns; //!< List of callsigns
|
||||||
QList<double> latitudesDeg; //!< List of latitudes
|
QList<double> latitudesDeg; //!< List of latitudes
|
||||||
QList<double> longitudesDeg; //!< List of longitudes
|
QList<double> longitudesDeg; //!< List of longitudes
|
||||||
QList<double> altitudesFt; //!< List of altitudes
|
QList<double> altitudesFt; //!< List of altitudes
|
||||||
QList<double> pitchesDeg; //!< List of pitches
|
QList<double> pitchesDeg; //!< List of pitches
|
||||||
QList<double> rollsDeg; //!< List of rolls
|
QList<double> rollsDeg; //!< List of rolls
|
||||||
QList<double> headingsDeg; //!< List of headings
|
QList<double> headingsDeg; //!< List of headings
|
||||||
QList<bool> onGrounds; //!< List of onGrounds
|
QList<bool> onGrounds; //!< List of onGrounds
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Planes surfaces
|
//! Planes surfaces
|
||||||
@@ -70,6 +85,29 @@ namespace BlackSimPlugin
|
|||||||
//! Is empty?
|
//! Is empty?
|
||||||
bool isEmpty() const { return callsigns.isEmpty(); }
|
bool isEmpty() const { return callsigns.isEmpty(); }
|
||||||
|
|
||||||
|
//! Push back the latest parts
|
||||||
|
void push_back(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
this->callsigns.push_back(callsign.asString());
|
||||||
|
this->gears.push_back(parts.isGearDown() ? 1 : 0);
|
||||||
|
this->flaps.push_back(parts.getFlapsPercent() / 100.0);
|
||||||
|
this->spoilers.push_back(parts.isSpoilersOut() ? 1 : 0);
|
||||||
|
this->speedBrakes.push_back(parts.isSpoilersOut() ? 1 : 0);
|
||||||
|
this->slats.push_back(parts.getFlapsPercent() / 100.0);
|
||||||
|
this->wingSweeps.push_back(0.0);
|
||||||
|
this->thrusts.push_back(parts.isAnyEngineOn() ? 0 : 0.75);
|
||||||
|
this->elevators.push_back(0.0);
|
||||||
|
this->rudders.push_back(0.0);
|
||||||
|
this->ailerons.push_back(0.0);
|
||||||
|
this->landLights.push_back(parts.getLights().isLandingOn());
|
||||||
|
//! \todo KB 2019-09 Missing taxi lights in FG
|
||||||
|
// this->taxiLights.push_back(parts.getLights().isTaxiOn());
|
||||||
|
this->beaconLights.push_back(parts.getLights().isBeaconOn());
|
||||||
|
this->strobeLights.push_back(parts.getLights().isStrobeOn());
|
||||||
|
this->navLights.push_back(parts.getLights().isNavOn());
|
||||||
|
this->lightPatterns.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
QStringList callsigns; //!< List of callsigns
|
QStringList callsigns; //!< List of callsigns
|
||||||
QList<double> gears; //!< List of gears
|
QList<double> gears; //!< List of gears
|
||||||
QList<double> flaps; //!< List of flaps
|
QList<double> flaps; //!< List of flaps
|
||||||
@@ -177,7 +215,6 @@ namespace BlackSimPlugin
|
|||||||
//! Get remote aircrafts data (lat, lon, elevation and CG)
|
//! Get remote aircrafts data (lat, lon, elevation and CG)
|
||||||
void getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const;
|
void getRemoteAircraftData(const QStringList &callsigns, const RemoteAircraftDataCallback &setter) const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BlackMisc::CGenericDBusInterface *m_dbusInterface = nullptr;
|
BlackMisc::CGenericDBusInterface *m_dbusInterface = nullptr;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -149,6 +149,32 @@ namespace BlackSimPlugin
|
|||||||
return m_flightgearAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode());
|
return m_flightgearAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorFlightgear::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!this->isConnected()) { return false; }
|
||||||
|
if (!m_trafficProxy) { return false; }
|
||||||
|
if (!m_flightgearAircraftObjects.contains(callsign)) { return false; }
|
||||||
|
|
||||||
|
int u = 0;
|
||||||
|
if (!situation.isNull())
|
||||||
|
{
|
||||||
|
PlanesPositions planesPositions;
|
||||||
|
planesPositions.push_back(situation);
|
||||||
|
m_trafficProxy->setPlanesPositions(planesPositions);
|
||||||
|
u++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parts.isNull())
|
||||||
|
{
|
||||||
|
PlanesSurfaces surfaces;
|
||||||
|
surfaces.push_back(callsign, parts);
|
||||||
|
//! \todo KB 2091-09 FG parts sending missing
|
||||||
|
// m_trafficProxy->setPlanesSurfaces(surfaces);
|
||||||
|
u++;
|
||||||
|
}
|
||||||
|
return u > 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorFlightgear::clearAllRemoteAircraftData()
|
void CSimulatorFlightgear::clearAllRemoteAircraftData()
|
||||||
{
|
{
|
||||||
m_aircraftAddedFailed.clear();
|
m_aircraftAddedFailed.clear();
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ namespace BlackSimPlugin
|
|||||||
virtual QString getStatisticsSimulatorSpecific() const override;
|
virtual QString getStatisticsSimulatorSpecific() const override;
|
||||||
virtual void resetAircraftStatistics() override;
|
virtual void resetAircraftStatistics() override;
|
||||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! Creates an appropriate dbus connection from the string describing it
|
//! Creates an appropriate dbus connection from the string describing it
|
||||||
|
|||||||
@@ -348,8 +348,12 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
// Test only for successful position. FS9 requires constant positions
|
// Test only for successful position. FS9 requires constant positions
|
||||||
if (!result.getInterpolationStatus().hasValidSituation()) { return; }
|
if (!result.getInterpolationStatus().hasValidSituation()) { return; }
|
||||||
|
this->sendMultiplayerPosition(result.getInterpolatedSituation());
|
||||||
|
}
|
||||||
|
|
||||||
MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(result.getInterpolatedSituation());
|
void CFs9Client::sendMultiplayerPosition(const CAircraftSituation &situation)
|
||||||
|
{
|
||||||
|
MPPositionSlewMode positionSlewMode = aircraftSituationToFS9(situation);
|
||||||
|
|
||||||
QByteArray positionMessage;
|
QByteArray positionMessage;
|
||||||
MultiPlayerPacketParser::writeType(positionMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_SLEWMODE);
|
MultiPlayerPacketParser::writeType(positionMessage, CFs9Sdk::MULTIPLAYER_PACKET_ID_POSITION_SLEWMODE);
|
||||||
|
|||||||
@@ -61,7 +61,9 @@ namespace BlackSimPlugin
|
|||||||
//! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages
|
//! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolationMessages
|
||||||
BlackMisc::CStatusMessageList getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const;
|
BlackMisc::CStatusMessageList getInterpolationMessages(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const;
|
||||||
|
|
||||||
public slots:
|
//! Send a situtaion (position)
|
||||||
|
void sendMultiplayerPosition(const BlackMisc::Aviation::CAircraftSituation &situation);
|
||||||
|
|
||||||
//! Send new text message
|
//! Send new text message
|
||||||
void sendTextMessage(const QString &textMessage);
|
void sendTextMessage(const QString &textMessage);
|
||||||
|
|
||||||
|
|||||||
@@ -298,6 +298,22 @@ namespace BlackSimPlugin
|
|||||||
return client->getInterpolationMessages(setup.getInterpolatorMode());
|
return client->getInterpolationMessages(setup.getInterpolatorMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorFs9::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!m_hashFs9Clients.contains(callsign)) { return false; }
|
||||||
|
CFs9Client *client = m_hashFs9Clients[callsign].data();
|
||||||
|
if (!client) { return false; }
|
||||||
|
|
||||||
|
Q_UNUSED(parts);
|
||||||
|
int u = 0;
|
||||||
|
if (situation.isNull())
|
||||||
|
{
|
||||||
|
u++;
|
||||||
|
client->sendMultiplayerPosition(situation);
|
||||||
|
}
|
||||||
|
return u > 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool CSimulatorFs9::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
|
bool CSimulatorFs9::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
|
||||||
{
|
{
|
||||||
return m_hashFs9Clients.contains(callsign);
|
return m_hashFs9Clients.contains(callsign);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ namespace BlackSimPlugin
|
|||||||
virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override;
|
virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const override;
|
||||||
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override;
|
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override;
|
||||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
//! \@}
|
//! \@}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -417,6 +417,26 @@ namespace BlackSimPlugin
|
|||||||
return (m_simConnectObjects[callsign]).getInterpolationMessages(setup.getInterpolatorMode());
|
return (m_simConnectObjects[callsign]).getInterpolationMessages(setup.getInterpolatorMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorFsxCommon::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!m_simConnectObjects.contains(callsign)) { return false; }
|
||||||
|
CSimConnectObject simObject = m_simConnectObjects.value(callsign);
|
||||||
|
int u = 0;
|
||||||
|
if (!parts.isNull()) { this->sendRemoteAircraftPartsToSimulator(simObject, parts); u++; }
|
||||||
|
if (!situation.isNull())
|
||||||
|
{
|
||||||
|
SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToFsxPosition(situation, true);
|
||||||
|
const bool traceSendId = this->isTracingSendId();
|
||||||
|
const HRESULT hr = this->logAndTraceSendId(
|
||||||
|
SimConnect_SetDataOnSimObject(
|
||||||
|
m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSetPosition,
|
||||||
|
static_cast<SIMCONNECT_OBJECT_ID>(simObject.getObjectId()), 0, 0, sizeof(SIMCONNECT_DATA_INITPOSITION), &position),
|
||||||
|
traceSendId, simObject, "Failed to set position", Q_FUNC_INFO, "SimConnect_SetDataOnSimObject");
|
||||||
|
if (hr == S_OK) { u++; }
|
||||||
|
}
|
||||||
|
return u > 0;
|
||||||
|
}
|
||||||
|
|
||||||
CSimConnectDefinitions::SimObjectRequest CSimulatorFsxCommon::requestToSimObjectRequest(DWORD requestId)
|
CSimConnectDefinitions::SimObjectRequest CSimulatorFsxCommon::requestToSimObjectRequest(DWORD requestId)
|
||||||
{
|
{
|
||||||
DWORD v = static_cast<DWORD>(CSimConnectDefinitions::SimObjectEndMarker);
|
DWORD v = static_cast<DWORD>(CSimConnectDefinitions::SimObjectEndMarker);
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ namespace BlackSimPlugin
|
|||||||
virtual void resetAircraftStatistics() override;
|
virtual void resetAircraftStatistics() override;
|
||||||
virtual void setFlightNetworkConnected(bool connected) override;
|
virtual void setFlightNetworkConnected(bool connected) override;
|
||||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation
|
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation
|
||||||
|
|||||||
@@ -152,6 +152,31 @@ namespace BlackSimPlugin
|
|||||||
return m_xplaneAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode());
|
return m_xplaneAircraftObjects[callsign].getInterpolationMessages(setup.getInterpolatorMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimulatorXPlane::testSendSituationAndParts(const CCallsign &callsign, const CAircraftSituation &situation, const CAircraftParts &parts)
|
||||||
|
{
|
||||||
|
if (!this->isConnected()) { return false; }
|
||||||
|
if (!m_trafficProxy) { return false; }
|
||||||
|
if (!m_xplaneAircraftObjects.contains(callsign)) { return false; }
|
||||||
|
|
||||||
|
int u = 0;
|
||||||
|
if (!situation.isNull())
|
||||||
|
{
|
||||||
|
PlanesPositions planesPositions;
|
||||||
|
planesPositions.push_back(situation);
|
||||||
|
m_trafficProxy->setPlanesPositions(planesPositions);
|
||||||
|
u++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!parts.isNull())
|
||||||
|
{
|
||||||
|
PlanesSurfaces surfaces;
|
||||||
|
surfaces.push_back(callsign, parts);
|
||||||
|
m_trafficProxy->setPlanesSurfaces(surfaces);
|
||||||
|
u++;
|
||||||
|
}
|
||||||
|
return u > 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CSimulatorXPlane::clearAllRemoteAircraftData()
|
void CSimulatorXPlane::clearAllRemoteAircraftData()
|
||||||
{
|
{
|
||||||
m_aircraftAddedFailed.clear();
|
m_aircraftAddedFailed.clear();
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ namespace BlackSimPlugin
|
|||||||
virtual QString getStatisticsSimulatorSpecific() const override;
|
virtual QString getStatisticsSimulatorSpecific() const override;
|
||||||
virtual void resetAircraftStatistics() override;
|
virtual void resetAircraftStatistics() override;
|
||||||
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
virtual BlackMisc::CStatusMessageList getInterpolationMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||||
|
virtual bool testSendSituationAndParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation, const BlackMisc::Aviation::CAircraftParts &parts) override;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation
|
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation
|
||||||
|
|||||||
Reference in New Issue
Block a user