summaryrefslogtreecommitdiff
path: root/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp
diff options
context:
space:
mode:
authorShawn Hoffman <godisgovernment@gmail.com>2008-09-26 14:29:38 +0000
committerShawn Hoffman <godisgovernment@gmail.com>2008-09-26 14:29:38 +0000
commit7a615e93538de40167a4f7c07e2baaefdf0060e8 (patch)
tree75df013bb56b114407e96915a39e2f62b93bd11d /Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp
parentd5116c196c6d2b834b6ff7363c84e56e23ca76b7 (diff)
merged the halfpress keys down to just one, and tried to set the base for actually having 4 controllers. still need a way to list keyboard+connected xpads in the wxChoice :)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@712 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp')
-rw-r--r--Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp205
1 files changed, 88 insertions, 117 deletions
diff --git a/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp b/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp
index f44db49f5b..b26ea68a00 100644
--- a/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp
+++ b/Source/Plugins/Plugin_PadSimple/Src/PadSimple.cpp
@@ -257,34 +257,27 @@ void ScaleStickValues(unsigned char* outx,
#ifdef _WIN32
void DInput_Read(int _numPad, SPADStatus* _pPADStatus)
{
- /*We can do all now :D
- if (_numPad != 0)
- {
- return;
- }*/
-
dinput.Read();
- int mainvalue = (dinput.diks[pad[_numPad].keyForControl[CTL_HALFMAIN]] & 0xFF) ? 40 : 100;
- int subvalue = (dinput.diks[pad[_numPad].keyForControl[CTL_HALFSUB]] & 0xFF) ? 40 : 100;
- int triggervalue = (dinput.diks[pad[_numPad].keyForControl[CTL_HALFTRIGGER]] & 0xFF) ? 100 : 255;
+ int stickvalue = (dinput.diks[pad[_numPad].keyForControl[CTL_HALFPRESS]] & 0xFF) ? 40 : 100;
+ int triggervalue = (dinput.diks[pad[_numPad].keyForControl[CTL_HALFPRESS]] & 0xFF) ? 100 : 255;
// get the new keys
- if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINLEFT]] & 0xFF){_pPADStatus->stickX -= mainvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINLEFT]] & 0xFF){_pPADStatus->stickX -= stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINRIGHT]] & 0xFF){_pPADStatus->stickX += mainvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINRIGHT]] & 0xFF){_pPADStatus->stickX += stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINDOWN]] & 0xFF){_pPADStatus->stickY -= mainvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINDOWN]] & 0xFF){_pPADStatus->stickY -= stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINUP]] & 0xFF){_pPADStatus->stickY += mainvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_MAINUP]] & 0xFF){_pPADStatus->stickY += stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBLEFT]] & 0xFF){_pPADStatus->substickX -= subvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBLEFT]] & 0xFF){_pPADStatus->substickX -= stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBRIGHT]] & 0xFF){_pPADStatus->substickX += subvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBRIGHT]] & 0xFF){_pPADStatus->substickX += stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBDOWN]] & 0xFF){_pPADStatus->substickY -= subvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBDOWN]] & 0xFF){_pPADStatus->substickY -= stickvalue;}
- if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBUP]] & 0xFF){_pPADStatus->substickY += subvalue;}
+ if (dinput.diks[pad[_numPad].keyForControl[CTL_SUBUP]] & 0xFF){_pPADStatus->substickY += stickvalue;}
if (dinput.diks[pad[_numPad].keyForControl[CTL_L]] & 0xFF)
{
@@ -334,66 +327,65 @@ void XInput_Read(int _numPAD, SPADStatus* _pPADStatus)
XINPUT_STATE xstate;
DWORD xresult = XInputGetState(_numPAD, &xstate);
- if ((xresult != ERROR_SUCCESS) && (_numPAD != 0))
+ if(xresult != ERROR_SUCCESS)
{
return;
}
// In addition, let's .. yes, let's use XINPUT!
- if (xresult == ERROR_SUCCESS)
+ if(xresult == ERROR_SUCCESS)
{
- const XINPUT_GAMEPAD& pad = xstate.Gamepad;
+ const XINPUT_GAMEPAD& xpad = xstate.Gamepad;
- if ((_pPADStatus->stickX == base) && (_pPADStatus->stickY == base))
+ if((_pPADStatus->stickX == base) && (_pPADStatus->stickY == base))
{
ScaleStickValues(
&_pPADStatus->stickX,
&_pPADStatus->stickY,
- pad.sThumbLX,
- pad.sThumbLY);
+ xpad.sThumbLX,
+ xpad.sThumbLY);
}
- if ((_pPADStatus->substickX == base) && (_pPADStatus->substickY == base))
+ if((_pPADStatus->substickX == base) && (_pPADStatus->substickY == base))
{
ScaleStickValues(
&_pPADStatus->substickX,
&_pPADStatus->substickY,
- pad.sThumbRX,
- pad.sThumbRY);
+ xpad.sThumbRX,
+ xpad.sThumbRY);
}
- _pPADStatus->triggerLeft = pad.bLeftTrigger;
- _pPADStatus->triggerRight = pad.bRightTrigger;
+ _pPADStatus->triggerLeft = xpad.bLeftTrigger;
+ _pPADStatus->triggerRight = xpad.bRightTrigger;
- if (pad.bLeftTrigger > 20){_pPADStatus->button |= PAD_TRIGGER_L;}
+ if (xpad.bLeftTrigger > 20){_pPADStatus->button |= PAD_TRIGGER_L;}
- if (pad.bRightTrigger > 20){_pPADStatus->button |= PAD_TRIGGER_R;}
+ if (xpad.bRightTrigger > 20){_pPADStatus->button |= PAD_TRIGGER_R;}
- if (pad.wButtons & XINPUT_GAMEPAD_A){_pPADStatus->button |= PAD_BUTTON_A;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_A){_pPADStatus->button |= PAD_BUTTON_A;}
- if (pad.wButtons & XINPUT_GAMEPAD_X){_pPADStatus->button |= PAD_BUTTON_B;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_X){_pPADStatus->button |= PAD_BUTTON_B;}
- if (pad.wButtons & XINPUT_GAMEPAD_B){_pPADStatus->button |= PAD_BUTTON_X;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_B){_pPADStatus->button |= PAD_BUTTON_X;}
- if (pad.wButtons & XINPUT_GAMEPAD_Y){_pPADStatus->button |= PAD_BUTTON_Y;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_Y){_pPADStatus->button |= PAD_BUTTON_Y;}
- if (pad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER){_pPADStatus->button |= PAD_TRIGGER_Z;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER){_pPADStatus->button |= PAD_TRIGGER_Z;}
- if (pad.wButtons & XINPUT_GAMEPAD_START){_pPADStatus->button |= PAD_BUTTON_START;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_START){_pPADStatus->button |= PAD_BUTTON_START;}
- if (pad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT){_pPADStatus->button |= PAD_BUTTON_LEFT;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT){_pPADStatus->button |= PAD_BUTTON_LEFT;}
- if (pad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT){_pPADStatus->button |= PAD_BUTTON_RIGHT;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT){_pPADStatus->button |= PAD_BUTTON_RIGHT;}
- if (pad.wButtons & XINPUT_GAMEPAD_DPAD_UP){_pPADStatus->button |= PAD_BUTTON_UP;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_DPAD_UP){_pPADStatus->button |= PAD_BUTTON_UP;}
- if (pad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN){_pPADStatus->button |= PAD_BUTTON_DOWN;}
+ if (xpad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN){_pPADStatus->button |= PAD_BUTTON_DOWN;}
}
#endif
}
-
#endif
#if defined(__linux__)
@@ -471,21 +463,20 @@ void X11_Read(int _numPAD, SPADStatus* _pPADStatus)
break;
}
}
-
- int mainvalue = (KeyStatus[CTL_HALFMAIN]) ? 40 : 100;
- int subvalue = (KeyStatus[CTL_HALFSUB]) ? 40 : 100;
- int triggervalue = (KeyStatus[CTL_HALFTRIGGER]) ? 100 : 255;
-
- if (KeyStatus[CTL_MAINLEFT]){_pPADStatus->stickX -= mainvalue;}
- if (KeyStatus[CTL_MAINUP]){_pPADStatus->stickY += mainvalue;}
- if (KeyStatus[CTL_MAINRIGHT]){_pPADStatus->stickX += mainvalue;}
- if (KeyStatus[CTL_MAINDOWN]){_pPADStatus->stickY -= mainvalue;}
-
- if (KeyStatus[CTL_SUBLEFT]){_pPADStatus->substickX -= subvalue;}
- if (KeyStatus[CTL_SUBUP]){_pPADStatus->substickY += subvalue;}
- if (KeyStatus[CTL_SUBRIGHT]){_pPADStatus->substickX += subvalue;}
- if (KeyStatus[CTL_SUBDOWN]){_pPADStatus->substickY -= subvalue;}
-
+
+ int stickvalue = (KeyStatus[CTL_HALFPRESS]) ? 40 : 100;
+ int triggervalue = (KeyStatus[CTL_HALFPRESS]) ? 100 : 255;
+
+ if (KeyStatus[CTL_MAINLEFT]){_pPADStatus->stickX -= stickvalue;}
+ if (KeyStatus[CTL_MAINUP]){_pPADStatus->stickY += stickvalue;}
+ if (KeyStatus[CTL_MAINRIGHT]){_pPADStatus->stickX += stickvalue;}
+ if (KeyStatus[CTL_MAINDOWN]){_pPADStatus->stickY -= stickvalue;}
+
+ if (KeyStatus[CTL_SUBLEFT]){_pPADStatus->substickX -= stickvalue;}
+ if (KeyStatus[CTL_SUBUP]){_pPADStatus->substickY += stickvalue;}
+ if (KeyStatus[CTL_SUBRIGHT]){_pPADStatus->substickX += stickvalue;}
+ if (KeyStatus[CTL_SUBDOWN]){_pPADStatus->substickY -= stickvalue;}
+
if (KeyStatus[CTL_DPADLEFT]){_pPADStatus->button |= PAD_BUTTON_LEFT;}
if (KeyStatus[CTL_DPADUP]){_pPADStatus->button |= PAD_BUTTON_UP;}
if (KeyStatus[CTL_DPADRIGHT]){_pPADStatus->button |= PAD_BUTTON_RIGHT;}
@@ -523,7 +514,7 @@ void X11_Read(int _numPAD, SPADStatus* _pPADStatus)
void PAD_GetStatus(u8 _numPAD, SPADStatus* _pPADStatus)
{
- // check if all is okay
+ // Check if all is okay
if ((_pPADStatus == NULL))
{
return;
@@ -534,11 +525,8 @@ void PAD_GetStatus(u8 _numPAD, SPADStatus* _pPADStatus)
return;
#endif
-
-
-
const int base = 0x80;
- // clear pad
+ // Clear pad
memset(_pPADStatus, 0, sizeof(SPADStatus));
_pPADStatus->stickY = base;
@@ -547,16 +535,25 @@ void PAD_GetStatus(u8 _numPAD, SPADStatus* _pPADStatus)
_pPADStatus->substickY = base;
_pPADStatus->button |= PAD_USE_ORIGIN;
#ifdef _WIN32
- // just update pad on focus
- //if (g_PADInitialize.hWnd != ::GetForegroundWindow())
- // return;
+ // Just update pad on focus
+ // TODO fix g_PADInitialize.hWnd != DolphinWX frame
+ if(pad[_numPAD].disable)
+ {
+ if(g_PADInitialize.hWnd != GetForegroundWindow())
+ return;
+ }
#endif
_pPADStatus->err = PAD_ERR_NONE;
- // keyboard is hardwired to player 1.
#ifdef _WIN32
- DInput_Read(_numPAD, _pPADStatus);
- XInput_Read(_numPAD, _pPADStatus);
+ if(pad[_numPAD].type == 0)
+ {
+ DInput_Read(_numPAD, _pPADStatus);
+ }
+ else
+ {
+ XInput_Read(_numPAD, _pPADStatus);
+ }
#elif defined(__linux__)
X11_Read(_numPAD, _pPADStatus);
#endif
@@ -635,23 +632,21 @@ void LoadConfig()
DIK_C,
DIK_D,
DIK_RETURN,
- DIK_LCONTROL,
DIK_Q,
DIK_W,
DIK_UP, //mainstick
DIK_DOWN,
DIK_LEFT,
DIK_RIGHT,
- DIK_LSHIFT,
DIK_I, //substick
DIK_K,
DIK_J,
DIK_L,
- DIK_LSHIFT,
DIK_T, //dpad
DIK_G,
DIK_F,
- DIK_H
+ DIK_H,
+ DIK_LSHIFT
};
#else
const int defaultKeyForControl[NUMCONTROLS] =
@@ -662,23 +657,21 @@ void LoadConfig()
XK_c,
XK_d,
XK_Return,
- XK_Control_L,
XK_q,
XK_w,
XK_Up, //mainstick
XK_Down,
XK_Left,
XK_Right,
- XK_Shift_L,
XK_i, //substick
XK_K,
XK_j,
XK_l,
- XK_Shift_L,
XK_t, //dpad
XK_g,
XK_f,
- XK_h
+ XK_h,
+ XK_Shift_L //halfpress
};
#endif
IniFile file;
@@ -689,32 +682,21 @@ void LoadConfig()
char SectionName[32];
sprintf(SectionName, "PAD%i", i+1);
- if(pad[i].type == 0)
+ file.Get(SectionName, "Type", &pad[i].type);
+ file.Get(SectionName, "Attached", &pad[i].attached, i==0);
+ file.Get(SectionName, "DisableOnBackground", &pad[i].disable, false);
+ file.Get(SectionName, "Rumble", &pad[i].rumble, true);
+ file.Get(SectionName, "XPad#", &pad[i].XPad);
+
+ for (int x = 0; x < NUMCONTROLS; x++)
{
- //keyboard settings
- file.Get(SectionName, "Type", &pad[i].type);
- file.Get(SectionName, "Attached", &pad[i].attached, i==0);
- file.Get(SectionName, "DisableOnBackground", &pad[i].disable, false);
-
- for (int x = 0; x < NUMCONTROLS; x++)
- {
- file.Get(SectionName, controlNames[x], &pad[i].keyForControl[x],
- (i==0)?defaultKeyForControl[x]:0);
+ file.Get(SectionName, controlNames[x], &pad[i].keyForControl[x],
+ (i==0)?defaultKeyForControl[x]:0);
#ifndef _WIN32
- // In linux we have a problem assigning the upper case of the
- // keys because they're not being recognized
- pad[i].keyForControl[x] = tolower(pad[i].keyForControl[x]);
+ // In linux we have a problem assigning the upper case of the
+ // keys because they're not being recognized
+ pad[i].keyForControl[x] = tolower(pad[i].keyForControl[x]);
#endif
- }
- }
- else
- {
- //xpad settings
- file.Get(SectionName, "Type", &pad[i].type);
- file.Get(SectionName, "Attached", &pad[i].attached, false);
- file.Get(SectionName, "DisableOnBackground", &pad[i].disable, false);
- file.Get(SectionName, "Rumble", &pad[i].rumble, true);
- file.Get(SectionName, "XPad#", &pad[i].XPad);
}
}
}
@@ -730,26 +712,15 @@ void SaveConfig()
char SectionName[32];
sprintf(SectionName, "PAD%i", i+1);
- if(pad[i].type == 0)
- {
- //keyboard settings
- file.Set(SectionName, "Type", pad[i].type);
- file.Set(SectionName, "Attached", pad[i].attached);
- file.Set(SectionName, "DisableOnBackground", pad[i].disable);
-
- for (int x = 0; x < NUMCONTROLS; x++)
- {
- file.Set(SectionName, controlNames[x], pad[i].keyForControl[x]);
- }
- }
- else
+ file.Set(SectionName, "Type", pad[i].type);
+ file.Set(SectionName, "Attached", pad[i].attached);
+ file.Set(SectionName, "DisableOnBackground", pad[i].disable);
+ file.Set(SectionName, "Rumble", pad[i].rumble);
+ file.Set(SectionName, "XPad#", pad[i].XPad);
+
+ for (int x = 0; x < NUMCONTROLS; x++)
{
- //xpad settings
- file.Set(SectionName, "Type", pad[i].type);
- file.Set(SectionName, "Attached", pad[i].attached);
- file.Set(SectionName, "DisableOnBackground", pad[i].disable);
- file.Set(SectionName, "Rumble", pad[i].rumble);
- file.Set(SectionName, "XPad#", pad[i].XPad);
+ file.Set(SectionName, controlNames[x], pad[i].keyForControl[x]);
}
}
file.Save("pad.ini");