Ref T261, interpolator mode is now part of setup

* added attribute in setup
* adjusted UI
* adjusted interpolator / simulator functions
This commit is contained in:
Klaus Basan
2018-05-04 22:31:25 +02:00
committed by Roland Winklmeier
parent eb815ab987
commit 3d2a74a652
21 changed files with 175 additions and 270 deletions

View File

@@ -303,14 +303,6 @@ namespace BlackSimPlugin
return c > 0;
}
bool CSimulatorEmulated::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign)
{
if (canLog()) m_monitorWidget->appendReceivingCall(Q_FUNC_INFO, CInterpolatorMulti::modeToString(mode), callsign.toQString());
if (!m_interpolators.contains(callsign)) { return false; }
CInterpolatorMulti *im = m_interpolators[callsign];
return im->setMode(mode);
}
int CSimulatorEmulated::physicallyRemoveAllRemoteAircraft()
{
if (canLog()) m_monitorWidget->appendReceivingCall(Q_FUNC_INFO);

View File

@@ -60,7 +60,6 @@ namespace BlackSimPlugin
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const override;
virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Aviation::CCallsignSet physicallyRenderedAircraft() const override;
virtual bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode, const BlackMisc::Aviation::CCallsign &callsign) override;
// functions just logged
virtual void highlightAircraft(const BlackMisc::Simulation::CSimulatedAircraft &aircraftToHighlight, bool enableHighlight, const BlackMisc::PhysicalQuantities::CTime &displayTime) override;

View File

@@ -279,16 +279,6 @@ namespace BlackSimPlugin
this->displayStatusMessage(message.asStatusMessage(true, true));
}
bool CSimulatorFs9::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign)
{
const auto it = m_hashFs9Clients.find(callsign);
if (it == m_hashFs9Clients.end()) { return false; }
QTimer::singleShot(0, it->data(), [client = *it, mode] { client->getInterpolator()->setMode(mode); });
// Always return true if we were setting the mode, since we cannot easily access the return value from
// CInterpolatorMulti::setMode in a thread safe manner.
return true;
}
bool CSimulatorFs9::isPhysicallyRenderedAircraft(const CCallsign &callsign) const
{
return m_hashFs9Clients.contains(callsign);

View File

@@ -106,22 +106,10 @@ namespace BlackSimPlugin
return this->hasValidRequestId() && this->hasValidObjectId();
}
void CSimConnectObject::toggleInterpolatorMode()
QString CSimConnectObject::getInterpolatorInfo(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const
{
Q_ASSERT(m_interpolator);
m_interpolator->toggleMode();
}
bool CSimConnectObject::setInterpolatorMode(CInterpolatorMulti::Mode mode)
{
Q_ASSERT(m_interpolator);
return m_interpolator->setMode(mode);
}
QString CSimConnectObject::getInterpolatorInfo() const
{
Q_ASSERT(m_interpolator);
return m_interpolator->getInterpolatorInfo();
return m_interpolator->getInterpolatorInfo(mode);
}
void CSimConnectObject::attachInterpolatorLogger(CInterpolationLogger *logger)
@@ -157,10 +145,10 @@ namespace BlackSimPlugin
return m_interpolator->getInterpolatedOrGuessedParts(currentTimeSinceEpoc, setup, partsStatus, log);
}
const CAircraftSituation &CSimConnectObject::getLastInterpolatedSituation() const
const CAircraftSituation &CSimConnectObject::getLastInterpolatedSituation(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const
{
if (!m_interpolator) { return CAircraftSituation::null(); }
return m_interpolator->getLastInterpolatedSituation();
return m_interpolator->getLastInterpolatedSituation(mode);
}
bool CSimConnectObjects::setSimConnectObjectIdForRequestId(DWORD requestId, DWORD objectId, bool resetSentParts)
@@ -324,29 +312,5 @@ namespace BlackSimPlugin
}
return false;
}
void CSimConnectObjects::toggleInterpolatorModes()
{
for (const CCallsign &cs : this->keys())
{
(*this)[cs].toggleInterpolatorMode();
}
}
void CSimConnectObjects::toggleInterpolatorMode(const CCallsign &callsign)
{
if (!this->contains(callsign)) { return; }
(*this)[callsign].toggleInterpolatorMode();
}
int CSimConnectObjects::setInterpolatorModes(CInterpolatorMulti::Mode mode)
{
int c = 0;
for (const CCallsign &cs : this->keys())
{
if ((*this)[cs].setInterpolatorMode(mode)) c++;
}
return c;
}
} // namespace
} // namespace

