diff --git a/Source/Core/InputCommon/Src/SDL.h b/Source/Core/InputCommon/Src/SDL.h index f17e41b098..3cbd299e41 100644 --- a/Source/Core/InputCommon/Src/SDL.h +++ b/Source/Core/InputCommon/Src/SDL.h @@ -191,6 +191,15 @@ struct PadNunchuck int L, R, U, D; int Shake; }; +struct PadClassicController +{ + int A, B, X, Y; + int P, M, H; + int Tl, Zl, Zr, Tr; + int Dl, Du, Dr, Dd; + int Ll, Lu, Lr, Ld; + int Rl, Ru, Rr, Rd; +}; struct CONTROLLER_STATE_NEW // GC PAD INFO/STATE { PadAxis Axis; // 6 Axes (Main, Sub, Triggers) @@ -201,6 +210,7 @@ struct CONTROLLER_MAPPING_NEW // GC PAD MAPPING PadAxis Axis; // (See above) PadWiimote Wm; PadNunchuck Nc; + PadClassicController Cc; bool enabled; // Pad attached? int DeadZoneL; // Analog 1 Deadzone int DeadZoneR; // Analog 2 Deadzone diff --git a/Source/MusicMod.sln b/Source/MusicMod.sln index 57e50f6aad..7ee626eeeb 100644 --- a/Source/MusicMod.sln +++ b/Source/MusicMod.sln @@ -59,6 +59,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dolphin", "Core\DolphinWX\D {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} = {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160} {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {0318BA30-EF48-441A-9E10-DC85EFAE39F0} + {8D612734-FAA5-4B8A-804F-4DEA2367D495} = {8D612734-FAA5-4B8A-804F-4DEA2367D495} {71B16F46-0B00-4EDA-B253-D6D9D03A215C} = {71B16F46-0B00-4EDA-B253-D6D9D03A215C} {33546D62-7F34-4EA6-A88E-D538B36E16BF} = {33546D62-7F34-4EA6-A88E-D538B36E16BF} {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} @@ -193,7 +194,6 @@ Global {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|Win32.ActiveCfg = Debug|Win32 {9A183B48-ECC2-4121-876A-9B3793686073}.Debug|x64.ActiveCfg = Debug|x64 {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|Win32.Build.0 = DebugFast|Win32 {9A183B48-ECC2-4121-876A-9B3793686073}.DebugFast|x64.ActiveCfg = DebugFast|x64 {9A183B48-ECC2-4121-876A-9B3793686073}.Release JITIL|Win32.ActiveCfg = Release|Win32 {9A183B48-ECC2-4121-876A-9B3793686073}.Release JITIL|x64.ActiveCfg = Release|x64 @@ -254,7 +254,6 @@ Global {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|Win32.ActiveCfg = Debug|Win32 {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Debug|x64.ActiveCfg = Debug|x64 {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|Win32.Build.0 = DebugFast|Win32 {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.DebugFast|x64.ActiveCfg = DebugFast|x64 {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release JITIL|Win32.ActiveCfg = Release|Win32 {CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}.Release JITIL|x64.ActiveCfg = Release|x64 @@ -368,11 +367,13 @@ Global {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|Win32.ActiveCfg = Debug|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Debug|x64.ActiveCfg = Debug|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|Win32.Build.0 = DebugFast|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.DebugFast|x64.ActiveCfg = DebugFast|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|Win32.ActiveCfg = Release|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.ActiveCfg = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release JITIL|x64.Build.0 = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.ActiveCfg = Release|Win32 + {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.ActiveCfg = Debug|Win32 diff --git a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp index 07b51ff594..3576003871 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Config.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/Config.cpp @@ -69,13 +69,20 @@ void Config::Load(bool ChangePad) int WmA = 65, WmB = 66, Wm1 = 49, Wm2 = 50, WmP = 80, WmM = 77, WmH = 72, - WmL = 37, WmR = 39, WmU = 38, WmD = 40, // Regular directional keys + WmL = VK_LEFT, WmR = VK_RIGHT, WmU = VK_UP, WmD = VK_DOWN, // Regular directional keys WmShake = 83, // S WmPitchL = 51, WmPitchR = 52, // 3 and 4 - NcZ = 90, NcC = 67, - NcL = 100, NcR = 102, NcU = 104, NcD = 101, // Numpad - NcShake = 68; // D + NcZ = 90, NcC = 67, // C, Z + NcL = VK_NUMPAD4, NcR = VK_NUMPAD6, NcU = VK_NUMPAD8, NcD = VK_NUMPAD5, // Numpad + NcShake = 68, // D + + CcA = 90, CcB = 67, CcX = 0x58, CcY = 0x59, // C, Z, X, Y + CcP = 0x4f, CcM = 0x4e, CcH = 0x55, // O instead of P, N instead of M, U instead of H + CcTl = 0x37, CcZl = 0x38, CcZr = 0x39, CcTr = 0x30, // 7, 8, 9, 0 + CcDl = VK_NUMPAD4, CcDu = VK_NUMPAD8, CcDr = VK_NUMPAD6, CcDd = VK_NUMPAD5, // Numpad + CcLl = 0x4a, CcLu = 0x49, CcLr = 0x4c, CcLd = 0x4b, // J, I, L, K + CcRl = 0x44, CcRu = 0x52, CcRr = 0x47, CcRd = 0x46; // D, R, G, F #else int WmA = 0, WmB = 0, Wm1 = 0, Wm2 = 0, @@ -125,6 +132,34 @@ void Config::Load(bool ChangePad) iniFile.Get(SectionName.c_str(), "NcD", &WiiMoteEmu::PadMapping[i].Nc.D, NcD); iniFile.Get(SectionName.c_str(), "NcShake", &WiiMoteEmu::PadMapping[i].Nc.Shake, NcShake); + // Classic Controller + iniFile.Get(SectionName.c_str(), "CcLeftStick", &ClassicController.LType, ClassicController.KEYBOARD); + iniFile.Get(SectionName.c_str(), "CcRightStick", &ClassicController.RType, ClassicController.KEYBOARD); + iniFile.Get(SectionName.c_str(), "CcTriggers", &ClassicController.TType, ClassicController.KEYBOARD); + iniFile.Get(SectionName.c_str(), "CcA", &WiiMoteEmu::PadMapping[i].Cc.A, CcA); + iniFile.Get(SectionName.c_str(), "CcB", &WiiMoteEmu::PadMapping[i].Cc.B, CcB); + iniFile.Get(SectionName.c_str(), "CcX", &WiiMoteEmu::PadMapping[i].Cc.X, CcX); + iniFile.Get(SectionName.c_str(), "CcY", &WiiMoteEmu::PadMapping[i].Cc.Y, CcY); + iniFile.Get(SectionName.c_str(), "CcP", &WiiMoteEmu::PadMapping[i].Cc.P, CcP); + iniFile.Get(SectionName.c_str(), "CcM", &WiiMoteEmu::PadMapping[i].Cc.M, CcM); + iniFile.Get(SectionName.c_str(), "CcH", &WiiMoteEmu::PadMapping[i].Cc.H, CcH); + iniFile.Get(SectionName.c_str(), "CcTl", &WiiMoteEmu::PadMapping[i].Cc.Tl, CcTl); + iniFile.Get(SectionName.c_str(), "CcZl", &WiiMoteEmu::PadMapping[i].Cc.Zl, CcZl); + iniFile.Get(SectionName.c_str(), "CcZr", &WiiMoteEmu::PadMapping[i].Cc.Zr, CcZr); + iniFile.Get(SectionName.c_str(), "CcTr", &WiiMoteEmu::PadMapping[i].Cc.Tr, CcTr); + iniFile.Get(SectionName.c_str(), "CcDl", &WiiMoteEmu::PadMapping[i].Cc.Dl, CcDl); + iniFile.Get(SectionName.c_str(), "CcDu", &WiiMoteEmu::PadMapping[i].Cc.Du, CcDu); + iniFile.Get(SectionName.c_str(), "CcDr", &WiiMoteEmu::PadMapping[i].Cc.Dr, CcDr); + iniFile.Get(SectionName.c_str(), "CcDd", &WiiMoteEmu::PadMapping[i].Cc.Dd, CcDd); + iniFile.Get(SectionName.c_str(), "CcLl", &WiiMoteEmu::PadMapping[i].Cc.Ll, CcLl); + iniFile.Get(SectionName.c_str(), "CcLu", &WiiMoteEmu::PadMapping[i].Cc.Lu, CcLu); + iniFile.Get(SectionName.c_str(), "CcLr", &WiiMoteEmu::PadMapping[i].Cc.Lr, CcLr); + iniFile.Get(SectionName.c_str(), "CcLd", &WiiMoteEmu::PadMapping[i].Cc.Ld, CcLd); + iniFile.Get(SectionName.c_str(), "CcRl", &WiiMoteEmu::PadMapping[i].Cc.Rl, CcRl); + iniFile.Get(SectionName.c_str(), "CcRu", &WiiMoteEmu::PadMapping[i].Cc.Ru, CcRu); + iniFile.Get(SectionName.c_str(), "CcRr", &WiiMoteEmu::PadMapping[i].Cc.Rr, CcRr); + iniFile.Get(SectionName.c_str(), "CcRd", &WiiMoteEmu::PadMapping[i].Cc.Rd, CcRd); + // Don't update this when we are loading settings from the ConfigBox if(!ChangePad) { @@ -230,6 +265,34 @@ void Config::Save(int Slot) iniFile.Set(SectionName.c_str(), "NcD", WiiMoteEmu::PadMapping[i].Nc.D); iniFile.Set(SectionName.c_str(), "NcShake", WiiMoteEmu::PadMapping[i].Nc.Shake); + // Classic Controller + iniFile.Set(SectionName.c_str(), "CcLeftStick", ClassicController.LType); + iniFile.Set(SectionName.c_str(), "CcRightStick", ClassicController.RType); + iniFile.Set(SectionName.c_str(), "CcTriggers", ClassicController.TType); + iniFile.Set(SectionName.c_str(), "CcA", WiiMoteEmu::PadMapping[i].Cc.A); + iniFile.Set(SectionName.c_str(), "CcB", WiiMoteEmu::PadMapping[i].Cc.B); + iniFile.Set(SectionName.c_str(), "CcX", WiiMoteEmu::PadMapping[i].Cc.X); + iniFile.Set(SectionName.c_str(), "CcY", WiiMoteEmu::PadMapping[i].Cc.Y); + iniFile.Set(SectionName.c_str(), "CcP", WiiMoteEmu::PadMapping[i].Cc.P); + iniFile.Set(SectionName.c_str(), "CcM", WiiMoteEmu::PadMapping[i].Cc.M); + iniFile.Set(SectionName.c_str(), "CcH", WiiMoteEmu::PadMapping[i].Cc.H); + iniFile.Set(SectionName.c_str(), "CcTl", WiiMoteEmu::PadMapping[i].Cc.Tl); + iniFile.Set(SectionName.c_str(), "CcZl", WiiMoteEmu::PadMapping[i].Cc.Zl); + iniFile.Set(SectionName.c_str(), "CcZr", WiiMoteEmu::PadMapping[i].Cc.Zr); + iniFile.Set(SectionName.c_str(), "CcTr", WiiMoteEmu::PadMapping[i].Cc.Tr); + iniFile.Set(SectionName.c_str(), "CcDl", WiiMoteEmu::PadMapping[i].Cc.Dl); + iniFile.Set(SectionName.c_str(), "CcDu", WiiMoteEmu::PadMapping[i].Cc.Du); + iniFile.Set(SectionName.c_str(), "CcDr", WiiMoteEmu::PadMapping[i].Cc.Dr); + iniFile.Set(SectionName.c_str(), "CcDd", WiiMoteEmu::PadMapping[i].Cc.Dd); + iniFile.Set(SectionName.c_str(), "CcLl", WiiMoteEmu::PadMapping[i].Cc.Ll); + iniFile.Set(SectionName.c_str(), "CcLu", WiiMoteEmu::PadMapping[i].Cc.Lu); + iniFile.Set(SectionName.c_str(), "CcLr", WiiMoteEmu::PadMapping[i].Cc.Lr); + iniFile.Set(SectionName.c_str(), "CcLd", WiiMoteEmu::PadMapping[i].Cc.Ld); + iniFile.Set(SectionName.c_str(), "CcRl", WiiMoteEmu::PadMapping[i].Cc.Rl); + iniFile.Set(SectionName.c_str(), "CcRu", WiiMoteEmu::PadMapping[i].Cc.Ru); + iniFile.Set(SectionName.c_str(), "CcRr", WiiMoteEmu::PadMapping[i].Cc.Rr); + iniFile.Set(SectionName.c_str(), "CcRd", WiiMoteEmu::PadMapping[i].Cc.Rd); + // Save the physical device ID number iniFile.Set(SectionName.c_str(), "DeviceID", WiiMoteEmu::PadMapping[i].ID); // =================== diff --git a/Source/Plugins/Plugin_Wiimote/Src/Config.h b/Source/Plugins/Plugin_Wiimote/Src/Config.h index 17ee2d28d4..5d60f8c70c 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/Config.h +++ b/Source/Plugins/Plugin_Wiimote/Src/Config.h @@ -54,6 +54,19 @@ struct Config }; int Type; }; + struct PadClassicController + { + enum ECcStick + { + KEYBOARD, + ANALOG1, + ANALOG2, + TRIGGER + }; + int LType; + int RType; + int TType; + }; // Emulated Wiimote bool bSidewaysDPad; @@ -70,6 +83,7 @@ struct Config bool bNoTriggerFilter; PadTrigger Trigger; PadNunchuck Nunchuck; + PadClassicController ClassicController; }; extern Config g_Config; diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp index 94c05d271d..d760d7b131 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.cpp @@ -111,6 +111,9 @@ BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) EVT_CHECKBOX(ID_TILT_INVERT_ROLL, ConfigDialog::GeneralSettingsChanged) EVT_CHECKBOX(ID_TILT_INVERT_PITCH, ConfigDialog::GeneralSettingsChanged) EVT_COMBOBOX(IDCB_NUNCHUCK_STICK, ConfigDialog::GeneralSettingsChanged) + EVT_COMBOBOX(IDCB_CC_LEFT_STICK, ConfigDialog::GeneralSettingsChanged) + EVT_COMBOBOX(IDCB_CC_RIGHT_STICK, ConfigDialog::GeneralSettingsChanged) + EVT_COMBOBOX(IDCB_CC_TRIGGERS, ConfigDialog::GeneralSettingsChanged) // Wiimote EVT_BUTTON(IDB_WM_A, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_WM_B, ConfigDialog::OnButtonClick) @@ -132,6 +135,15 @@ BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) EVT_BUTTON(IDB_NC_U, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_NC_D, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_NC_SHAKE, ConfigDialog::OnButtonClick) + // Classic Controller + EVT_BUTTON(IDB_CC_A, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_B, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_X, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_Y, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_P, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_M, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_H, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_TL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_ZL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_ZR, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_TR, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_DL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DU, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DR, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DD, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_DL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DU, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DR, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_DD, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_LL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_LU, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_LR, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_LD, ConfigDialog::OnButtonClick) + EVT_BUTTON(IDB_CC_RL, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_RU, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_RR, ConfigDialog::OnButtonClick) EVT_BUTTON(IDB_CC_RD, 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) @@ -520,6 +532,11 @@ void ConfigDialog::CreateGUIControls() StrNunchuck.Add(wxString::FromAscii("Analog 1")); StrNunchuck.Add(wxString::FromAscii("Analog 2")); + // The Classic Controller triggers list + wxArrayString StrCcTriggers; + StrCcTriggers.Add(wxString::FromAscii("Keyboard")); + StrCcTriggers.Add(wxString::FromAscii("Triggers")); + // A small type font wxFont m_SmallFont(7, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); /////////////////////////////////////// @@ -1066,7 +1083,7 @@ void ConfigDialog::CreateGUIControls() // ----------------------------- // Stick controls - m_NunchuckTextStick[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Stick controls")); + m_NunchuckTextStick[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Stick")); m_NunchuckComboStick[i] = new wxComboBox(m_Controller[i], IDCB_NUNCHUCK_STICK, StrNunchuck[0], wxDefaultPosition, wxDefaultSize, StrNunchuck, wxCB_READONLY); m_tNcZ[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Z")); @@ -1129,39 +1146,173 @@ void ConfigDialog::CreateGUIControls() // -------------------------------------------------------------------- // Classic Controller // ----------------------------- - m_gClassicController[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Classic Controller")); - /* - m_ClY[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_ClX[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_ClA[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_ClB[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_ClLx[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - m_ClLy[i] = new wxTextCtrl(m_Controller[i], ID_WM_A, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_CENTRE); - - m_tClY[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Z")); - m_tClX[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("C")); - m_tClA[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left")); - m_tClB[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right")); - m_tClLx[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Up")); - m_tClLy[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Down")); - - m_bClY[i] = new wxButton(m_Controller[i], IDB_WM_Z); - m_bClX[i] = new wxButton(m_Controller[i], IDB_WM_C); - m_bClA[i] = new wxButton(m_Controller[i], IDB_WM_L); - m_bClB[i] = new wxButton(m_Controller[i], IDB_WM_R); - m_bClLx[i] = new wxButton(m_Controller[i], IDB_WM_U); - m_bClLy[i] = new wxButton(m_Controller[i], IDB_WM_D); - - // Disable - m_ClY[i]->Enable(false); - m_ClX[i]->Enable(false); - m_ClA[i]->Enable(false); - m_ClB[i]->Enable(false); - m_ClLx[i]->Enable(false); - m_ClLy[i]->Enable(false); - */ - + // Stick controls + m_CcTextLeftStick[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left stick")); + m_CcComboLeftStick[i] = new wxComboBox(m_Controller[i], IDCB_CC_LEFT_STICK, StrNunchuck[0], wxDefaultPosition, wxDefaultSize, StrNunchuck, wxCB_READONLY); + m_CcTextRightStick[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right stick")); + m_CcComboRightStick[i] = new wxComboBox(m_Controller[i], IDCB_CC_RIGHT_STICK, StrNunchuck[0], wxDefaultPosition, wxDefaultSize, StrNunchuck, wxCB_READONLY); + m_CcTextTriggers[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Triggers")); + m_CcComboTriggers[i] = new wxComboBox(m_Controller[i], IDCB_CC_TRIGGERS, StrCcTriggers[0], wxDefaultPosition, wxDefaultSize, StrCcTriggers, wxCB_READONLY); + + m_tCcA[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("A")); + m_tCcB[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("B")); + m_tCcX[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("X")); + m_tCcY[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Y")); + m_tCcP[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("+")); + m_tCcM[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("- ")); + m_tCcH[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Home")); + + m_tCcTl[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left trigger")); + m_tCcZl[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Left Z")); + m_tCcZr[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right Z")); + m_tCcTr[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Right trigger")); + + m_tCcDl[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Digital Left")); // Digital pad + m_tCcDu[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Digital Up")); + m_tCcDr[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Digital Right")); + m_tCcDd[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("Digital Down")); + m_tCcLl[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("L Left")); // Left analog stick + m_tCcLu[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("L Up")); + m_tCcLr[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("L Right")); + m_tCcLd[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("L Down")); + m_tCcRl[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("R Left")); // Right analog stick + m_tCcRu[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("R Up")); + m_tCcRr[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("R Right")); + m_tCcRd[i] = new wxStaticText(m_Controller[i], wxID_ANY, wxT("R Down")); + + m_bCcA[i] = new wxButton(m_Controller[i], IDB_CC_A, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcB[i] = new wxButton(m_Controller[i], IDB_CC_B, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcX[i] = new wxButton(m_Controller[i], IDB_CC_X, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcY[i] = new wxButton(m_Controller[i], IDB_CC_Y, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcP[i] = new wxButton(m_Controller[i], IDB_CC_P, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcM[i] = new wxButton(m_Controller[i], IDB_CC_M, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcH[i] = new wxButton(m_Controller[i], IDB_CC_H, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + + m_bCcTl[i] = new wxButton(m_Controller[i], IDB_CC_TL, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcZl[i] = new wxButton(m_Controller[i], IDB_CC_ZL, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcZr[i] = new wxButton(m_Controller[i], IDB_CC_ZR, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcTr[i] = new wxButton(m_Controller[i], IDB_CC_TR, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + + m_bCcDl[i] = new wxButton(m_Controller[i], IDB_CC_DL, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); // Digital pad + m_bCcDu[i] = new wxButton(m_Controller[i], IDB_CC_DU, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcDr[i] = new wxButton(m_Controller[i], IDB_CC_DR, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcDd[i] = new wxButton(m_Controller[i], IDB_CC_DD, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcLl[i] = new wxButton(m_Controller[i], IDB_CC_LL, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); // Left analog stick + m_bCcLu[i] = new wxButton(m_Controller[i], IDB_CC_LU, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcLr[i] = new wxButton(m_Controller[i], IDB_CC_LR, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcLd[i] = new wxButton(m_Controller[i], IDB_CC_LD, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcRl[i] = new wxButton(m_Controller[i], IDB_CC_RL, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); // Right analog stick + m_bCcRu[i] = new wxButton(m_Controller[i], IDB_CC_RU, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcRr[i] = new wxButton(m_Controller[i], IDB_CC_RR, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + m_bCcRd[i] = new wxButton(m_Controller[i], IDB_CC_RD, wxEmptyString, wxDefaultPosition, wxSize(BtW, BtH)); + + // Set small font + m_bCcA[i]->SetFont(m_SmallFont); m_bCcB[i]->SetFont(m_SmallFont); + m_bCcX[i]->SetFont(m_SmallFont); m_bCcY[i]->SetFont(m_SmallFont); + m_bCcP[i]->SetFont(m_SmallFont); m_bCcM[i]->SetFont(m_SmallFont); m_bCcH[i]->SetFont(m_SmallFont); + m_bCcTl[i]->SetFont(m_SmallFont); m_bCcZl[i]->SetFont(m_SmallFont); m_bCcZr[i]->SetFont(m_SmallFont); m_bCcTr[i]->SetFont(m_SmallFont); + m_bCcDl[i]->SetFont(m_SmallFont); m_bCcDu[i]->SetFont(m_SmallFont); m_bCcDr[i]->SetFont(m_SmallFont); m_bCcDd[i]->SetFont(m_SmallFont); + m_bCcLl[i]->SetFont(m_SmallFont); m_bCcLu[i]->SetFont(m_SmallFont); m_bCcLr[i]->SetFont(m_SmallFont); m_bCcLd[i]->SetFont(m_SmallFont); + m_bCcRl[i]->SetFont(m_SmallFont); m_bCcRu[i]->SetFont(m_SmallFont); m_bCcRr[i]->SetFont(m_SmallFont); m_bCcRd[i]->SetFont(m_SmallFont); + + // Sizers + m_SCcLeftStick[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcLeftStick[i]->Add(m_CcTextLeftStick[i], 0, (wxUP), 4); + m_SCcLeftStick[i]->Add(m_CcComboLeftStick[i], 0, (wxLEFT), 2); + + m_SCcRightStick[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcRightStick[i]->Add(m_CcTextRightStick[i], 0, (wxUP), 4); + m_SCcRightStick[i]->Add(m_CcComboRightStick[i], 0, (wxLEFT), 2); + + m_SCcTriggers[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcTriggers[i]->Add(m_CcTextTriggers[i], 0, (wxUP), 4); + m_SCcTriggers[i]->Add(m_CcComboTriggers[i], 0, (wxLEFT), 2); + + m_SCcA[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcB[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcX[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcY[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcP[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcM[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcH[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcTl[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcZl[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcZr[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcTr[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcDl[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcDu[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcDr[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcDd[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcLl[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcLu[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcLr[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcLd[i] = new wxBoxSizer(wxHORIZONTAL); + m_SCcRl[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcRu[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcRr[i] = new wxBoxSizer(wxHORIZONTAL); m_SCcRd[i] = new wxBoxSizer(wxHORIZONTAL); + + m_SCcA[i]->Add(m_tCcA[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcA[i]->Add(m_bCcA[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcB[i]->Add(m_tCcB[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcB[i]->Add(m_bCcB[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcX[i]->Add(m_tCcX[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcX[i]->Add(m_bCcX[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcY[i]->Add(m_tCcY[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcY[i]->Add(m_bCcY[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcP[i]->Add(m_tCcP[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcP[i]->Add(m_bCcP[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcM[i]->Add(m_tCcM[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcM[i]->Add(m_bCcM[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcH[i]->Add(m_tCcH[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcH[i]->Add(m_bCcH[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcTl[i]->Add(m_tCcTl[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcTl[i]->Add(m_bCcTl[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcZl[i]->Add(m_tCcZl[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcZl[i]->Add(m_bCcZl[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcZr[i]->Add(m_tCcZr[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcZr[i]->Add(m_bCcZr[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcTr[i]->Add(m_tCcTr[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcTr[i]->Add(m_bCcTr[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + + m_SCcDl[i]->Add(m_tCcDl[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcDl[i]->Add(m_bCcDl[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcDu[i]->Add(m_tCcDu[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcDu[i]->Add(m_bCcDu[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcDr[i]->Add(m_tCcDr[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcDr[i]->Add(m_bCcDr[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcDd[i]->Add(m_tCcDd[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcDd[i]->Add(m_bCcDd[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + + m_SCcLl[i]->Add(m_tCcLl[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcLl[i]->Add(m_bCcLl[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcLu[i]->Add(m_tCcLu[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcLu[i]->Add(m_bCcLu[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcLr[i]->Add(m_tCcLr[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcLr[i]->Add(m_bCcLr[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcLd[i]->Add(m_tCcLd[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcLd[i]->Add(m_bCcLd[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + + m_SCcRl[i]->Add(m_tCcRl[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcRl[i]->Add(m_bCcRl[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcRu[i]->Add(m_tCcRu[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcRu[i]->Add(m_bCcRu[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcRr[i]->Add(m_tCcRr[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcRr[i]->Add(m_bCcRr[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + m_SCcRd[i]->Add(m_tCcRd[i], 0, wxALIGN_RIGHT | (wxUP), 4); m_SCcRd[i]->Add(m_bCcRd[i], 0, wxALIGN_RIGHT | (wxLEFT), 2); + + // The left parent + m_SCcVertLeft[i] = new wxBoxSizer(wxVERTICAL); + m_SCcVertLeft[i]->Add(m_SCcLeftStick[i], 0, wxALIGN_RIGHT | (wxALL), 2); + m_SCcVertLeft[i]->Add(m_SCcRightStick[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 2); + m_SCcVertLeft[i]->AddSpacer(2); + m_SCcVertLeft[i]->Add(m_SCcDl[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertLeft[i]->Add(m_SCcDu[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertLeft[i]->Add(m_SCcDr[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertLeft[i]->Add(m_SCcDd[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertLeft[i]->Add(m_SCcTl[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertLeft[i]->Add(m_SCcTr[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + + // The middle parent + m_SCcVertMiddle[i] = new wxBoxSizer(wxVERTICAL); + m_SCcVertMiddle[i]->Add(m_SCcTriggers[i], 0, wxALIGN_RIGHT | (wxALL), 1); + m_SCcVertLeft[i]->AddSpacer(2); + m_SCcVertMiddle[i]->Add(m_SCcLl[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcLu[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcLr[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcLd[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcRl[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcRd[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcRr[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertMiddle[i]->Add(m_SCcRu[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + + // The right parent + m_SCcVertRight[i] = new wxBoxSizer(wxVERTICAL); + m_SCcVertRight[i]->Add(m_SCcA[i], 0, wxALIGN_RIGHT | (wxALL), 1); + m_SCcVertRight[i]->Add(m_SCcB[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcX[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcY[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcP[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcM[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcH[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcZl[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_SCcVertRight[i]->Add(m_SCcZr[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + + + // The parent sizer + m_gClassicController[i] = new wxStaticBoxSizer (wxHORIZONTAL, m_Controller[i], wxT("Classic Controller")); + m_gClassicController[i]->Add(m_SCcVertLeft[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gClassicController[i]->Add(m_SCcVertMiddle[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + m_gClassicController[i]->Add(m_SCcVertRight[i], 0, wxALIGN_RIGHT | (wxLEFT | wxRIGHT | wxDOWN), 1); + + //Set values + m_CcComboLeftStick[i]->SetSelection(g_Config.ClassicController.LType); + m_CcComboRightStick[i]->SetSelection(g_Config.ClassicController.RType); + m_CcComboTriggers[i]->SetSelection(g_Config.ClassicController.TType); + // -------------------------------------------------------------------- // Row 4 Sizers // ----------------------------- @@ -1191,7 +1342,7 @@ void ConfigDialog::CreateGUIControls() m_Controller[i]->SetSizer(m_sMain[i]); ///////////////////////////////// - // Update with the progress (i) and the message (msg) + // Update with the progress (i) and the message dialog.Update(i + 1, wxT("Loading notebook pages...")); } @@ -1418,6 +1569,15 @@ void ConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) case IDCB_NUNCHUCK_STICK: g_Config.Nunchuck.Type = m_NunchuckComboStick[Page]->GetSelection(); break; + case IDCB_CC_LEFT_STICK: + g_Config.ClassicController.LType = m_CcComboLeftStick[Page]->GetSelection(); + break; + case IDCB_CC_RIGHT_STICK: + g_Config.ClassicController.RType = m_CcComboRightStick[Page]->GetSelection(); + break; + case IDCB_CC_TRIGGERS: + g_Config.ClassicController.TType = m_CcComboTriggers[Page]->GetSelection(); + break; // These are defined in PadMapping and we can run the same function to update all of them case IDCB_LEFT_DIAGONAL: diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h index 7cd2654ee5..27c5912e8c 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigDlg.h @@ -96,7 +96,16 @@ class ConfigDialog : public wxDialog *m_SNcShake[4], *m_SNcZ[4], *m_SNcC[4], *m_SNcL[4], *m_SNcR[4], *m_SNcU[4], *m_SNcD[4], // Wiimote *m_SWmVertLeft[4], *m_SWmVertRight[4], *m_SWmShake[4], *m_SWmPitchL[4], *m_SWmPitchR[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]; + *m_HorizControllerMapping[4], *m_NunchuckStick[4], + // Classic Controller + *m_SCcVertLeft[4], *m_SCcVertMiddle[4], *m_SCcVertRight[4], + *m_SCcLeftStick[4], *m_SCcRightStick[4], *m_SCcTriggers[4], + *m_SCcA[4], *m_SCcB[4], *m_SCcX[4], *m_SCcY[4], + *m_SCcP[4], *m_SCcM[4], *m_SCcH[4], + *m_SCcTl[4], *m_SCcZl[4], *m_SCcZr[4], *m_SCcTr[4], + *m_SCcDl[4], *m_SCcDu[4], *m_SCcDr[4], *m_SCcDd[4], + *m_SCcLl[4], *m_SCcLu[4], *m_SCcLr[4], *m_SCcLd[4], + *m_SCcRl[4], *m_SCcRu[4], *m_SCcRr[4], *m_SCcRd[4]; wxGridBagSizer *m_SizeAnalogTriggerHorizConfig[4], *m_SizeAnalogTriggerStatusBox[4], *m_TiltGrid[4], *m_GridLeftStick[4], *m_GridRightStick[4]; wxStaticBoxSizer *m_SizeBasic[4], *m_SizeEmu[4], *m_SizeReal[4], *m_SizeExtensions[4], *m_SizerIRPointer[4], *m_gTilt[4], *m_gJoyname[4]; @@ -107,7 +116,14 @@ class ConfigDialog : public wxDialog // 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_bWmPitchL[4], *m_bWmPitchR[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]; + *m_bWmShake[4], *m_bWmPitchL[4], *m_bWmPitchR[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], + // Classic Controller + *m_bCcA[4], *m_bCcB[4], *m_bCcX[4], *m_bCcY[4], + *m_bCcP[4], *m_bCcM[4], *m_bCcH[4], + *m_bCcTl[4], *m_bCcZl[4], *m_bCcZr[4], *m_bCcTr[4], + *m_bCcDl[4], *m_bCcDu[4], *m_bCcDr[4], *m_bCcDd[4], + *m_bCcLl[4], *m_bCcLu[4], *m_bCcLr[4], *m_bCcLd[4], + *m_bCcRl[4], *m_bCcRu[4], *m_bCcRr[4], *m_bCcRd[4]; wxStaticText *m_TextScreenWidth[4], *m_TextScreenHeight[4], *m_TextScreenLeft[4], *m_TextScreenTop[4], *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], @@ -117,7 +133,15 @@ class ConfigDialog : public wxDialog *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_tWmPitchL[4], *m_tWmPitchR[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]; + *m_NunchuckTextStick[5], + // Classic Controller + *m_tCcA[4], *m_tCcB[4], *m_tCcX[4], *m_tCcY[4], + *m_tCcP[4], *m_tCcM[4], *m_tCcH[4], + *m_tCcTl[4], *m_tCcZl[4], *m_tCcZr[4], *m_tCcTr[4], + *m_tCcDl[4], *m_tCcDu[4], *m_tCcDr[4], *m_tCcDd[4], + *m_tCcLl[4], *m_tCcLu[4], *m_tCcLr[4], *m_tCcLd[4], + *m_tCcRl[4], *m_tCcRu[4], *m_tCcRr[4], *m_tCcRd[4], + *m_CcTextLeftStick[4], *m_CcTextRightStick[4], *m_CcTextTriggers[4]; wxButton *ClickedButton; wxString OldLabel; wxSlider *m_SliderWidth[4], *m_SliderHeight[4], *m_SliderLeft[4], *m_SliderTop[4]; @@ -127,7 +151,7 @@ class ConfigDialog : public wxDialog wxCheckBox *m_CheckC2S[4], *m_TiltInvertRoll[4], *m_TiltInvertPitch[4]; wxCheckBox *m_WiiMotionPlusConnected[4], *m_NunchuckConnected[4], *m_ClassicControllerConnected[4], *m_BalanceBoardConnected[4], *m_GuitarHeroGuitarConnected[4], *m_GuitarHeroWorldTourDrumsConnected[4]; wxComboBox *m_TiltComboInput[4], *m_TiltComboRangeRoll[4], *m_TiltComboRangePitch[4], *m_Joyname[4], *m_ComboDiagonal[4], *m_ComboDeadZoneLeft[4], *m_ComboDeadZoneRight[4], *m_TriggerType[4], - *m_NunchuckComboStick[4]; + *m_NunchuckComboStick[4], *m_CcComboLeftStick[4], *m_CcComboRightStick[4], *m_CcComboTriggers[4]; // Real Wiimote settings wxCheckBox *m_ConnectRealWiimote[4], *m_UseRealWiimote[4], *m_UpdateMeters; @@ -199,11 +223,16 @@ class ConfigDialog : public wxDialog // Classic Controller IDB_CC_A, IDB_CC_B, IDB_CC_X, IDB_CC_Y, + IDB_CC_P, IDB_CC_M, IDB_CC_H, + IDB_CC_TL, IDB_CC_ZL, IDB_CC_ZR, IDB_CC_TR, + IDB_CC_DL, IDB_CC_DU, IDB_CC_DR, IDB_CC_DD, // Digital pad + IDB_CC_LL, IDB_CC_LU, IDB_CC_LR, IDB_CC_LD, // Left analog stick + IDB_CC_RL, IDB_CC_RU, IDB_CC_RR, IDB_CC_RD, // Right analog stick // 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, - IDCB_NUNCHUCK_STICK, + IDCB_NUNCHUCK_STICK, IDCB_CC_LEFT_STICK, IDCB_CC_RIGHT_STICK, IDCB_CC_TRIGGERS, // Real ID_CONNECT_REAL, ID_USE_REAL, ID_UPDATE_REAL, IDT_STATUS, diff --git a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp index d3cb313757..f3cf864f8b 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/ConfigGamepad.cpp @@ -184,6 +184,31 @@ void ConfigDialog::UpdateGUIButtonMapping(int controller) m_bNcU[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.U).c_str())); m_bNcD[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.D).c_str())); m_bNcShake[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Nc.Shake).c_str())); + + // Classic Controller + m_bCcA[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.A).c_str())); + m_bCcB[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.B).c_str())); + m_bCcX[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.X).c_str())); + m_bCcY[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Y).c_str())); + m_bCcP[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.P).c_str())); + m_bCcM[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.M).c_str())); + m_bCcH[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.H).c_str())); + m_bCcTl[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Tl).c_str())); + m_bCcZl[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Zl).c_str())); + m_bCcZr[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Zr).c_str())); + m_bCcTr[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Tr).c_str())); + m_bCcDl[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Dl).c_str())); + m_bCcDu[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Du).c_str())); + m_bCcDr[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Dr).c_str())); + m_bCcDd[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Dd).c_str())); + m_bCcLl[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Ll).c_str())); + m_bCcLu[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Lu).c_str())); + m_bCcLr[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Lr).c_str())); + m_bCcLd[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Ld).c_str())); + m_bCcRl[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Rl).c_str())); + m_bCcRu[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Ru).c_str())); + m_bCcRr[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Rr).c_str())); + m_bCcRd[controller]->SetLabel(wxString::FromAscii(InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Cc.Rd).c_str())); #endif //Console::Print("m_bWmA[%i] = %i = %s\n", controller, WiiMoteEmu::PadMapping[controller].Wm.A, InputCommon::VKToString(WiiMoteEmu::PadMapping[controller].Wm.A).c_str()); @@ -266,6 +291,31 @@ void ConfigDialog::SaveKeyboardMapping(int Controller, int Id, int Key) 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; + + // Classic Controller + case IDB_CC_A: WiiMoteEmu::PadMapping[Controller].Cc.A = Key; break; + case IDB_CC_B: WiiMoteEmu::PadMapping[Controller].Cc.B = Key; break; + case IDB_CC_X: WiiMoteEmu::PadMapping[Controller].Cc.X = Key; break; + case IDB_CC_Y: WiiMoteEmu::PadMapping[Controller].Cc.Y = Key; break; + case IDB_CC_P: WiiMoteEmu::PadMapping[Controller].Cc.P = Key; break; + case IDB_CC_M: WiiMoteEmu::PadMapping[Controller].Cc.M = Key; break; + case IDB_CC_H: WiiMoteEmu::PadMapping[Controller].Cc.H = Key; break; + case IDB_CC_TL: WiiMoteEmu::PadMapping[Controller].Cc.Tl = Key; break; + case IDB_CC_ZL: WiiMoteEmu::PadMapping[Controller].Cc.Zl = Key; break; + case IDB_CC_ZR: WiiMoteEmu::PadMapping[Controller].Cc.Zr = Key; break; + case IDB_CC_TR: WiiMoteEmu::PadMapping[Controller].Cc.Tr = Key; break; + case IDB_CC_DL: WiiMoteEmu::PadMapping[Controller].Cc.Dl = Key; break; + case IDB_CC_DU: WiiMoteEmu::PadMapping[Controller].Cc.Du = Key; break; + case IDB_CC_DR: WiiMoteEmu::PadMapping[Controller].Cc.Dr = Key; break; + case IDB_CC_DD: WiiMoteEmu::PadMapping[Controller].Cc.Dd = Key; break; + case IDB_CC_LL: WiiMoteEmu::PadMapping[Controller].Cc.Ll = Key; break; + case IDB_CC_LU: WiiMoteEmu::PadMapping[Controller].Cc.Lu = Key; break; + case IDB_CC_LR: WiiMoteEmu::PadMapping[Controller].Cc.Lr = Key; break; + case IDB_CC_LD: WiiMoteEmu::PadMapping[Controller].Cc.Ld = Key; break; + case IDB_CC_RL: WiiMoteEmu::PadMapping[Controller].Cc.Rl = Key; break; + case IDB_CC_RU: WiiMoteEmu::PadMapping[Controller].Cc.Ru = Key; break; + case IDB_CC_RR: WiiMoteEmu::PadMapping[Controller].Cc.Rr = Key; break; + case IDB_CC_RD: WiiMoteEmu::PadMapping[Controller].Cc.Rd = Key; break; } //Console::Print("WiiMoteEmu::PadMapping[%i].Wm.A = %i", Controller, WiiMoteEmu::PadMapping[Controller].Wm.A); @@ -343,6 +393,30 @@ void ConfigDialog::SetButtonText(int id, char text[128], int _Page) case IDB_NC_D: m_bNcD[controller]->SetLabel(wxString::FromAscii(text)); break; case IDB_NC_SHAKE: m_bNcShake[controller]->SetLabel(wxString::FromAscii(text)); break; + // Classic Controller + case IDB_CC_A: m_bCcA[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_B: m_bCcB[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_X: m_bCcX[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_Y: m_bCcY[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_P: m_bCcP[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_M: m_bCcM[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_H: m_bCcH[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_TL: m_bCcTl[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_ZL: m_bCcZl[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_ZR: m_bCcZr[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_TR: m_bCcTr[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_DL: m_bCcDl[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_DU: m_bCcDu[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_DR: m_bCcDr[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_DD: m_bCcDd[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_LL: m_bCcLl[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_LU: m_bCcLu[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_LR: m_bCcLr[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_LD: m_bCcLd[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_RL: m_bCcRl[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_RU: m_bCcRu[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_RR: m_bCcRr[controller]->SetLabel(wxString::FromAscii(text)); break; + case IDB_CC_RD: m_bCcRd[controller]->SetLabel(wxString::FromAscii(text)); break; default: break; } //Console::Print("SetButtonText: %s\n", text); diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h index ddf01346c2..1ddf5154ed 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h +++ b/Source/Plugins/Plugin_Wiimote/Src/EmuDefinitions.h @@ -139,8 +139,9 @@ static const u8 wireless_nunchuck_calibration[] = We use this range because it's closest to the GC controller range. */ static const u8 classic_calibration[] = { - 0xe4,0x1c,0x80,0xe4, 0x1c,0x80,0xd8,0x28, - 0x80,0xd8,0x28,0x80, 0x20,0x20,0x95,0xea + //0xe4,0x1c,0x80, 0xe4,0x1c,0x80, 0xd8,0x28,0x80, 0xd8,0x28,0x80, // Old calibration + 0xff,0x00,0x80, 0xff,0x00,0x80, 0xff,0x00,0x80, 0xff,0x00,0x80, + 0x00,0x00, 0x95,0xea }; diff --git a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp index 1ebda2e6d7..9abba9539e 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/EmuMain.cpp @@ -247,25 +247,53 @@ void UpdateEeprom() g_wm.cal_g.y = g_Eeprom[27] - g_Eeprom[24]; g_wm.cal_g.z = g_Eeprom[28] - g_Eeprom[24]; - g_nu.cal_zero.x = g_RegExt[0x20]; - g_nu.cal_zero.y = g_RegExt[0x21]; - g_nu.cal_zero.z = g_RegExt[0x22]; - g_nu.cal_g.x = g_RegExt[0x24] - g_RegExt[0x20]; - g_nu.cal_g.y = g_RegExt[0x25] - g_RegExt[0x21]; - g_nu.cal_g.z = g_RegExt[0x26] - g_RegExt[0x22]; - g_nu.jx.max = g_RegExt[0x28]; - g_nu.jx.min = g_RegExt[0x29]; - g_nu.jx.center = g_RegExt[0x2a]; - g_nu.jy.max = g_RegExt[0x2b]; - g_nu.jy.min = g_RegExt[0x2c]; - g_nu.jy.center = g_RegExt[0x2d]; - Console::Print("\nUpdateEeprom: %i %i %i\n", WiiMoteEmu::g_Eeprom[22], WiiMoteEmu::g_Eeprom[23], WiiMoteEmu::g_Eeprom[28]); - Console::Print("UpdateExtension: %i %i %i %i %i\n\n", - WiiMoteEmu::g_RegExt[0x2a], WiiMoteEmu::g_RegExt[0x2d], - WiiMoteEmu::g_RegExt[0x20], WiiMoteEmu::g_RegExt[0x21], WiiMoteEmu::g_RegExt[0x26]); + if(g_Config.bNunchuckConnected) + { + g_nu.cal_zero.x = g_RegExt[0x20]; + g_nu.cal_zero.y = g_RegExt[0x21]; + g_nu.cal_zero.z = g_RegExt[0x22]; + g_nu.cal_g.x = g_RegExt[0x24] - g_RegExt[0x20]; + g_nu.cal_g.y = g_RegExt[0x25] - g_RegExt[0x21]; + g_nu.cal_g.z = g_RegExt[0x26] - g_RegExt[0x22]; + g_nu.jx.max = g_RegExt[0x28]; + g_nu.jx.min = g_RegExt[0x29]; + g_nu.jx.center = g_RegExt[0x2a]; + g_nu.jy.max = g_RegExt[0x2b]; + g_nu.jy.min = g_RegExt[0x2c]; + g_nu.jy.center = g_RegExt[0x2d]; + + Console::Print("UpdateNunchuck: %i %i %i %i %i\n\n", + WiiMoteEmu::g_RegExt[0x2a], WiiMoteEmu::g_RegExt[0x2d], + WiiMoteEmu::g_RegExt[0x20], WiiMoteEmu::g_RegExt[0x21], WiiMoteEmu::g_RegExt[0x26]); + } + else if(g_Config.bClassicControllerConnected) + { + g_cc.Lx.max = g_RegExt[0x20]; + g_cc.Lx.min = g_RegExt[0x21]; + g_cc.Lx.center = g_RegExt[0x22]; + g_cc.Ly.max = g_RegExt[0x23]; + g_cc.Ly.min = g_RegExt[0x24]; + g_cc.Ly.center = g_RegExt[0x25]; + + g_cc.Rx.max = g_RegExt[0x26]; + g_cc.Rx.min = g_RegExt[0x27]; + g_cc.Rx.center = g_RegExt[0x28]; + g_cc.Ry.max = g_RegExt[0x29]; + g_cc.Ry.min = g_RegExt[0x2a]; + g_cc.Ry.center = g_RegExt[0x2b]; + + g_cc.Tl.neutral = g_RegExt[0x2c]; + g_cc.Tr.neutral = g_RegExt[0x2d]; + + Console::Print("UpdateCC: %i %i %i %i %i\n\n", + WiiMoteEmu::g_RegExt[0x2a], WiiMoteEmu::g_RegExt[0x2d], + WiiMoteEmu::g_RegExt[0x20], WiiMoteEmu::g_RegExt[0x21], WiiMoteEmu::g_RegExt[0x26]); + } + + } // Calculate checksum for the nunchuck calibration. The last two bytes. @@ -340,7 +368,8 @@ void Initialize() // Reset variables ResetVariables(); - // Write default Eeprom data to g_Eeprom[] + // Write default Eeprom data to g_Eeprom[], this may be overwritten by WiiMoteReal::Initialize() + // after this function. memset(g_Eeprom, 0, WIIMOTE_EEPROM_SIZE); memcpy(g_Eeprom, EepromData_0, sizeof(EepromData_0)); memcpy(g_Eeprom + 0x16D0, EepromData_16D0, sizeof(EepromData_16D0)); @@ -584,7 +613,9 @@ void Update() // Check if the pad state should be updated if ((g_Config.Trigger.Type == g_Config.Trigger.TRIGGER || g_Config.Trigger.Type == g_Config.Trigger.ANALOG1 || g_Config.Trigger.Type == g_Config.Trigger.ANALOG2 - || g_Config.Nunchuck.Type == g_Config.Nunchuck.ANALOG1 || g_Config.Nunchuck.Type == g_Config.Nunchuck.ANALOG2) + || g_Config.Nunchuck.Type == g_Config.Nunchuck.ANALOG1 || g_Config.Nunchuck.Type == g_Config.Nunchuck.ANALOG2 + || g_Config.ClassicController.LType == g_Config.ClassicController.ANALOG1 || g_Config.ClassicController.LType == g_Config.ClassicController.ANALOG2 + || g_Config.ClassicController.RType == g_Config.ClassicController.ANALOG1 || g_Config.ClassicController.RType == g_Config.ClassicController.ANALOG2) && NumGoodPads > 0 && joyinfo.size() > PadMapping[0].ID) { const int Page = 0; diff --git a/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp b/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp index 536f810ee5..fae5b70791 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/FillReport.cpp @@ -349,33 +349,33 @@ int IsKey(int Key) case g_Nc.SHAKE: return GetAsyncKeyState(PadMapping[0].Nc.Shake); // Classic Controller - case g_Cc.A: return GetAsyncKeyState('Z'); - case g_Cc.B: return GetAsyncKeyState('C'); - case g_Cc.X: return GetAsyncKeyState('X'); - case g_Cc.Y: return GetAsyncKeyState('Y'); - case g_Cc.P: return GetAsyncKeyState('O'); // O instead of P - case g_Cc.M: return GetAsyncKeyState('N'); // N instead of M - case g_Cc.H: return GetAsyncKeyState('U'); // Home button + case g_Cc.A: return GetAsyncKeyState(PadMapping[0].Cc.A); + case g_Cc.B: return GetAsyncKeyState(PadMapping[0].Cc.B); + case g_Cc.X: return GetAsyncKeyState(PadMapping[0].Cc.X); + case g_Cc.Y: return GetAsyncKeyState(PadMapping[0].Cc.Y); + case g_Cc.P: return GetAsyncKeyState(PadMapping[0].Cc.P); // Default is O instead of P + case g_Cc.M: return GetAsyncKeyState(PadMapping[0].Cc.M); // Default is N instead of M + case g_Cc.H: return GetAsyncKeyState(PadMapping[0].Cc.H); // Default is U instead of H - case g_Cc.Tl: return GetAsyncKeyState('7'); // Digital left trigger - case g_Cc.Zl: return GetAsyncKeyState('8'); - case g_Cc.Zr: return GetAsyncKeyState('9'); - case g_Cc.Tr: return GetAsyncKeyState('0'); // Digital right trigger + case g_Cc.Tl: return GetAsyncKeyState(PadMapping[0].Cc.Tl); // Digital left trigger + case g_Cc.Zl: return GetAsyncKeyState(PadMapping[0].Cc.Zl); + case g_Cc.Zr: return GetAsyncKeyState(PadMapping[0].Cc.Zr); + case g_Cc.Tr: return GetAsyncKeyState(PadMapping[0].Cc.Tr); // Digital right trigger - case g_Cc.Dl: return GetAsyncKeyState(VK_NUMPAD4); // Digital left - case g_Cc.Du: return GetAsyncKeyState(VK_NUMPAD8); // Up - case g_Cc.Dr: return GetAsyncKeyState(VK_NUMPAD6); // Right - case g_Cc.Dd: return GetAsyncKeyState(VK_NUMPAD5); // Down + case g_Cc.Dl: return GetAsyncKeyState(PadMapping[0].Cc.Dl); // Digital left + case g_Cc.Du: return GetAsyncKeyState(PadMapping[0].Cc.Du); // Up + case g_Cc.Dr: return GetAsyncKeyState(PadMapping[0].Cc.Dr); // Right + case g_Cc.Dd: return GetAsyncKeyState(PadMapping[0].Cc.Dd); // Down - case g_Cc.Ll: return GetAsyncKeyState('J'); // Left analog left - case g_Cc.Lu: return GetAsyncKeyState('I'); - case g_Cc.Lr: return GetAsyncKeyState('L'); - case g_Cc.Ld: return GetAsyncKeyState('K'); + case g_Cc.Ll: return GetAsyncKeyState(PadMapping[0].Cc.Ll); // Left analog + case g_Cc.Lu: return GetAsyncKeyState(PadMapping[0].Cc.Lu); + case g_Cc.Lr: return GetAsyncKeyState(PadMapping[0].Cc.Lr); + case g_Cc.Ld: return GetAsyncKeyState(PadMapping[0].Cc.Ld); - case g_Cc.Rl: return GetAsyncKeyState('D'); // Right analog left - case g_Cc.Ru: return GetAsyncKeyState('R'); - case g_Cc.Rr: return GetAsyncKeyState('G'); - case g_Cc.Rd: return GetAsyncKeyState('F'); + case g_Cc.Rl: return GetAsyncKeyState(PadMapping[0].Cc.Rl); // Right analog + case g_Cc.Ru: return GetAsyncKeyState(PadMapping[0].Cc.Ru); + case g_Cc.Rr: return GetAsyncKeyState(PadMapping[0].Cc.Rr); + case g_Cc.Rd: return GetAsyncKeyState(PadMapping[0].Cc.Rd); // This should not happen default: PanicAlert("There is syntax error in a function that is calling IsKey(%i)", Key); return false; @@ -1111,9 +1111,10 @@ void FillReportExtension(wm_extension& _ext) // ---------------- void FillReportClassicExtension(wm_classic_extension& _ext) { - /* These are the default neutral values for the analog triggers and sticks */ - u8 Rx = 0x80, Ry = 0x80, Lx = 0x80, Ly = 0x80, lT = 0x80, rT = 0x80; + u8 Rx = g_cc.Rx.center, Ry = g_cc.Ry.center, + Lx = g_cc.Lx.center, Ly = g_cc.Ly.center, + lT = g_cc.Tl.neutral, rT = g_cc.Tl.neutral; _ext.b1.padding = 0x01; // 0x01 means not pressed _ext.b1.bRT = 0x01; @@ -1133,135 +1134,226 @@ void FillReportClassicExtension(wm_classic_extension& _ext) _ext.b2.bB = 0x01; _ext.b2.bZL = 0x01; - // -------------------------------------- // Check that Dolphin is in focus - if (!IsFocus()) return; + if (IsFocus()) + { + // -------------------------------------- + /* Left and right analog sticks and analog triggers + + u8 Lx : 6; // byte 0 + u8 Rx : 2; + u8 Ly : 6; // byte 1 + u8 Rx2 : 2; + u8 Ry : 5; // byte 2 + u8 lT : 2; + u8 Rx3 : 1; + u8 rT : 5; // byte 3 + u8 lT2 : 3; + + We use a 200 range (28 to 228) for the left analog stick and a 176 range + (40 to 216) for the right analog stick to match our calibration values + in classic_calibration + */ + + // Update the left analog stick + if (g_Config.ClassicController.LType == g_Config.ClassicController.KEYBOARD) + { + if(IsKey(g_Cc.Ll)) // Left analog left + Lx = g_cc.Lx.min; + if(IsKey(g_Cc.Lu)) // up + Ly = g_cc.Ly.max; + if(IsKey(g_Cc.Lr)) // right + Lx = g_cc.Lx.max; + if(IsKey(g_Cc.Ld)) // down + Ly = g_cc.Ly.min; + + } + else + { + // Get adjusted pad state values + int _Lx, _Ly, _Rx, _Ry, _Tl, _Tr; + PadStateAdjustments(_Lx, _Ly, _Rx, _Ry, _Tl, _Tr); + // The Y-axis is inverted + _Ly = 0xff - _Ly; + _Ry = 0xff - _Ry; + + /* This is if we are also using a real Classic Controller that we are sharing the calibration with. + It's not needed if we are using our default values. We adjust the values to the configured range. + + Status: Not added, we are not currently sharing the calibration with the real Classic Controller + */ + + if (g_Config.ClassicController.LType == g_Config.ClassicController.ANALOG1) + { + Lx = _Lx; + Ly = _Ly; + } + else // ANALOG2 + { + Lx = _Rx; + Ly = _Ry; + } + } + + // Update the right analog stick + if (g_Config.ClassicController.RType == g_Config.ClassicController.KEYBOARD) + { + if(IsKey(g_Cc.Rl)) // Right analog left + Rx = g_cc.Rx.min; + if(IsKey(g_Cc.Ru)) // up + Ry = g_cc.Ry.max; + if(IsKey(g_Cc.Rr)) // right + Rx = g_cc.Rx.max; + if(IsKey(g_Cc.Rd)) // down + Ry = g_cc.Ry.min; + } + else + { + // Get adjusted pad state values + int _Lx, _Ly, _Rx, _Ry, _Tl, _Tr; + PadStateAdjustments(_Lx, _Ly, _Rx, _Ry, _Tl, _Tr); + // The Y-axis is inverted + _Ly = 0xff - _Ly; + _Ry = 0xff - _Ry; + + /* This is if we are also using a real Classic Controller that we are sharing the calibration with. + It's not needed if we are using our default values. We adjust the values to the configured range. + + Status: Not added, we are not currently sharing the calibration with the real Classic Controller + */ + + if (g_Config.ClassicController.RType == g_Config.ClassicController.ANALOG1) + { + Rx = _Lx; + Ry = _Ly; + } + else // ANALOG2 + { + Rx = _Rx; + Ry = _Ry; + } + } + + // Update the left and right analog triggers + if (g_Config.ClassicController.TType == g_Config.ClassicController.KEYBOARD) + { + if(IsKey(g_Cc.Tl)) // analog left trigger + { _ext.b1.bLT = 0x00; lT = 0x1f; } + if(IsKey(g_Cc.Tr)) // analog right trigger + { _ext.b1.bRT = 0x00; rT = 0x1f; } + } + else // g_Config.ClassicController.TRIGGER + { + // Get adjusted pad state values + int _Lx, _Ly, _Rx, _Ry, _Tl, _Tr; + PadStateAdjustments(_Lx, _Ly, _Rx, _Ry, _Tl, _Tr); + + /* This is if we are also using a real Classic Controller that we are sharing the calibration with. + It's not needed if we are using our default values. We adjust the values to the configured range. + + Status: Not added, we are not currently sharing the calibration with the real Classic Controller + */ + + // Check if the trigger is fully pressed, then update the digital trigger values to + if (_Tl == 0xff) _ext.b1.bLT = 0x00; + if (_Tr == 0xff) _ext.b1.bRT = 0x00; + + // The reported data is supposed to be divided by 8 so that we return 0x1f at most, I think. But + // I'm not sure about the bit shifts further down. + lT = _Tl / 8; + rT = _Tr / 8; + + // Boundaries + if (lT > 0x1f) lT = 0x1f; + if (rT > 0x1f) rT = 0x1f; + } + + + // -------------- + + // -------------------------------------- + /* D-Pad + + u8 b1; + 0: + 6: bdD + 7: bdR + + u8 b2; + 0: bdU + 1: bdL + */ + if(IsKey(g_Cc.Dl)) _ext.b2.bdL = 0x00; // Digital left + if(IsKey(g_Cc.Du)) _ext.b2.bdU = 0x00; // Up + if(IsKey(g_Cc.Dr)) _ext.b1.bdR = 0x00; // Right + if(IsKey(g_Cc.Dd)) _ext.b1.bdD = 0x00; // Down + // -------------- + + // -------------------------------------- + /* Buttons + u8 b1; + 0: + 6: - + 7: - + + u8 b2; + 0: - + 1: - + 2: bZr + 3: bX + 4: bA + 5: bY + 6: bB + 7: bZl + */ + if(IsKey(g_Cc.A)) + _ext.b2.bA = 0x00; + + if(IsKey(g_Cc.B)) + _ext.b2.bB = 0x00; + + if(IsKey(g_Cc.Y)) + _ext.b2.bY = 0x00; + + if(IsKey(g_Cc.X)) + _ext.b2.bX = 0x00; + + if(IsKey(g_Cc.P)) // O instead of P + _ext.b1.bP = 0x00; + + if(IsKey(g_Cc.M)) // N instead of M + _ext.b1.bM = 0x00; + + if(IsKey(g_Cc.H)) // Home button + _ext.b1.bH = 0x00; + + if(IsKey(g_Cc.Zl)) // Digital left trigger + _ext.b2.bZL = 0x00; + + if(IsKey(g_Cc.Zr)) // Digital right trigger + _ext.b2.bZR = 0x00; + + // All buttons pressed + //if(GetAsyncKeyState('C') && GetAsyncKeyState('Z')) + // { _ext.b2.bA = 0x01; _ext.b2.bB = 0x01; } + // -------------- + } // -------------------------------------- // -------------------------------------- - /* Left and right analog sticks - - u8 Lx : 6; // byte 0 - u8 Rx : 2; - u8 Ly : 6; // byte 1 - u8 Rx2 : 2; - u8 Ry : 5; // byte 2 - u8 lT : 2; - u8 Rx3 : 1; - u8 rT : 5; // byte 3 - u8 lT2 : 3; - */ - - /* We use a 200 range (28 to 228) for the left analog stick and a 176 range - (40 to 216) for the right analog stick to match our calibration values - in classic_calibration */ - if(IsKey(g_Cc.Ll)) // Left analog left - Lx = 0x1c; - if(IsKey(g_Cc.Lu)) // up - Ly = 0xe4; - if(IsKey(g_Cc.Lr)) // right - Lx = 0xe4; - if(IsKey(g_Cc.Ld)) // down - Ly = 0x1c; - - if(IsKey(g_Cc.Rl)) // Right analog left - Rx = 0x28; - if(IsKey(g_Cc.Ru)) // up - Ry = 0xd8; - if(IsKey(g_Cc.Rr)) // right - Rx = 0xd8; - if(IsKey(g_Cc.Rd)) // down - Ry = 0x28; - - + // Convert data for reporting _ext.Lx = (Lx >> 2); _ext.Ly = (Ly >> 2); - _ext.Rx = (Rx >> 3); // this may be wrong + _ext.Rx = (Rx >> 3); // This may be wrong _ext.Rx2 = (Rx >> 5); _ext.Rx3 = (Rx >> 7); _ext.Ry = (Ry >> 2); - _ext.lT = (Ry >> 2); - _ext.lT2 = (Ry >> 3); - _ext.rT = (Ry >> 4); - // -------------- - - - - // -------------------------------------- - /* D-Pad - - u8 b1; - 0: - 6: bdD - 7: bdR - - u8 b2; - 0: bdU - 1: bdL - */ - if(IsKey(g_Cc.Dl)) _ext.b2.bdL = 0x00; // Digital left - if(IsKey(g_Cc.Du)) _ext.b2.bdU = 0x00; // Up - if(IsKey(g_Cc.Dr)) _ext.b1.bdR = 0x00; // Right - if(IsKey(g_Cc.Dd)) _ext.b1.bdD = 0x00; // Down - // -------------- - - - // -------------------------------------- - /* Buttons - u8 b1; - 0: - 6: - - 7: - - - u8 b2; - 0: - - 1: - - 2: bZr - 3: bX - 4: bA - 5: bY - 6: bB - 7: bZl - */ - if(IsKey(g_Cc.A)) - _ext.b2.bA = 0x00; - - if(IsKey(g_Cc.B)) - _ext.b2.bB = 0x00; - - if(IsKey(g_Cc.Y)) - _ext.b2.bY = 0x00; - - if(IsKey(g_Cc.X)) - _ext.b2.bX = 0x00; - - if(IsKey(g_Cc.P)) // O instead of P - _ext.b1.bP = 0x00; - - if(IsKey(g_Cc.M)) // N instead of M - _ext.b1.bM = 0x00; - - if(IsKey(g_Cc.H)) // Home button - _ext.b1.bH = 0x00; - - if(IsKey(g_Cc.Tl)) // digital left trigger - _ext.b1.bLT = 0x00; - - if(IsKey(g_Cc.Zl)) - _ext.b2.bZL = 0x00; - - if(IsKey(g_Cc.Zr)) - _ext.b2.bZR = 0x00; - - if(IsKey(g_Cc.Tr)) // digital right trigger - _ext.b1.bRT = 0x00; - - // All buttons pressed - //if(GetAsyncKeyState('C') && GetAsyncKeyState('Z')) - // { _ext.b2.bA = 0x01; _ext.b2.bB = 0x01; } + _ext.lT = (lT >> 6); // This may be wrong + _ext.lT2 = (lT >> 5); + _ext.rT = (rT >> 3); // -------------- diff --git a/Source/Plugins/Plugin_Wiimote/Src/main.cpp b/Source/Plugins/Plugin_Wiimote/Src/main.cpp index 719460e2bb..2cd3ad4edf 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/main.cpp +++ b/Source/Plugins/Plugin_Wiimote/Src/main.cpp @@ -74,6 +74,7 @@ bool g_WiimoteUnexpectedDisconnect = false; // Settings accel_cal g_wm; nu_cal g_nu; +cc_cal g_cc; // Debugging bool g_DebugAccelerometer = false; @@ -719,22 +720,49 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) // Produce string //std::string TmpData = ArrayToString(data, size + 2, 0, 30); //LOGV(WII_IPC_WIIMOTE, 3, " Data: %s", Temp.c_str()); - std::string TmpData = StringFromFormat( - "%02x %02x %02x %02x " - "%03i %03i %03i " - "%02x %02x %02x %02x %02x %02x %02x %02x %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] // Nunchuck buttons - ); + std::string TmpCore = "", TmpAccel = "", TmpIR = "", TmpExt = ""; + TmpCore = StringFromFormat( + "%02x %02x %02x %02x", + data[0], data[1], data[2], data[3]); // Header and core buttons + TmpAccel = StringFromFormat( + "%03i %03i %03i", + data[4], data[5], data[6]); // Wiimote accelerometer + + if (data[1] == 0x33) // WM_REPORT_CORE_ACCEL_IR12 + { + TmpIR = StringFromFormat( + "%02x %02x %02x %02x %02x %02x" + " %02x %02x %02x %02x %02x %02x", + data[7], data[8], data[9], data[10], data[11], data[12], + data[13], data[14], data[15], data[16], data[17], data[18]); + } + if (data[1] == 0x35) // WM_REPORT_CORE_ACCEL_EXT16 + { + TmpExt = StringFromFormat( + "%02x %02x %02x %02x %02x %02x", + data[7], data[8], // Nunchuck stick + data[9], data[10], data[11], // Nunchuck Accelerometer + data[12]); // Nunchuck buttons + } + if (data[1] == 0x37) // WM_REPORT_CORE_ACCEL_IR10_EXT6 + { + TmpIR = StringFromFormat( + "%02x %02x %02x %02x %02x" + " %02x %02x %02x %02x %02x", + data[7], data[8], data[9], data[10], data[11], + data[12], data[13], data[14], data[15], data[16]); + TmpExt = StringFromFormat( + "%02x %02x %02x %02x %02x %02x", + data[17], data[18], // Nunchuck stick + data[19], data[20], data[21], // Nunchuck Accelerometer + data[22]); // Nunchuck buttons + } + + + // --------------------------------------------- // Calculate the Wiimote roll and pitch in degrees + // ----------- int Roll, Pitch, RollAdj, PitchAdj; WiiMoteEmu::PitchAccelerometerToDegree(data[4], data[5], data[6], Roll, Pitch, RollAdj, PitchAdj); std::string RollPitch = StringFromFormat("%s %s %s %s", @@ -742,6 +770,7 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) (Pitch >= 0) ? StringFromFormat(" %03i", Pitch).c_str() : StringFromFormat("%04i", Pitch).c_str(), (RollAdj == Roll) ? " " : StringFromFormat("%04i*", RollAdj).c_str(), (PitchAdj == Pitch) ? " " : StringFromFormat("%04i*", PitchAdj).c_str()); + // ------------------------- // --------------------------------------------- // Test the angles to x, y, z values formula by calculating the values back and forth @@ -754,7 +783,9 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) WiiMoteEmu::TiltTest(x, y, z);*/ // ------------------------- + // --------------------------------------------- // Show the number of g forces on the axes + // ----------- float Gx = WiiMoteEmu::AccelerometerToG((float)data[4], (float)g_wm.cal_zero.x, (float)g_wm.cal_g.x); float Gy = WiiMoteEmu::AccelerometerToG((float)data[5], (float)g_wm.cal_zero.y, (float)g_wm.cal_g.y); float Gz = WiiMoteEmu::AccelerometerToG((float)data[6], (float)g_wm.cal_zero.z, (float)g_wm.cal_g.z); @@ -762,8 +793,11 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) ((int)Gx >= 0) ? StringFromFormat(" %i", (int)Gx).c_str() : StringFromFormat("%i", (int)Gx).c_str(), ((int)Gy >= 0) ? StringFromFormat(" %i", (int)Gy).c_str() : StringFromFormat("%i", (int)Gy).c_str(), ((int)Gz >= 0) ? StringFromFormat(" %i", (int)Gz).c_str() : StringFromFormat("%i", (int)Gz).c_str()); - + // ------------------------- + + // --------------------------------------------- // Calculate the IR data + // ----------- if (data[1] == WM_REPORT_CORE_ACCEL_IR10_EXT6) WiiMoteEmu::IRData2DotsBasic(&data[7]); else WiiMoteEmu::IRData2Dots(&data[7]); std::string IRData; // Create a shortcut @@ -777,10 +811,12 @@ void ReadDebugging(bool Emu, const void* _pData, int Size) } // Dot distance IRData += StringFromFormat(" | Distance:%i", WiiMoteEmu::g_Wm.IR.Distance); + // ------------------------- //Console::Print("Read[%s]: 0x%02x | %s | %s | %s\n", (Emu ? "Emu" : "Real"), data[1], RollPitch.c_str(), GForce.c_str(), IRData.c_str()); // Formatted data only //Console::Print("Read[%s]: %s | %s\n", (Emu ? "Emu" : "Real"), TmpData.c_str(), IRData.c_str()); // IR data - Console::Print("Read[%s]: %s| %s | %s\n", (Emu ? "Emu" : "Real"), TmpData.c_str(), RollPitch.c_str(), GForce.c_str()); // Accelerometer + Console::Print("Read[%s]: %s | %s | %s | %s | %s | %s\n", (Emu ? "Emu" : "Real"), + TmpCore.c_str(), TmpAccel.c_str(), TmpIR.c_str(), TmpExt.c_str(), RollPitch.c_str(), GForce.c_str()); // Accelerometer //Console::Print(" (%s): %s\n", Tm(true).c_str(), Temp.c_str()); // Timestamp } diff --git a/Source/Plugins/Plugin_Wiimote/Src/main.h b/Source/Plugins/Plugin_Wiimote/Src/main.h index ab7accbe73..4633549ca9 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/main.h +++ b/Source/Plugins/Plugin_Wiimote/Src/main.h @@ -81,6 +81,7 @@ struct SRecordingAll // Settings extern accel_cal g_wm; extern nu_cal g_nu; + extern cc_cal g_cc; // Debugging extern bool g_DebugAccelerometer; diff --git a/Source/Plugins/Plugin_Wiimote/Src/wiimote_hid.h b/Source/Plugins/Plugin_Wiimote/Src/wiimote_hid.h index f62a6e0d26..882ea8137f 100644 --- a/Source/Plugins/Plugin_Wiimote/Src/wiimote_hid.h +++ b/Source/Plugins/Plugin_Wiimote/Src/wiimote_hid.h @@ -305,6 +305,9 @@ struct accel_cal struct nu_js { u8 max, min, center; }; +struct cc_trigger { + u8 neutral; +}; struct nu_cal { wm_accel cal_zero; // zero calibratio @@ -312,6 +315,15 @@ struct nu_cal nu_js jx; // nu_js jy; // }; +struct cc_cal +{ + nu_js Lx; // + nu_js Ly; // + nu_js Rx; // + nu_js Ry; // + cc_trigger Tl; // + cc_trigger Tr; // +}; #pragma pack(pop)