diff --git a/src/drivers/win/input.cpp b/src/drivers/win/input.cpp index 576c0d8b..dedc080b 100644 --- a/src/drivers/win/input.cpp +++ b/src/drivers/win/input.cpp @@ -1035,8 +1035,8 @@ static char *MakeButtString(ButtConfig *bc, int appendKB = 1) sprintf(tmpstr+strlen(tmpstr), "%d ", bc->DeviceNum[x]); if(bc->ButtonNum[x] & 0x8000) { - char *asel[3]={"x","y","z"}; - sprintf(tmpstr+strlen(tmpstr), "axis %s%s", asel[bc->ButtonNum[x] & 3],(bc->ButtonNum[x]&0x4000)?"-":"+"); + char *asel[6]={"x","y","z","rx","ry","rz"}; + sprintf(tmpstr+strlen(tmpstr), "axis %s%s", asel[bc->ButtonNum[x] & 7],(bc->ButtonNum[x]&0x4000)?"-":"+"); } else if(bc->ButtonNum[x] & 0x2000) { @@ -1058,7 +1058,7 @@ static char *MakeButtString(ButtConfig *bc, int appendKB = 1) static uint8 keyonce[MKK_COUNT]; -static int newpressed(int a) +static int IsNewpressed(int a) { if (keys_nr[a]) { @@ -1085,7 +1085,7 @@ static int GetKeyPressed() for (i = 0; i < 256 && !key; ++i) { - if (newpressed(i)) + if (IsNewpressed(i)) { key = i; } diff --git a/src/drivers/win/joystick.cpp b/src/drivers/win/joystick.cpp index d1cb0c16..a4ecb096 100644 --- a/src/drivers/win/joystick.cpp +++ b/src/drivers/win/joystick.cpp @@ -91,6 +91,12 @@ typedef struct LONG MaxY; LONG MinZ; LONG MaxZ; + LONG MinRx; + LONG MaxRx; + LONG MinRy; + LONG MaxRy; + LONG MinRz; + LONG MaxRz; } POWER_RANGER; static POWER_RANGER ranges[MAX_JOYSTICKS]; @@ -150,15 +156,36 @@ int DTestButtonJoy(ButtConfig *bc) if(bc->ButtonNum[x]&0x8000) /* Axis "button" */ { - int sa = bc->ButtonNum[x]&3; + int sa = bc->ButtonNum[x]&7; long source; - if(sa == 0) source=((int64)StatusSave[n].lX - ranges[n].MinX) * 262144 / - (ranges[n].MaxX - ranges[n].MinX) - 131072; - else if(sa == 1) source=((int64)StatusSave[n].lY - ranges[n].MinY) * 262144 / - (ranges[n].MaxY - ranges[n].MinY) - 131072; - else if(sa == 2) source=((int64)StatusSave[n].lZ - ranges[n].MinZ) * 262144 / - (ranges[n].MaxZ - ranges[n].MinZ) - 131072; + switch (sa) + { + case 0: + source = ((int64)StatusSave[n].lX - ranges[n].MinX) * 262144 / + (ranges[n].MaxX - ranges[n].MinX) - 131072; + break; + case 1: + source = ((int64)StatusSave[n].lY - ranges[n].MinY) * 262144 / + (ranges[n].MaxY - ranges[n].MinY) - 131072; + break; + case 2: + source = ((int64)StatusSave[n].lZ - ranges[n].MinZ) * 262144 / + (ranges[n].MaxZ - ranges[n].MinZ) - 131072; + break; + case 3: + source = ((int64)StatusSave[n].lRx - ranges[n].MinRx) * 262144 / + (ranges[n].MaxRx - ranges[n].MinRx) - 131072; + break; + case 4: + source = ((int64)StatusSave[n].lRy - ranges[n].MinRy) * 262144 / + (ranges[n].MaxRy - ranges[n].MinRy) - 131072; + break; + case 5: + source = ((int64)StatusSave[n].lRz - ranges[n].MinRz) * 262144 / + (ranges[n].MaxRz - ranges[n].MinRz) - 131072; + break; + } /* Now, source is of the range -131072 to 131071. Good enough. */ if(bc->ButtonNum[x] & 0x4000) @@ -191,7 +218,7 @@ int DTestButtonJoy(ButtConfig *bc) return(0); } -static int canax[MAX_JOYSTICKS][3]; +static int canax[MAX_JOYSTICKS][6]; /* Now the fun configuration test begins. */ void BeginJoyWait(HWND hwnd) @@ -242,50 +269,67 @@ int DoJoyWaitTest(GUID *guid, uint8 *devicenum, uint16 *buttonnum) memcpy(StatusSave[n].rgbButtons, JoyStatus.rgbButtons, 128); - // lX, lY, lZ - long dax, day, daz; long source,psource; - dax = ranges[n].MaxX - ranges[n].MinX; - day = ranges[n].MaxY - ranges[n].MinY; - daz = ranges[n].MaxZ - ranges[n].MinZ; - - if(dax) - { - source=((int64)JoyStatus.lX - ranges[n].MinX) * 262144 / dax - 131072; - psource=((int64)StatusSave[n].lX - ranges[n].MinX) * 262144 / dax - 131072; - - if(abs(source) >= 65536 && canax[n][0]) - { - *guid = JoyGUID[n]; - *devicenum = n; - *buttonnum = 0x8000 | (0) | ((source < 0) ? 0x4000 : 0); - memcpy(&StatusSave[n], &JoyStatus, sizeof(DIJOYSTATE2)); - canax[n][0] = 0; - return(1); - } else if(abs(source) <= 32768) canax[n][0] = 1; - } - - if(day) - { - source=((int64)JoyStatus.lY - ranges[n].MinY) * 262144 / day - 131072; - psource=((int64)StatusSave[n].lY - ranges[n].MinY) * 262144 / day - 131072; - - if(abs(source) >= 65536 && canax[n][1]) - { - *guid = JoyGUID[n]; - *devicenum = n; - *buttonnum = 0x8000 | (1) | ((source < 0) ? 0x4000 : 0); - memcpy(&StatusSave[n], &JoyStatus, sizeof(DIJOYSTATE2)); - canax[n][1] = 0; - return(1); - } else if(abs(source) <= 32768) canax[n][1] = 1; - } - - if(daz) + for (int axis = 0; axis < 6; axis++) { + long da, jsl, ssl, min; + switch (axis) + { + case 0: + da = ranges[n].MaxX - ranges[n].MinX; + jsl = JoyStatus.lX; + ssl = StatusSave[n].lX; + min = ranges[n].MinX; + break; + case 1: + da = ranges[n].MaxY - ranges[n].MinY; + jsl = JoyStatus.lY; + ssl = StatusSave[n].lY; + min = ranges[n].MinY; + break; + case 2: + da = ranges[n].MaxZ - ranges[n].MinZ; + jsl = JoyStatus.lZ; + ssl = StatusSave[n].lZ; + min = ranges[n].MinZ; + break; + case 3: + da = ranges[n].MaxRx - ranges[n].MinRx; + jsl = JoyStatus.lRx; + ssl = StatusSave[n].lRx; + min = ranges[n].MinRx; + break; + case 4: + da = ranges[n].MaxRy - ranges[n].MinRy; + jsl = JoyStatus.lRy; + ssl = StatusSave[n].lRy; + min = ranges[n].MinRy; + break; + case 5: + da = ranges[n].MaxRz - ranges[n].MinRz; + jsl = JoyStatus.lRz; + ssl = StatusSave[n].lRz; + min = ranges[n].MinRz; + break; + } + if (da) + { + source = ((int64)jsl - min) * 262144 / da - 131072; + psource = ((int64)ssl - min) * 262144 / da - 131072; + if (abs(source) >= 65536 && canax[n][axis]) + { + *guid = JoyGUID[n]; + *devicenum = n; + *buttonnum = 0x8000 | axis | ((source < 0) ? 0x4000 : 0); + memcpy(&StatusSave[n], &JoyStatus, sizeof(DIJOYSTATE2)); + canax[n][axis] = 0; + return(1); + } + else if (abs(source) <= 32768) canax[n][axis] = 1; + } } for(x=0; x<4; x++) @@ -393,6 +437,9 @@ static BOOL CALLBACK JoystickFound(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) GetARange(Joysticks[n], DIJOFS_X, &ranges[n].MinX, &ranges[n].MaxX); GetARange(Joysticks[n], DIJOFS_Y, &ranges[n].MinY, &ranges[n].MaxY); GetARange(Joysticks[n], DIJOFS_Z, &ranges[n].MinZ, &ranges[n].MaxZ); + GetARange(Joysticks[n], DIJOFS_RX, &ranges[n].MinRx, &ranges[n].MaxRx); + GetARange(Joysticks[n], DIJOFS_RY, &ranges[n].MinRy, &ranges[n].MaxRy); + GetARange(Joysticks[n], DIJOFS_RZ, &ranges[n].MinRz, &ranges[n].MaxRz); JoyGUID[numjoysticks] = lpddi->guidInstance;