diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index cfa4e7166..821e2c104 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -80,7 +80,7 @@ namespace BlackMisc CAircraftSituation CRemoteAircraftProvider::remoteAircraftSituation(const CCallsign &callsign, int index) const { - CAircraftSituationList situations = this->remoteAircraftSituations(callsign); + const CAircraftSituationList situations = this->remoteAircraftSituations(callsign); if (index < 0 || index >= situations.size()) { return CAircraftSituation::null(); } return situations[index]; } @@ -237,6 +237,20 @@ namespace BlackMisc return c; } + bool CRemoteAircraftProvider::updateAircraftInRangeDistanceBearing(const CCallsign &callsign, const CAircraftSituation &situation, const CLength &distance, const CAngle &bearing) + { + Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "Missing callsign"); + { + QWriteLocker l(&m_lockAircraft); + if (!m_aircraftInRange.contains(callsign)) { return false; } + CSimulatedAircraft &aircraft = m_aircraftInRange[callsign]; + aircraft.setSituation(situation); + if (!bearing.isNull()) { aircraft.setRelativeBearing(bearing); } + if (!distance.isNull()) { aircraft.setRelativeDistance(distance); } + } + return true; + } + CAircraftSituation CRemoteAircraftProvider::storeAircraftSituation(const CAircraftSituation &situation, bool allowTestOffset) { const CCallsign cs = situation.getCallsign(); diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index 3365623b6..80ceed4dd 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -414,6 +414,11 @@ namespace BlackMisc //! \threadsafe int updateAircraftInRange(const Aviation::CCallsign &callsign, const CPropertyIndexVariantMap &vm, bool skipEqualValues = true); + //! Update aircraft bearing, distance and situation + //! \threadsafe + //! \remark does NOT emit signals + bool updateAircraftInRangeDistanceBearing(const Aviation::CCallsign &callsign, const Aviation::CAircraftSituation &situation, const PhysicalQuantities::CLength &distance, const PhysicalQuantities::CAngle &bearing); + //! Store an aircraft situation //! \remark latest situations are kept first //! \threadsafe