Merge pull request #3949 from mimimi085181/restore-wiimote-netplay

Restore wiimote netplay
This commit is contained in:
Pierre Bourdon 2016-07-08 22:46:45 +02:00 committed by GitHub
commit bfe8b11ba8
5 changed files with 57 additions and 21 deletions

View File

@ -23,7 +23,6 @@
static std::mutex crit_netplay_client; static std::mutex crit_netplay_client;
static NetPlayClient* netplay_client = nullptr; static NetPlayClient* netplay_client = nullptr;
static std::array<int, 4> s_wiimote_sources_cache;
NetSettings g_NetPlaySettings; NetSettings g_NetPlaySettings;
// called from ---GUI--- thread // called from ---GUI--- thread
@ -714,14 +713,22 @@ bool NetPlayClient::StartGame(const std::string& path)
m_dialog->BootGame(path); m_dialog->BootGame(path);
// Disable wiimotes on game start
// TODO: remove this when re-implementing wiimote netplay
if (SConfig::GetInstance().bWii) if (SConfig::GetInstance().bWii)
{ {
for (unsigned int i = 0; i < 4; ++i) for (unsigned int i = 0; i < 4; ++i)
WiimoteReal::ChangeWiimoteSource(i,
m_wiimote_map[i] > 0 ? WIIMOTE_SRC_EMU : WIIMOTE_SRC_NONE);
// Needed to prevent locking up at boot if (when) the wiimotes connect out of order.
NetWiimote nw;
nw.resize(4, 0);
for (unsigned int w = 0; w < 4; ++w)
{ {
s_wiimote_sources_cache[i] = g_wiimote_sources[i]; if (m_wiimote_map[w] != -1)
WiimoteReal::ChangeWiimoteSource(i, WIIMOTE_SRC_NONE); // probably overkill, but whatever
for (unsigned int i = 0; i < 7; ++i)
m_wiimote_buffer[w].Push(nw);
} }
} }
@ -1027,17 +1034,6 @@ bool NetPlayClient::StopGame()
// stop game // stop game
m_dialog->StopGame(); m_dialog->StopGame();
// Restore wiimote settings on game stop
// TODO: remove this when re-implementing wiimote netplay
if (SConfig::GetInstance().bWii)
{
for (unsigned int i = 0; i < 4; ++i)
{
g_wiimote_sources[i] = s_wiimote_sources_cache[i];
WiimoteReal::ChangeWiimoteSource(i, s_wiimote_sources_cache[i]);
}
}
return true; return true;
} }

View File

@ -138,7 +138,7 @@ NetPlaySetupFrame::NetPlaySetupFrame(wxWindow* const parent, const CGameListCtrl
"If DSP LLE is used, DSP ROMs must be identical between players.\n" "If DSP LLE is used, DSP ROMs must be identical between players.\n"
"If connecting directly, the host must have the chosen UDP port open/forwarded!\n" "If connecting directly, the host must have the chosen UDP port open/forwarded!\n"
"\n" "\n"
"Wiimote support is broken in netplay and therefore disabled.\n")); "Wiimote netplay is experimental and should not be expected to work.\n"));
wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL);

View File

@ -483,6 +483,7 @@ void NetPlayDialog::OnAssignPads(wxCommandEvent&)
pmd.ShowModal(); pmd.ShowModal();
netplay_server->SetPadMapping(pmd.GetModifiedPadMappings()); netplay_server->SetPadMapping(pmd.GetModifiedPadMappings());
netplay_server->SetWiimoteMapping(pmd.GetModifiedWiimoteMappings());
} }
void NetPlayDialog::OnKick(wxCommandEvent&) void NetPlayDialog::OnKick(wxCommandEvent&)

View File

