Regularly request remote aircraft data from X-Plane

This includes
* ground elevation
* model offset (to be implemented)

ref T259
This commit is contained in:
Roland Winklmeier
2018-02-22 21:50:28 +01:00
committed by Klaus Basan
parent 2ab6a96d57
commit 72497fdefc
6 changed files with 61 additions and 0 deletions

View File

@@ -380,6 +380,22 @@ namespace XSwiftBus
}
}
void CTraffic::requestRemoteAircraftData()
{
if (m_planesByCallsign.empty()) { return; }
const QList<Plane *> planes = m_planesByCallsign.values();
for (const Plane *plane : planes)
{
double lat = plane->position.lat;
double lon = plane->position.lon;
double elevation = plane->position.elevation;
double groundElevation = plane->terrainProbe.getElevation(lat, lon, elevation);
if (std::isnan(groundElevation)) { groundElevation = 0.0; }
constexpr double fudgeFactor = 3.0; //! \fixme Value should be different for each plane, derived from the CSL model geometry
emit remoteAircraftData(plane->callsign, lat, lon, groundElevation, fudgeFactor);
}
}
//! memcmp function which ignores the header ("size" member) and compares only the payload (the rest of the struct)
template <typename T>
int memcmpPayload(T *dst, T *src)

View File

@@ -70,6 +70,9 @@ namespace XSwiftBus
//! Signal emitted for each simulator rendering frame
void simFrame();
//! Remote aircraft data
void remoteAircraftData(const QString &callsign, double latitude, double longitude, double elevation, double modelVerticalOffset);
public slots:
//! Initialize the multiplayer planes rendering and return true if successful
bool initialize();
@@ -124,6 +127,9 @@ namespace XSwiftBus
//! Set interpolation mode for a traffic aircraft
void setInterpolatorMode(const QString &callsign, bool spline);
//! Request traffic plane data. A signal remoteAircraftData will be emitted for each known plane
void requestRemoteAircraftData();
private:
bool m_initialized = false;
bool m_enabled = false;