diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 97dbbf27f..bbaac8d4d 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -643,7 +643,7 @@ namespace BlackSimPlugin // crosscheck if still a valid aircraft // it can happen that aircraft has been removed, timed out ... - if (!this->isAircraftInRange(newRemoteAircraft.getCallsign())) + if (!this->isAircraftInRangeOrTestMode(newRemoteAircraft.getCallsign())) { // next cycle will be called by callbacks or timer CLogMessage(this).warning(u"Aircraft '%1' no longer in range, will not add") << newRemoteAircraft.getCallsign(); @@ -673,6 +673,13 @@ namespace BlackSimPlugin newRemoteAircraft.getAircraftIcaoCode().getDesignator(), newRemoteAircraft.getAirlineIcaoCode().getDesignator(), livery); + PlanesPositions pos; + pos.push_back(newRemoteAircraft.getSituation()); + m_trafficProxy->setPlanesPositions(pos); + + PlanesSurfaces surfaces; + surfaces.push_back(newRemoteAircraft.getCallsign(), newRemoteAircraft.getParts()); + m_trafficProxy->setPlanesSurfaces(surfaces); } else { @@ -692,7 +699,7 @@ namespace BlackSimPlugin if (callsign.isEmpty()) { return false; } // can happen if an object is not an aircraft // really remove from simulator - if (!m_xplaneAircraftObjects.contains(callsign) && !m_pendingToBeAddedAircraft.containsCallsign(callsign) && !m_addingInProgressAircraft.contains(callsign)) + if (!this->isTestMode() && !m_xplaneAircraftObjects.contains(callsign) && !m_pendingToBeAddedAircraft.containsCallsign(callsign) && !m_addingInProgressAircraft.contains(callsign)) { // not existing aircraft return false; @@ -901,14 +908,7 @@ namespace BlackSimPlugin if (updateAllAircraft || !this->isEqualLastSent(interpolatedSituation)) { this->rememberLastSent(interpolatedSituation); - planesPositions.callsigns.push_back(interpolatedSituation.getCallsign().asString()); - planesPositions.latitudesDeg.push_back(interpolatedSituation.latitude().value(CAngleUnit::deg())); - planesPositions.longitudesDeg.push_back(interpolatedSituation.longitude().value(CAngleUnit::deg())); - planesPositions.altitudesFt.push_back(interpolatedSituation.getAltitude().value(CLengthUnit::ft())); - planesPositions.pitchesDeg.push_back(interpolatedSituation.getPitch().value(CAngleUnit::deg())); - planesPositions.rollsDeg.push_back(interpolatedSituation.getBank().value(CAngleUnit::deg())); - planesPositions.headingsDeg.push_back(interpolatedSituation.getHeading().value(CAngleUnit::deg())); - planesPositions.onGrounds.push_back(interpolatedSituation.getOnGround() == CAircraftSituation::OnGround); + planesPositions.push_back(interpolatedSituation); } } else @@ -922,23 +922,7 @@ namespace BlackSimPlugin if (updateAllAircraft || !this->isEqualLastSent(parts, callsign)) { this->rememberLastSent(parts, callsign); - planesSurfaces.callsigns.push_back(xplaneAircraft.getCallsign().asString()); - planesSurfaces.gears.push_back(parts.isGearDown() ? 1 : 0); - planesSurfaces.flaps.push_back(parts.getFlapsPercent() / 100.0); - planesSurfaces.spoilers.push_back(parts.isSpoilersOut() ? 1 : 0); - planesSurfaces.speedBrakes.push_back(parts.isSpoilersOut() ? 1 : 0); - planesSurfaces.slats.push_back(parts.getFlapsPercent() / 100.0); - planesSurfaces.wingSweeps.push_back(0.0); - planesSurfaces.thrusts.push_back(parts.isAnyEngineOn() ? 0 : 0.75); - planesSurfaces.elevators.push_back(0.0); - planesSurfaces.rudders.push_back(0.0); - planesSurfaces.ailerons.push_back(0.0); - planesSurfaces.landLights.push_back(parts.getLights().isLandingOn()); - planesSurfaces.taxiLights.push_back(parts.getLights().isTaxiOn()); - planesSurfaces.beaconLights.push_back(parts.getLights().isBeaconOn()); - planesSurfaces.strobeLights.push_back(parts.getLights().isStrobeOn()); - planesSurfaces.navLights.push_back(parts.getLights().isNavOn()); - planesSurfaces.lightPatterns.push_back(0); + planesSurfaces.push_back(xplaneAircraft.getCallsign(), parts); } } diff --git a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h index 65d095d70..583a9a1a3 100644 --- a/src/plugins/simulator/xplane/xswiftbustrafficproxy.h +++ b/src/plugins/simulator/xplane/xswiftbustrafficproxy.h @@ -12,6 +12,8 @@ #define BLACKSIMPLUGIN_XSWIFTBUS_TRAFFIC_PROXY_H #include "blackmisc/genericdbusinterface.h" +#include "blackmisc/aviation/aircraftsituation.h" +#include "blackmisc/aviation/aircraftparts.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/geo/elevationplane.h" @@ -54,6 +56,19 @@ namespace BlackSimPlugin return true; } + //! Push back the latest situation + void push_back(const BlackMisc::Aviation::CAircraftSituation &situation) + { + this->callsigns.push_back(situation.getCallsign().asString()); + this->latitudesDeg.push_back(situation.latitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->longitudesDeg.push_back(situation.longitude().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->altitudesFt.push_back(situation.getAltitude().value(BlackMisc::PhysicalQuantities::CLengthUnit::ft())); + this->pitchesDeg.push_back(situation.getPitch().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->rollsDeg.push_back(situation.getBank().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->headingsDeg.push_back(situation.getHeading().value(BlackMisc::PhysicalQuantities::CAngleUnit::deg())); + this->onGrounds.push_back(situation.getOnGround() == BlackMisc::Aviation::CAircraftSituation::OnGround); + } + QStringList callsigns; //!< List of callsigns QList latitudesDeg; //!< List of latitudes QList longitudesDeg; //!< List of longitudes @@ -70,6 +85,28 @@ namespace BlackSimPlugin //! Is empty? bool isEmpty() const { return callsigns.isEmpty(); } + //! Push back the latest parts + void push_back(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts) + { + this->callsigns.push_back(callsign.asString()); + this->gears.push_back(parts.isGearDown() ? 1 : 0); + this->flaps.push_back(parts.getFlapsPercent() / 100.0); + this->spoilers.push_back(parts.isSpoilersOut() ? 1 : 0); + this->speedBrakes.push_back(parts.isSpoilersOut() ? 1 : 0); + this->slats.push_back(parts.getFlapsPercent() / 100.0); + this->wingSweeps.push_back(0.0); + this->thrusts.push_back(parts.isAnyEngineOn() ? 0 : 0.75); + this->elevators.push_back(0.0); + this->rudders.push_back(0.0); + this->ailerons.push_back(0.0); + this->landLights.push_back(parts.getLights().isLandingOn()); + this->taxiLights.push_back(parts.getLights().isTaxiOn()); + this->beaconLights.push_back(parts.getLights().isBeaconOn()); + this->strobeLights.push_back(parts.getLights().isStrobeOn()); + this->navLights.push_back(parts.getLights().isNavOn()); + this->lightPatterns.push_back(0); + } + QStringList callsigns; //!< List of callsigns QList gears; //!< List of gears QList flaps; //!< List of flaps