Qt/WiimoteControllersWidget: Disable remote Wiimote configuration during netplay.

This commit is contained in:
Admiral H. Curtiss 2022-09-25 04:22:30 +02:00
parent a1563f2def
commit ae4b89441c
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
4 changed files with 29 additions and 5 deletions

View File

@ -2321,11 +2321,22 @@ bool NetPlayClient::IsFirstInGamePad(int ingame_pad) const
[](auto mapping) { return mapping > 0; }); [](auto mapping) { return mapping > 0; });
} }
static int CountLocalPads(const PadMappingArray& pad_map, const PlayerId& local_player_pid)
{
return static_cast<int>(
std::count_if(pad_map.begin(), pad_map.end(), [&local_player_pid](const auto& mapping) {
return mapping == local_player_pid;
}));
}
int NetPlayClient::NumLocalPads() const int NetPlayClient::NumLocalPads() const
{ {
return static_cast<int>(std::count_if(m_pad_map.begin(), m_pad_map.end(), [this](auto mapping) { return CountLocalPads(m_pad_map, m_local_player->pid);
return mapping == m_local_player->pid; }
}));
int NetPlayClient::NumLocalWiimotes() const
{
return CountLocalPads(m_wiimote_map, m_local_player->pid);
} }
static int InGameToLocal(int ingame_pad, const PadMappingArray& pad_map, PlayerId local_player_pid) static int InGameToLocal(int ingame_pad, const PadMappingArray& pad_map, PlayerId local_player_pid)
@ -2653,6 +2664,14 @@ PadDetails GetPadDetails(int pad_num)
return res; return res;
} }
int NumLocalWiimotes()
{
std::lock_guard lk(crit_netplay_client);
if (netplay_client)
return netplay_client->NumLocalWiimotes();
return 0;
}
void NetPlay_Enable(NetPlayClient* const np) void NetPlay_Enable(NetPlayClient* const np)
{ {
std::lock_guard lk(crit_netplay_client); std::lock_guard lk(crit_netplay_client);

View File

@ -151,6 +151,7 @@ public:
bool IsFirstInGamePad(int ingame_pad) const; bool IsFirstInGamePad(int ingame_pad) const;
int NumLocalPads() const; int NumLocalPads() const;
int NumLocalWiimotes() const;
int InGamePadToLocalPad(int ingame_pad) const; int InGamePadToLocalPad(int ingame_pad) const;
int LocalPadToInGamePad(int local_pad) const; int LocalPadToInGamePad(int local_pad) const;

View File

@ -256,4 +256,5 @@ void SetSIPollBatching(bool state);
void SendPowerButtonEvent(); void SendPowerButtonEvent();
std::string GetGBASavePath(int pad_num); std::string GetGBASavePath(int pad_num);
PadDetails GetPadDetails(int pad_num); PadDetails GetPadDetails(int pad_num);
int NumLocalWiimotes();
} // namespace NetPlay } // namespace NetPlay

View File

@ -287,7 +287,8 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
const bool running_gc = running && !SConfig::GetInstance().bWii; const bool running_gc = running && !SConfig::GetInstance().bWii;
const bool enable_passthrough = m_wiimote_passthrough->isChecked() && !running_gc; const bool enable_passthrough = m_wiimote_passthrough->isChecked() && !running_gc;
const bool enable_emu_bt = !m_wiimote_passthrough->isChecked() && !running_gc; const bool enable_emu_bt = !m_wiimote_passthrough->isChecked() && !running_gc;
const bool running_netplay = running && NetPlay::IsNetPlayRunning(); const bool is_netplay = NetPlay::IsNetPlayRunning();
const bool running_netplay = running && is_netplay;
m_wiimote_sync->setEnabled(enable_passthrough); m_wiimote_sync->setEnabled(enable_passthrough);
m_wiimote_reset->setEnabled(enable_passthrough); m_wiimote_reset->setEnabled(enable_passthrough);
@ -295,13 +296,15 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
for (auto* pt_label : m_wiimote_pt_labels) for (auto* pt_label : m_wiimote_pt_labels)
pt_label->setEnabled(enable_passthrough); pt_label->setEnabled(enable_passthrough);
const int num_local_wiimotes = is_netplay ? NetPlay::NumLocalWiimotes() : 4;
for (size_t i = 0; i < m_wiimote_groups.size(); i++) for (size_t i = 0; i < m_wiimote_groups.size(); i++)
{ {
m_wiimote_labels[i]->setEnabled(enable_emu_bt); m_wiimote_labels[i]->setEnabled(enable_emu_bt);
m_wiimote_boxes[i]->setEnabled(enable_emu_bt && !running_netplay); m_wiimote_boxes[i]->setEnabled(enable_emu_bt && !running_netplay);
const bool is_emu_wiimote = m_wiimote_boxes[i]->currentIndex() == 1; const bool is_emu_wiimote = m_wiimote_boxes[i]->currentIndex() == 1;
m_wiimote_buttons[i]->setEnabled(enable_emu_bt && is_emu_wiimote); m_wiimote_buttons[i]->setEnabled(enable_emu_bt && is_emu_wiimote &&
static_cast<int>(i) < num_local_wiimotes);
} }
m_wiimote_real_balance_board->setEnabled(enable_emu_bt && !running_netplay); m_wiimote_real_balance_board->setEnabled(enable_emu_bt && !running_netplay);