diff --git a/rpcs3/Emu/Io/buzz_config.h b/rpcs3/Emu/Io/buzz_config.h index d3d3680202..71f51f972f 100644 --- a/rpcs3/Emu/Io/buzz_config.h +++ b/rpcs3/Emu/Io/buzz_config.h @@ -26,9 +26,9 @@ struct cfg_buzzer final : public emulated_pad_config cfg_pad_btn blue{ this, "Blue", buzz_btn::blue, pad_button::triangle }; }; -struct cfg_buzz final : public emulated_pads_config +struct cfg_buzz final : public emulated_pads_config { - cfg_buzz() : emulated_pads_config("buzz") {}; + cfg_buzz() : emulated_pads_config("buzz") {}; }; extern cfg_buzz g_cfg_buzz; diff --git a/rpcs3/Emu/Io/emulated_pad_config.h b/rpcs3/Emu/Io/emulated_pad_config.h index ddbe2aa84f..8e62054f6d 100644 --- a/rpcs3/Emu/Io/emulated_pad_config.h +++ b/rpcs3/Emu/Io/emulated_pad_config.h @@ -159,22 +159,19 @@ struct emulated_pad_config : cfg::node } }; -template +template struct emulated_pads_config : cfg::node { - emulated_pads_config(std::string id) : cfg_id(std::move(id)) {} + emulated_pads_config(std::string id) : cfg_id(std::move(id)) + { + for (u32 i = 0; i < Count; i++) + { + players.at(i) = std::make_shared(this, fmt::format("Player %d", i + 1)); + } + } std::string cfg_id; - - T player1{ this, "Player 1" }; - T player2{ this, "Player 2" }; - T player3{ this, "Player 3" }; - T player4{ this, "Player 4" }; - T player5{ this, "Player 5" }; - T player6{ this, "Player 6" }; - T player7{ this, "Player 7" }; - - std::array players{ &player1, &player2, &player3, &player4, &player5, &player6, &player7 }; // Thanks gcc! + std::array, Count> players; bool load() { @@ -184,7 +181,7 @@ struct emulated_pads_config : cfg::node from_default(); - for (T* player : players) + for (std::shared_ptr& player : players) { player->buttons.clear(); } @@ -201,7 +198,7 @@ struct emulated_pads_config : cfg::node save(); } - for (T* player : players) + for (std::shared_ptr& player : players) { player->init_buttons(); } diff --git a/rpcs3/Emu/Io/gem_config.h b/rpcs3/Emu/Io/gem_config.h index 4d1a9fb755..5132a678dc 100644 --- a/rpcs3/Emu/Io/gem_config.h +++ b/rpcs3/Emu/Io/gem_config.h @@ -36,9 +36,9 @@ struct cfg_gem final : public emulated_pad_config cfg_pad_btn y_axis{ this, "Y-Axis", gem_btn::y_axis, pad_button::ls_y }; }; -struct cfg_gems final : public emulated_pads_config +struct cfg_gems final : public emulated_pads_config { - cfg_gems() : emulated_pads_config("gem") {}; + cfg_gems() : emulated_pads_config("gem") {}; }; extern cfg_gems g_cfg_gem; diff --git a/rpcs3/Emu/Io/ghltar_config.h b/rpcs3/Emu/Io/ghltar_config.h index 72e3afd292..8ed23ead1d 100644 --- a/rpcs3/Emu/Io/ghltar_config.h +++ b/rpcs3/Emu/Io/ghltar_config.h @@ -46,9 +46,9 @@ struct cfg_ghltar final : public emulated_pad_config cfg_pad_btn tilt{ this, "tilt", ghltar_btn::whammy, pad_button::rs_x }; }; -struct cfg_ghltars final : public emulated_pads_config +struct cfg_ghltars final : public emulated_pads_config { - cfg_ghltars() : emulated_pads_config("ghltar") {}; + cfg_ghltars() : emulated_pads_config("ghltar") {}; }; extern cfg_ghltars g_cfg_ghltar; diff --git a/rpcs3/Emu/Io/turntable_config.h b/rpcs3/Emu/Io/turntable_config.h index c2291423f5..8461cf5217 100644 --- a/rpcs3/Emu/Io/turntable_config.h +++ b/rpcs3/Emu/Io/turntable_config.h @@ -48,9 +48,9 @@ struct cfg_turntable final : public emulated_pad_config cfg_pad_btn effects_dial{ this, "Effects Dial", turntable_btn::effects_dial, pad_button::rs_x }; }; -struct cfg_turntables final : public emulated_pads_config +struct cfg_turntables final : public emulated_pads_config { - cfg_turntables() : emulated_pads_config("turntable") {}; + cfg_turntables() : emulated_pads_config("turntable") {}; }; extern cfg_turntables g_cfg_turntable; diff --git a/rpcs3/Emu/Io/usio.cpp b/rpcs3/Emu/Io/usio.cpp index c0e481db9d..5a11f98a2c 100644 --- a/rpcs3/Emu/Io/usio.cpp +++ b/rpcs3/Emu/Io/usio.cpp @@ -183,7 +183,7 @@ void usb_device_usio::translate_input() constexpr le_t c_big_hit = 0x1800; le_t test_keys = 0x0000; - auto translate_from_pad = [&](u8 pad_number, u8 player) + auto translate_from_pad = [&](usz pad_number, usz player) { if (!is_input_allowed()) { @@ -277,8 +277,10 @@ void usb_device_usio::translate_input() }); }; - translate_from_pad(0, 0); - translate_from_pad(1, 1); + for (usz i = 0; i < g_cfg_usio.players.size(); i++) + { + translate_from_pad(i, i); + } test_keys |= test_on ? 0x80 : 0x00; std::memcpy(input_buf.data(), &test_keys, sizeof(u16)); diff --git a/rpcs3/Emu/Io/usio_config.h b/rpcs3/Emu/Io/usio_config.h index f7038a5ff1..66aa8e2caa 100644 --- a/rpcs3/Emu/Io/usio_config.h +++ b/rpcs3/Emu/Io/usio_config.h @@ -44,9 +44,9 @@ struct cfg_usio final : public emulated_pad_config cfg_pad_btn small_hit_center_right{ this, "Small Hit Center Right", usio_btn::small_hit_center_right, pad_button::R1 }; }; -struct cfg_usios final : public emulated_pads_config +struct cfg_usios final : public emulated_pads_config { - cfg_usios() : emulated_pads_config("usio") {}; + cfg_usios() : emulated_pads_config("usio") {}; }; extern cfg_usios g_cfg_usio; diff --git a/rpcs3/rpcs3qt/emulated_pad_settings_dialog.cpp b/rpcs3/rpcs3qt/emulated_pad_settings_dialog.cpp index 0253d70616..65c4879dca 100644 --- a/rpcs3/rpcs3qt/emulated_pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/emulated_pad_settings_dialog.cpp @@ -103,7 +103,29 @@ void emulated_pad_settings_dialog::add_tabs(QTabWidget* tabs) rows = utils::aligned_div(static_cast(T::count), ++cols); } - for (int player = 0; player < 7; player++) + usz players = 0; + switch (m_type) + { + case pad_type::buzz: + players = g_cfg_buzz.players.size(); + break; + case pad_type::turntable: + players = g_cfg_turntable.players.size(); + break; + case pad_type::ghltar: + players = g_cfg_ghltar.players.size(); + break; + case pad_type::usio: + players = g_cfg_usio.players.size(); + break; + case pad_type::ds3gem: + players = g_cfg_gem.players.size(); + break; + } + + m_combos.resize(players); + + for (usz player = 0; player < players; player++) { QWidget* widget = new QWidget(this); QGridLayout* grid_layout = new QGridLayout(this); diff --git a/rpcs3/rpcs3qt/emulated_pad_settings_dialog.h b/rpcs3/rpcs3qt/emulated_pad_settings_dialog.h index d9e2e3702e..cb5bf1b46a 100644 --- a/rpcs3/rpcs3qt/emulated_pad_settings_dialog.h +++ b/rpcs3/rpcs3qt/emulated_pad_settings_dialog.h @@ -34,5 +34,5 @@ private: pad_type m_type; - std::array, 7> m_combos{}; + std::vector> m_combos; };