From 59d6df7046b1ed1137d28da02aec3809e3e6439c Mon Sep 17 00:00:00 2001 From: Braden Date: Sun, 11 Nov 2012 15:35:08 -0600 Subject: [PATCH 1/3] Adds Support for multiple GameCube Controllers Conflicts: Source/Core/DolphinWX/Src/Frame.cpp --- Source/Core/DolphinWX/Src/Frame.cpp | 37 +++++++++++++++++++++-- Source/Core/DolphinWX/Src/Frame.h | 6 +++- Source/Core/DolphinWX/Src/FrameTools.cpp | 24 ++++++++++++++- Source/Core/DolphinWX/Src/TASInputDlg.cpp | 4 +-- 4 files changed, 64 insertions(+), 7 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index aaa16d80cb..287bb6b2f3 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -328,6 +328,10 @@ CFrame::CFrame(wxFrame* parent, m_LogWindow->Disable(); g_TASInputDlg = new TASInputDlg(this); + g_TASInputDlg1 = new TASInputDlg(this); + g_TASInputDlg2 = new TASInputDlg(this); + g_TASInputDlg3 = new TASInputDlg(this); + Movie::SetInputManip(TASManipFunction); State::SetOnAfterLoadCallback(OnAfterLoadCallback); @@ -793,14 +797,41 @@ void OnAfterLoadCallback() void TASManipFunction(SPADStatus *PadStatus, int controllerID) { - if (main_frame) + if (main_frame && controllerID == 0) main_frame->g_TASInputDlg->GetValues(PadStatus, controllerID); + + if (main_frame && controllerID == 1) + main_frame->g_TASInputDlg1->GetValues(PadStatus, controllerID); + + if (main_frame && controllerID == 2) + main_frame->g_TASInputDlg2->GetValues(PadStatus, controllerID); + + if (main_frame && controllerID == 3) + main_frame->g_TASInputDlg3->GetValues(PadStatus, controllerID); } +bool TASInputHasFocus() +{ + if(main_frame->g_TASInputDlg->HasFocus()) + return true; + + if(main_frame->g_TASInputDlg1->HasFocus()) + return true; + + if(main_frame->g_TASInputDlg2->HasFocus()) + return true; + + if(main_frame->g_TASInputDlg3->HasFocus()) + return true; + + return false; +} + + void CFrame::OnKeyDown(wxKeyEvent& event) { if(Core::GetState() != Core::CORE_UNINITIALIZED && - (RendererHasFocus() || g_TASInputDlg->HasFocus())) + (RendererHasFocus() || TASInputHasFocus())) { int WiimoteId = -1; // Toggle fullscreen @@ -834,7 +865,7 @@ void CFrame::OnKeyDown(wxKeyEvent& event) else { unsigned int i = NUM_HOTKEYS; - if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain || g_TASInputDlg->HasFocus()) + if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain || TASInputHasFocus()) { for (i = 0; i < NUM_HOTKEYS; i++) { diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 0a29fffd37..b568f34fb9 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -111,7 +111,10 @@ public: NetPlaySetupDiag* g_NetPlaySetupDiag; wxCheatsWindow* g_CheatsWindow; TASInputDlg* g_TASInputDlg; - + TASInputDlg* g_TASInputDlg1; + TASInputDlg* g_TASInputDlg2; + TASInputDlg* g_TASInputDlg3; + void InitBitmaps(); void DoPause(); void DoStop(); @@ -349,6 +352,7 @@ void OnAfterLoadCallback(); // For TASInputDlg void TASManipFunction(SPADStatus *PadStatus, int controllerID); +bool TASInputHasFocus(); #endif // __FRAME_H_ diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 27a1aaa097..70b0a26f59 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -647,7 +647,29 @@ void CFrame::OnRecordReadOnly(wxCommandEvent& event) void CFrame::OnTASInput(wxCommandEvent& event) { - g_TASInputDlg->Show(true); + if(SConfig::GetInstance().m_SIDevice[0] == SIDEVICE_GC_CONTROLLER) + { + g_TASInputDlg->Show(true); + g_TASInputDlg->SetTitle("TAS Input - Controller 1"); + } + + if(SConfig::GetInstance().m_SIDevice[1] == SIDEVICE_GC_CONTROLLER) + { + g_TASInputDlg1->Show(true); + g_TASInputDlg1->SetTitle("TAS Input - Controller 2"); + } + + if(SConfig::GetInstance().m_SIDevice[2] == SIDEVICE_GC_CONTROLLER) + { + g_TASInputDlg2->Show(true); + g_TASInputDlg2->SetTitle("TAS Input - Controller 3"); + } + + if(SConfig::GetInstance().m_SIDevice[3] == SIDEVICE_GC_CONTROLLER) + { + g_TASInputDlg3->Show(true); + g_TASInputDlg3->SetTitle("TAS Input - Controller 4"); + } } void CFrame::OnTogglePauseMovie(wxCommandEvent& WXUNUSED (event)) diff --git a/Source/Core/DolphinWX/Src/TASInputDlg.cpp b/Source/Core/DolphinWX/Src/TASInputDlg.cpp index 5b71009644..c37a369b11 100644 --- a/Source/Core/DolphinWX/Src/TASInputDlg.cpp +++ b/Source/Core/DolphinWX/Src/TASInputDlg.cpp @@ -460,8 +460,8 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) SetLandRTriggers(); // TODO: implement support for more controllers - if (controllerID != 0) - return; + //if (controllerID != 0) + // return; PadStatus->stickX = mainX; PadStatus->stickY = mainY; From ec148008d0638ea4eafffd6bf95706e8d3507c5e Mon Sep 17 00:00:00 2001 From: Braden Date: Sun, 11 Nov 2012 16:38:01 -0600 Subject: [PATCH 2/3] Clean up code for multiple GameCube Controllers Conflicts: Source/Core/DolphinWX/Src/Frame.cpp Source/Core/DolphinWX/Src/FrameTools.cpp --- Source/Core/DolphinWX/Src/Frame.cpp | 44 ++++++++---------------- Source/Core/DolphinWX/Src/Frame.h | 5 +-- Source/Core/DolphinWX/Src/FrameTools.cpp | 33 ++++++------------ 3 files changed, 25 insertions(+), 57 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 287bb6b2f3..af71066314 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -327,11 +327,11 @@ CFrame::CFrame(wxFrame* parent, m_LogWindow->Hide(); m_LogWindow->Disable(); - g_TASInputDlg = new TASInputDlg(this); - g_TASInputDlg1 = new TASInputDlg(this); - g_TASInputDlg2 = new TASInputDlg(this); - g_TASInputDlg3 = new TASInputDlg(this); - + g_TASInputDlg[0] = new TASInputDlg(this); + g_TASInputDlg[1] = new TASInputDlg(this); + g_TASInputDlg[2] = new TASInputDlg(this); + g_TASInputDlg[3] = new TASInputDlg(this); + Movie::SetInputManip(TASManipFunction); State::SetOnAfterLoadCallback(OnAfterLoadCallback); @@ -788,7 +788,7 @@ int GetCmdForHotkey(unsigned int key) void OnAfterLoadCallback() { // warning: this gets called from the CPU thread, so we should only queue things to do on the proper thread - if(main_frame) + if (main_frame) { wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATEGUI); main_frame->GetEventHandler()->AddPendingEvent(event); @@ -797,34 +797,18 @@ void OnAfterLoadCallback() void TASManipFunction(SPADStatus *PadStatus, int controllerID) { - if (main_frame && controllerID == 0) - main_frame->g_TASInputDlg->GetValues(PadStatus, controllerID); - - if (main_frame && controllerID == 1) - main_frame->g_TASInputDlg1->GetValues(PadStatus, controllerID); - - if (main_frame && controllerID == 2) - main_frame->g_TASInputDlg2->GetValues(PadStatus, controllerID); - - if (main_frame && controllerID == 3) - main_frame->g_TASInputDlg3->GetValues(PadStatus, controllerID); + if (main_frame) + main_frame->g_TASInputDlg[controllerID]->GetValues(PadStatus, controllerID); } bool TASInputHasFocus() { - if(main_frame->g_TASInputDlg->HasFocus()) - return true; - - if(main_frame->g_TASInputDlg1->HasFocus()) - return true; - - if(main_frame->g_TASInputDlg2->HasFocus()) - return true; - - if(main_frame->g_TASInputDlg3->HasFocus()) - return true; - - return false; + for (int i = 0; i < 4; i++) + { + if (main_frame->g_TASInputDlg[i]->HasFocus()) + return true; + } + return false; } diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index b568f34fb9..7bfe33c1b6 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -110,10 +110,7 @@ public: CCodeWindow* g_pCodeWindow; NetPlaySetupDiag* g_NetPlaySetupDiag; wxCheatsWindow* g_CheatsWindow; - TASInputDlg* g_TASInputDlg; - TASInputDlg* g_TASInputDlg1; - TASInputDlg* g_TASInputDlg2; - TASInputDlg* g_TASInputDlg3; + TASInputDlg* g_TASInputDlg[4]; void InitBitmaps(); void DoPause(); diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 70b0a26f59..5409e98f6a 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -647,29 +647,16 @@ void CFrame::OnRecordReadOnly(wxCommandEvent& event) void CFrame::OnTASInput(wxCommandEvent& event) { - if(SConfig::GetInstance().m_SIDevice[0] == SIDEVICE_GC_CONTROLLER) - { - g_TASInputDlg->Show(true); - g_TASInputDlg->SetTitle("TAS Input - Controller 1"); - } - - if(SConfig::GetInstance().m_SIDevice[1] == SIDEVICE_GC_CONTROLLER) - { - g_TASInputDlg1->Show(true); - g_TASInputDlg1->SetTitle("TAS Input - Controller 2"); - } - - if(SConfig::GetInstance().m_SIDevice[2] == SIDEVICE_GC_CONTROLLER) - { - g_TASInputDlg2->Show(true); - g_TASInputDlg2->SetTitle("TAS Input - Controller 3"); - } - - if(SConfig::GetInstance().m_SIDevice[3] == SIDEVICE_GC_CONTROLLER) - { - g_TASInputDlg3->Show(true); - g_TASInputDlg3->SetTitle("TAS Input - Controller 4"); - } + std::string number[4] = {"1","2","3","4"}; + + for(int i = 0; i < 4; i++) + { + if(SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_CONTROLLER) + { + g_TASInputDlg[i]->Show(true); + g_TASInputDlg[i]->SetTitle("TAS Input - Controller " + number[i]); + } + } } void CFrame::OnTogglePauseMovie(wxCommandEvent& WXUNUSED (event)) From 3f03588decc18ddb4441cd6480eb36885eae7f8a Mon Sep 17 00:00:00 2001 From: Rachel Bryk Date: Tue, 23 Jul 2013 20:43:51 -0400 Subject: [PATCH 3/3] Tas input works with bongos too. --- Source/Core/DolphinWX/Src/Frame.h | 2 +- Source/Core/DolphinWX/Src/FrameTools.cpp | 4 ++-- Source/Core/DolphinWX/Src/TASInputDlg.cpp | 4 ---- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 7bfe33c1b6..2891d9931c 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -111,7 +111,7 @@ public: NetPlaySetupDiag* g_NetPlaySetupDiag; wxCheatsWindow* g_CheatsWindow; TASInputDlg* g_TASInputDlg[4]; - + void InitBitmaps(); void DoPause(); void DoStop(); diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 5409e98f6a..1c70b4e715 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -649,9 +649,9 @@ void CFrame::OnTASInput(wxCommandEvent& event) { std::string number[4] = {"1","2","3","4"}; - for(int i = 0; i < 4; i++) + for (int i = 0; i < 4; ++i) { - if(SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_CONTROLLER) + if (SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_CONTROLLER || SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_TARUKONGA) { g_TASInputDlg[i]->Show(true); g_TASInputDlg[i]->SetTitle("TAS Input - Controller " + number[i]); diff --git a/Source/Core/DolphinWX/Src/TASInputDlg.cpp b/Source/Core/DolphinWX/Src/TASInputDlg.cpp index c37a369b11..8845eda961 100644 --- a/Source/Core/DolphinWX/Src/TASInputDlg.cpp +++ b/Source/Core/DolphinWX/Src/TASInputDlg.cpp @@ -459,10 +459,6 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) GetKeyBoardInput(PadStatus); SetLandRTriggers(); - // TODO: implement support for more controllers - //if (controllerID != 0) - // return; - PadStatus->stickX = mainX; PadStatus->stickY = mainY; PadStatus->substickX = cX;