From a8e35e976acddc06eb316821d41d695d81421828 Mon Sep 17 00:00:00 2001 From: John Peterson Date: Sun, 15 Feb 2009 18:23:42 +0000 Subject: [PATCH] Emulated Wiimote: Added customizable controls for the Wiimote and the Nunchuck git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2259 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/InputCommon/InputCommon.vcproj | 12 +- Source/Core/InputCommon/Src/Configuration.cpp | 42 ++- .../InputCommon}/Src/DirectInputBase.cpp | 11 +- .../InputCommon}/Src/DirectInputBase.h | 14 + Source/Core/InputCommon/Src/SDL.h | 31 ++- Source/MusicMod.sln | 1 + .../Plugin_PadSimple/Plugin_PadSimple.vcproj | 64 +---- .../Plugin_PadSimple/Src/GUI/ConfigDlg.cpp | 69 +++-- .../Plugin_PadSimple/Src/GUI/ConfigDlg.h | 2 +- .../Plugin_PadSimple/Src/PadSimple.cpp | 4 +- Source/Plugins/Plugin_Wiimote/Src/Config.cpp | 45 ++++ .../Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp | 254 +++++++++++++----- Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h | 35 ++- .../Plugin_Wiimote/Src/ConfigGamepad.cpp | 84 +++++- .../Plugins/Plugin_Wiimote/Src/FillReport.cpp | 47 ++-- Source/Plugins/Plugin_Wiimote/Src/main.cpp | 14 +- 16 files changed, 525 insertions(+), 204 deletions(-) rename Source/{Plugins/Plugin_PadSimple => Core/InputCommon}/Src/DirectInputBase.cpp (94%) rename Source/{Plugins/Plugin_PadSimple => Core/InputCommon}/Src/DirectInputBase.h (77%) diff --git a/Source/Core/InputCommon/InputCommon.vcproj b/Source/Core/InputCommon/InputCommon.vcproj index 9693fa9d25..5449fac12d 100644 --- a/Source/Core/InputCommon/InputCommon.vcproj +++ b/Source/Core/InputCommon/InputCommon.vcproj @@ -153,7 +153,7 @@ OutputDirectory="$(PlatformName)\$(ConfigurationName)" IntermediateDirectory="$(PlatformName)\$(ConfigurationName)" ConfigurationType="4" - CharacterSet="1" + CharacterSet="2" WholeProgramOptimization="1" > + + + + diff --git a/Source/Core/InputCommon/Src/Configuration.cpp b/Source/Core/InputCommon/Src/Configuration.cpp index cea2182a9e..20f5bae2af 100644 --- a/Source/Core/InputCommon/Src/Configuration.cpp +++ b/Source/Core/InputCommon/Src/Configuration.cpp @@ -33,6 +33,10 @@ ////////////////////////////////////////////////////////////////////////////////////////// // Include // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ +#if defined HAVE_WX && HAVE_WX + #include +#endif + #include "SDL.h" // Local //////////////////////////////////// @@ -197,11 +201,47 @@ std::vector Square2Circle(int _x, int _y, int _pad, std::string SDiagonal, vec.push_back(int_y); // Debugging - //m_frame->m_pStatusBar2->SetLabel(wxString::Format("%f %f %i", corner_circle_dist, Diagonal, Tmp)); + //Console::Print("%f %f %i", corner_circle_dist, Diagonal, Tmp)); return vec; } ///////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +// Windows Virtual Key Codes Names +// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ +#ifdef _WIN32 +std::string VKToString(int keycode) +{ + // Default value + char KeyStr[64] = {0}; + GetKeyNameText(MapVirtualKey(keycode, MAPVK_VK_TO_VSC) << 16, KeyStr, 64); + std::string KeyString = KeyStr; + + switch(keycode) + { + // Give it some help with a few keys + case VK_END: return "END"; + case VK_INSERT: return "INS"; + case VK_DELETE: return "DEL"; + case VK_PRIOR: return "PGUP"; + case VK_NEXT: return "PGDN"; + + case VK_UP: return "UP"; + case VK_DOWN: return "DOWN"; + case VK_LEFT: return "LEFT"; + case VK_RIGHT: return "RIGHT"; + + case VK_LSHIFT: return "LEFT SHIFT"; + case VK_LCONTROL: return "LEFT CTRL"; + case VK_RCONTROL: return "RIGHT CTRL"; + case VK_LMENU: return "LEFT ALT"; + + default: return KeyString; + } +} +#endif +///////////////////////////////////////////////////////////////////// + } \ No newline at end of file diff --git a/Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.cpp b/Source/Core/InputCommon/Src/DirectInputBase.cpp similarity index 94% rename from Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.cpp rename to Source/Core/InputCommon/Src/DirectInputBase.cpp index 7bb77f02be..9658a73b0f 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.cpp +++ b/Source/Core/InputCommon/Src/DirectInputBase.cpp @@ -15,8 +15,13 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ -#include "stdafx.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Include +// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ #include "DirectInputBase.h" +//////////////////////////////////// + DInput::DInput() : g_pDI(NULL), @@ -157,13 +162,13 @@ HRESULT DInput::Read() { return(S_OK); } - + // Get the input's device state, and put the state in dims ZeroMemory(diks, sizeof(diks)); hr = g_pKeyboard->GetDeviceState(sizeof(diks), diks); //for (int i=0; i<256; i++) - // if (diks[i])MessageBox(0,"DSFJDKSF|",0,0); + // if (diks[i]) MessageBox(0,"DSFJDKSF|",0,0); if (FAILED(hr)) { // DirectInput may be telling us that the input stream has been diff --git a/Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.h b/Source/Core/InputCommon/Src/DirectInputBase.h similarity index 77% rename from Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.h rename to Source/Core/InputCommon/Src/DirectInputBase.h index 2845599c36..7e90048451 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/DirectInputBase.h +++ b/Source/Core/InputCommon/Src/DirectInputBase.h @@ -18,6 +18,20 @@ #ifndef _DIRECTINPUTBASE_H #define _DIRECTINPUTBASE_H + +////////////////////////////////////////////////////////////////////////////////////////// +// Include +// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ +#include // System +#include + +#define DIRECTINPUT_VERSION 0x0800 // DirectInput +#include + +//#include "ConsoleWindow.h" // Common +/////////////////////////////// + + class DInput { public: diff --git a/Source/Core/InputCommon/Src/SDL.h b/Source/Core/InputCommon/Src/SDL.h index 649639d75d..9689f70741 100644 --- a/Source/Core/InputCommon/Src/SDL.h +++ b/Source/Core/InputCommon/Src/SDL.h @@ -38,10 +38,10 @@ #include #include -#ifdef _WIN32 // UGLY HACK FIXME PLEAAAAAAASE +#ifdef _WIN32 #include // Externals #else -#include // Externals +#include #endif #include "Common.h" // Common @@ -171,15 +171,35 @@ struct PadAxis int Tl; // Triggers int Tr; }; +struct PadWiimote +{ + int A; + int B; + int One; + int Two; + int P; + int M; + int H; + int L, R, U, D; + int Shake; +}; +struct PadNunchuck +{ + int Z; + int C; + int L, R, U, D; + int Shake; +}; struct CONTROLLER_STATE_NEW // GC PAD INFO/STATE { PadAxis Axis; // 6 Axes (Main, Sub, Triggers) SDL_Joystick *joy; // SDL joystick device }; - struct CONTROLLER_MAPPING_NEW // GC PAD MAPPING { PadAxis Axis; // (See above) + PadWiimote Wm; + PadNunchuck Nc; bool enabled; // Pad attached? int DeadZoneL; // Analog 1 Deadzone int DeadZoneR; // Analog 2 Deadzone @@ -212,6 +232,11 @@ float SquareDistance(float deg); bool IsDeadZone(float DeadZone, int x, int y); std::vector Square2Circle(int _x, int _y, int _pad, std::string SDiagonal, bool Circle2Square = false); +// Input configuration +#ifdef _WIN32 + std::string VKToString(int keycode); +#endif + #ifndef _SDL_MAIN_ extern int g_LastPad; #endif diff --git a/Source/MusicMod.sln b/Source/MusicMod.sln index 0c3f30abe0..b790a4d106 100644 --- a/Source/MusicMod.sln +++ b/Source/MusicMod.sln @@ -22,6 +22,7 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_PadSimple", "Plugins\Plugin_PadSimple\Plugin_PadSimple.vcproj", "{9A183B48-ECC2-4121-876A-9B3793686073}" ProjectSection(ProjectDependencies) = postProject {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} + {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C} {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} = {C573CAF7-EE6A-458E-8049-16C0BF34C2E9} diff --git a/Source/Plugins/Plugin_PadSimple/Plugin_PadSimple.vcproj b/Source/Plugins/Plugin_PadSimple/Plugin_PadSimple.vcproj index 3bf74a252b..09a88074df 100644 --- a/Source/Plugins/Plugin_PadSimple/Plugin_PadSimple.vcproj +++ b/Source/Plugins/Plugin_PadSimple/Plugin_PadSimple.vcproj @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp index b2b6211462..9f56065b38 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp @@ -21,7 +21,7 @@ #ifdef _WIN32 #include "XInput.h" -#include "../DirectInputBase.h" +#include "../../../../Core/InputCommon/Src/DirectInputBase.h" // Core DInput m_dinput; #endif @@ -70,7 +70,7 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl #ifdef _WIN32 m_dinput.Init((HWND)parent); #endif - clickedButton = NULL; + ClickedButton = NULL; CreateGUIControls(); Fit(); } @@ -79,28 +79,36 @@ ConfigDialog::~ConfigDialog() { } + +////////////////////////////////////////////////////////////////////////////////////////// +// Create input button controls +// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ inline void AddControl(wxPanel *pan, wxButton **button, wxStaticBoxSizer *sizer, const char *name, int ctl, int controller) { wxBoxSizer *hButton = new wxBoxSizer(wxHORIZONTAL); char keyStr[10] = {0}; + // Add the label hButton->Add(new wxStaticText(pan, 0, wxString::FromAscii(name), wxDefaultPosition, wxDefaultSize), 0, wxALIGN_CENTER_VERTICAL|wxALL); + + // Give it the mapped key name #ifdef _WIN32 DInput::DIKToString(pad[controller].keyForControl[ctl], keyStr); #elif defined(HAVE_X11) && HAVE_X11 XKeyToString(pad[controller].keyForControl[ctl], keyStr); #endif + // Add the button to its sizer *button = new wxButton(pan, ctl, wxString::FromAscii(keyStr), wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS); - hButton->Add(*button, 0, wxALIGN_RIGHT|wxALL); - sizer->Add(hButton, 0, wxALIGN_RIGHT|wxALL); } +//////////////////////////////////// + void ConfigDialog::CreateGUIControls() { @@ -307,8 +315,9 @@ void ConfigDialog::OnClose(wxCloseEvent& event) void ConfigDialog::OnKeyDown(wxKeyEvent& event) { - if(clickedButton != NULL) + if(ClickedButton != NULL) { + // Get the selected notebook page int page = m_Notebook->GetSelection(); #ifdef _WIN32 @@ -318,23 +327,45 @@ void ConfigDialog::OnKeyDown(wxKeyEvent& event) if(m_dinput.diks[i]) { char keyStr[10] = {0}; - pad[page].keyForControl[clickedButton->GetId()] = i; + // Save the mapped key, the wxButtons have the Id 0 to 21 + pad[page].keyForControl[ClickedButton->GetId()] = i; + // Get the key name DInput::DIKToString(i, keyStr); - clickedButton->SetLabel(wxString::FromAscii(keyStr)); + ClickedButton->SetLabel(wxString::FromAscii(keyStr)); break; } } #elif defined(HAVE_X11) && HAVE_X11 - pad[page].keyForControl[clickedButton->GetId()] = wxCharCodeWXToX(event.GetKeyCode()); - clickedButton->SetLabel(wxString::Format(_T("%c"), event.GetKeyCode())); + pad[page].keyForControl[ClickedButton->GetId()] = wxCharCodeWXToX(event.GetKeyCode()); + ClickedButton->SetLabel(wxString::Format(_T("%c"), event.GetKeyCode())); #endif - clickedButton->Disconnect(); + ClickedButton->Disconnect(); } - - clickedButton = NULL; + // Reset + ClickedButton = NULL; event.Skip(); } +// We have clicked a button +void ConfigDialog::OnButtonClick(wxCommandEvent& event) +{ + // Check if the Space key was set to solve the Space key problem + if (m_dinput.diks[DIK_SPACE]) { m_dinput.diks[DIK_SPACE] = 0; return; } + + // If we come here again before any key was set + if(ClickedButton) ClickedButton->SetLabel(oldLabel); + + // Save the old button label so we can reapply it if necessary + ClickedButton = (wxButton *)event.GetEventObject(); + oldLabel = ClickedButton->GetLabel(); + ClickedButton->SetLabel(_("Press Key")); + + // Connect EVT_KEY_DOWN to OnKeyDown() + ClickedButton->Connect(wxID_ANY, wxEVT_KEY_DOWN, + wxKeyEventHandler(ConfigDialog::OnKeyDown), + (wxObject*)NULL, this); +} + void ConfigDialog::OnCloseClick(wxCommandEvent& event) { Close(); @@ -385,20 +416,6 @@ void ConfigDialog::ControllerSettingsChanged(wxCommandEvent& event) } } -void ConfigDialog::OnButtonClick(wxCommandEvent& event) -{ - if(clickedButton) - { - clickedButton->SetLabel(oldLabel); - } - clickedButton = (wxButton *)event.GetEventObject(); - oldLabel = clickedButton->GetLabel(); - clickedButton->SetLabel(_("Press Key")); - - clickedButton->Connect(wxID_ANY, wxEVT_KEY_DOWN, - wxKeyEventHandler(ConfigDialog::OnKeyDown), - (wxObject*)NULL, this); -} void ConfigDialog::DllAbout(wxCommandEvent& event) { wxString message; diff --git a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.h b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.h index e5d58d74f6..0f51427bcb 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.h +++ b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.h @@ -129,7 +129,7 @@ class ConfigDialog : public wxDialog void DllAbout(wxCommandEvent& event); int keyPress; - wxButton *clickedButton; + wxButton *ClickedButton; wxString oldLabel; }; diff --git a/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp b/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp index 74c07b6841..bdac428279 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp +++ b/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp @@ -36,7 +36,7 @@ #ifdef _WIN32 #include "XInput.h" - #include "DirectInputBase.h" + #include "../../../Core/InputCommon/Src/DirectInputBase.h" // Core DInput dinput; //#elif defined(USE_SDL) && USE_SDL @@ -615,6 +615,8 @@ void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals) {} void DllConfig(HWND _hParent) { + //Console::Open(70, 5000); + LoadConfig(); #ifdef _WIN32 wxWindow win; diff --git a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp index b90518fcb5..53cbd01b8e 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp @@ -64,7 +64,30 @@ void Config::Load(bool ChangePad) iniFile.Get(SectionName.c_str(), "TriggerType", &Trigger.Type, Trigger.TRIGGER_OFF); iniFile.Get(SectionName.c_str(), "TriggerRollRange", &Trigger.Range.Roll, 50); iniFile.Get(SectionName.c_str(), "TriggerPitchRange", &Trigger.Range.Pitch, false); + + // Wiimote + iniFile.Get(SectionName.c_str(), "WmA", &WiiMoteEmu::PadMapping[i].Wm.A, 0); + iniFile.Get(SectionName.c_str(), "WmB", &WiiMoteEmu::PadMapping[i].Wm.B, 0); + iniFile.Get(SectionName.c_str(), "Wm1", &WiiMoteEmu::PadMapping[i].Wm.One, 0); + iniFile.Get(SectionName.c_str(), "Wm2", &WiiMoteEmu::PadMapping[i].Wm.Two, 0); + iniFile.Get(SectionName.c_str(), "WmP", &WiiMoteEmu::PadMapping[i].Wm.P, 0); + iniFile.Get(SectionName.c_str(), "WmM", &WiiMoteEmu::PadMapping[i].Wm.M, 0); + iniFile.Get(SectionName.c_str(), "WmH", &WiiMoteEmu::PadMapping[i].Wm.H, 0); + iniFile.Get(SectionName.c_str(), "WmL", &WiiMoteEmu::PadMapping[i].Wm.L, 0); + iniFile.Get(SectionName.c_str(), "WmR", &WiiMoteEmu::PadMapping[i].Wm.R, 0); + iniFile.Get(SectionName.c_str(), "WmU", &WiiMoteEmu::PadMapping[i].Wm.U, 0); + iniFile.Get(SectionName.c_str(), "WmD", &WiiMoteEmu::PadMapping[i].Wm.D, 0); + iniFile.Get(SectionName.c_str(), "WmShake", &WiiMoteEmu::PadMapping[i].Wm.Shake, 0); + + // Nunchuck iniFile.Get(SectionName.c_str(), "NunchuckStick", &Nunchuck.Type, Nunchuck.KEYBOARD); + iniFile.Get(SectionName.c_str(), "NcZ", &WiiMoteEmu::PadMapping[i].Nc.Z, 0); + iniFile.Get(SectionName.c_str(), "NcC", &WiiMoteEmu::PadMapping[i].Nc.C, 0); + iniFile.Get(SectionName.c_str(), "NcL", &WiiMoteEmu::PadMapping[i].Nc.L, 0); + iniFile.Get(SectionName.c_str(), "NcR", &WiiMoteEmu::PadMapping[i].Nc.R, 0); + iniFile.Get(SectionName.c_str(), "NcU", &WiiMoteEmu::PadMapping[i].Nc.U, 0); + iniFile.Get(SectionName.c_str(), "NcD", &WiiMoteEmu::PadMapping[i].Nc.D, 0); + iniFile.Get(SectionName.c_str(), "NcShake", &WiiMoteEmu::PadMapping[i].Nc.Shake, 0); // Don't update this when we are loading settings from the ConfigBox if(!ChangePad) @@ -139,7 +162,29 @@ void Config::Save(int Slot) iniFile.Set(SectionName.c_str(), "TriggerType", Trigger.Type); iniFile.Set(SectionName.c_str(), "TriggerRollRange", Trigger.Range.Roll); iniFile.Set(SectionName.c_str(), "TriggerPitchRange", Trigger.Range.Pitch); + + // Wiimote + iniFile.Set(SectionName.c_str(), "WmA", WiiMoteEmu::PadMapping[i].Wm.A); + iniFile.Set(SectionName.c_str(), "WmB", WiiMoteEmu::PadMapping[i].Wm.B); + iniFile.Set(SectionName.c_str(), "Wm1", WiiMoteEmu::PadMapping[i].Wm.One); + iniFile.Set(SectionName.c_str(), "Wm2", WiiMoteEmu::PadMapping[i].Wm.Two); + iniFile.Set(SectionName.c_str(), "WmP", WiiMoteEmu::PadMapping[i].Wm.P); + iniFile.Set(SectionName.c_str(), "WmM", WiiMoteEmu::PadMapping[i].Wm.M); + iniFile.Set(SectionName.c_str(), "WmH", WiiMoteEmu::PadMapping[i].Wm.H); + iniFile.Set(SectionName.c_str(), "WmL", WiiMoteEmu::PadMapping[i].Wm.L); + iniFile.Set(SectionName.c_str(), "WmR", WiiMoteEmu::PadMapping[i].Wm.R); + iniFile.Set(SectionName.c_str(), "WmU", WiiMoteEmu::PadMapping[i].Wm.U); + iniFile.Set(SectionName.c_str(), "WmD", WiiMoteEmu::PadMapping[i].Wm.D); + iniFile.Set(SectionName.c_str(), "WmShake", WiiMoteEmu::PadMapping[i].Wm.Shake); + + // Nunchuck iniFile.Set(SectionName.c_str(), "NunchuckStick", Nunchuck.Type); + iniFile.Set(SectionName.c_str(), "NcZ", WiiMoteEmu::PadMapping[i].Nc.Z); + iniFile.Set(SectionName.c_str(), "NcC", WiiMoteEmu::PadMapping[i].Nc.C); + iniFile.Set(SectionName.c_str(), "NcL", WiiMoteEmu::PadMapping[i].Nc.L); + iniFile.Set(SectionName.c_str(), "NcR", WiiMoteEmu::PadMapping[i].Nc.R); + iniFile.Set(SectionName.c_str(), "NcU", WiiMoteEmu::PadMapping[i].Nc.U); + iniFile.Set(SectionName.c_str(), "NcShake", WiiMoteEmu::PadMapping[i].Nc.Shake); // Save the physical device ID number iniFile.Set(SectionName.c_str(), "DeviceID", WiiMoteEmu::PadMapping[i].ID); diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp index 603c1f48c5..938f8f278a 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp @@ -23,6 +23,7 @@ #include "CommonTypes.h" // for u16 #include "IniFile.h" #include "Timer.h" +#include "StringUtil.h" #include "wiimote_real.h" // Local #include "wiimote_hid.h" @@ -113,6 +114,20 @@ BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) EVT_CHECKBOX(ID_TILT_INVERT_PITCH, ConfigDialog::GeneralSettingsChanged) EVT_COMBOBOX(IDCB_NUNCHUCK_STICK, ConfigDialog::GeneralSettingsChanged) + // Wiimote + EVT_BUTTON(IDB_WM_A, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_B, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_WM_1, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_2, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_WM_P, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_M, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_H, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_WM_L, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_R, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_WM_U, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_D, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_WM_SHAKE, ConfigDialog::OnButtonClick) + + // Nunchuck + EVT_BUTTON(IDB_NC_Z, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_NC_C, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_NC_L, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_NC_R, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_NC_U, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_NC_D, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_NC_SHAKE, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_ANALOG_LEFT_X, ConfigDialog::GetButtons) EVT_BUTTON(IDB_ANALOG_LEFT_Y, ConfigDialog::GetButtons) EVT_BUTTON(IDB_ANALOG_RIGHT_X, ConfigDialog::GetButtons) @@ -157,6 +172,7 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl m_bEnableUseRealWiimote = true; Page = 0; m_vRecording.resize(RECORDING_ROWS + 1); + ClickedButton = NULL; g_Config.Load(); CreateGUIControls(); @@ -167,9 +183,6 @@ ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &titl wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard wxKeyEventHandler(ConfigDialog::OnKeyDown), (wxObject*)0, this); - wxTheApp->Connect(wxID_ANY, wxEVT_KEY_UP, - wxKeyEventHandler(ConfigDialog::OnKeyDown), - (wxObject*)0, this); } ConfigDialog::~ConfigDialog() @@ -190,8 +203,69 @@ void ConfigDialog::OnKeyDown(wxKeyEvent& event) m_bRecording = false; UpdateGUI(); } + + // ---------------------------------------------------- + // Handle the keyboard key mapping + // ------------------ + std::string StrKey; + if(ClickedButton != NULL) + { + // Allow the escape key to set a blank key + if (g_Pressed == WXK_ESCAPE) + { + SaveKeyboardMapping(Page, ClickedButton->GetId(), -1); + SetButtonText(ClickedButton->GetId(), ""); + ClickedButton = NULL; + return; + } + + #ifdef _WIN32 + BYTE keyState[256]; + GetKeyboardState(keyState); + for (int i = 1; i < 256; ++i) + { + if ((keyState[i] & 0x80) != 0) + { + // Use the left and right specific keys instead of the common ones + if (i == VK_SHIFT || i == VK_CONTROL || i == VK_MENU) continue; + // Update the button label + char KeyStr[64] = {0}; strcpy(KeyStr, InputCommon::VKToString(i).c_str()); + SetButtonText(ClickedButton->GetId(), KeyStr); + // Save the setting + SaveKeyboardMapping(Page, ClickedButton->GetId(), i); + } + } + #elif defined(HAVE_X11) && HAVE_X11 + //pad[page].keyForControl[ClickedButton->GetId()] = wxCharCodeWXToX(event.GetKeyCode()); + //ClickedButton->SetLabel(wxString::Format(_T("%c"), event.GetKeyCode())); + #endif + } + + // Remove the button control pointer + ClickedButton = NULL; + // --------------------------- } +// Input button clicked +void ConfigDialog::OnButtonClick(wxCommandEvent& event) +{ + //Console::Print("OnButtonClick: %i\n", g_Pressed); + + // Don't allow space to start a new Press Key option, that will interfer with setting a key to space + if (g_Pressed == WXK_SPACE) { g_Pressed = 0; return; } + + // Reset the old label + if(ClickedButton) ClickedButton->SetLabel(OldLabel); + + // Create the button object + ClickedButton = (wxButton *)event.GetEventObject(); + OldLabel = ClickedButton->GetLabel(); + ClickedButton->SetLabel(wxT("")); + // Allow Tab and directional keys to + ClickedButton->SetWindowStyle(wxWANTS_CHARS); +} + + void ConfigDialog::OnClose(wxCloseEvent& event) { g_FrameOpen = false; @@ -441,6 +515,9 @@ void ConfigDialog::CreateGUIControls() StrNunchuck.Add(wxString::FromAscii("Keyboard")); StrNunchuck.Add(wxString::FromAscii("Analog 1")); StrNunchuck.Add(wxString::FromAscii("Analog 2")); + + // A small type font + wxFont m_SmallFont(7, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); /////////////////////////////////////// @@ -453,7 +530,7 @@ void ConfigDialog::CreateGUIControls() // ---------------- // Configuration controls - static const int TxtW = 50, TxtH = 19, ChW = 261; + static const int TxtW = 50, TxtH = 19, ChW = 261, BtW = 75, BtH = 20; // Basic Settings m_WiimoteOnline[i] = new wxCheckBox(m_Controller[i], IDC_WIMOTE_ON, wxT("Wiimote On"), wxDefaultPosition, wxSize(ChW, -1)); @@ -540,7 +617,7 @@ void ConfigDialog::CreateGUIControls() // -------------------------------------------------------------------- // Controller // ----------------------------- - /**/ + // Controller m_Joyname[i] = new wxComboBox(m_Controller[i], IDC_JOYNAME, StrJoyname[0], wxDefaultPosition, wxSize(200, -1), StrJoyname, wxCB_READONLY); @@ -833,20 +910,6 @@ void ConfigDialog::CreateGUIControls() // -------------------------------------------------------------------- // Wiimote // ----------------------------- - - m_gWiimote[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Wiimote")); - /* - m_WmA[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmB[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_Wm1[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_Wm2[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmP[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmM[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmH[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmL[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmR[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmU[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_WmD[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); m_tWmA[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("A")); m_tWmB[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("B")); @@ -859,30 +922,64 @@ void ConfigDialog::CreateGUIControls() m_tWmR[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right")); m_tWmU[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Up")); m_tWmD[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Down")); + m_tWmShake[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Shake")); - m_bWmA[i] = new wxButton(m_Controller[i], IDB_WM_A); - m_bWmB[i] = new wxButton(m_Controller[i], IDB_WM_B); - m_bWm1[i] = new wxButton(m_Controller[i], IDB_WM_1); - m_bWm2[i] = new wxButton(m_Controller[i], IDB_WM_2); - m_bWmP[i] = new wxButton(m_Controller[i], IDB_WM_P); - m_bWmM[i] = new wxButton(m_Controller[i], IDB_WM_M); - m_bWmL[i] = new wxButton(m_Controller[i], IDB_WM_L); - m_bWmR[i] = new wxButton(m_Controller[i], IDB_WM_R); - m_bWmU[i] = new wxButton(m_Controller[i], IDB_WM_U); - m_bWmD[i] = new wxButton(m_Controller[i], IDB_WM_D); + m_bWmA[i] = new wxButton(m_Controller[i], IDB_WM_A, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmB[i] = new wxButton(m_Controller[i], IDB_WM_B, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWm1[i] = new wxButton(m_Controller[i], IDB_WM_1, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWm2[i] = new wxButton(m_Controller[i], IDB_WM_2, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmP[i] = new wxButton(m_Controller[i], IDB_WM_P, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmM[i] = new wxButton(m_Controller[i], IDB_WM_M, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmH[i] = new wxButton(m_Controller[i], IDB_WM_H, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmL[i] = new wxButton(m_Controller[i], IDB_WM_L, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmR[i] = new wxButton(m_Controller[i], IDB_WM_R, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmU[i] = new wxButton(m_Controller[i], IDB_WM_U, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmD[i] = new wxButton(m_Controller[i], IDB_WM_D, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bWmShake[i] = new wxButton(m_Controller[i], IDB_WM_SHAKE, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + + // Set small font + m_bWmA[i]->SetFont(m_SmallFont); m_bWmB[i]->SetFont(m_SmallFont); + m_bWm1[i]->SetFont(m_SmallFont); m_bWm2[i]->SetFont(m_SmallFont); + m_bWmP[i]->SetFont(m_SmallFont); m_bWmM[i]->SetFont(m_SmallFont); m_bWmH[i]->SetFont(m_SmallFont); + m_bWmL[i]->SetFont(m_SmallFont); m_bWmR[i]->SetFont(m_SmallFont); + m_bWmU[i]->SetFont(m_SmallFont); m_bWmD[i]->SetFont(m_SmallFont); + m_bWmShake[i]->SetFont(m_SmallFont); - // Disable - m_WmA[i]->Enable(false); - m_WmB[i]->Enable(false); - m_Wm1[i]->Enable(false); - m_Wm2[i]->Enable(false); - m_WmP[i]->Enable(false); - m_WmM[i]->Enable(false); - m_WmL[i]->Enable(false); - m_WmR[i]->Enable(false); - m_WmU[i]->Enable(false); - m_WmD[i]->Enable(false); - */ + // Sizers + m_SWmA[i] = new wxBoxSizer(wxHORIZONTAL); m_SWmB[i] = new wxBoxSizer(wxHORIZONTAL); + m_SWm1[i] = new wxBoxSizer(wxHORIZONTAL); m_SWm2[i] = new wxBoxSizer(wxHORIZONTAL); + m_SWmP[i] = new wxBoxSizer(wxHORIZONTAL); m_SWmM[i] = new wxBoxSizer(wxHORIZONTAL); m_SWmH[i] = new wxBoxSizer(wxHORIZONTAL); + m_SWmL[i] = new wxBoxSizer(wxHORIZONTAL); m_SWmR[i] = new wxBoxSizer(wxHORIZONTAL); + m_SWmU[i] = new wxBoxSizer(wxHORIZONTAL); m_SWmD[i] = new wxBoxSizer(wxHORIZONTAL); + m_SWmShake[i] = new wxBoxSizer(wxHORIZONTAL); + + m_SWmA[i]->Add(m_tWmA[i], 0, (wxUP), 4); m_SWmA[i]->Add(m_bWmA[i], 0, (wxLEFT), 2); + m_SWmB[i]->Add(m_tWmB[i], 0, (wxUP), 4); m_SWmB[i]->Add(m_bWmB[i], 0, (wxLEFT), 2); + m_SWm1[i]->Add(m_tWm1[i], 0, (wxUP), 4); m_SWm1[i]->Add(m_bWm1[i], 0, (wxLEFT), 2); + m_SWm2[i]->Add(m_tWm2[i], 0, (wxUP), 4); m_SWm2[i]->Add(m_bWm2[i], 0, (wxLEFT), 2); + m_SWmP[i]->Add(m_tWmP[i], 0, (wxUP), 4); m_SWmP[i]->Add(m_bWmP[i], 0, (wxLEFT), 2); + m_SWmM[i]->Add(m_tWmM[i], 0, (wxUP), 4); m_SWmM[i]->Add(m_bWmM[i], 0, (wxLEFT), 2); + m_SWmH[i]->Add(m_tWmH[i], 0, (wxUP), 4); m_SWmH[i]->Add(m_bWmH[i], 0, (wxLEFT), 2); + m_SWmL[i]->Add(m_tWmL[i], 0, (wxUP), 4); m_SWmL[i]->Add(m_bWmL[i], 0, (wxLEFT), 2); + m_SWmR[i]->Add(m_tWmR[i], 0, (wxUP), 4); m_SWmR[i]->Add(m_bWmR[i], 0, (wxLEFT), 2); + m_SWmU[i]->Add(m_tWmU[i], 0, (wxUP), 4); m_SWmU[i]->Add(m_bWmU[i], 0, (wxLEFT), 2); + m_SWmD[i]->Add(m_tWmD[i], 0, (wxUP), 4); m_SWmD[i]->Add(m_bWmD[i], 0, (wxLEFT), 2); + m_SWmShake[i]->Add(m_tWmShake[i], 0, (wxUP), 4); m_SWmShake[i]->Add(m_bWmShake[i], 0, (wxLEFT), 2); + + m_gWiimote[i] = new wxStaticBoxSizer (wxVERTICAL, m_Controller[i], wxT("Wiimote")); + m_gWiimote[i]->Add(m_SWmShake[i], 0, wxALIGN_RIGHT | (wxALL), 1); + m_gWiimote[i]->Add(m_SWmL[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmR[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmU[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmD[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmA[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmB[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWm1[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWm2[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmP[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmM[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->Add(m_SWmH[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gWiimote[i]->AddSpacer(1); // -------------------------------------------------------------------- // Nunchuck @@ -892,44 +989,59 @@ void ConfigDialog::CreateGUIControls() m_NunchuckTextStick[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Stick controls")); m_NunchuckComboStick[i] = new wxComboBox(m_Controller[i], IDCB_NUNCHUCK_STICK, StrNunchuck[0], wxDefaultPosition, wxDefaultSize, StrNunchuck, wxCB_READONLY); - /* - m_NuZ[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_NuC[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_NuL[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_NuR[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_NuU[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_NuD[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); + m_tNcZ[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Z")); + m_tNcC[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("C")); + m_tNcL[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left")); + m_tNcR[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right")); + m_tNcU[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Up")); + m_tNcD[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Down")); + m_tNcShake[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Shake")); - m_tNuZ[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Z")); - m_tNuC[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("C")); - m_tNuL[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left")); - m_tNuR[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right")); - m_tNuU[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Up")); - m_tNuD[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Down")); + m_bNcZ[i] = new wxButton(m_Controller[i], IDB_NC_Z, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcC[i] = new wxButton(m_Controller[i], IDB_NC_C, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcL[i] = new wxButton(m_Controller[i], IDB_NC_L, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcR[i] = new wxButton(m_Controller[i], IDB_NC_R, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcU[i] = new wxButton(m_Controller[i], IDB_NC_U, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcD[i] = new wxButton(m_Controller[i], IDB_NC_D, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bNcShake[i] = new wxButton(m_Controller[i], IDB_NC_SHAKE, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); - m_bNuZ[i] = new wxButton(m_Controller[i], IDB_WM_Z); - m_bNuC[i] = new wxButton(m_Controller[i], IDB_WM_C); - m_bNuL[i] = new wxButton(m_Controller[i], IDB_WM_L); - m_bNuR[i] = new wxButton(m_Controller[i], IDB_WM_R); - m_bNuU[i] = new wxButton(m_Controller[i], IDB_WM_U); - m_bNuD[i] = new wxButton(m_Controller[i], IDB_WM_D); - - // Disable - m_NuZ[i]->Enable(false); - m_NuC[i]->Enable(false); - m_NuL[i]->Enable(false); - m_NuR[i]->Enable(false); - m_NuU[i]->Enable(false); - m_NuD[i]->Enable(false); - */ + // Set small font + m_bNcShake[i]->SetFont(m_SmallFont); + m_bNcZ[i]->SetFont(m_SmallFont); + m_bNcC[i]->SetFont(m_SmallFont); + m_bNcL[i]->SetFont(m_SmallFont); m_bNcR[i]->SetFont(m_SmallFont); + m_bNcU[i]->SetFont(m_SmallFont); m_bNcD[i]->SetFont(m_SmallFont); + m_bNcShake[i]->SetFont(m_SmallFont); // Sizers m_NunchuckStick[i] = new wxBoxSizer(wxHORIZONTAL); m_NunchuckStick[i]->Add(m_NunchuckTextStick[i], 0, (wxUP), 4); m_NunchuckStick[i]->Add(m_NunchuckComboStick[i], 0, (wxLEFT), 2); - m_gNunchuck[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Nunchuck")); - m_gNunchuck[i]->Add(m_NunchuckStick[i], 0, (wxALL), 2); + m_SNcZ[i] = new wxBoxSizer(wxHORIZONTAL); m_SNcC[i] = new wxBoxSizer(wxHORIZONTAL); + m_SNcL[i] = new wxBoxSizer(wxHORIZONTAL); m_SNcR[i] = new wxBoxSizer(wxHORIZONTAL); + m_SNcU[i] = new wxBoxSizer(wxHORIZONTAL); m_SNcD[i] = new wxBoxSizer(wxHORIZONTAL); + m_SNcShake[i] = new wxBoxSizer(wxHORIZONTAL); + + m_SNcZ[i]->Add(m_tNcZ[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcZ[i]->Add(m_bNcZ[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcC[i]->Add(m_tNcC[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcC[i]->Add(m_bNcC[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcL[i]->Add(m_tNcL[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcL[i]->Add(m_bNcL[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcR[i]->Add(m_tNcR[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcR[i]->Add(m_bNcR[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcU[i]->Add(m_tNcU[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcU[i]->Add(m_bNcU[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcD[i]->Add(m_tNcD[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcD[i]->Add(m_bNcD[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SNcShake[i]->Add(m_tNcShake[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SNcShake[i]->Add(m_bNcShake[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + + // The parent sizer + m_gNunchuck[i] = new wxStaticBoxSizer (wxVERTICAL, m_Controller[i], wxT("Nunchuck")); + m_gNunchuck[i]->Add(m_NunchuckStick[i], 0, wxALIGN_CENTER | (wxALL), 2); + m_gNunchuck[i]->AddSpacer(2); + m_gNunchuck[i]->Add(m_SNcShake[i], 0, wxALIGN_RIGHT | (wxALL), 1); + m_gNunchuck[i]->Add(m_SNcZ[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gNunchuck[i]->Add(m_SNcC[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gNunchuck[i]->Add(m_SNcL[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gNunchuck[i]->Add(m_SNcR[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gNunchuck[i]->Add(m_SNcU[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gNunchuck[i]->Add(m_SNcD[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); //Set values m_NunchuckComboStick[i]->SetSelection(g_Config.Nunchuck.Type); diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h index 81dad1e6e7..5069d7cf44 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h @@ -39,7 +39,7 @@ class ConfigDialog : public wxDialog ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Wii Remote Plugin Configuration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE); + long style = wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS); virtual ~ConfigDialog(); // General open, close and event functions @@ -90,6 +90,10 @@ class ConfigDialog : public wxDialog *m_HorizControllers[4], *m_gC2SDeadZone[4], *m_gCircle2Square[4], *m_gCircle2SquareVert[4], *m_gDeadZone[4], *m_gDeadZoneHoriz[4], *m_HorizControllerTiltParent[4], *m_HorizControllerTilt[4], *m_TiltHoriz[4], *m_SizeAnalogLeft[4], *m_SizeAnalogLeftHorizX[4], *m_SizeAnalogLeftHorizY[4], *m_SizeAnalogRight[4], *m_SizeAnalogRightHorizX[4], *m_SizeAnalogRightHorizY[4], *m_SizeAnalogTriggerVertLeft[4], *m_SizeAnalogTriggerVertRight[4], *m_SizeAnalogTriggerHorizInput[4], + // Nunchuck + *m_SNcShake[4], *m_SNcZ[4], *m_SNcC[4], *m_SNcL[4], *m_SNcR[4], *m_SNcU[4], *m_SNcD[4], + // Wiimote + *m_SWmShake[4], *m_SWmA[4], *m_SWmB[4], *m_SWm1[4], *m_SWm2[4], *m_SWmP[4], *m_SWmM[4], *m_SWmH[4], *m_SWmL[4], *m_SWmR[4], *m_SWmU[4], *m_SWmD[4], *m_HorizControllerMapping[4], *m_NunchuckStick[4]; wxGridBagSizer *m_SizeAnalogTriggerHorizConfig[4], *m_SizeAnalogTriggerStatusBox[4], *m_TiltGrid[4], *m_GridLeftStick[4], *m_GridRightStick[4]; @@ -97,12 +101,22 @@ class ConfigDialog : public wxDialog wxTextCtrl *m_AnalogLeftX[4], *m_AnalogLeftY[4], *m_AnalogRightX[4], *m_AnalogRightY[4], *m_AnalogTriggerL[4], *m_AnalogTriggerR[4]; wxButton *m_bAnalogLeftX[4], *m_bAnalogLeftY[4], *m_bAnalogRightX[4], *m_bAnalogRightY[4], - *m_bAnalogTriggerL[4], *m_bAnalogTriggerR[4]; + *m_bAnalogTriggerL[4], *m_bAnalogTriggerR[4], + // Nunchuck + *m_bNcShake[4], *m_bNcZ[4], *m_bNcC[4], *m_bNcL[4], *m_bNcR[4], *m_bNcU[4], *m_bNcD[4], + // Wiimote + *m_bWmShake[4], *m_bWmA[4], *m_bWmB[4], *m_bWm1[4], *m_bWm2[4], *m_bWmP[4], *m_bWmM[4], *m_bWmH[4], *m_bWmD[4], *m_bWmU[4], *m_bWmR[4], *m_bWmL[4]; wxStaticText *m_tAnalogX[8], *m_tAnalogY[8], *m_TiltTextRoll[4], *m_TiltTextPitch[4], *m_CheckC2SLabel[4], *m_ComboDeadZoneLabel[4], *m_TStatusLeftIn[4], *m_TStatusLeftOut[4], *m_TStatusRightIn[4], *m_TStatusRightOut[4], *m_TriggerStatusL[4], *m_TriggerStatusR[4], *m_TriggerStatusLx[4], *m_TriggerStatusRx[4], *m_tAnalogTriggerInput[4], *m_tAnalogTriggerL[4], *m_tAnalogTriggerR[4], + // Nunchuck + *m_tNcShake[4], *m_tNcZ[4], *m_tNcC[4], *m_tNcL[4], *m_tNcR[4], *m_tNcU[4], *m_tNcD[4], + // Wiimote + *m_tWmShake[4], *m_tWmA[4], *m_tWmB[4], *m_tWm1[4], *m_tWm2[4], *m_tWmP[4], *m_tWmM[4], *m_tWmH[4], *m_tWmL[4], *m_tWmR[4], *m_tWmU[4],*m_tWmD[4], *m_NunchuckTextStick[5]; + wxButton *ClickedButton; + wxString OldLabel; // Emulated Wiimote settings wxCheckBox *m_SidewaysDPad[4], *m_WiimoteOnline[4], *m_WideScreen[4]; @@ -168,6 +182,21 @@ class ConfigDialog : public wxDialog ID_ANALOG_RIGHT_X, ID_ANALOG_RIGHT_Y, ID_TRIGGER_L, ID_TRIGGER_R, + // Wiimote + IDB_WM_A, IDB_WM_B, + IDB_WM_1, IDB_WM_2, + IDB_WM_P, IDB_WM_M, IDB_WM_H, + IDB_WM_L, IDB_WM_R, IDB_WM_U, IDB_WM_D, + IDB_WM_SHAKE, + + // Nunchuck + IDB_NC_Z, IDB_NC_C, IDB_NC_L, IDB_NC_R, IDB_NC_U, IDB_NC_D, + IDB_NC_SHAKE, + + // Classic Controller + IDB_CC_A, IDB_CC_B, + IDB_CC_X, IDB_CC_Y, + // Gamepad settings IDC_JOYNAME, IDC_LEFT_C2S, IDCB_LEFT_DIAGONAL, IDCB_DEAD_ZONE_LEFT, IDCB_DEAD_ZONE_RIGHT, ID_TRIGGER_TYPE, ID_TILT_INPUT, ID_TILT_RANGE_ROLL, ID_TILT_RANGE_PITCH, ID_TILT_INVERT_ROLL, ID_TILT_INVERT_PITCH, @@ -196,10 +225,12 @@ class ConfigDialog : public wxDialog wxString GetButtonText(int id, int Page = -1); void GetButtons(wxCommandEvent& event); void DoGetButtons(int); void SaveButtonMapping(int controller, bool DontChangeId = false, int FromSlot = -1); void SaveButtonMappingAll(int Slot); + void SaveKeyboardMapping(int Controller, int Id, int Key); void ToBlank(bool ToBlank = true); void PadGetStatus(); void DoSave(bool ChangePad = false, int Slot = -1); void DoChangeJoystick(); void PadOpen(int Open); void PadClose(int Close); void DoChangeDeadZone(bool Left); + void OnButtonClick(wxCommandEvent& event); // Configure buttons int GetButtonWaitingID, GetButtonWaitingTimer; diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp index 21cafe5b32..8d817febee 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp @@ -102,6 +102,8 @@ void ConfigDialog::DoChangeDeadZone(bool Left) /////////////////////////////////////////////////////////////////////////////////// // Change settings // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ + +// Set the button text for all four Wiimotes void ConfigDialog::SetButtonTextAll(int id, char text[128]) { for (int i = 0; i < 1; i++) @@ -157,7 +159,30 @@ void ConfigDialog::UpdateGUIButtonMapping(int controller) m_TiltInvertRoll[controller]->SetValue(WiiMoteEmu::PadMapping[controller].bRollInvert); m_TiltInvertPitch[controller]->SetValue(WiiMoteEmu::PadMapping[controller].bPitchInvert); - //Console::Print("m_ComboDeadZone[%i] = %i\n", controller, WiiMoteEmu::PadMapping[controller].deadzone); + // Wiimote + m_bWmA[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.A)); + m_bWmB[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.B)); + m_bWm1[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.One)); + m_bWm2[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.Two)); + m_bWmP[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.P)); + m_bWmM[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.M)); + m_bWmH[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.H)); + m_bWmL[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.L)); + m_bWmR[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.R)); + m_bWmU[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.U)); + m_bWmD[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.D)); + m_bWmShake[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.Shake)); + + // Nunchuck + m_bNcZ[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.Z)); + m_bNcC[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.C)); + m_bNcL[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.L)); + m_bNcR[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.R)); + m_bNcU[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.U)); + m_bNcD[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.D)); + m_bNcShake[controller]->SetLabel(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.Shake)); + + //Console::Print("m_bWmA[%i] = %i = %s\n", controller, WiiMoteEmu::PadMapping[controller].Wm.A, InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.A).c_str()); } /* Populate the PadMapping array with the dialog items settings (for example @@ -206,6 +231,38 @@ void ConfigDialog::SaveButtonMapping(int controller, bool DontChangeId, int From ToBlank(); } +// Save keyboard key mapping +void ConfigDialog::SaveKeyboardMapping(int Controller, int Id, int Key) +{ + switch(Id) + { + // Wiimote + case IDB_WM_A: WiiMoteEmu::PadMapping[Controller].Wm.A = Key; break; + case IDB_WM_B: WiiMoteEmu::PadMapping[Controller].Wm.B = Key; break; + case IDB_WM_1: WiiMoteEmu::PadMapping[Controller].Wm.One = Key; break; + case IDB_WM_2: WiiMoteEmu::PadMapping[Controller].Wm.Two = Key; break; + case IDB_WM_P: WiiMoteEmu::PadMapping[Controller].Wm.P = Key; break; + case IDB_WM_M: WiiMoteEmu::PadMapping[Controller].Wm.M = Key; break; + case IDB_WM_H: WiiMoteEmu::PadMapping[Controller].Wm.H = Key; break; + case IDB_WM_L: WiiMoteEmu::PadMapping[Controller].Wm.L = Key; break; + case IDB_WM_R: WiiMoteEmu::PadMapping[Controller].Wm.R = Key; break; + case IDB_WM_U: WiiMoteEmu::PadMapping[Controller].Wm.U = Key; break; + case IDB_WM_D: WiiMoteEmu::PadMapping[Controller].Wm.D = Key; break; + case IDB_WM_SHAKE: WiiMoteEmu::PadMapping[Controller].Wm.Shake = Key; break; + + // Nunchuck + case IDB_NC_Z: WiiMoteEmu::PadMapping[Controller].Nc.Z = Key; break; + case IDB_NC_C: WiiMoteEmu::PadMapping[Controller].Nc.C = Key; break; + case IDB_NC_L: WiiMoteEmu::PadMapping[Controller].Nc.L = Key; break; + case IDB_NC_R: WiiMoteEmu::PadMapping[Controller].Nc.R = Key; break; + case IDB_NC_U: WiiMoteEmu::PadMapping[Controller].Nc.U = Key; break; + case IDB_NC_D: WiiMoteEmu::PadMapping[Controller].Nc.D = Key; break; + case IDB_NC_SHAKE: WiiMoteEmu::PadMapping[Controller].Nc.Shake = Key; break; + } + + //Console::Print("WiiMoteEmu::PadMapping[%i].Wm.A = %i", Controller, WiiMoteEmu::PadMapping[Controller].Wm.A); +} + // Replace the harder to understand -1 with "" for the sake of user friendliness // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ void ConfigDialog::ToBlank(bool ToBlank) @@ -252,6 +309,30 @@ void ConfigDialog::SetButtonText(int id, char text[128], int _Page) case IDB_TRIGGER_L: m_AnalogTriggerL[controller]->SetValue(wxString::FromAscii(text)); break; case IDB_TRIGGER_R: m_AnalogTriggerR[controller]->SetValue(wxString::FromAscii(text)); break; + + // Wiimote + case IDB_WM_A: m_bWmA[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_B: m_bWmB[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_1: m_bWm1[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_2: m_bWm2[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_P: m_bWmP[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_M: m_bWmM[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_H: m_bWmH[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_L: m_bWmL[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_R: m_bWmR[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_U: m_bWmU[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_D: m_bWmD[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_WM_SHAKE: m_bWmShake[controller]->SetLabel(wxString::FromAscii(text)); break; + + // Nunchuck + case IDB_NC_Z: m_bNcZ[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_C: m_bNcC[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_L: m_bNcL[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_R: m_bNcR[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_U: m_bNcU[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_D: m_bNcD[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_NC_SHAKE: m_bNcShake[controller]->SetLabel(wxString::FromAscii(text)); break; + default: break; } //Console::Print("SetButtonText: %s\n", text); @@ -471,6 +552,7 @@ void ConfigDialog::DoGetButtons(int GetId) /////////////////////////////////////////////////////////// Configure button mapping + ////////////////////////////////////////////////////////////////////////////////////////// // Show current input status // ŻŻŻŻŻŻŻŻŻŻ diff --git a/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp b/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp index 057fdddc65..726d396b1b 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp @@ -268,32 +268,31 @@ void FillReportInfo(wm_core& _core) bool InsideScreen = !(x < 0 || x > 1 || y < 0 || y > 1); // Allow both mouse buttons and keyboard to press a and b - if((GetAsyncKeyState(VK_LBUTTON) && InsideScreen) || GetAsyncKeyState('A') ? 1 : 0) + if((GetAsyncKeyState(VK_LBUTTON) && InsideScreen) || GetAsyncKeyState(PadMapping[0].Wm.A)) _core.a = 1; - - if((GetAsyncKeyState(VK_RBUTTON) && InsideScreen) || GetAsyncKeyState('B') ? 1 : 0) + if((GetAsyncKeyState(VK_RBUTTON) && InsideScreen) || GetAsyncKeyState(PadMapping[0].Wm.B)) _core.b = 1; - _core.one = GetAsyncKeyState('1') ? 1 : 0; - _core.two = GetAsyncKeyState('2') ? 1 : 0; - _core.plus = GetAsyncKeyState('P') ? 1 : 0; - _core.minus = GetAsyncKeyState('M') ? 1 : 0; - _core.home = GetAsyncKeyState('H') ? 1 : 0; + _core.one = GetAsyncKeyState(PadMapping[0].Wm.One) ? 1 : 0; + _core.two = GetAsyncKeyState(PadMapping[0].Wm.Two) ? 1 : 0; + _core.plus = GetAsyncKeyState(PadMapping[0].Wm.P) ? 1 : 0; + _core.minus = GetAsyncKeyState(PadMapping[0].Wm.M) ? 1 : 0; + _core.home = GetAsyncKeyState(PadMapping[0].Wm.H) ? 1 : 0; /* Sideways controls (for example for Wario Land) if the Wiimote is intended to be held sideways */ if(g_Config.bSidewaysDPad) { - _core.left = GetAsyncKeyState(VK_DOWN) ? 1 : 0; - _core.up = GetAsyncKeyState(VK_LEFT) ? 1 : 0; - _core.right = GetAsyncKeyState(VK_UP) ? 1 : 0; - _core.down = GetAsyncKeyState(VK_RIGHT) ? 1 : 0; + _core.left = GetAsyncKeyState(PadMapping[0].Wm.D) ? 1 : 0; + _core.up = GetAsyncKeyState(PadMapping[0].Wm.L) ? 1 : 0; + _core.right = GetAsyncKeyState(PadMapping[0].Wm.U) ? 1 : 0; + _core.down = GetAsyncKeyState(PadMapping[0].Wm.R) ? 1 : 0; } else { - _core.left = GetAsyncKeyState(VK_LEFT) ? 1 : 0; - _core.up = GetAsyncKeyState(VK_UP) ? 1 : 0; - _core.right = GetAsyncKeyState(VK_RIGHT) ? 1 : 0; - _core.down = GetAsyncKeyState(VK_DOWN) ? 1 : 0; + _core.left = GetAsyncKeyState(PadMapping[0].Wm.L) ? 1 : 0; + _core.up = GetAsyncKeyState(PadMapping[0].Wm.U) ? 1 : 0; + _core.right = GetAsyncKeyState(PadMapping[0].Wm.R) ? 1 : 0; + _core.down = GetAsyncKeyState(PadMapping[0].Wm.D) ? 1 : 0; } #else // TODO: fill in @@ -334,7 +333,7 @@ void SingleShake(u8 &_y, u8 &_z, int i) { #ifdef _WIN32 // Shake Wiimote with S, Nunchuck with D - if((i == 0 && GetAsyncKeyState('S')) || (i == 1 && GetAsyncKeyState('D'))) + if((i == 0 && GetAsyncKeyState(PadMapping[0].Wm.Shake)) || (i == 1 && GetAsyncKeyState(PadMapping[0].Nc.Shake))) { _z = 0; _y = 0; @@ -918,14 +917,14 @@ void FillReportExtension(wm_extension& _ext) if (g_Config.Nunchuck.Type == g_Config.Nunchuck.KEYBOARD) { // Set the max values to the current calibration values - if(GetAsyncKeyState(VK_NUMPAD4)) // x + if(GetAsyncKeyState(PadMapping[0].Nc.L)) // x _ext.jx = g_nu.jx.min; - if(GetAsyncKeyState(VK_NUMPAD6)) + if(GetAsyncKeyState(PadMapping[0].Nc.R)) _ext.jx = g_nu.jx.max; - if(GetAsyncKeyState(VK_NUMPAD5)) // y + if(GetAsyncKeyState(PadMapping[0].Nc.D)) // y _ext.jy = g_nu.jy.min; - if(GetAsyncKeyState(VK_NUMPAD8)) + if(GetAsyncKeyState(PadMapping[0].Nc.U)) _ext.jy = g_nu.jy.max; } else @@ -984,11 +983,11 @@ void FillReportExtension(wm_extension& _ext) } } - if(GetAsyncKeyState('C')) + if(GetAsyncKeyState(PadMapping[0].Nc.C)) _ext.bt = 0x01; - if(GetAsyncKeyState('Z')) + if(GetAsyncKeyState(PadMapping[0].Nc.Z)) _ext.bt = 0x02; - if(GetAsyncKeyState('C') && GetAsyncKeyState('Z')) + if(GetAsyncKeyState(PadMapping[0].Nc.C) && GetAsyncKeyState(PadMapping[0].Nc.Z)) _ext.bt = 0x00; #else // TODO linux port diff --git a/Source/Plugins/Plugin_Wiimote/Src/main.cpp b/Source/Plugins/Plugin_Wiimote/Src/main.cpp index 15057b4060..b262a43913 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/main.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/main.cpp @@ -381,11 +381,15 @@ extern "C" unsigned int Wiimote_GetAttachedControllers() // ================ + + //****************************************************************************** // Supporting functions //****************************************************************************** + + // ---------------------------------------- // Debugging window // ---------- @@ -662,14 +666,15 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) "%02x %02x %02x %02x " "%03i %03i %03i " "%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x " - "%03i %03i %03i %03i %03i " - "%02x %02x ", + "%03i %03i " + "%03i %03i %03i " + "%02x ", data[0], data[1], data[2], data[3], // Header and core buttons data[4], data[5], data[6], // Wiimote accelerometer data[7], data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15], data[16], data[17], data[18], // Nunchuck stick data[19], data[20], data[21], // Nunchuck Accelerometer - data[22], data[23] // Nunchuck buttons + data[22] // Nunchuck buttons ); // Calculate the Wiimote roll and pitch in degrees @@ -936,9 +941,6 @@ void DoInitialize() // Open console //OpenConsole(true); - // Load config settings, will be done after the SDL functions in EmuMain.cpp - //g_Config.Load(); - // Run this first so that WiiMoteReal::Initialize() overwrites g_Eeprom WiiMoteEmu::Initialize();