Emulated Wiimote: Added Classic Controller analog gamepad support, and added its keyboard configuration to the GUI
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2400 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
f23b24ae76
commit
b739dd3817
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
// ===================
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
// --------------
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue