Ref T778 XSwiftBus traffic service prodives water/land flag for elevations

This commit is contained in:
Mat Sutcliffe
2020-04-08 22:22:12 +01:00
parent 7c4fe83799
commit 22ebf6c5ea
16 changed files with 52 additions and 34 deletions

View File

@@ -245,7 +245,7 @@ namespace BlackSimPlugin
if (!myself) { return; }
// updates in providers and emits signal
ISimulator::callbackReceivedRequestedElevation(elv, callsign);
ISimulator::callbackReceivedRequestedElevation(elv, callsign, false);
});
emit this->requestedElevation(callsign);

View File

@@ -849,7 +849,7 @@ namespace BlackSimPlugin
}
using namespace std::placeholders;
auto callback = std::bind(&CSimulatorFlightgear::callbackReceivedRequestedElevation, this, _1, _2);
auto callback = std::bind(&CSimulatorFlightgear::callbackReceivedRequestedElevation, this, _1, _2, false);
// Request
m_trafficProxy->getElevationAtPosition(callsign,

View File

@@ -897,7 +897,7 @@ namespace BlackSimPlugin
void CSimulatorFsxCommon::updateProbeFromSimulator(const CCallsign &callsign, const DataDefinitionPosData &remoteAircraftData)
{
const CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt, CElevationPlane::singlePointRadius());
this->callbackReceivedRequestedElevation(elevation, callsign);
this->callbackReceivedRequestedElevation(elevation, callsign, false);
}
void CSimulatorFsxCommon::updateOwnAircraftFromSimulator(const DataDefinitionClientAreaSb &sbDataArea)

View File

@@ -92,7 +92,7 @@ namespace BlackSimPlugin
const CElevationPlane ep(coordinate, CElevationPlane::singlePointRadius());
const CCallsign cs(simulatorP3D->getCallsignForPendingProbeRequests(requestId, true));
simulatorP3D->callbackReceivedRequestedElevation(ep, cs);
simulatorP3D->callbackReceivedRequestedElevation(ep, cs, false);
}
break;
default:

View File