View File

@@ -163,11 +163,8 @@ namespace BlackSimPlugin
//! \copydoc BlackMisc::Simulation::CInterpolatorMulti::toggleMode
void toggleInterpolatorMode();
//! \copydoc BlackMisc::Simulation::CInterpolatorMulti::setMode
bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode);
//! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolatorInfo
QString getInterpolatorInfo() const;
QString getInterpolatorInfo(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const;
//! \copydoc BlackMisc::Simulation::CInterpolator::attachLogger
void attachInterpolatorLogger(BlackMisc::Simulation::CInterpolationLogger *logger);
@@ -191,7 +188,7 @@ namespace BlackSimPlugin
BlackMisc::Simulation::CPartsStatus &partsStatus, bool log) const;
//! Last interpolated situation
const BlackMisc::Aviation::CAircraftSituation &getLastInterpolatedSituation() const;
const BlackMisc::Aviation::CAircraftSituation &getLastInterpolatedSituation(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const;
//! Interpolator
BlackMisc::Simulation::CInterpolatorMulti *getInterpolator() const { return m_interpolator.data(); }
@@ -274,15 +271,6 @@ namespace BlackSimPlugin
//! Contains object of type
bool containsType(CSimConnectObject::SimObjectType type) const;
//! Toggle interpolator modes
void toggleInterpolatorModes();
//! Toggle interpolator modes
void toggleInterpolatorMode(const BlackMisc::Aviation::CCallsign &callsign);
//! Set interpolator modes
int setInterpolatorModes(BlackMisc::Simulation::CInterpolatorMulti::Mode mode);
};
} // namespace
} // namespace

View File

