From 97ba02df2721c2b6bb8edbb36b5eda0292686378 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 13 Jul 2018 11:04:40 -0400 Subject: [PATCH] ControlGroup/Tilt: Return state data by value Makes it less error-prone to get state data from tilt controls (no need to pass any pointers to locals), and also allows direct assignment, letting the retrieved data be const. --- Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp | 24 ++++++++----------- .../ControllerEmu/ControlGroup/Tilt.cpp | 21 ++++++++-------- .../ControllerEmu/ControlGroup/Tilt.h | 11 ++++++--- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp index f6a465113c..b43a854ff4 100644 --- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp @@ -177,28 +177,24 @@ void EmulateDynamicShake(AccelData* const accel, DynamicData& dynamic_data, void EmulateTilt(AccelData* const accel, ControllerEmu::Tilt* const tilt_group, const bool sideways, const bool upright) { - ControlState roll, pitch; // 180 degrees - tilt_group->GetState(&roll, &pitch); + const ControllerEmu::Tilt::StateData state = tilt_group->GetState(); + const ControlState roll = state.x * PI; + const ControlState pitch = state.y * PI; - roll *= PI; - pitch *= PI; - - unsigned int ud = 0, lr = 0, fb = 0; - - // some notes that no one will understand but me :p + // Some notes that no one will understand but me :p // left, forward, up // lr/ left == negative for all orientations // ud/ up == negative for upright longways // fb/ forward == positive for (sideways flat) - // determine which axis is which direction - ud = upright ? (sideways ? 0 : 1) : 2; - lr = sideways; - fb = upright ? 2 : (sideways ? 0 : 1); - - int sgn[3] = {-1, 1, 1}; // sign fix + // Determine which axis is which direction + const u32 ud = upright ? (sideways ? 0 : 1) : 2; + const u32 lr = sideways; + const u32 fb = upright ? 2 : (sideways ? 0 : 1); + // Sign fix + std::array sgn{{-1, 1, 1}}; if (sideways && !upright) sgn[fb] *= -1; if (!sideways && upright) diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.cpp index 2785f56ba5..9221b90243 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.cpp @@ -31,7 +31,7 @@ Tilt::Tilt(const std::string& name_) : ControlGroup(name_, GroupType::Tilt) numeric_settings.emplace_back(std::make_unique(_trans("Angle"), 0.9, 0, 180)); } -void Tilt::GetState(ControlState* const x, ControlState* const y, const bool step) +Tilt::StateData Tilt::GetState(const bool step) { // this is all a mess @@ -80,18 +80,17 @@ void Tilt::GetState(ControlState* const x, ControlState* const y, const bool ste // silly if (step) { - if (xx > m_tilt[0]) - m_tilt[0] = std::min(m_tilt[0] + 0.1, xx); - else if (xx < m_tilt[0]) - m_tilt[0] = std::max(m_tilt[0] - 0.1, xx); + if (xx > m_tilt.x) + m_tilt.x = std::min(m_tilt.x + 0.1, xx); + else if (xx < m_tilt.x) + m_tilt.x = std::max(m_tilt.x - 0.1, xx); - if (yy > m_tilt[1]) - m_tilt[1] = std::min(m_tilt[1] + 0.1, yy); - else if (yy < m_tilt[1]) - m_tilt[1] = std::max(m_tilt[1] - 0.1, yy); + if (yy > m_tilt.y) + m_tilt.y = std::min(m_tilt.y + 0.1, yy); + else if (yy < m_tilt.y) + m_tilt.y = std::max(m_tilt.y - 0.1, yy); } - *y = m_tilt[1] * angle; - *x = m_tilt[0] * angle; + return {m_tilt.x * angle, m_tilt.y * angle}; } } // namespace ControllerEmu diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.h b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.h index 622fba3710..b03dc5a8b1 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.h +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/Tilt.h @@ -4,7 +4,6 @@ #pragma once -#include #include #include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" #include "InputCommon/ControllerInterface/Device.h" @@ -14,11 +13,17 @@ namespace ControllerEmu class Tilt : public ControlGroup { public: + struct StateData + { + ControlState x{}; + ControlState y{}; + }; + explicit Tilt(const std::string& name); - void GetState(ControlState* x, ControlState* y, bool step = true); + StateData GetState(bool step = true); private: - std::array m_tilt{}; + StateData m_tilt; }; } // namespace ControllerEmu