@@ -213,7 +213,7 @@ namespace BlackSimPlugin
return true;
}
void CSimulatorXPlane::callbackReceivedRequestedElevation(const CElevationPlane &plane, const CCallsign &callsign)
void CSimulatorXPlane::callbackReceivedRequestedElevation(const CElevationPlane &plane, const CCallsign &callsign, bool isWater)
{
static const QString hint("probe callback");
if (!this->handleProbeValue(plane, callsign, hint, false))
@@ -221,7 +221,7 @@ namespace BlackSimPlugin
this->removePendingElevationRequest(callsign);
return;
}
CSimulatorPluginCommon::callbackReceivedRequestedElevation(plane, callsign);
CSimulatorPluginCommon::callbackReceivedRequestedElevation(plane, callsign, isWater);
}
bool CSimulatorXPlane::isSuspiciousTerrainValue(const CElevationPlane &elevation)
@@ -273,7 +273,7 @@ namespace BlackSimPlugin
}
using namespace std::placeholders;
auto callback = std::bind(&CSimulatorXPlane::callbackReceivedRequestedElevation, this, _1, _2);
auto callback = std::bind(&CSimulatorXPlane::callbackReceivedRequestedElevation, this, _1, _2, _3);
// Request
m_trafficProxy->getElevationAtPosition(callsign,
@@ -1088,10 +1088,10 @@ namespace BlackSimPlugin
if (!m_trafficProxy || this->isShuttingDown()) { return; }
const QStringList csStrings = callsigns.getCallsignStrings();
QPointer<CSimulatorXPlane> myself(this);
m_trafficProxy->getRemoteAircraftData(csStrings, [ = ](const QStringList & callsigns, const QDoubleList & latitudesDeg, const QDoubleList & longitudesDeg, const QDoubleList & elevationsMeters, const QDoubleList & verticalOffsetsMeters)
m_trafficProxy->getRemoteAircraftData(csStrings, [ = ](const QStringList & callsigns, const QDoubleList & latitudesDeg, const QDoubleList & longitudesDeg, const QDoubleList & elevationsMeters, const QBoolList &waterFlags, const QDoubleList & verticalOffsetsMeters)
{
if (!myself) { return; }
this->updateRemoteAircraftFromSimulator(callsigns, latitudesDeg, longitudesDeg, elevationsMeters, verticalOffsetsMeters);
this->updateRemoteAircraftFromSimulator(callsigns, latitudesDeg, longitudesDeg, elevationsMeters, waterFlags, verticalOffsetsMeters);
});
}
@@ -1108,7 +1108,7 @@ namespace BlackSimPlugin
void CSimulatorXPlane::updateRemoteAircraftFromSimulator(
const QStringList &callsigns, const QDoubleList &latitudesDeg, const QDoubleList &longitudesDeg,
const QDoubleList &elevationsMeters, const QDoubleList &verticalOffsetsMeters)
const QDoubleList &elevationsMeters, const QBoolList &waterFlags, const QDoubleList &verticalOffsetsMeters)
{
const int size = callsigns.size();
@@ -1116,6 +1116,7 @@ namespace BlackSimPlugin
if (CBuildConfig::isLocalDeveloperDebugBuild())
{
Q_ASSERT_X(elevationsMeters.size() == size, Q_FUNC_INFO, "Wrong elevations");
Q_ASSERT_X(waterFlags.size() == size, Q_FUNC_INFO, "Wrong waterFlags");
Q_ASSERT_X(latitudesDeg.size() == size, Q_FUNC_INFO, "Wrong latitudesDeg");
Q_ASSERT_X(longitudesDeg.size() == size, Q_FUNC_INFO, "Wrong longitudesDeg");
Q_ASSERT_X(verticalOffsetsMeters.size() == size, Q_FUNC_INFO, "Wrong CG");
@@ -1152,6 +1153,7 @@ namespace BlackSimPlugin
// with T778 we do NOT use this function for elevation here if "isSuspicious"
const bool useElevation = this->handleProbeValue(elevation, cs, hint, true);
this->rememberElevationAndSimulatorCG(cs, xpAircraft.getAircraftModel(), false, useElevation ? elevation : CElevationPlane::null(), cg);
Q_UNUSED(waterFlags)
// loopback
if (logCallsigns.contains(cs))

View File

@@ -144,7 +144,7 @@ namespace BlackSimPlugin
virtual void resetAircraftStatistics() 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;
virtual void callbackReceivedRequestedElevation(const BlackMisc::Geo::CElevationPlane &plane, const BlackMisc::Aviation::CCallsign &callsign) override;
virtual void callbackReceivedRequestedElevation(const BlackMisc::Geo::CElevationPlane &plane, const BlackMisc::Aviation::CCallsign &callsign, bool isWater) override;
//! @}
//! \copydoc BlackMisc::Simulation::ISimulationEnvironmentProvider::requestElevation
@@ -178,6 +178,7 @@ namespace BlackSimPlugin
};
using QDoubleList = QList<double>;
using QBoolList = QList<bool>;
void setAirportsInRange(const QStringList &icaoCodes, const QStringList &names, const BlackMisc::CSequence<double> &lats, const BlackMisc::CSequence<double> &lons, const BlackMisc::CSequence<double> &alts);
void emitOwnAircraftModelChanged(const QString &path, const QString &filename, const QString &livery, const QString &icao,
@@ -222,7 +223,7 @@ namespace BlackSimPlugin
void onRemoteAircraftAdded(const QString &callsign);
void onRemoteAircraftAddingFailed(const QString &callsign);
void updateRemoteAircraftFromSimulator(const QStringList &callsigns, const QDoubleList &latitudesDeg, const QDoubleList &longitudesDeg,
const QDoubleList &elevationsMeters, const QDoubleList &verticalOffsetsMeters);
const QDoubleList &elevationsMeters, const QBoolList &waterFlags, const QDoubleList &verticalOffsetsMeters);
//! @}
//! Disconnect from DBus

View File

@@ -155,15 +155,16 @@ namespace BlackSimPlugin
{
std::function<void(QDBusPendingCallWatcher *)> callback = [ = ](QDBusPendingCallWatcher * watcher)
{
QDBusPendingReply<QStringList, QList<double>, QList<double>, QList<double>, QList<double>> reply = *watcher;
QDBusPendingReply<QStringList, QList<double>, QList<double>, QList<double>, QList<bool>, QList<double>> reply = *watcher;
if (!reply.isError())
{
const QStringList callsigns = reply.argumentAt<0>();
const QList<double> latitudesDeg = reply.argumentAt<1>();
const QList<double> longitudesDeg = reply.argumentAt<2>();
const QList<double> elevationsM = reply.argumentAt<3>();
const QList<double> verticalOffsets = reply.argumentAt<4>();
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, verticalOffsets);
const QList<bool> waterFlags = reply.argumentAt<4>();
const QList<double> verticalOffsets = reply.argumentAt<5>();
setter(callsigns, latitudesDeg, longitudesDeg, elevationsM, waterFlags, verticalOffsets);
}
watcher->deleteLater();
};
@@ -175,7 +176,7 @@ namespace BlackSimPlugin
{
std::function<void(QDBusPendingCallWatcher *)> callback = [ = ](QDBusPendingCallWatcher * watcher)
{
QDBusPendingReply<QString, double, double, double> reply = *watcher;
QDBusPendingReply<QString, double, double, double, bool> reply = *watcher;
if (!reply.isError())
{
const CCallsign cs(reply.argumentAt<0>());
@@ -186,8 +187,9 @@ namespace BlackSimPlugin
const CElevationPlane elevation(CLatitude(latitudeDegrees, CAngleUnit::deg()),
CLongitude(longitudeDegrees, CAngleUnit::deg()),
elevationAlt, CElevationPlane::singlePointRadius());
setter(elevation, cs);
// CLogMessage(this).debug(u"XPlane elv. response: '%1' %2 %3 %4") << cs.asString() << latitudeDeg << longitudeDeg << elevationMeters;
const bool isWater = reply.argumentAt<4>();
setter(elevation, cs, isWater);
// CLogMessage(this).debug(u"XPlane elv. response: '%1' %2 %3 %4 %5") << cs.asString() << latitudeDeg << longitudeDeg << elevationMeters << isWater;
}
watcher->deleteLater();
};

View File

@@ -38,6 +38,9 @@ namespace BlackSimPlugin
//! List of doubles
using QDoubleList = QList<double>;
//! List of bools
using QBoolList = QList<bool>;
//! Planes positions
struct PlanesPositions
{
@@ -155,10 +158,10 @@ namespace BlackSimPlugin
public:
//! Elevation callback
using ElevationCallback = std::function<void (const BlackMisc::Geo::CElevationPlane &, const BlackMisc::Aviation::CCallsign &)>;
using ElevationCallback = std::function<void (const BlackMisc::Geo::CElevationPlane &, const BlackMisc::Aviation::CCallsign &, bool)>;
//! Remote aircrafts data callback
using RemoteAircraftDataCallback = std::function<void (const QStringList &, const QDoubleList &, const QDoubleList &, const QDoubleList &, const QDoubleList &)>;
using RemoteAircraftDataCallback = std::function<void (const QStringList &, const QDoubleList &, const QDoubleList &, const QDoubleList &, const QBoolList &, const QDoubleList &)>;
//! Service name
static const QString &InterfaceName()