refs #916, interpolator mode for XP

This commit is contained in:
Klaus Basan
2017-03-17 19:05:51 +01:00
committed by Mathew Sutcliffe
parent e2849f171e
commit 304c552872
6 changed files with 35 additions and 19 deletions

View File

@@ -381,11 +381,19 @@ namespace BlackSimPlugin
Q_UNUSED(offset);
if (enable)
{
CLogMessage(this).info("X-Plane provides real time synchronization, use this on");
CLogMessage(this).info("X-Plane provides real time synchronization, use this one");
}
return false;
}
bool CSimulatorXPlane::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign)
{
if (!isConnected()) { return false; }
m_traffic->setInterpolatorMode(callsign.asString(), mode == CInterpolatorMulti::ModeSpline);
return true;
}
QDBusConnection CSimulatorXPlane::connectionFromString(const QString &str)
{
if (str == BlackMisc::CDBusServer::sessionBusAddress())

View File

@@ -97,6 +97,7 @@ namespace BlackSimPlugin
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
virtual bool setTimeSynchronization(bool enable, const BlackMisc::PhysicalQuantities::CTime &offset) override;
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override { return BlackMisc::PhysicalQuantities::CTime(0, BlackMisc::PhysicalQuantities::CTimeUnit::hrmin()); }
virtual bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode, const BlackMisc::Aviation::CCallsign &callsign) override;
//! @}
//! Creates an appropriate dbus connection from the string describing it

View File

@@ -103,5 +103,10 @@ namespace BlackSimPlugin
m_dbusInterface->callDBus(QLatin1String("setPlaneTransponder"), callsign, code, modeC, ident);
}
void CXBusTrafficProxy::setInterpolatorMode(const QString &callsign, bool spline)
{
m_dbusInterface->callDBus(QLatin1String("setInterpolatorMode"), callsign, spline);
}
}
}

View File

@@ -111,6 +111,9 @@ namespace BlackSimPlugin
//! \copydoc XBus::CTraffic::setPlaneTransponder
void setPlaneTransponder(const QString &callsign, int code, bool modeC, bool ident);
//! \copydoc XBus::CTraffic::setInterpolatorMode
void setInterpolatorMode(const QString &callsign, bool spline);
};
}

View File

@@ -223,7 +223,6 @@ namespace XBus
if (id)
{
auto plane = new Plane(id, callsign, aircraftIcao, airlineIcao, livery);
plane->interpolator.setMode(m_interpolatorMode);
m_planesByCallsign[callsign] = plane;
m_planesById[id] = plane;
}
@@ -315,6 +314,20 @@ namespace XBus
}
}
void CTraffic::setInterpolatorMode(const QString &callsign, bool spline)
{
const auto plane = m_planesByCallsign.value(callsign, nullptr);
if (plane)
{
plane->interpolator.setMode(spline ? BlackMisc::Simulation::CInterpolatorMulti::ModeSpline
: BlackMisc::Simulation::CInterpolatorMulti::ModeLinear);
}
else if (callsign.isEmpty())
{
for (const auto &callsign : m_planesByCallsign.keys()) { setInterpolatorMode(callsign, spline); }
}
}
//! 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)
@@ -391,19 +404,6 @@ namespace XBus
}
}
void CTraffic::toggleInterpolatorMode()
{
switch (m_interpolatorMode)
{
case BlackMisc::Simulation::CInterpolatorMulti::ModeLinear: m_interpolatorMode = BlackMisc::Simulation::CInterpolatorMulti::ModeSpline; break;
case BlackMisc::Simulation::CInterpolatorMulti::ModeSpline: m_interpolatorMode = BlackMisc::Simulation::CInterpolatorMulti::ModeLinear; break;
}
for (auto plane : m_planesByCallsign)
{
plane->interpolator.setMode(m_interpolatorMode);
}
}
}
//! \endcond

View File

@@ -14,7 +14,6 @@
#include "datarefs.h"
#include "terrainprobe.h"
#include "command.h"
#include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/aviation/aircraftpartslist.h"
#include "blackmisc/simulation/interpolatormulti.h"
@@ -115,6 +114,9 @@ namespace XBus
//! Set the transponder of a traffic aircraft
void setPlaneTransponder(const QString &callsign, int code, bool modeC, bool ident);
//! Set interpolation mode for a traffic aircraft
void setInterpolatorMode(const QString &callsign, bool spline);
private:
bool m_initialized = false;
bool m_enabled = false;
@@ -141,9 +143,6 @@ namespace XBus
};
QHash<QString, Plane *> m_planesByCallsign;
QHash<void *, Plane *> m_planesById;
BlackMisc::Simulation::CInterpolatorMulti::Mode m_interpolatorMode = BlackMisc::Simulation::CInterpolatorMulti::ModeSpline;
CCommand m_interpolatorModeCommand { "org/swift-project/xbus/toggle_lerp_mode", "Toggle interpolation mode", [this] { toggleInterpolatorMode(); } };
void toggleInterpolatorMode();
int getPlaneData(void *id, int dataType, void *io_data);
static int getPlaneData(void *id, int dataType, void *io_data, void *self)