diff --git a/Source/Plugins/Plugin_nJoy_SDL/Res/Plugin_nJoy_SDL.rc b/Source/Plugins/Plugin_nJoy_SDL/Res/Plugin_nJoy_SDL.rc index 824e357d42..1939637d8b 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Res/Plugin_nJoy_SDL.rc +++ b/Source/Plugins/Plugin_nJoy_SDL/Res/Plugin_nJoy_SDL.rc @@ -56,7 +56,7 @@ IDD_CONFIG DIALOGEX 0, 0, 411, 282 STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_SYSMENU FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - COMBOBOX IDC_JOYNAME,8,18,317,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_JOYNAME,8,18,317,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP GROUPBOX "Controller:",IDC_STATIC,3,7,405,28 CONTROL 102,IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZEIMAGE | SS_SUNKEN,65,46,281,187 CONTROL "Controller attached",IDC_JOYATTACH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,330,19,73,10 @@ -90,12 +90,25 @@ BEGIN LTEXT "Y-axis",IDC_STATIC,368,229,20,8 PUSHBUTTON "",IDC_SY,351,240,15,10,0,WS_EX_STATICEDGE PUSHBUTTON "",IDC_MY,46,158,15,10,0,WS_EX_STATICEDGE - GROUPBOX "Extra settings",IDC_STATIC,3,236,95,43 - LTEXT "Deadzone",IDC_STATIC,11,248,33,8 - LTEXT "Half press",IDC_STATIC,11,263,33,8 - COMBOBOX IDC_DEADZONE,45,246,48,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_HALFPRESS,45,261,48,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Extra settings:",IDC_STATIC,69,236,103,43 + LTEXT "Deadzone",IDC_STATIC,77,248,33,8 + LTEXT "Half press",IDC_STATIC,77,263,33,8 + COMBOBOX IDC_DEADZONE,111,246,40,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "www.multigesture.net",IDC_STATIC,336,271,72,8 + COMBOBOX IDC_CONTROLTYPE,244,247,87,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Controller type:",IDC_STATIC,239,236,95,27 + PUSHBUTTON "",IDC_DPAD_DOWN,46,205,15,10,0,WS_EX_STATICEDGE + CTEXT "",IDTEXT_DPAD_DOWN,4,205,40,12,WS_BORDER + PUSHBUTTON "",IDC_DPAD_LEFT,45,228,15,10,0,WS_EX_STATICEDGE + CTEXT "",IDTEXT_DPAD_LEFT,3,227,40,12,WS_BORDER + PUSHBUTTON "",IDC_DPAD_RIGHT,45,251,15,10,0,WS_EX_STATICEDGE + CTEXT "",IDTEXT_DPAD_RIGHT,3,250,40,12,WS_BORDER + LTEXT "Up",IDC_DPAD_TEXT1,4,172,10,8 + LTEXT "Down",IDC_DPAD_TEXT2,4,195,19,8 + LTEXT "Left",IDC_DPAD_TEXT3,4,217,14,8 + LTEXT "Right",IDC_DPAD_TEXT4,4,240,18,8 + PUSHBUTTON "",IDC_HALFPRESS,153,263,15,10,0,WS_EX_STATICEDGE + CTEXT "",IDTEXT_HALFPRESS,111,261,40,12,WS_BORDER END IDD_ABOUT DIALOGEX 0, 0, 133, 227 @@ -141,6 +154,24 @@ END IDB_BITMAP1 BITMAP "controller.bmp" IDB_BITMAP2 BITMAP "njoy.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog Info +// + +IDD_CONFIG DLGINIT +BEGIN + IDC_CONTROLTYPE, 0x403, 9, 0 +0x6f4a, 0x7379, 0x6974, 0x6b63, "\000" + IDC_CONTROLTYPE, 0x403, 18, 0 +0x6f4a, 0x7379, 0x6974, 0x6b63, 0x2820, 0x6f6e, 0x6820, 0x7461, 0x0029, + + IDC_CONTROLTYPE, 0x403, 9, 0 +0x654b, 0x6279, 0x616f, 0x6472, "\000" + 0 +END + #endif // Dutch (Netherlands) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/Source/Plugins/Plugin_nJoy_SDL/Res/resource.h b/Source/Plugins/Plugin_nJoy_SDL/Res/resource.h index 02c72845d6..3a2d62b2c1 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Res/resource.h +++ b/Source/Plugins/Plugin_nJoy_SDL/Res/resource.h @@ -8,7 +8,6 @@ #define IDB_BITMAP2 104 #define IDC_JOYNAME 1001 #define IDC_JOYATTACH 1002 - #define IDC_SHOULDERL 1010 #define IDC_SHOULDERR 1011 #define IDC_A 1012 @@ -17,16 +16,24 @@ #define IDC_Y 1015 #define IDC_Z 1016 #define IDC_START 1017 - #define IDC_DPAD 1018 #define IDC_MX 1019 #define IDC_MY 1020 #define IDC_SX 1021 #define IDC_SY 1022 - #define IDC_DEADZONE 1023 #define IDC_HALFPRESS 1024 - +#define IDC_DPAD_DOWN 1025 +#define IDC_DPAD_LEFT 1026 +#define IDC_DPAD_RIGHT 1027 +#define IDC_ABOUT_TEXT 1032 +#define IDC_ABOUT_TEXT2 1033 +#define IDC_ABOUT_TEXT3 1034 +#define IDC_CONTROLTYPE 1036 +#define IDC_DPAD_TEXT1 1037 +#define IDC_DPAD_TEXT2 1038 +#define IDC_DPAD_TEXT3 1039 +#define IDC_DPAD_TEXT4 1040 #define IDTEXT_SHOULDERL 2010 #define IDTEXT_SHOULDERR 2011 #define IDTEXT_A 2012 @@ -35,26 +42,23 @@ #define IDTEXT_Y 2015 #define IDTEXT_Z 2016 #define IDTEXT_START 2017 - #define IDTEXT_DPAD 2018 #define IDTEXT_MX 2019 #define IDTEXT_MY 2020 #define IDTEXT_SX 2021 #define IDTEXT_SY 2022 - - -#define IDC_ABOUT_TEXT 1032 -#define IDC_ABOUT_TEXT2 1033 -#define IDC_ABOUT_TEXT3 1034 - +#define IDTEXT_HALFPRESS 2024 +#define IDTEXT_DPAD_DOWN 2025 +#define IDTEXT_DPAD_LEFT 2026 +#define IDTEXT_DPAD_RIGHT 2027 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_RESOURCE_VALUE 106 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1036 +#define _APS_NEXT_CONTROL_VALUE 1041 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/config.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/config.cpp index 24e2a9c121..acdfb5e4ef 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/config.cpp +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/config.cpp @@ -35,6 +35,13 @@ extern CONTROLLER_INFO *joyinfo; extern CONTROLLER_MAPPING joysticks[4]; extern bool emulator_running; +static const char* ControllerType[] = +{ + "Joystick (default)", + "Joystick (no hat)", + "Keyboard" +}; + // Create dialog and pages // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ int OpenConfig(HINSTANCE hInst, HWND _hParent) @@ -128,11 +135,13 @@ BOOL ControllerTab(HWND hDlg, UINT message, UINT wParam, LONG lParam, int contro { ComboBox_Enable(GetDlgItem(hDlg, IDC_JOYNAME), FALSE); Button_Enable(GetDlgItem(hDlg, IDC_JOYATTACH), FALSE); + ComboBox_Enable(GetDlgItem(hDlg, IDC_CONTROLTYPE), FALSE); } else { ComboBox_Enable(GetDlgItem(hDlg, IDC_JOYNAME), TRUE); Button_Enable(GetDlgItem(hDlg, IDC_JOYATTACH), TRUE); + ComboBox_Enable(GetDlgItem(hDlg, IDC_CONTROLTYPE), TRUE); } // Search for devices and add the to the device list @@ -144,6 +153,11 @@ BOOL ControllerTab(HWND hDlg, UINT message, UINT wParam, LONG lParam, int contro SendMessage(CB, CB_ADDSTRING, 0, reinterpret_cast((LPCTSTR)joyinfo[x].Name)); } + CB = GetDlgItem(hDlg, IDC_CONTROLTYPE); + SendMessage(CB, CB_ADDSTRING, 0, reinterpret_cast((LPCTSTR)ControllerType[CTL_TYPE_JOYSTICK])); + SendMessage(CB, CB_ADDSTRING, 0, reinterpret_cast((LPCTSTR)ControllerType[CTL_TYPE_JOYSTICK_NO_HAT])); + //SendMessage(CB, CB_ADDSTRING, 0, reinterpret_cast((LPCTSTR)ControllerType[CTL_TYPE_KEYBOARD])); + char buffer [8]; CB = GetDlgItem(hDlg, IDC_DEADZONE); SendMessage(CB, CB_RESETCONTENT, 0, 0); @@ -173,12 +187,24 @@ BOOL ControllerTab(HWND hDlg, UINT message, UINT wParam, LONG lParam, int contro // Selected a different joystick if(HIWORD(wParam) == CBN_SELCHANGE) { - joysticks[controller].ID = (int)SendMessage(GetDlgItem(hDlg, IDC_JOYNAME), CB_GETCURSEL, 0, 0); + joysticks[controller].ID = (int)SendMessage(GetDlgItem(hDlg, IDC_JOYNAME), CB_GETCURSEL, 0, 0); } return TRUE; } break; + case IDC_CONTROLTYPE: + { + // Selected a different joystick + if(HIWORD(wParam) == CBN_SELCHANGE) + { + joysticks[controller].controllertype = (int)SendMessage(GetDlgItem(hDlg, IDC_CONTROLTYPE), CB_GETCURSEL, 0, 0); + UpdateVisibleItems(hDlg, joysticks[controller].controllertype); + } + return TRUE; + } + break; + case IDC_SHOULDERL: case IDC_SHOULDERR: case IDC_A: @@ -187,6 +213,10 @@ BOOL ControllerTab(HWND hDlg, UINT message, UINT wParam, LONG lParam, int contro case IDC_Y: case IDC_Z: case IDC_START: + case IDC_HALFPRESS: + case IDC_DPAD_DOWN: + case IDC_DPAD_LEFT: + case IDC_DPAD_RIGHT: { GetButtons(hDlg, LOWORD(wParam), controller); return TRUE; @@ -195,7 +225,10 @@ BOOL ControllerTab(HWND hDlg, UINT message, UINT wParam, LONG lParam, int contro case IDC_DPAD: { - GetHats(hDlg, LOWORD(wParam), controller); + if(joysticks[controller].controllertype) + GetButtons(hDlg, LOWORD(wParam), controller); + else + GetHats(hDlg, LOWORD(wParam), controller); return TRUE; } break; @@ -422,7 +455,7 @@ void SetControllerAll(HWND hDlg, int controller) SetButton(hDlg, IDTEXT_Z, joysticks[controller].buttons[CTL_Z_TRIGGER]); SetButton(hDlg, IDTEXT_START, joysticks[controller].buttons[CTL_START]); - SetButton(hDlg, IDTEXT_DPAD, joysticks[controller].dpad); + SetButton(hDlg, IDTEXT_HALFPRESS, joysticks[controller].halfpress); SetButton(hDlg, IDTEXT_MX, joysticks[controller].axis[CTL_MAIN_X]); SetButton(hDlg, IDTEXT_MY, joysticks[controller].axis[CTL_MAIN_Y]); @@ -431,7 +464,20 @@ void SetControllerAll(HWND hDlg, int controller) SendDlgItemMessage(hDlg, IDC_JOYATTACH, BM_SETCHECK, joysticks[controller].enabled, 0); + SendMessage(GetDlgItem(hDlg, IDC_CONTROLTYPE), CB_SETCURSEL, joysticks[controller].controllertype, 0); SendMessage(GetDlgItem(hDlg, IDC_DEADZONE), CB_SETCURSEL, joysticks[controller].deadzone, 0); + + UpdateVisibleItems(hDlg, joysticks[controller].controllertype); + + if(joysticks[controller].controllertype == CTL_TYPE_JOYSTICK) + SetButton(hDlg, IDTEXT_DPAD, joysticks[controller].dpad); + else + { + SetButton(hDlg, IDTEXT_DPAD, joysticks[controller].dpad2[CTL_D_PAD_UP]); + SetButton(hDlg, IDTEXT_DPAD_DOWN, joysticks[controller].dpad2[CTL_D_PAD_DOWN]); + SetButton(hDlg, IDTEXT_DPAD_LEFT, joysticks[controller].dpad2[CTL_D_PAD_LEFT]); + SetButton(hDlg, IDTEXT_DPAD_RIGHT, joysticks[controller].dpad2[CTL_D_PAD_RIGHT]); + } } // Get dialog items @@ -448,8 +494,18 @@ void GetControllerAll(HWND hDlg, int controller) joysticks[controller].buttons[CTL_Y_BUTTON] = GetButton(hDlg, IDTEXT_Y); joysticks[controller].buttons[CTL_Z_TRIGGER] = GetButton(hDlg, IDTEXT_Z); joysticks[controller].buttons[CTL_START] = GetButton(hDlg, IDTEXT_START); - - joysticks[controller].dpad = GetButton(hDlg, IDTEXT_DPAD); + + joysticks[controller].halfpress = GetButton(hDlg, IDTEXT_HALFPRESS); + + if(joysticks[controller].controllertype == CTL_TYPE_JOYSTICK) + joysticks[controller].dpad = GetButton(hDlg, IDTEXT_DPAD); + else + { + joysticks[controller].dpad2[CTL_D_PAD_UP] = GetButton(hDlg, IDTEXT_DPAD); + joysticks[controller].dpad2[CTL_D_PAD_DOWN] = GetButton(hDlg, IDTEXT_DPAD_DOWN); + joysticks[controller].dpad2[CTL_D_PAD_LEFT] = GetButton(hDlg, IDTEXT_DPAD_LEFT); + joysticks[controller].dpad2[CTL_D_PAD_RIGHT] = GetButton(hDlg, IDTEXT_DPAD_RIGHT); + } joysticks[controller].axis[CTL_MAIN_X] = GetButton(hDlg, IDTEXT_MX); joysticks[controller].axis[CTL_MAIN_Y] = GetButton(hDlg, IDTEXT_MY); @@ -458,9 +514,46 @@ void GetControllerAll(HWND hDlg, int controller) joysticks[controller].enabled = (int)SendMessage(GetDlgItem(hDlg, IDC_JOYATTACH), BM_GETCHECK, 0, 0); + joysticks[controller].controllertype = (int)SendMessage(GetDlgItem(hDlg, IDC_CONTROLTYPE), CB_GETCURSEL, 0, 0); joysticks[controller].deadzone = (int)SendMessage(GetDlgItem(hDlg, IDC_DEADZONE), CB_GETCURSEL, 0, 0); } +void UpdateVisibleItems(HWND hDlg, int controllertype) +{ + if(controllertype == CTL_TYPE_KEYBOARD) + ComboBox_Enable(GetDlgItem(hDlg, IDC_JOYNAME), FALSE); + else + ComboBox_Enable(GetDlgItem(hDlg, IDC_JOYNAME), TRUE); + + if(controllertype) + { + // 4 extra buttons + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_DOWN), TRUE); + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_LEFT), TRUE); + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_RIGHT), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_DOWN), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_LEFT), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_RIGHT), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT1), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT2), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT3), TRUE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT4), TRUE); + } + else + { + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_DOWN), FALSE); + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_LEFT), FALSE); + ShowWindow(GetDlgItem(hDlg, IDTEXT_DPAD_RIGHT), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_DOWN), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_LEFT), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_RIGHT), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT1), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT2), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT3), FALSE); + ShowWindow(GetDlgItem(hDlg, IDC_DPAD_TEXT4), FALSE); + } +} + // Set text in static text item // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ void SetButton(HWND hDlg, int item, int value) diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/config.h b/Source/Plugins/Plugin_nJoy_SDL/Src/config.h index 784d75e98e..0b6e8debc5 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/config.h +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/config.h @@ -53,6 +53,8 @@ bool GetButtons(HWND hDlg, int buttonid, int controller); bool GetHats(HWND hDlg, int buttonid, int controller); bool GetAxis(HWND hDlg, int buttonid, int controller); +void UpdateVisibleItems(HWND hDlg, int controllertype); + void GetControllerAll(HWND hDlg, int controller); void SetControllerAll(HWND hDlg, int controller); diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp index 59f61c8664..1506c8df05 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.cpp @@ -205,26 +205,31 @@ void PAD_GetStatus(BYTE _numPAD, SPADStatus* _pPADStatus) if ((sub_stick_x < deadzone2) || (sub_stick_x > deadzone)) _pPADStatus->substickX += sub_stick_x; if ((sub_stick_y < deadzone2) || (sub_stick_y > deadzone)) _pPADStatus->substickY += sub_stick_y; + int triggervalue = 255; + if (joystate[_numPAD].halfpress) + triggervalue = 100; + // Set buttons if (joystate[_numPAD].buttons[CTL_L_SHOULDER]) { _pPADStatus->button|=PAD_TRIGGER_L; - _pPADStatus->triggerLeft = 255; // Perhaps support halfpress/pressure + _pPADStatus->triggerLeft = triggervalue; } if (joystate[_numPAD].buttons[CTL_R_SHOULDER]) { _pPADStatus->button|=PAD_TRIGGER_R; - _pPADStatus->triggerRight = 255; // Perhaps support halfpress/pressure + _pPADStatus->triggerRight = triggervalue; } + if (joystate[_numPAD].buttons[CTL_A_BUTTON]) { _pPADStatus->button|=PAD_BUTTON_A; - _pPADStatus->analogA = 255; // Perhaps support halfpress/pressure + _pPADStatus->analogA = 255; // Perhaps support pressure? } if (joystate[_numPAD].buttons[CTL_B_BUTTON]) { _pPADStatus->button|=PAD_BUTTON_B; - _pPADStatus->analogB = 255; // Perhaps support halfpress/pressure + _pPADStatus->analogB = 255; // Perhaps support pressure? } if (joystate[_numPAD].buttons[CTL_X_BUTTON]) _pPADStatus->button|=PAD_BUTTON_X; if (joystate[_numPAD].buttons[CTL_Y_BUTTON]) _pPADStatus->button|=PAD_BUTTON_Y; @@ -232,11 +237,25 @@ void PAD_GetStatus(BYTE _numPAD, SPADStatus* _pPADStatus) if (joystate[_numPAD].buttons[CTL_START]) _pPADStatus->button|=PAD_BUTTON_START; // Set D-pad - if(joystate[_numPAD].dpad == SDL_HAT_LEFTUP || joystate[_numPAD].dpad == SDL_HAT_UP || joystate[_numPAD].dpad == SDL_HAT_RIGHTUP ) _pPADStatus->button|=PAD_BUTTON_UP; - if(joystate[_numPAD].dpad == SDL_HAT_LEFTUP || joystate[_numPAD].dpad == SDL_HAT_LEFT || joystate[_numPAD].dpad == SDL_HAT_LEFTDOWN ) _pPADStatus->button|=PAD_BUTTON_LEFT; - if(joystate[_numPAD].dpad == SDL_HAT_LEFTDOWN || joystate[_numPAD].dpad == SDL_HAT_DOWN || joystate[_numPAD].dpad == SDL_HAT_RIGHTDOWN ) _pPADStatus->button|=PAD_BUTTON_DOWN; - if(joystate[_numPAD].dpad == SDL_HAT_RIGHTUP || joystate[_numPAD].dpad == SDL_HAT_RIGHT || joystate[_numPAD].dpad == SDL_HAT_RIGHTDOWN ) _pPADStatus->button|=PAD_BUTTON_RIGHT; - + if(joysticks[_numPAD].controllertype == CTL_TYPE_JOYSTICK) + { + if(joystate[_numPAD].dpad == SDL_HAT_LEFTUP || joystate[_numPAD].dpad == SDL_HAT_UP || joystate[_numPAD].dpad == SDL_HAT_RIGHTUP ) _pPADStatus->button|=PAD_BUTTON_UP; + if(joystate[_numPAD].dpad == SDL_HAT_LEFTUP || joystate[_numPAD].dpad == SDL_HAT_LEFT || joystate[_numPAD].dpad == SDL_HAT_LEFTDOWN ) _pPADStatus->button|=PAD_BUTTON_LEFT; + if(joystate[_numPAD].dpad == SDL_HAT_LEFTDOWN || joystate[_numPAD].dpad == SDL_HAT_DOWN || joystate[_numPAD].dpad == SDL_HAT_RIGHTDOWN ) _pPADStatus->button|=PAD_BUTTON_DOWN; + if(joystate[_numPAD].dpad == SDL_HAT_RIGHTUP || joystate[_numPAD].dpad == SDL_HAT_RIGHT || joystate[_numPAD].dpad == SDL_HAT_RIGHTDOWN ) _pPADStatus->button|=PAD_BUTTON_RIGHT; + } + else + { + if(joystate[_numPAD].dpad2[CTL_D_PAD_UP]) + _pPADStatus->button|=PAD_BUTTON_UP; + if(joystate[_numPAD].dpad2[CTL_D_PAD_DOWN]) + _pPADStatus->button|=PAD_BUTTON_DOWN; + if(joystate[_numPAD].dpad2[CTL_D_PAD_LEFT]) + _pPADStatus->button|=PAD_BUTTON_LEFT; + if(joystate[_numPAD].dpad2[CTL_D_PAD_RIGHT]) + _pPADStatus->button|=PAD_BUTTON_RIGHT; + } + _pPADStatus->err = PAD_ERR_NONE; } @@ -299,7 +318,17 @@ void GetJoyState(int controller) joystate[controller].buttons[CTL_Z_TRIGGER] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].buttons[CTL_Z_TRIGGER]); joystate[controller].buttons[CTL_START] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].buttons[CTL_START]); - joystate[controller].dpad = SDL_JoystickGetHat(joystate[controller].joy, joysticks[controller].dpad); + joystate[controller].halfpress = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].halfpress); + + if(joysticks[controller].controllertype == CTL_TYPE_JOYSTICK) + joystate[controller].dpad = SDL_JoystickGetHat(joystate[controller].joy, joysticks[controller].dpad); + else + { + joystate[controller].dpad2[CTL_D_PAD_UP] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].dpad2[CTL_D_PAD_UP]); + joystate[controller].dpad2[CTL_D_PAD_DOWN] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].dpad2[CTL_D_PAD_DOWN]); + joystate[controller].dpad2[CTL_D_PAD_LEFT] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].dpad2[CTL_D_PAD_LEFT]); + joystate[controller].dpad2[CTL_D_PAD_RIGHT] = SDL_JoystickGetButton(joystate[controller].joy, joysticks[controller].dpad2[CTL_D_PAD_RIGHT]); + } } // Search attached devices @@ -399,7 +428,7 @@ void DEBUG_QUIT() void SaveConfig() { IniFile file; - file.Load("nJoy"); + file.Load("nJoy.ini"); for (int i=0; i<4; i++) { @@ -415,6 +444,10 @@ void SaveConfig() file.Set(SectionName, "z_trigger", joysticks[i].buttons[CTL_Z_TRIGGER]); file.Set(SectionName, "start_button", joysticks[i].buttons[CTL_START]); file.Set(SectionName, "dpad", joysticks[i].dpad); + file.Set(SectionName, "dpad_up", joysticks[i].dpad2[CTL_D_PAD_UP]); + file.Set(SectionName, "dpad_down", joysticks[i].dpad2[CTL_D_PAD_DOWN]); + file.Set(SectionName, "dpad_left", joysticks[i].dpad2[CTL_D_PAD_LEFT]); + file.Set(SectionName, "dpad_right", joysticks[i].dpad2[CTL_D_PAD_RIGHT]); file.Set(SectionName, "main_x", joysticks[i].axis[CTL_MAIN_X]); file.Set(SectionName, "main_y", joysticks[i].axis[CTL_MAIN_Y]); file.Set(SectionName, "sub_x", joysticks[i].axis[CTL_SUB_X]); @@ -423,9 +456,10 @@ void SaveConfig() file.Set(SectionName, "deadzone", joysticks[i].deadzone); file.Set(SectionName, "halfpress", joysticks[i].halfpress); file.Set(SectionName, "joy_id", joysticks[i].ID); + file.Set(SectionName, "controllertype", joysticks[i].controllertype); } - file.Save("nJoy"); + file.Save("nJoy.ini"); } // Load settings from file @@ -433,7 +467,7 @@ void SaveConfig() void LoadConfig() { IniFile file; - file.Load("nJoy"); + file.Load("nJoy.ini"); for (int i=0; i<4; i++) { @@ -449,13 +483,18 @@ void LoadConfig() file.Get(SectionName, "z_trigger", &joysticks[i].buttons[CTL_Z_TRIGGER], 7); file.Get(SectionName, "start_button", &joysticks[i].buttons[CTL_START], 9); file.Get(SectionName, "dpad", &joysticks[i].dpad, 0); + file.Get(SectionName, "dpad_up", &joysticks[i].dpad2[CTL_D_PAD_UP], 0); + file.Get(SectionName, "dpad_down", &joysticks[i].dpad2[CTL_D_PAD_DOWN], 0); + file.Get(SectionName, "dpad_left", &joysticks[i].dpad2[CTL_D_PAD_LEFT], 0); + file.Get(SectionName, "dpad_right", &joysticks[i].dpad2[CTL_D_PAD_RIGHT], 0); file.Get(SectionName, "main_x", &joysticks[i].axis[CTL_MAIN_X], 0); file.Get(SectionName, "main_y", &joysticks[i].axis[CTL_MAIN_Y], 1); file.Get(SectionName, "sub_x", &joysticks[i].axis[CTL_SUB_X], 2); file.Get(SectionName, "sub_y", &joysticks[i].axis[CTL_SUB_Y], 3); file.Get(SectionName, "enabled", &joysticks[i].enabled, 1); file.Get(SectionName, "deadzone", &joysticks[i].deadzone, 9); - file.Get(SectionName, "halfpress", &joysticks[i].halfpress, 0); + file.Get(SectionName, "halfpress", &joysticks[i].halfpress, 6); file.Get(SectionName, "joy_id", &joysticks[i].ID, 0); + file.Get(SectionName, "controllertype", &joysticks[i].controllertype, 0); } } diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.h b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.h index 532957dbb4..189ff55623 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.h +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/nJoy.h @@ -59,18 +59,22 @@ struct CONTROLLER_STATE{ // GC PAD INFO/STATE int buttons[8]; // Amount of buttons (A B X Y Z, L-Trigger R-Trigger Start) might need to change the triggers buttons int dpad; // 1 HAT (8 directions + neutral) + int dpad2[4]; // d-pad using buttons int axis[4]; // 2 x 2 Axes (Main & Sub) + int halfpress; // ... SDL_Joystick *joy; // SDL joystick device }; struct CONTROLLER_MAPPING{ // GC PAD MAPPING int buttons[8]; // Amount of buttons (A B X Y Z, L-Trigger R-Trigger Start) might need to change the triggers buttons int dpad; // 1 HAT (8 directions + neutral) + int dpad2[4]; // d-pad using buttons int axis[4]; // 2 x 2 Axes (Main & Sub) int enabled; // Pad attached? int deadzone; // Deadzone... what else? - int halfpress; // Not implemented + int halfpress; // Halfpress... you know, like not fully pressed ;)... int ID; // SDL joystick device ID + int controllertype; // Joystick, Joystick no hat or a keyboard (perhaps a mouse later) }; struct CONTROLLER_INFO{ // CONNECTED WINDOWS DEVICES INFO @@ -100,9 +104,23 @@ enum CTL_X_BUTTON, CTL_Y_BUTTON, CTL_Z_TRIGGER, - CTL_START + CTL_START }; +enum +{ + CTL_TYPE_JOYSTICK = 0, + CTL_TYPE_JOYSTICK_NO_HAT, + CTL_TYPE_KEYBOARD +}; + +enum +{ + CTL_D_PAD_UP = 0, + CTL_D_PAD_DOWN, + CTL_D_PAD_LEFT, + CTL_D_PAD_RIGHT +}; ////////////////////////////////////////////////////////////////////////////////////////// // Custom Functions // ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