@@ -242,21 +242,6 @@ namespace BlackSimPlugin
return CCallsignSet(m_simConnectObjects.keys());
}
bool CSimulatorFsxCommon::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign)
{
if (mode == CInterpolatorMulti::ModeUnknown) { return false; }
if (callsign.isEmpty())
{
const int c = m_simConnectObjects.setInterpolatorModes(mode);
return c > 0;
}
else
{
if (!m_simConnectObjects.contains(callsign)) { return false; }
return m_simConnectObjects[callsign].setInterpolatorMode(mode);
}
}
CStatusMessageList CSimulatorFsxCommon::debugVerifyStateAfterAllAircraftRemoved() const
{
CStatusMessageList msgs;
@@ -539,7 +524,8 @@ namespace BlackSimPlugin
// CElevationPlane: deg, deg, feet
// we only remember near ground
if (simObject.getLastInterpolatedSituation().canLikelySkipNearGroundInterpolation()) { return; }
const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(simObject.getCallsign());
if (simObject.getLastInterpolatedSituation(setup.getInterpolatorMode()).canLikelySkipNearGroundInterpolation()) { return; }
CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt);
elevation.setSinglePointRadius();
@@ -763,10 +749,11 @@ namespace BlackSimPlugin
CStatusMessage msg;
if (!simObject.getAircraftModelString().isEmpty())
{
const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(callsign);
m_addPendingAircraft.replaceOrAddByCallsign(simObject.getAircraft());
msg = CLogMessage(this).warning("Aircraft removed, '%1' '%2' object id '%3' out of reality bubble or other reason. Interpolator: '%4'")
<< callsign.toQString() << simObject.getAircraftModelString()
<< objectID << simObject.getInterpolatorInfo();
<< objectID << simObject.getInterpolatorInfo(setup.getInterpolatorMode());
}
else
{

View File

@@ -127,7 +127,6 @@ namespace BlackSimPlugin
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const override;
virtual bool isPhysicallyRenderedAircraft(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Aviation::CCallsignSet physicallyRenderedAircraft() const override;
virtual bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode, const BlackMisc::Aviation::CCallsign &callsign) override;
virtual void clearAllRemoteAircraftData() override;
virtual BlackMisc::CStatusMessageList debugVerifyStateAfterAllAircraftRemoved() const override;
//! @}

View File

@@ -369,23 +369,6 @@ namespace BlackSimPlugin
return false;
}
bool CSimulatorXPlane::setInterpolatorMode(CInterpolatorMulti::Mode mode, const CCallsign &callsign)
{
if (!isConnected()) { return false; }
if (mode == CInterpolatorMulti::ModeUnknown) { return false; }
if (callsign.isEmpty())
{
const int c = m_xplaneAircraftObjects.setInterpolatorModes(mode);
return c > 0;
}
else
{
if (!m_xplaneAircraftObjects.contains(callsign)) { return false; }
return m_xplaneAircraftObjects[callsign].setInterpolatorMode(mode);
}
}
QDBusConnection CSimulatorXPlane::connectionFromString(const QString &str)
{
if (str == CDBusServer::sessionBusAddress()) { return QDBusConnection::sessionBus(); }

View File

@@ -134,7 +134,6 @@ 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;
virtual void unload() override;
//! @}

View File

@@ -36,22 +36,10 @@ namespace BlackSimPlugin
return m_situationAsSent == position;
}
void CXPlaneMPAircraft::toggleInterpolatorMode()
QString CXPlaneMPAircraft::getInterpolatorInfo(CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const
{
Q_ASSERT(m_interpolator);
m_interpolator->toggleMode();
}
bool CXPlaneMPAircraft::setInterpolatorMode(CInterpolatorMulti::Mode mode)
{
Q_ASSERT(m_interpolator);
return m_interpolator->setMode(mode);
}
QString CXPlaneMPAircraft::getInterpolatorInfo() const
{
Q_ASSERT(m_interpolator);
return m_interpolator->getInterpolatorInfo();
return m_interpolator->getInterpolatorInfo(mode);
}
void CXPlaneMPAircraft::attachInterpolatorLogger(CInterpolationLogger *logger)
@@ -91,15 +79,5 @@ namespace BlackSimPlugin
{
return CCallsignSet(this->keys());
}
int CXPlaneMPAircraftObjects::setInterpolatorModes(CInterpolatorMulti::Mode mode)
{
int c = 0;
for (const CCallsign &cs : this->keys())
{
if ((*this)[cs].setInterpolatorMode(mode)) c++;
}
return c;
}
} // namespace
} // namespace

View File

@@ -70,14 +70,8 @@ namespace BlackSimPlugin
//! Engine count
int getEngineCount() const { return m_aircraft.getEnginesCount(); }
//! \copydoc BlackMisc::Simulation::CInterpolatorMulti::toggleMode
void toggleInterpolatorMode();
//! \copydoc BlackMisc::Simulation::CInterpolatorMulti::setMode
bool setInterpolatorMode(BlackMisc::Simulation::CInterpolatorMulti::Mode mode);
//! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolatorInfo
QString getInterpolatorInfo() const;
QString getInterpolatorInfo(BlackMisc::Simulation::CInterpolationAndRenderingSetupBase::InterpolatorMode mode) const;
//! \copydoc BlackMisc::Simulation::CInterpolator::attachLogger
void attachInterpolatorLogger(BlackMisc::Simulation::CInterpolationLogger *logger);
@@ -128,9 +122,6 @@ namespace BlackSimPlugin
//! Toggle interpolator modes
void toggleInterpolatorMode(const BlackMisc::Aviation::CCallsign &callsign);
//! Set interpolator modes
int setInterpolatorModes(BlackMisc::Simulation::CInterpolatorMulti::Mode mode);
};
} // namespace
} // namespace