test 8 player support

This commit is contained in:
Nayla Hanegan 2024-09-28 20:20:52 -04:00
commit 912cd271b2
2 changed files with 76 additions and 24 deletions

View file

@ -24,35 +24,63 @@ PadMappingDialog::PadMappingDialog(QWidget* parent) : QDialog(parent)
ConnectWidgets(); ConnectWidgets();
} }
void PadMappingDialog::CreateWidgets() int PadMappingDialog::exec()
{ {
m_main_layout = new QGridLayout; auto client = Settings::Instance().GetNetPlayClient();
m_button_box = new QDialogButtonBox(QDialogButtonBox::Ok); auto server = Settings::Instance().GetNetPlayServer();
for (unsigned int i = 0; i < m_wii_boxes.size(); i++) // Load Settings
m_players = client->GetPlayers();
m_pad_mapping = server->GetPadMapping();
m_gba_config = server->GetGBAConfig();
m_wii_mapping = server->GetWiimoteMapping();
QStringList players;
players.append(tr("None"));
for (const auto& player : m_players)
{ {
m_gc_boxes[i] = new QComboBox; players.append(
m_gba_boxes[i] = new QCheckBox(tr("GBA Port %1").arg(i + 1)); QStringLiteral("%1 (%2)").arg(QString::fromStdString(player->name)).arg(player->pid));
m_wii_boxes[i] = new QComboBox;
m_main_layout->addWidget(new QLabel(tr("GC Port %1").arg(i + 1)), 0, i);
m_main_layout->addWidget(m_gc_boxes[i], 1, i);
#ifdef HAS_LIBMGBA
m_main_layout->addWidget(m_gba_boxes[i], 2, i);
#endif
m_main_layout->addWidget(new QLabel(tr("Wii Remote %1").arg(i + 1)), 3, i);
m_main_layout->addWidget(m_wii_boxes[i], 4, i);
} }
m_main_layout->addWidget(m_button_box, 5, 0, 1, -1); for (size_t i = 0; i < 4; i++)
{
const QSignalBlocker blocker1(m_gc_boxes_player1[i]);
const QSignalBlocker blocker2(m_gc_boxes_player2[i]);
const QSignalBlocker blocker3(m_wii_boxes_player1[i]);
const QSignalBlocker blocker4(m_wii_boxes_player2[i]);
setLayout(m_main_layout); m_gc_boxes_player1[i]->clear();
m_gc_boxes_player2[i]->clear();
m_wii_boxes_player1[i]->clear();
m_wii_boxes_player2[i]->clear();
m_gc_boxes_player1[i]->addItems(players);
m_gc_boxes_player2[i]->addItems(players);
m_wii_boxes_player1[i]->addItems(players);
m_wii_boxes_player2[i]->addItems(players);
m_gc_boxes_player1[i]->setCurrentIndex(m_pad_mapping[i].first);
m_gc_boxes_player2[i]->setCurrentIndex(m_pad_mapping[i].second);
m_wii_boxes_player1[i]->setCurrentIndex(m_wii_mapping[i].first);
m_wii_boxes_player2[i]->setCurrentIndex(m_wii_mapping[i].second);
}
for (size_t i = 0; i < m_gba_boxes.size(); i++)
{
const QSignalBlocker blocker(m_gba_boxes[i]);
m_gba_boxes[i]->setChecked(m_gba_config[i].enabled);
}
return QDialog::exec();
} }
void PadMappingDialog::ConnectWidgets() void PadMappingDialog::ConnectWidgets()
{ {
connect(m_button_box, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(m_button_box, &QDialogButtonBox::accepted, this, &QDialog::accept);
for (const auto& combo_group : {m_gc_boxes, m_wii_boxes}) for (const auto& combo_group : {m_gc_boxes_player1, m_gc_boxes_player2, m_wii_boxes_player1, m_wii_boxes_player2})
{ {
for (const auto& combo : combo_group) for (const auto& combo : combo_group)
{ {
@ -69,6 +97,7 @@ int PadMappingDialog::exec()
{ {
auto client = Settings::Instance().GetNetPlayClient(); auto client = Settings::Instance().GetNetPlayClient();
auto server = Settings::Instance().GetNetPlayServer(); auto server = Settings::Instance().GetNetPlayServer();
// Load Settings // Load Settings
m_players = client->GetPlayers(); m_players = client->GetPlayers();
m_pad_mapping = server->GetPadMapping(); m_pad_mapping = server->GetPadMapping();
@ -131,11 +160,29 @@ void PadMappingDialog::OnMappingChanged()
{ {
for (unsigned int i = 0; i < m_wii_boxes.size(); i++) for (unsigned int i = 0; i < m_wii_boxes.size(); i++)
{ {
int gc_id = m_gc_boxes[i]->currentIndex(); int gc_id1 = m_gc_boxes_player1[i]->currentIndex();
int wii_id = m_wii_boxes[i]->currentIndex(); int gc_id2 = m_gc_boxes_player2[i]->currentIndex();
int wii_id1 = m_wii_boxes_player1[i]->currentIndex();
int wii_id2 = m_wii_boxes_player2[i]->currentIndex();
m_pad_mapping[i] = gc_id > 0 ? m_players[gc_id - 1]->pid : 0; m_pad_mapping[i] = {
m_gba_config[i].enabled = m_gba_boxes[i]->isChecked(); gc_id1 > 0 ? m_players[gc_id1 - 1]->pid : 0,
m_wii_mapping[i] = wii_id > 0 ? m_players[wii_id - 1]->pid : 0; gc_id2 > 0 ? m_players[gc_id2 - 1]->pid : 0
};
m_wii_mapping[i] = {
wii_id1 > 0 ? m_players[wii_id1 - 1]->pid : 0,
wii_id2 > 0 ? m_players[wii_id2 - 1]->pid : 0
};
} }
} }
// Update getter functions to return the new mapping format
std::array<std::pair<u32, u32>, 4> PadMappingDialog::GetGCPadArray()
{
return m_pad_mapping;
}
std::array<std::pair<u32, u32>, 4> PadMappingDialog::GetWiimoteArray()
{
return m_wii_mapping;
}

View file

@ -40,7 +40,12 @@ private:
NetPlay::PadMappingArray m_wii_mapping; NetPlay::PadMappingArray m_wii_mapping;
QGridLayout* m_main_layout; QGridLayout* m_main_layout;
std::array<QComboBox*, 4> m_gc_boxes;
std::array<QComboBox*, 4> m_gc_boxes_player1;
std::array<QComboBox*, 4> m_gc_boxes_player2;
std::array<QComboBox*, 4> m_wii_boxes_player1;
std::array<QComboBox*, 4> m_wii_boxes_player2;
std::array<QCheckBox*, 4> m_gba_boxes; std::array<QCheckBox*, 4> m_gba_boxes;
std::array<QComboBox*, 4> m_wii_boxes; std::array<QComboBox*, 4> m_wii_boxes;
std::vector<const NetPlay::Player*> m_players; std::vector<const NetPlay::Player*> m_players;