diff --git a/Source/Core/Core/Config/WiimoteInputSettings.cpp b/Source/Core/Core/Config/WiimoteInputSettings.cpp index ebe61bfc68..db8ff55597 100644 --- a/Source/Core/Core/Config/WiimoteInputSettings.cpp +++ b/Source/Core/Core/Config/WiimoteInputSettings.cpp @@ -6,34 +6,48 @@ namespace Config { - // Configuration Information +// Configuration Information - // WiimoteInput.Settings +// WiimoteInput.Settings - const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_FAST{ { System::WiiPad, "Swing", "Fast" }, 4.5 }; - const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM{ { System::WiiPad, "Swing", "Medium" }, 2.5 }; - const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_SLOW{ { System::WiiPad, "Swing", "Slow" }, 1.5 }; +const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_FAST{{System::WiiPad, "Swing", "Fast"}, 4.5}; +const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM{{System::WiiPad, "Swing", "Medium"}, + 2.5}; +const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_SLOW{{System::WiiPad, "Swing", "Slow"}, 1.5}; - const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_HARD{ { System::WiiPad, "Shake", "Hard" }, 5.0 }; - const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM{ { System::WiiPad, "Shake", "Medium" }, 3.0 }; - const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT{ { System::WiiPad, "Shake", "Soft" }, 2.0 }; +const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_HARD{{System::WiiPad, "Shake", "Hard"}, 5.0}; +const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM{{System::WiiPad, "Shake", "Medium"}, + 3.0}; +const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT{{System::WiiPad, "Shake", "Soft"}, 2.0}; - // Dynamic settings - const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST{ { System::WiiPad, "Dynamic_Swing", "FramesHeldFast" }, 100 }; - const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW{ { System::WiiPad, "Dynamic_Swing", "FramesHeldSlow" }, 30 }; - const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_LENGTH{ { System::WiiPad, "Dynamic_Swing", "FrameCount" }, 30 }; +// Dynamic settings +const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST{ + {System::WiiPad, "Dynamic_Swing", "FramesHeldFast"}, 100}; +const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW{ + {System::WiiPad, "Dynamic_Swing", "FramesHeldSlow"}, 30}; +const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_LENGTH{ + {System::WiiPad, "Dynamic_Swing", "FrameCount"}, 30}; - const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD{ { System::WiiPad, "Dynamic_Shake", "FramesHeldHard" }, 45 }; - const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT{ { System::WiiPad, "Dynamic_Shake", "FramesHeldSoft" }, 15 }; - const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_LENGTH{ { System::WiiPad, "Dynamic_Shake", "FrameCount" }, 30 }; +const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD{ + {System::WiiPad, "Dynamic_Shake", "FramesHeldHard"}, 45}; +const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT{ + {System::WiiPad, "Dynamic_Shake", "FramesHeldSoft"}, 15}; +const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_LENGTH{ + {System::WiiPad, "Dynamic_Shake", "FrameCount"}, 30}; - // NunchuckInput.Settings +// NunchuckInput.Settings - const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_FAST{ { System::WiiPad, "Nunchuk_Swing", "Fast" }, 4.5 }; - const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_MEDIUM{ { System::WiiPad, "Nunchuk_Swing", "Medium" }, 2.5 }; - const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_SLOW{ { System::WiiPad, "Nunchuk_Swing", "Slow" }, 1.5 }; +const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_FAST{ + {System::WiiPad, "Nunchuk_Swing", "Fast"}, 4.5}; +const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_MEDIUM{ + {System::WiiPad, "Nunchuk_Swing", "Medium"}, 2.5}; +const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_SLOW{ + {System::WiiPad, "Nunchuk_Swing", "Slow"}, 1.5}; - const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_HARD{ { System::WiiPad, "Nunchuk_Shake", "Hard" }, 5.0 }; - const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM{ { System::WiiPad, "Nunchuk_Shake", "Medium" }, 3.0 }; - const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT{ { System::WiiPad, "Nunchuk_Shake", "Soft" }, 2.0 }; +const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_HARD{ + {System::WiiPad, "Nunchuk_Shake", "Hard"}, 5.0}; +const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM{ + {System::WiiPad, "Nunchuk_Shake", "Medium"}, 3.0}; +const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT{ + {System::WiiPad, "Nunchuk_Shake", "Soft"}, 2.0}; } diff --git a/Source/Core/Core/Config/WiimoteInputSettings.h b/Source/Core/Core/Config/WiimoteInputSettings.h index 17cacffbc4..de7ffc0241 100644 --- a/Source/Core/Core/Config/WiimoteInputSettings.h +++ b/Source/Core/Core/Config/WiimoteInputSettings.h @@ -8,36 +8,42 @@ namespace Config { - // Configuration Information +// Configuration Information - // WiimoteInput.Settings +// WiimoteInput.Settings - extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_FAST; - extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM; - extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_SLOW; +extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_FAST; +extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM; +extern const ConfigInfo WIIMOTE_INPUT_SWING_INTENSITY_SLOW; - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_HARD; - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM; - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT; +extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_HARD; +extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM; +extern const ConfigInfo WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT; - // Below settings are for dynamic input only (based on how long the user holds a button) +// Below settings are for dynamic input only (based on how long the user holds a button) - extern const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST; // How long button held constitutes a fast swing - extern const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW; // How long button held constitutes a slow swing - extern const ConfigInfo WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_LENGTH; // How long to execute the swing +extern const ConfigInfo + WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST; // How long button held constitutes a fast swing +extern const ConfigInfo + WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW; // How long button held constitutes a slow swing +extern const ConfigInfo + WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_LENGTH; // How long to execute the swing - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD; // How long button held constitutes a hard shake - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT; // How long button held constitutes a soft shake - extern const ConfigInfo WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_LENGTH; // How long to execute a shake +extern const ConfigInfo + WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD; // How long button held constitutes a hard shake +extern const ConfigInfo + WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT; // How long button held constitutes a soft shake +extern const ConfigInfo + WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_LENGTH; // How long to execute a shake - // NunchuckInput.Settings +// NunchuckInput.Settings - extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_FAST; - extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_MEDIUM; - extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_SLOW; +extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_FAST; +extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_MEDIUM; +extern const ConfigInfo NUNCHUK_INPUT_SWING_INTENSITY_SLOW; - extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_HARD; - extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM; - extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT; +extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_HARD; +extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM; +extern const ConfigInfo NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT; } // namespace Config diff --git a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp index 9ba2a8e079..b2a6f04ccb 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Attachment/Nunchuk.cpp @@ -109,9 +109,12 @@ void Nunchuk::GetState(u8* const data) EmulateSwing(&accel, m_swing_fast, Config::Get(Config::NUNCHUK_INPUT_SWING_INTENSITY_FAST)); // shake - EmulateShake(&accel, m_shake, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM), m_shake_step.data()); - EmulateShake(&accel, m_shake_soft, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT), m_shake_soft_step.data()); - EmulateShake(&accel, m_shake_hard, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_HARD), m_shake_hard_step.data()); + EmulateShake(&accel, m_shake, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_MEDIUM), + m_shake_step.data()); + EmulateShake(&accel, m_shake_soft, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_SOFT), + m_shake_soft_step.data()); + EmulateShake(&accel, m_shake_hard, Config::Get(Config::NUNCHUK_INPUT_SHAKE_INTENSITY_HARD), + m_shake_hard_step.data()); // buttons m_buttons->GetState(&nc_data.bt.hex, nunchuk_button_bitmasks.data()); diff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp index 14853484bb..453b42381f 100644 --- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp @@ -123,15 +123,16 @@ void EmulateShake(AccelData* const accel, ControllerEmu::Buttons* const buttons_ } } -void EmulateDynamicShake(AccelData* const accel, DynamicData& dynamic_data, ControllerEmu::Buttons* const buttons_group, - const DynamicConfiguration& config, u8* const shake_step) +void EmulateDynamicShake(AccelData* const accel, DynamicData& dynamic_data, + ControllerEmu::Buttons* const buttons_group, + const DynamicConfiguration& config, u8* const shake_step) { // frame count of one up/down shake // < 9 no shake detection in "Wario Land: Shake It" auto const shake_step_max = 15; // shake is a bitfield of X,Y,Z shake button states - static const unsigned int btns[] = { 0x01, 0x02, 0x04 }; + static const unsigned int btns[] = {0x01, 0x02, 0x04}; unsigned int shake = 0; buttons_group->GetState(&shake, btns); @@ -232,12 +233,14 @@ void EmulateSwing(AccelData* const accel, ControllerEmu::Force* const swing_grou } void EmulateDynamicSwing(AccelData* const accel, DynamicData& dynamic_data, - ControllerEmu::Force* const swing_group, const DynamicConfiguration& config, const bool sideways, const bool upright) + ControllerEmu::Force* const swing_group, + const DynamicConfiguration& config, const bool sideways, + const bool upright) { ControlState swing[3]; swing_group->GetState(swing); - s8 g_dir[3] = { -1, -1, -1 }; + s8 g_dir[3] = {-1, -1, -1}; u8 axis_map[3]; // determine which axis is which direction @@ -398,9 +401,12 @@ Wiimote::Wiimote(const unsigned int index) : m_index(index), ir_sin(0), ir_cos(1 m_shake_hard->controls.emplace_back(new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "Z")); groups.emplace_back(m_shake_dynamic = new ControllerEmu::Buttons("Shake Dynamic")); - m_shake_dynamic->controls.emplace_back(new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "X")); - m_shake_dynamic->controls.emplace_back(new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "Y")); - m_shake_dynamic->controls.emplace_back(new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "Z")); + m_shake_dynamic->controls.emplace_back( + new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "X")); + m_shake_dynamic->controls.emplace_back( + new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "Y")); + m_shake_dynamic->controls.emplace_back( + new ControllerEmu::Input(ControllerEmu::DoNotTranslate, "Z")); // extension groups.emplace_back(m_extension = new ControllerEmu::Extension(_trans("Extension"))); @@ -604,13 +610,18 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf) swing_config.low_intensity = Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_SLOW); swing_config.med_intensity = Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM); swing_config.high_intensity = Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_FAST); - swing_config.frames_needed_for_high_intensity = Config::Get(Config::WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST); - swing_config.frames_needed_for_low_intensity = Config::Get(Config::WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW); + swing_config.frames_needed_for_high_intensity = + Config::Get(Config::WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_FAST); + swing_config.frames_needed_for_low_intensity = + Config::Get(Config::WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_HELD_SLOW); swing_config.frames_to_execute = Config::Get(Config::WIIMOTE_INPUT_SWING_DYNAMIC_FRAMES_LENGTH); - EmulateSwing(&m_accel, m_swing, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM), is_sideways, is_upright); - EmulateSwing(&m_accel, m_swing_slow, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_SLOW), is_sideways, is_upright); - EmulateSwing(&m_accel, m_swing_fast, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_FAST), is_sideways, is_upright); + EmulateSwing(&m_accel, m_swing, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_MEDIUM), + is_sideways, is_upright); + EmulateSwing(&m_accel, m_swing_slow, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_SLOW), + is_sideways, is_upright); + EmulateSwing(&m_accel, m_swing_fast, Config::Get(Config::WIIMOTE_INPUT_SWING_INTENSITY_FAST), + is_sideways, is_upright); EmulateDynamicSwing(&m_accel, m_swing_dynamic_data, m_swing_dynamic, swing_config, is_sideways, is_upright); @@ -618,17 +629,21 @@ void Wiimote::GetAccelData(u8* const data, const ReportFeatures& rptf) shake_config.low_intensity = Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT); shake_config.med_intensity = Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM); shake_config.high_intensity = Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_HARD); - shake_config.frames_needed_for_high_intensity = Config::Get(Config::WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD); - shake_config.frames_needed_for_low_intensity = Config::Get(Config::WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT); + shake_config.frames_needed_for_high_intensity = + Config::Get(Config::WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_HARD); + shake_config.frames_needed_for_low_intensity = + Config::Get(Config::WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_HELD_SOFT); shake_config.frames_to_execute = Config::Get(Config::WIIMOTE_INPUT_SHAKE_DYNAMIC_FRAMES_LENGTH); - EmulateShake(&m_accel, m_shake, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM), m_shake_step.data()); - EmulateShake(&m_accel, m_shake_soft, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT), m_shake_soft_step.data()); - EmulateShake(&m_accel, m_shake_hard, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_HARD), m_shake_hard_step.data()); + EmulateShake(&m_accel, m_shake, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_MEDIUM), + m_shake_step.data()); + EmulateShake(&m_accel, m_shake_soft, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_SOFT), + m_shake_soft_step.data()); + EmulateShake(&m_accel, m_shake_hard, Config::Get(Config::WIIMOTE_INPUT_SHAKE_INTENSITY_HARD), + m_shake_hard_step.data()); EmulateDynamicShake(&m_accel, m_shake_dynamic_data, m_shake_dynamic, shake_config, m_shake_dynamic_step.data()); - wm_accel& accel = *reinterpret_cast(data + rptf.accel); wm_buttons& core = *reinterpret_cast(data + rptf.core); diff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h index 8fbb761b13..f190220502 100644 --- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h +++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h @@ -128,8 +128,8 @@ struct AccelData // shake struct DynamicData { - std::array timing; // Hold length in frames for each axis - std::array intensity; // Swing or shake intensity + std::array timing; // Hold length in frames for each axis + std::array intensity; // Swing or shake intensity std::array executing_frames_left; // Number of frames to execute the intensity operation }; @@ -186,8 +186,7 @@ void EmulateShake(AccelData* const accel_data, ControllerEmu::Buttons* const but void EmulateDynamicShake(AccelData* const accel, DynamicData& dynamic_data, ControllerEmu::Buttons* const buttons_group, - const DynamicConfiguration& config, - u8* const shake_step); + const DynamicConfiguration& config, u8* const shake_step); void EmulateTilt(AccelData* const accel, ControllerEmu::Tilt* const tilt_group, const bool sideways = false, const bool upright = false); @@ -197,8 +196,8 @@ void EmulateSwing(AccelData* const accel, ControllerEmu::Force* const tilt_group void EmulateDynamicSwing(AccelData* const accel, DynamicData& dynamic_data, ControllerEmu::Force* const swing_group, - const DynamicConfiguration& config, - const bool sideways = false, const bool upright = false); + const DynamicConfiguration& config, const bool sideways = false, + const bool upright = false); enum { diff --git a/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.cpp b/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.cpp index 14ae68f749..044b10485d 100644 --- a/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.cpp +++ b/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.cpp @@ -11,29 +11,30 @@ HotkeyControllerProfile::HotkeyControllerProfile(MappingWindow* window) : MappingWidget(window) { - CreateMainLayout(); + CreateMainLayout(); } void HotkeyControllerProfile::CreateMainLayout() { - m_main_layout = new QHBoxLayout(); + m_main_layout = new QHBoxLayout(); - m_main_layout->addWidget(CreateGroupBox(tr("Controller Profile"), HotkeyManagerEmu::GetHotkeyGroup(HKGP_CONTROLLER_PROFILE))); + m_main_layout->addWidget(CreateGroupBox( + tr("Controller Profile"), HotkeyManagerEmu::GetHotkeyGroup(HKGP_CONTROLLER_PROFILE))); - setLayout(m_main_layout); + setLayout(m_main_layout); } InputConfig* HotkeyControllerProfile::GetConfig() { - return HotkeyManagerEmu::GetConfig(); + return HotkeyManagerEmu::GetConfig(); } void HotkeyControllerProfile::LoadSettings() { - HotkeyManagerEmu::LoadConfig(); + HotkeyManagerEmu::LoadConfig(); } void HotkeyControllerProfile::SaveSettings() { - HotkeyManagerEmu::GetConfig()->SaveConfig(); + HotkeyManagerEmu::GetConfig()->SaveConfig(); } diff --git a/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.h b/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.h index 04c5435b27..6884275b63 100644 --- a/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.h +++ b/Source/Core/DolphinQt/Config/Mapping/HotkeyControllerProfile.h @@ -10,17 +10,17 @@ class QHBoxLayout; class HotkeyControllerProfile final : public MappingWidget { - Q_OBJECT + Q_OBJECT public: - explicit HotkeyControllerProfile(MappingWindow* window); + explicit HotkeyControllerProfile(MappingWindow* window); - InputConfig* GetConfig() override; + InputConfig* GetConfig() override; private: - void LoadSettings() override; - void SaveSettings() override; - void CreateMainLayout(); + void LoadSettings() override; + void SaveSettings() override; + void CreateMainLayout(); - // Main - QHBoxLayout* m_main_layout; + // Main + QHBoxLayout* m_main_layout; }; diff --git a/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp b/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp index 5424888ef5..9676569168 100644 --- a/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp +++ b/Source/Core/DolphinQt/Config/Mapping/MappingWindow.cpp @@ -311,7 +311,7 @@ void MappingWindow::SetMappingType(MappingWindow::Type type) AddWidget(tr("Debugging"), new HotkeyDebugging(this)); AddWidget(tr("Wii and Wii Remote"), new HotkeyWii(this)); - AddWidget(tr("Controller Profile"), new HotkeyControllerProfile(this)); + AddWidget(tr("Controller Profile"), new HotkeyControllerProfile(this)); AddWidget(tr("Graphics"), new HotkeyGraphics(this)); AddWidget(tr("3D"), new Hotkey3D(this)); AddWidget(tr("Save and Load State"), new HotkeyStates(this)); diff --git a/Source/Core/InputCommon/InputConfig.cpp b/Source/Core/InputCommon/InputConfig.cpp index d929356d3c..1ba44c047e 100644 --- a/Source/Core/InputCommon/InputConfig.cpp +++ b/Source/Core/InputCommon/InputConfig.cpp @@ -87,8 +87,8 @@ bool InputConfig::LoadConfig(bool isGC) { std::string base; SplitPath(profile[n], nullptr, &base, nullptr); - Core::DisplayMessage("Loading game specific input profile '" + base + - "' for device '" + controller->GetName() + "'", + Core::DisplayMessage("Loading game specific input profile '" + base + "' for device '" + + controller->GetName() + "'", 6000); IniFile profile_ini; diff --git a/Source/Core/InputCommon/InputProfile.cpp b/Source/Core/InputCommon/InputProfile.cpp index dc76c83fa8..2ca7b46096 100644 --- a/Source/Core/InputCommon/InputProfile.cpp +++ b/Source/Core/InputCommon/InputProfile.cpp @@ -20,167 +20,179 @@ namespace InputProfile { +namespace +{ +constexpr int display_message_ms = 3000; +} - namespace +std::vector ProfileCycler::GetProfilesForDevice(InputConfig* device_configuration) +{ + const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" + + device_configuration->GetProfileName()); + return Common::DoFileSearch({device_profile_root_location}, {".ini"}); +} + +std::string ProfileCycler::GetProfile(CycleDirection cycle_direction, int& profile_index, + const std::vector& profiles) +{ + // update the index and bind it to the number of available strings + auto positive_modulo = [](int& i, int n) { i = (i % n + n) % n; }; + profile_index += static_cast(cycle_direction); + positive_modulo(profile_index, static_cast(profiles.size())); + + return profiles[profile_index]; +} + +void ProfileCycler::UpdateToProfile(const std::string& profile_filename, + ControllerEmu::EmulatedController* controller) +{ + std::string base; + SplitPath(profile_filename, nullptr, &base, nullptr); + + IniFile ini_file; + if (ini_file.Load(profile_filename)) { - constexpr int display_message_ms = 3000; + Core::DisplayMessage("Loading input profile '" + base + "' for device '" + + controller->GetName() + "'", + display_message_ms); + controller->LoadConfig(ini_file.GetOrCreateSection("Profile")); + controller->UpdateReferences(g_controller_interface); } - - std::vector ProfileCycler::GetProfilesForDevice(InputConfig* device_configuration) + else { - const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" + device_configuration->GetProfileName()); - return Common::DoFileSearch({ device_profile_root_location }, { ".ini" }); - } - - std::string ProfileCycler::GetProfile(CycleDirection cycle_direction, int& profile_index, const std::vector& profiles) - { - // update the index and bind it to the number of available strings - auto positive_modulo = [](int& i, int n) {i = (i % n + n) % n;}; - profile_index += static_cast(cycle_direction); - positive_modulo(profile_index, static_cast(profiles.size())); - - return profiles[profile_index]; - } - - void ProfileCycler::UpdateToProfile(const std::string& profile_filename, ControllerEmu::EmulatedController* controller) - { - std::string base; - SplitPath(profile_filename, nullptr, &base, nullptr); - - IniFile ini_file; - if (ini_file.Load(profile_filename)) - { - Core::DisplayMessage("Loading input profile '" + base + "' for device '" + controller->GetName() + "'", display_message_ms); - controller->LoadConfig(ini_file.GetOrCreateSection("Profile")); - controller->UpdateReferences(g_controller_interface); - } - else - { - Core::DisplayMessage("Unable to load input profile '" + base + "' for device '" + controller->GetName() + "'", display_message_ms); - } - } - - std::vector ProfileCycler::GetProfilesFromSetting(const std::string& setting, InputConfig* device_configuration) - { - const auto& profiles = SplitString(setting, ','); - - const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" + device_configuration->GetProfileName()); - - std::vector result(profiles.size()); - std::transform(profiles.begin(), profiles.end(), result.begin(), [&device_profile_root_location](const std::string& profile) - { - return device_profile_root_location + "/" + StripSpaces(profile) + ".ini"; - }); - - return result; - } - - std::vector ProfileCycler::GetMatchingProfilesFromSetting(const std::string& setting, const std::vector& profiles, InputConfig* device_configuration) - { - const auto& profiles_from_setting = GetProfilesFromSetting(setting, device_configuration); - if (profiles_from_setting.empty()) - { - return {}; - } - - std::vector result; - std::set_intersection(profiles.begin(), profiles.end(), profiles_from_setting.begin(), - profiles_from_setting.end(), std::back_inserter(result)); - return result; - } - - void ProfileCycler::CycleProfile(CycleDirection cycle_direction, - InputConfig* device_configuration, int& profile_index, - int controller_index) - { - const auto& profiles = GetProfilesForDevice(device_configuration); - if (profiles.empty()) - { - Core::DisplayMessage("No input profiles found", display_message_ms); - return; - } - const std::string profile = GetProfile(cycle_direction, profile_index, profiles); - - auto* controller = device_configuration->GetController(controller_index); - if (controller) - { - UpdateToProfile(profile, controller); - } - else - { - Core::DisplayMessage("No controller found for index: " + std::to_string(controller_index), display_message_ms); - } - } - - void ProfileCycler::CycleProfileForGame(CycleDirection cycle_direction, - InputConfig* device_configuration, int& profile_index, - const std::string& setting, int controller_index) - { - const auto& profiles = GetProfilesForDevice(device_configuration); - if (profiles.empty()) - { - Core::DisplayMessage("No input profiles found", display_message_ms); - return; - } - - if (setting.empty()) - { - Core::DisplayMessage("No setting found for game", display_message_ms); - return; - } - - const auto& profiles_for_game = GetMatchingProfilesFromSetting(setting, profiles, - device_configuration); - if (profiles_for_game.empty()) - { - Core::DisplayMessage("No input profiles found for game", display_message_ms); - return; - } - - const std::string profile = GetProfile(cycle_direction, profile_index, profiles_for_game); - - auto* controller = device_configuration->GetController(controller_index); - if (controller) - { - UpdateToProfile(profile, controller); - } - else - { - Core::DisplayMessage("No controller found for index: " + std::to_string(controller_index), display_message_ms); - } - } - - std::string ProfileCycler::GetWiimoteInputProfilesForGame(int controller_index) - { - IniFile game_ini = SConfig::GetInstance().LoadGameIni(); - const IniFile::Section* const control_section = game_ini.GetOrCreateSection("Controls"); - - std::string result; - control_section->Get(StringFromFormat("WiimoteProfile%d", controller_index+1), &result); - return result; - } - - void ProfileCycler::NextWiimoteProfile(int controller_index) - { - CycleProfile(CycleDirection::Forward, Wiimote::GetConfig(), m_wiimote_profile_index, - controller_index); - } - - void ProfileCycler::PreviousWiimoteProfile(int controller_index) - { - CycleProfile(CycleDirection::Backward, Wiimote::GetConfig(), m_wiimote_profile_index, - controller_index); - } - - void ProfileCycler::NextWiimoteProfileForGame(int controller_index) - { - CycleProfileForGame(CycleDirection::Forward, Wiimote::GetConfig(), m_wiimote_profile_index, - GetWiimoteInputProfilesForGame(controller_index), controller_index); - } - - void ProfileCycler::PreviousWiimoteProfileForGame(int controller_index) - { - CycleProfileForGame(CycleDirection::Backward, Wiimote::GetConfig(), m_wiimote_profile_index, - GetWiimoteInputProfilesForGame(controller_index), controller_index); + Core::DisplayMessage("Unable to load input profile '" + base + "' for device '" + + controller->GetName() + "'", + display_message_ms); } } + +std::vector ProfileCycler::GetProfilesFromSetting(const std::string& setting, + InputConfig* device_configuration) +{ + const auto& profiles = SplitString(setting, ','); + + const std::string device_profile_root_location(File::GetUserPath(D_CONFIG_IDX) + "Profiles/" + + device_configuration->GetProfileName()); + + std::vector result(profiles.size()); + std::transform(profiles.begin(), profiles.end(), result.begin(), + [&device_profile_root_location](const std::string& profile) { + return device_profile_root_location + "/" + StripSpaces(profile) + ".ini"; + }); + + return result; +} + +std::vector +ProfileCycler::GetMatchingProfilesFromSetting(const std::string& setting, + const std::vector& profiles, + InputConfig* device_configuration) +{ + const auto& profiles_from_setting = GetProfilesFromSetting(setting, device_configuration); + if (profiles_from_setting.empty()) + { + return {}; + } + + std::vector result; + std::set_intersection(profiles.begin(), profiles.end(), profiles_from_setting.begin(), + profiles_from_setting.end(), std::back_inserter(result)); + return result; +} + +void ProfileCycler::CycleProfile(CycleDirection cycle_direction, InputConfig* device_configuration, + int& profile_index, int controller_index) +{ + const auto& profiles = GetProfilesForDevice(device_configuration); + if (profiles.empty()) + { + Core::DisplayMessage("No input profiles found", display_message_ms); + return; + } + const std::string profile = GetProfile(cycle_direction, profile_index, profiles); + + auto* controller = device_configuration->GetController(controller_index); + if (controller) + { + UpdateToProfile(profile, controller); + } + else + { + Core::DisplayMessage("No controller found for index: " + std::to_string(controller_index), + display_message_ms); + } +} + +void ProfileCycler::CycleProfileForGame(CycleDirection cycle_direction, + InputConfig* device_configuration, int& profile_index, + const std::string& setting, int controller_index) +{ + const auto& profiles = GetProfilesForDevice(device_configuration); + if (profiles.empty()) + { + Core::DisplayMessage("No input profiles found", display_message_ms); + return; + } + + if (setting.empty()) + { + Core::DisplayMessage("No setting found for game", display_message_ms); + return; + } + + const auto& profiles_for_game = + GetMatchingProfilesFromSetting(setting, profiles, device_configuration); + if (profiles_for_game.empty()) + { + Core::DisplayMessage("No input profiles found for game", display_message_ms); + return; + } + + const std::string profile = GetProfile(cycle_direction, profile_index, profiles_for_game); + + auto* controller = device_configuration->GetController(controller_index); + if (controller) + { + UpdateToProfile(profile, controller); + } + else + { + Core::DisplayMessage("No controller found for index: " + std::to_string(controller_index), + display_message_ms); + } +} + +std::string ProfileCycler::GetWiimoteInputProfilesForGame(int controller_index) +{ + IniFile game_ini = SConfig::GetInstance().LoadGameIni(); + const IniFile::Section* const control_section = game_ini.GetOrCreateSection("Controls"); + + std::string result; + control_section->Get(StringFromFormat("WiimoteProfile%d", controller_index + 1), &result); + return result; +} + +void ProfileCycler::NextWiimoteProfile(int controller_index) +{ + CycleProfile(CycleDirection::Forward, Wiimote::GetConfig(), m_wiimote_profile_index, + controller_index); +} + +void ProfileCycler::PreviousWiimoteProfile(int controller_index) +{ + CycleProfile(CycleDirection::Backward, Wiimote::GetConfig(), m_wiimote_profile_index, + controller_index); +} + +void ProfileCycler::NextWiimoteProfileForGame(int controller_index) +{ + CycleProfileForGame(CycleDirection::Forward, Wiimote::GetConfig(), m_wiimote_profile_index, + GetWiimoteInputProfilesForGame(controller_index), controller_index); +} + +void ProfileCycler::PreviousWiimoteProfileForGame(int controller_index) +{ + CycleProfileForGame(CycleDirection::Backward, Wiimote::GetConfig(), m_wiimote_profile_index, + GetWiimoteInputProfilesForGame(controller_index), controller_index); +} +} diff --git a/Source/Core/InputCommon/InputProfile.h b/Source/Core/InputCommon/InputProfile.h index 6cf2b05716..503f2bafcc 100644 --- a/Source/Core/InputCommon/InputProfile.h +++ b/Source/Core/InputCommon/InputProfile.h @@ -8,7 +8,7 @@ class InputConfig; namespace ControllerEmu { - class EmulatedController; +class EmulatedController; } #include @@ -16,29 +16,37 @@ namespace ControllerEmu namespace InputProfile { - enum class CycleDirection : int - { - Forward = 1, - Backward = -1 - }; +enum class CycleDirection : int +{ + Forward = 1, + Backward = -1 +}; - class ProfileCycler - { - public: - void NextWiimoteProfile(int controller_index); - void PreviousWiimoteProfile(int controller_index); - void NextWiimoteProfileForGame(int controller_index); - void PreviousWiimoteProfileForGame(int controller_index); - private: - void CycleProfile(CycleDirection cycle_direction, InputConfig* device_configuration, int& profile_index, int controller_index); - void CycleProfileForGame(CycleDirection cycle_direction, InputConfig* device_configuration, int& profile_index, const std::string& setting, int controller_index); - std::vector GetProfilesForDevice(InputConfig* device_configuration); - std::vector GetProfilesFromSetting(const std::string& setting, InputConfig* device_configuration); - std::string GetProfile(CycleDirection cycle_direction, int& profile_index, const std::vector& profiles); - std::vector GetMatchingProfilesFromSetting(const std::string& setting, const std::vector& profiles, InputConfig* device_configuration); - void UpdateToProfile(const std::string& profile_filename, ControllerEmu::EmulatedController* controller); - std::string GetWiimoteInputProfilesForGame(int controller_index); +class ProfileCycler +{ +public: + void NextWiimoteProfile(int controller_index); + void PreviousWiimoteProfile(int controller_index); + void NextWiimoteProfileForGame(int controller_index); + void PreviousWiimoteProfileForGame(int controller_index); - int m_wiimote_profile_index = 0; - }; +private: + void CycleProfile(CycleDirection cycle_direction, InputConfig* device_configuration, + int& profile_index, int controller_index); + void CycleProfileForGame(CycleDirection cycle_direction, InputConfig* device_configuration, + int& profile_index, const std::string& setting, int controller_index); + std::vector GetProfilesForDevice(InputConfig* device_configuration); + std::vector GetProfilesFromSetting(const std::string& setting, + InputConfig* device_configuration); + std::string GetProfile(CycleDirection cycle_direction, int& profile_index, + const std::vector& profiles); + std::vector GetMatchingProfilesFromSetting(const std::string& setting, + const std::vector& profiles, + InputConfig* device_configuration); + void UpdateToProfile(const std::string& profile_filename, + ControllerEmu::EmulatedController* controller); + std::string GetWiimoteInputProfilesForGame(int controller_index); + + int m_wiimote_profile_index = 0; +}; }