From b5dfd15d66cfec98893220baaa6d96c21488aaab Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Sun, 6 Nov 2016 19:25:39 +0000 Subject: [PATCH] When dealing with pitch and bank as signed ints, it is desirable to round down, rather than toward zero, to get a linear distribution. refs #790 --- src/plugins/simulator/fs9/fs9client.cpp | 8 ++++---- src/plugins/simulator/fs9/simulatorfs9.cpp | 4 ++-- src/plugins/simulator/fscommon/fsuipc.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 9f5c8911d..47c295db8 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -51,8 +51,8 @@ namespace BlackSimPlugin // Pitch, Bank and Heading FS_PBH pbhstrct; 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(); + pbhstrct.pitch = std::floor(newSituation.getPitch().value(CAngleUnit::deg()) * CFs9Sdk::pitchMultiplier()); + pbhstrct.bank = std::floor(newSituation.getBank().value(CAngleUnit::deg()) * CFs9Sdk::bankMultiplier()); // MSFS has inverted pitch and bank angles pbhstrct.pitch = ~pbhstrct.pitch; pbhstrct.bank = ~pbhstrct.bank; @@ -108,8 +108,8 @@ namespace BlackSimPlugin // Pitch, Bank and Heading FS_PBH pbhstrct; 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(); + pbhstrct.pitch = std::floor(situation.getPitch().value(CAngleUnit::deg()) * CFs9Sdk::pitchMultiplier()); + pbhstrct.bank = std::floor(situation.getBank().value(CAngleUnit::deg()) * CFs9Sdk::bankMultiplier()); // MSFS has inverted pitch and bank angles pbhstrct.pitch = ~pbhstrct.pitch; pbhstrct.bank = ~pbhstrct.bank; diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index 435f2c4c3..20e59b532 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -78,9 +78,9 @@ namespace BlackSimPlugin FS_PBH pbhstrct; pbhstrct.pbh = positionVelocity.pbh; - int pitch = pbhstrct.pitch / CFs9Sdk::pitchMultiplier(); + int pitch = std::floor(pbhstrct.pitch / CFs9Sdk::pitchMultiplier()); if (pitch < -90 || pitch > 89) { CLogMessage(nullptr).warning("FS9: Pitch value out of limits: %1") << pitch; } - int bank = pbhstrct.bank / CFs9Sdk::bankMultiplier(); + int bank = std::floor(pbhstrct.bank / CFs9Sdk::bankMultiplier()); // MSFS has inverted pitch and bank angles pitch = ~pitch; diff --git a/src/plugins/simulator/fscommon/fsuipc.cpp b/src/plugins/simulator/fscommon/fsuipc.cpp index 487ee97c2..5138c1597 100644 --- a/src/plugins/simulator/fscommon/fsuipc.cpp +++ b/src/plugins/simulator/fscommon/fsuipc.cpp @@ -358,8 +358,8 @@ namespace BlackSimPlugin situation.setPosition(position); const double angleCorrectionFactor = 360.0 / 65536.0 / 65536.0; // see FSUIPC docu - pitchRaw *= angleCorrectionFactor; - bankRaw *= angleCorrectionFactor; + pitchRaw = std::floor(pitchRaw * angleCorrectionFactor); + bankRaw = std::floor(bankRaw * angleCorrectionFactor); // MSFS has inverted pitch and bank angles pitchRaw = ~pitchRaw;