@ -11,11 +11,9 @@
#include "Core/NetPlayServer.h" #include "Core/NetPlayServer.h"
#include "DolphinWX/NetPlay/PadMapDialog.h" #include "DolphinWX/NetPlay/PadMapDialog.h"
// Removed Wiimote UI elements due to Wiimotes being flat out broken in netplay.
PadMapDialog::PadMapDialog(wxWindow* parent, NetPlayServer* server, NetPlayClient* client) PadMapDialog::PadMapDialog(wxWindow* parent, NetPlayServer* server, NetPlayClient* client)
: wxDialog(parent, wxID_ANY, _("Controller Ports")), m_pad_mapping(server->GetPadMapping()), : wxDialog(parent, wxID_ANY, _("Controller Ports")), m_pad_mapping(server->GetPadMapping()),
m_player_list(client->GetPlayers()) m_wii_mapping(server->GetWiimoteMapping()), m_player_list(client->GetPlayers())
{ {
wxBoxSizer* const h_szr = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const h_szr = new wxBoxSizer(wxHORIZONTAL);
h_szr->AddSpacer(10); h_szr->AddSpacer(10);
@ -52,6 +50,34 @@ PadMapDialog::PadMapDialog(wxWindow* parent, NetPlayServer* server, NetPlayClien
h_szr->AddSpacer(10); h_szr->AddSpacer(10);
} }
for (unsigned int i = 0; i < 4; ++i)
{
wxBoxSizer* const v_szr = new wxBoxSizer(wxVERTICAL);
v_szr->Add(new wxStaticText(this, wxID_ANY, (wxString(_("Wiimote ")) + (wxChar)('1' + i))), 1,
wxALIGN_CENTER_HORIZONTAL);
m_map_cbox[i + 4] =
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, player_names);
m_map_cbox[i + 4]->Bind(wxEVT_CHOICE, &PadMapDialog::OnAdjust, this);
if (m_wii_mapping[i] == -1)
{
m_map_cbox[i + 4]->Select(0);
}
else
{
for (unsigned int j = 0; j < m_player_list.size(); j++)
{
if (m_wii_mapping[i] == m_player_list[j]->pid)
m_map_cbox[i + 4]->Select(j + 1);
}
}
v_szr->Add(m_map_cbox[i + 4], 1);
h_szr->Add(v_szr, 1, wxTOP | wxEXPAND, 20);
h_szr->AddSpacer(10);
}
wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL); wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL);
main_szr->Add(h_szr); main_szr->Add(h_szr);
main_szr->AddSpacer(5); main_szr->AddSpacer(5);
@ -66,6 +92,11 @@ PadMappingArray PadMapDialog::GetModifiedPadMappings() const
return m_pad_mapping; return m_pad_mapping;
} }
PadMappingArray PadMapDialog::GetModifiedWiimoteMappings() const
{
return m_wii_mapping;
}
void PadMapDialog::OnAdjust(wxCommandEvent& WXUNUSED(event)) void PadMapDialog::OnAdjust(wxCommandEvent& WXUNUSED(event))
{ {
for (unsigned int i = 0; i < 4; i++) for (unsigned int i = 0; i < 4; i++)
@ -75,5 +106,11 @@ void PadMapDialog::OnAdjust(wxCommandEvent& WXUNUSED(event))
m_pad_mapping[i] = m_player_list[player_idx - 1]->pid; m_pad_mapping[i] = m_player_list[player_idx - 1]->pid;
else else
m_pad_mapping[i] = -1; m_pad_mapping[i] = -1;
player_idx = m_map_cbox[i + 4]->GetSelection();
if (player_idx > 0)
m_wii_mapping[i] = m_player_list[player_idx - 1]->pid;
else
m_wii_mapping[i] = -1;
} }
} }

View File

@ -20,11 +20,13 @@ public:
PadMapDialog(wxWindow* parent, NetPlayServer* server, NetPlayClient* client); PadMapDialog(wxWindow* parent, NetPlayServer* server, NetPlayClient* client);
PadMappingArray GetModifiedPadMappings() const; PadMappingArray GetModifiedPadMappings() const;
PadMappingArray GetModifiedWiimoteMappings() const;
private: private:
void OnAdjust(wxCommandEvent& event); void OnAdjust(wxCommandEvent& event);
wxChoice* m_map_cbox[4]; wxChoice* m_map_cbox[8];
PadMappingArray m_pad_mapping; PadMappingArray m_pad_mapping;
PadMappingArray m_wii_mapping;
std::vector<const Player*> m_player_list; std::vector<const Player*> m_player_list;
}; };