diff --git a/src/blackmisc/interpolatorlinear.cpp b/src/blackmisc/interpolatorlinear.cpp index 76d9029f9..e46c95d3b 100644 --- a/src/blackmisc/interpolatorlinear.cpp +++ b/src/blackmisc/interpolatorlinear.cpp @@ -161,20 +161,12 @@ namespace BlackMisc CAngle pitchBegin = oldSituation.getPitch(); CAngle pitchEnd = newSituation.getPitch(); CAngle pitch = (pitchEnd - pitchBegin) * simulationTimeFraction + pitchBegin; - - // TODO: According to the specification, pitch above horizon should be negative. - // But somehow we get positive pitches from the network. - pitch *= -1; currentSituation.setPitch(pitch); // Interpolate bank: Bank = (BankB - BankA) * t + BankA CAngle bankBegin = oldSituation.getBank(); CAngle bankEnd = newSituation.getBank(); CAngle bank = (bankEnd - bankBegin) * simulationTimeFraction + bankBegin; - - // TODO: According to the specification, banks to the right should be negative. - // But somehow we get positive banks from the network. - bank *= -1.0; currentSituation.setBank(bank); currentSituation.setGroundSpeed((newSituation.getGroundSpeed() - oldSituation.getGroundSpeed()) diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 2b55adedf..f685ff060 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -53,6 +53,9 @@ namespace BlackSimPlugin pbhstrct.hdg = newSituation.getHeading().value(CAngleUnit::deg()) * CFs9Sdk::headingMultiplier(); pbhstrct.pitch = newSituation.getPitch().value(CAngleUnit::deg()) * CFs9Sdk::pitchMultiplier(); pbhstrct.bank = newSituation.getBank().value(CAngleUnit::deg()) * CFs9Sdk::bankMultiplier(); + // MSFS has inverted pitch and bank angles + pbhstrct.pitch = -pbhstrct.pitch; + pbhstrct.bank = -pbhstrct.bank; positionVelocity.pbh = pbhstrct.pbh; // Ground velocity @@ -107,6 +110,9 @@ namespace BlackSimPlugin pbhstrct.hdg = situation.getHeading().value(CAngleUnit::deg()) * CFs9Sdk::headingMultiplier(); pbhstrct.pitch = situation.getPitch().value(CAngleUnit::deg()) * CFs9Sdk::pitchMultiplier(); pbhstrct.bank = situation.getBank().value(CAngleUnit::deg()) * CFs9Sdk::bankMultiplier(); + // MSFS has inverted pitch and bank angles + pbhstrct.pitch = -pbhstrct.pitch; + pbhstrct.bank = -pbhstrct.bank; positionSlewMode.pbh = pbhstrct.pbh; return positionSlewMode; diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index f7c0ec891..29b4e9593 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -86,6 +86,9 @@ namespace BlackSimPlugin if (bank > 180.0) bank -= 360; + // MSFS has inverted pitch and bank angles + pitch = -pitch; + bank = -bank; situation.setPitch(CAngle(pitch, CAngleUnit::deg())); situation.setBank(CAngle(bank, CAngleUnit::deg())); situation.setHeading(CHeading(pbhstrct.hdg / CFs9Sdk::headingMultiplier(), CHeading::Magnetic, CAngleUnit::deg())); diff --git a/src/plugins/simulator/fscommon/fsuipc.cpp b/src/plugins/simulator/fscommon/fsuipc.cpp index a99392a88..0db807ac2 100644 --- a/src/plugins/simulator/fscommon/fsuipc.cpp +++ b/src/plugins/simulator/fscommon/fsuipc.cpp @@ -358,6 +358,9 @@ namespace BlackSimPlugin situation.setPosition(position); // speeds, situation + // MSFS has inverted pitch and bank angles + pitchRaw = -pitchRaw; + bankRaw = -bankRaw; const double angleCorrectionFactor = 360.0 / 65536.0 / 65536.0; // see FSUIPC docu CAngle pitch = CAngle(pitchRaw * angleCorrectionFactor, CAngleUnit::deg()); CAngle bank = CAngle(bankRaw * angleCorrectionFactor, CAngleUnit::deg()); diff --git a/src/plugins/simulator/fsx/simulatorfsx.cpp b/src/plugins/simulator/fsx/simulatorfsx.cpp index e93569813..41fd444a7 100644 --- a/src/plugins/simulator/fsx/simulatorfsx.cpp +++ b/src/plugins/simulator/fsx/simulatorfsx.cpp @@ -378,6 +378,9 @@ namespace BlackSimPlugin BlackMisc::Aviation::CAircraftSituation aircraftSituation; aircraftSituation.setPosition(position); + // MSFS has inverted pitch and bank angles + simulatorOwnAircraft.pitch = -simulatorOwnAircraft.pitch; + simulatorOwnAircraft.bank = -simulatorOwnAircraft.bank; aircraftSituation.setPitch(CAngle(simulatorOwnAircraft.pitch, CAngleUnit::deg())); aircraftSituation.setBank(CAngle(simulatorOwnAircraft.bank, CAngleUnit::deg())); aircraftSituation.setHeading(CHeading(simulatorOwnAircraft.trueHeading, CHeading::True, CAngleUnit::deg()));