diff --git a/src/blackmisc/aviation/aircraftsituation.h b/src/blackmisc/aviation/aircraftsituation.h index b4c05ffad..f27f28c36 100644 --- a/src/blackmisc/aviation/aircraftsituation.h +++ b/src/blackmisc/aviation/aircraftsituation.h @@ -99,7 +99,7 @@ namespace BlackMisc virtual BlackMisc::Geo::CLongitude longitude() const override { return this->m_position.longitude(); } //! Guess if aircraft is "on ground" - virtual bool isOnGroundGuessed() const; + bool isOnGroundGuessed() const; //! \copydoc Geo::ICoordinateGeodetic::geodeticHeight const BlackMisc::Aviation::CAltitude &geodeticHeight() const override { return this->m_position.geodeticHeight(); } diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index f9e64e59e..37650523b 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -846,7 +846,13 @@ namespace BlackSimPlugin if (partsStatus.isSupportingParts() && !parts.isEmpty()) { // we have parts, and use the closest ground - isOnGround = parts.front().isOnGround(); + + // \fixme onGround flag is not synchronized with positions and causes jumps during takeoff/landing. + // We need to find a better way to synchronize both. Until then, use it for a very small speed range only. + // This covers taxiing aircraft as well as a hovering helicopter. + double groundSpeedKnots = interpolatedSituation.getGroundSpeed().value(CSpeedUnit::kts()); + if (groundSpeedKnots < 50) { isOnGround = parts.front().isOnGround(); } + else { isOnGround = interpolatedSituation.isOnGroundGuessed(); } } else {