Add joystick support to wx GUI.
This commit is contained in:
parent
72c6716f49
commit
539f0bc150
17 changed files with 1381 additions and 504 deletions
|
|
@ -45,7 +45,7 @@ pcem_SOURCES += wx-main.cc wx-config_sel.c wx-dialogbox.cc wx-utils.cc wx-app.cc
|
|||
wx-sdl2-joystick.c wx-sdl2-mouse.c wx-sdl2-keyboard.c wx-sdl2-video.c wx-sdl2-midi.c \
|
||||
wx-sdl2.c wx-config.c wx-deviceconfig.cc wx-status.cc wx-sdl2-status.c \
|
||||
wx-resources.cpp wx-thread.c wx-common.c wx-sdl2-display.c wx-sdl2-video-renderer.c wx-sdl2-video-gl3.c \
|
||||
wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc
|
||||
wx-glslp-parser.c wx-shader_man.c wx-shaderconfig.cc wx-joystickconfig.cc
|
||||
else
|
||||
pcem_CFLAGS = $(allegro_CFLAGS) -DPCEM_ALLEGRO
|
||||
pcem_CXXFLAGS =
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
|
|||
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
|
||||
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
|
||||
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
|
||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
|
|||
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
|
||||
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
|
||||
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
|
||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad
|
|||
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o win-midi.o \
|
||||
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \
|
||||
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx.res
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx.res
|
||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o ali1429.o amstrad
|
|||
vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xtide.o win-midi.o \
|
||||
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \
|
||||
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-hostconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx.res
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx.res
|
||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||
NETOBJ = ne2000.o nethandler.o
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy70
|
|||
x86seg.o x87.o xtide.o sound_dbopl.o sound_resid.o \
|
||||
wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \
|
||||
wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o
|
||||
wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o
|
||||
DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o
|
||||
SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o
|
||||
|
||||
|
|
|
|||
|
|
@ -581,3 +581,5 @@ void saveconfig(char *fn);
|
|||
void saveconfig_global_only();
|
||||
|
||||
#define UNUSED(x) (void)x
|
||||
|
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
|
|
|
|||
BIN
src/icons/16x16/joystick.png
Normal file
BIN
src/icons/16x16/joystick.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 714 B |
BIN
src/icons/32x32/joystick.png
Normal file
BIN
src/icons/32x32/joystick.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
96
src/pc.xrc
96
src/pc.xrc
|
|
@ -1942,6 +1942,102 @@
|
|||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="notebookpage">
|
||||
<selected>0</selected>
|
||||
<bitmap>icons/32x32/joystick.png</bitmap>
|
||||
<object class="wxPanel">
|
||||
<style>wxTAB_TRAVERSAL</style>
|
||||
<object class="wxFlexGridSizer">
|
||||
<rows>2</rows>
|
||||
<cols>0</cols>
|
||||
<vgap>0</vgap>
|
||||
<hgap>0</hgap>
|
||||
<growablecols></growablecols>
|
||||
<growablerows></growablerows>
|
||||
<object class="sizeritem">
|
||||
<object class="wxFlexGridSizer">
|
||||
<rows>0</rows>
|
||||
<cols>4</cols>
|
||||
<vgap>0</vgap>
|
||||
<hgap>0</hgap>
|
||||
<growablecols>1</growablecols>
|
||||
<growablerows></growablerows>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL | wxALIGN_CENTER_VERTICAL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxStaticText">
|
||||
<size>80,-1</size>
|
||||
<label>Joystick:</label>
|
||||
<wrap>-1</wrap>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<option>1</option>
|
||||
<flag>wxEXPAND</flag>
|
||||
<border>5</border>
|
||||
<object class="wxBoxSizer">
|
||||
<orient>wxHORIZONTAL</orient>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxComboBox" name="IDC_COMBOJOY">
|
||||
<style>wxCB_DROPDOWN|wxCB_READONLY</style>
|
||||
<size>350,-1</size>
|
||||
<value></value>
|
||||
<content />
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<object class="wxGridSizer">
|
||||
<rows>0</rows>
|
||||
<cols>4</cols>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxButton" name="IDC_JOY1">
|
||||
<label>Joystick 1...</label>
|
||||
<default>1</default>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxButton" name="IDC_JOY2">
|
||||
<label>Joystick 2...</label>
|
||||
<default>1</default>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxButton" name="IDC_JOY3">
|
||||
<label>Joystick 3...</label>
|
||||
<default>1</default>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<option>0</option>
|
||||
<flag>wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxButton" name="IDC_JOY4">
|
||||
<label>Joystick 4...</label>
|
||||
<default>1</default>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="notebookpage">
|
||||
<label></label>
|
||||
<selected>0</selected>
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@
|
|||
#include "scsi_aha1540.h"
|
||||
#include "timer.h"
|
||||
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
int primed = 0;
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
|||
140
src/wx-config.c
140
src/wx-config.c
|
|
@ -1,5 +1,6 @@
|
|||
#include "wx-utils.h"
|
||||
#include "wx-sdl2.h"
|
||||
#include "wx-joystickconfig.h"
|
||||
|
||||
#include "ibm.h"
|
||||
#include "ide.h"
|
||||
|
|
@ -269,6 +270,7 @@ int config_dlgsave(void* hdlg)
|
|||
int temp_fda_type, temp_fdb_type;
|
||||
int temp_mouse_type;
|
||||
int temp_lpt1_device;
|
||||
int temp_joystick_type;
|
||||
#ifdef USE_NETWORKING
|
||||
int temp_network_card;
|
||||
#endif
|
||||
|
|
@ -327,8 +329,9 @@ int config_dlgsave(void* hdlg)
|
|||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBODRB"));
|
||||
temp_fdb_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_COMBOJOY"));
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOMOUSE"));
|
||||
temp_mouse_type = settings_list_to_mouse[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)];
|
||||
|
||||
|
|
@ -468,8 +471,8 @@ int config_dlgsave(void* hdlg)
|
|||
|
||||
speedchanged();
|
||||
|
||||
// joystick_type = temp_joystick_type;
|
||||
// gameport_update_joystick_type();
|
||||
joystick_type = temp_joystick_type;
|
||||
gameport_update_joystick_type();
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -640,24 +643,24 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
|||
else
|
||||
wx_sendmessage(h, WX_WM_SETTEXT, 0, (LONG_PARAM) "KB");
|
||||
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_COMBOJOY"));
|
||||
// c = 0;
|
||||
// while (joystick_get_name(c))
|
||||
// {
|
||||
// wx_sendmessage(h, CB_ADDSTRING, 0, joystick_get_name(c));
|
||||
// c++;
|
||||
// }
|
||||
// wx_enablewindow(h, TRUE);
|
||||
// wx_sendmessage(h, CB_SETCURSEL, joystick_type, 0);
|
||||
//
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_JOY1"));
|
||||
// wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 1) ? TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_JOY2"));
|
||||
// wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 2) ? TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_JOY3"));
|
||||
// wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 3) ? TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, ID("IDC_JOY4"));
|
||||
// wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 4) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
c = 0;
|
||||
while (joystick_get_name(c))
|
||||
{
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)joystick_get_name(c));
|
||||
c++;
|
||||
}
|
||||
wx_enablewindow(h, TRUE);
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, joystick_type, 0);
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY1"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 1) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY2"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 2) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY3"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 3) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY4"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(joystick_type) >= 4) ? TRUE : FALSE);
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOWS"));
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM) "System default");
|
||||
|
|
@ -1028,51 +1031,54 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
|||
deviceconfig_open(hdlg, (void *)network_card_getdevice(temp_network_card));
|
||||
}
|
||||
#endif
|
||||
//
|
||||
// case IDC_COMBOJOY:
|
||||
// if (HIWORD(wParam) == CBN_SELCHANGE) {
|
||||
// h = wx_getdlgitem(hdlg, IDC_COMBOJOY);
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
//
|
||||
// h = wx_getdlgitem(hdlg, IDC_JOY1);
|
||||
// wx_enablewindow(h,
|
||||
// (joystick_get_max_joysticks(temp_joystick_type) >= 1) ?
|
||||
// TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, IDC_JOY2);
|
||||
// wx_enablewindow(h,
|
||||
// (joystick_get_max_joysticks(temp_joystick_type) >= 2) ?
|
||||
// TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, IDC_JOY3);
|
||||
// wx_enablewindow(h,
|
||||
// (joystick_get_max_joysticks(temp_joystick_type) >= 3) ?
|
||||
// TRUE : FALSE);
|
||||
// h = wx_getdlgitem(hdlg, IDC_JOY4);
|
||||
// wx_enablewindow(h,
|
||||
// (joystick_get_max_joysticks(temp_joystick_type) >= 4) ?
|
||||
// TRUE : FALSE);
|
||||
// }
|
||||
// break;
|
||||
//
|
||||
// case IDC_JOY1:
|
||||
// h = wx_getdlgitem(hdlg, IDC_COMBOJOY);
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
// joystickconfig_open(hdlg, 0, temp_joystick_type);
|
||||
// break;
|
||||
// case IDC_JOY2:
|
||||
// h = wx_getdlgitem(hdlg, IDC_COMBOJOY);
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
// joystickconfig_open(hdlg, 1, temp_joystick_type);
|
||||
// break;
|
||||
// case IDC_JOY3:
|
||||
// h = wx_getdlgitem(hdlg, IDC_COMBOJOY);
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
// joystickconfig_open(hdlg, 2, temp_joystick_type);
|
||||
// break;
|
||||
// case IDC_JOY4:
|
||||
// h = wx_getdlgitem(hdlg, IDC_COMBOJOY);
|
||||
// temp_joystick_type = wx_sendmessage(h, CB_GETCURSEL, 0, 0);
|
||||
// joystickconfig_open(hdlg, 3, temp_joystick_type);
|
||||
// break;
|
||||
else if (wParam == WX_ID("IDC_COMBOJOY"))
|
||||
{
|
||||
int temp_joystick_type;
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY1"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(temp_joystick_type) >= 1) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY2"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(temp_joystick_type) >= 2) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY3"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(temp_joystick_type) >= 3) ? TRUE : FALSE);
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_JOY4"));
|
||||
wx_enablewindow(h, (joystick_get_max_joysticks(temp_joystick_type) >= 4) ? TRUE : FALSE);
|
||||
}
|
||||
else if (wParam == WX_ID("IDC_JOY1"))
|
||||
{
|
||||
int temp_joystick_type;
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
joystickconfig_open(hdlg, 0, temp_joystick_type);
|
||||
}
|
||||
else if (wParam == WX_ID("IDC_JOY2"))
|
||||
{
|
||||
int temp_joystick_type;
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
joystickconfig_open(hdlg, 1, temp_joystick_type);
|
||||
}
|
||||
else if (wParam == WX_ID("IDC_JOY3"))
|
||||
{
|
||||
int temp_joystick_type;
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
joystickconfig_open(hdlg, 2, temp_joystick_type);
|
||||
}
|
||||
else if (wParam == WX_ID("IDC_JOY4"))
|
||||
{
|
||||
int temp_joystick_type;
|
||||
|
||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOJOY"));
|
||||
temp_joystick_type = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
joystickconfig_open(hdlg, 3, temp_joystick_type);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
358
src/wx-joystickconfig.cc
Normal file
358
src/wx-joystickconfig.cc
Normal file
|
|
@ -0,0 +1,358 @@
|
|||
#include "wx-joystickconfig.h"
|
||||
|
||||
#include "wx-utils.h"
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#include "wx-dialogbox.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "wx/xrc/xmlres.h"
|
||||
|
||||
extern "C" {
|
||||
void pclog(const char *format, ...);
|
||||
#include "config.h"
|
||||
#include "device.h"
|
||||
#include "gameport.h"
|
||||
#include "plat-joystick.h"
|
||||
}
|
||||
|
||||
#define IDC_CONFIG_BASE 1000
|
||||
|
||||
static int joystick_nr;
|
||||
static int joystick_config_type;
|
||||
#define AXIS_STRINGS_MAX 3
|
||||
static char axis_strings[AXIS_STRINGS_MAX][10] = {"X Axis", "Y Axis", "Z Axis"};
|
||||
|
||||
static void rebuild_axis_button_selections(void *hdlg)
|
||||
{
|
||||
int id = IDC_CONFIG_BASE + 3;
|
||||
void *h;
|
||||
int joystick;
|
||||
int c, d;
|
||||
|
||||
h = wx_getdlgitem(hdlg, IDC_CONFIG_BASE+1);
|
||||
joystick = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
for (c = 0; c < joystick_get_axis_count(joystick_config_type); c++)
|
||||
{
|
||||
int sel = c;
|
||||
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
||||
|
||||
if (joystick)
|
||||
{
|
||||
for (d = 0; d < plat_joystick_state[joystick-1].nr_axes; d++)
|
||||
{
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)plat_joystick_state[joystick-1].axis[d].name);
|
||||
if (c < AXIS_STRINGS_MAX)
|
||||
{
|
||||
if (!stricmp(axis_strings[c], plat_joystick_state[joystick-1].axis[d].name))
|
||||
sel = d;
|
||||
}
|
||||
}
|
||||
for (d = 0; d < plat_joystick_state[joystick-1].nr_povs; d++)
|
||||
{
|
||||
char s[80];
|
||||
|
||||
sprintf(s, "%s (X axis)", plat_joystick_state[joystick-1].pov[d].name);
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||
sprintf(s, "%s (Y axis)", plat_joystick_state[joystick-1].pov[d].name);
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||
}
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, sel, 0);
|
||||
wx_enablewindow(h, TRUE);
|
||||
}
|
||||
else
|
||||
wx_enablewindow(h, FALSE);
|
||||
|
||||
id += 2;
|
||||
}
|
||||
|
||||
for (c = 0; c < joystick_get_button_count(joystick_config_type); c++)
|
||||
{
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
||||
|
||||
if (joystick)
|
||||
{
|
||||
for (d = 0; d < plat_joystick_state[joystick-1].nr_buttons; d++)
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)plat_joystick_state[joystick-1].button[d].name);
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, c, 0);
|
||||
wx_enablewindow(h, TRUE);
|
||||
}
|
||||
else
|
||||
wx_enablewindow(h, FALSE);
|
||||
|
||||
id += 2;
|
||||
}
|
||||
|
||||
for (c = 0; c < joystick_get_pov_count(joystick_config_type)*2; c++)
|
||||
{
|
||||
int sel = c;
|
||||
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
||||
|
||||
if (joystick)
|
||||
{
|
||||
for (d = 0; d < plat_joystick_state[joystick-1].nr_povs; d++)
|
||||
{
|
||||
char s[80];
|
||||
|
||||
sprintf(s, "%s (X axis)", plat_joystick_state[joystick-1].pov[d].name);
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||
sprintf(s, "%s (Y axis)", plat_joystick_state[joystick-1].pov[d].name);
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
||||
}
|
||||
for (d = 0; d < plat_joystick_state[joystick-1].nr_axes; d++)
|
||||
{
|
||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LPARAM)(LPCSTR)plat_joystick_state[joystick-1].axis[d].name);
|
||||
}
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, sel, 0);
|
||||
wx_enablewindow(h, TRUE);
|
||||
}
|
||||
else
|
||||
wx_enablewindow(h, FALSE);
|
||||
|
||||
id += 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static int get_axis(void *hdlg, int id)
|
||||
{
|
||||
void *h = wx_getdlgitem(hdlg, id);
|
||||
int axis_sel = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
int nr_axes = plat_joystick_state[joystick_state[joystick_nr].plat_joystick_nr-1].nr_axes;
|
||||
|
||||
if (axis_sel < nr_axes)
|
||||
return axis_sel;
|
||||
|
||||
axis_sel -= nr_axes;
|
||||
if (axis_sel & 1)
|
||||
return POV_Y | (axis_sel >> 1);
|
||||
else
|
||||
return POV_X | (axis_sel >> 1);
|
||||
}
|
||||
|
||||
static int get_pov(void *hdlg, int id)
|
||||
{
|
||||
void *h = wx_getdlgitem(hdlg, id);
|
||||
int axis_sel = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
int nr_povs = plat_joystick_state[joystick_state[joystick_nr].plat_joystick_nr-1].nr_povs*2;
|
||||
|
||||
if (axis_sel < nr_povs)
|
||||
{
|
||||
if (axis_sel & 1)
|
||||
return POV_Y | (axis_sel >> 1);
|
||||
else
|
||||
return POV_X | (axis_sel >> 1);
|
||||
}
|
||||
|
||||
return axis_sel - nr_povs;
|
||||
}
|
||||
|
||||
static int joystickconfig_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WX_INITDIALOG:
|
||||
{
|
||||
// rebuild_axis_button_selections(hdlg);
|
||||
|
||||
void *h = wx_getdlgitem(hdlg, IDC_CONFIG_BASE+1);
|
||||
int c;
|
||||
int id = IDC_CONFIG_BASE + 3;
|
||||
int joystick = joystick_state[joystick_nr].plat_joystick_nr;
|
||||
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, joystick, 0);
|
||||
|
||||
rebuild_axis_button_selections(hdlg);
|
||||
|
||||
if (joystick_state[joystick_nr].plat_joystick_nr)
|
||||
{
|
||||
int nr_axes = plat_joystick_state[joystick-1].nr_axes;
|
||||
int nr_povs = plat_joystick_state[joystick-1].nr_povs;
|
||||
for (c = 0; c < joystick_get_axis_count(joystick_config_type); c++)
|
||||
{
|
||||
int mapping = joystick_state[joystick_nr].axis_mapping[c];
|
||||
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
if (mapping & POV_X)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, nr_axes + (mapping & 3)*2, 0);
|
||||
else if (mapping & POV_Y)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, nr_axes + (mapping & 3)*2 + 1, 0);
|
||||
else
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, mapping, 0);
|
||||
id += 2;
|
||||
}
|
||||
for (c = 0; c < joystick_get_button_count(joystick_config_type); c++)
|
||||
{
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, joystick_state[joystick_nr].button_mapping[c], 0);
|
||||
id += 2;
|
||||
}
|
||||
for (c = 0; c < joystick_get_pov_count(joystick_config_type); c++)
|
||||
{
|
||||
int mapping;
|
||||
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
mapping = joystick_state[joystick_nr].pov_mapping[c][0];
|
||||
if (mapping & POV_X)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, (mapping & 3)*2, 0);
|
||||
else if (mapping & POV_Y)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, (mapping & 3)*2 + 1, 0);
|
||||
else
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, mapping + nr_povs*2, 0);
|
||||
id += 2;
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
mapping = joystick_state[joystick_nr].pov_mapping[c][1];
|
||||
if (mapping & POV_X)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, (mapping & 3)*2, 0);
|
||||
else if (mapping & POV_Y)
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, (mapping & 3)*2 + 1, 0);
|
||||
else
|
||||
wx_sendmessage(h, WX_CB_SETCURSEL, mapping + nr_povs*2, 0);
|
||||
id += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
case WX_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_CONFIG_BASE+1:
|
||||
// if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||
rebuild_axis_button_selections(hdlg);
|
||||
break;
|
||||
|
||||
case wxID_OK:
|
||||
{
|
||||
void *h;
|
||||
int c;
|
||||
int id = IDC_CONFIG_BASE + 3;
|
||||
|
||||
h = wx_getdlgitem(hdlg, IDC_CONFIG_BASE+1);
|
||||
joystick_state[joystick_nr].plat_joystick_nr = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
|
||||
if (joystick_state[joystick_nr].plat_joystick_nr)
|
||||
{
|
||||
for (c = 0; c < joystick_get_axis_count(joystick_config_type); c++)
|
||||
{
|
||||
joystick_state[joystick_nr].axis_mapping[c] = get_axis(hdlg, id);
|
||||
id += 2;
|
||||
}
|
||||
for (c = 0; c < joystick_get_button_count(joystick_config_type); c++)
|
||||
{
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
joystick_state[joystick_nr].button_mapping[c] = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||
id += 2;
|
||||
}
|
||||
for (c = 0; c < joystick_get_pov_count(joystick_config_type); c++)
|
||||
{
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
joystick_state[joystick_nr].pov_mapping[c][0] = get_pov(hdlg, id);
|
||||
id += 2;
|
||||
h = wx_getdlgitem(hdlg, id);
|
||||
joystick_state[joystick_nr].pov_mapping[c][1] = get_pov(hdlg, id);
|
||||
id += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
case wxID_CANCEL:
|
||||
wx_enddialog(hdlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void joystickconfig_open(void *hwnd, int joy_nr, int type)
|
||||
{
|
||||
char s[257];
|
||||
int c;
|
||||
|
||||
PCemDialogBox dialog((wxWindow*) hwnd, joystickconfig_dlgproc);
|
||||
// dialog.SetWindowStyle(wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
|
||||
|
||||
joystick_nr = joy_nr;
|
||||
joystick_config_type = type;
|
||||
|
||||
dialog.SetTitle("Joystick Configuration");
|
||||
|
||||
wxFlexGridSizer* root = new wxFlexGridSizer(0, 1, 0, 0);
|
||||
root->SetFlexibleDirection(wxBOTH);
|
||||
root->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
|
||||
dialog.SetSizer(root);
|
||||
|
||||
wxFlexGridSizer* sizer = new wxFlexGridSizer(0, 2, 0, 0);
|
||||
sizer->SetFlexibleDirection(wxBOTH);
|
||||
sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
|
||||
sizer->AddGrowableCol(1);
|
||||
root->Add(sizer, 1, wxEXPAND, 5);
|
||||
|
||||
int id = IDC_CONFIG_BASE;
|
||||
|
||||
|
||||
sizer->Add(new wxStaticText(&dialog, id++, "Device:"), 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
|
||||
wxBoxSizer* comboSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer->Add(comboSizer, 1, wxEXPAND, 5);
|
||||
wxComboBox* cb = new wxComboBox(&dialog, id++);
|
||||
cb->SetEditable(false);
|
||||
comboSizer->Add(cb, 1, wxALL, 5);
|
||||
|
||||
cb->Append("None");
|
||||
for (c = 0; c < joysticks_present; c++)
|
||||
cb->Append(plat_joystick_state[c].name);
|
||||
|
||||
for (c = 0; c < joystick_get_axis_count(type); c++)
|
||||
{
|
||||
sprintf(s, "Axis %i:", c);
|
||||
sizer->Add(new wxStaticText(&dialog, id++, s), 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
|
||||
wxBoxSizer* comboSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer->Add(comboSizer, 1, wxEXPAND, 5);
|
||||
wxComboBox* cb = new wxComboBox(&dialog, id++);
|
||||
cb->SetEditable(false);
|
||||
comboSizer->Add(cb, 1, wxALL, 5);
|
||||
}
|
||||
|
||||
for (c = 0; c < joystick_get_button_count(type); c++)
|
||||
{
|
||||
sprintf(s, "Button %i:", c);
|
||||
sizer->Add(new wxStaticText(&dialog, id++, s), 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
|
||||
wxBoxSizer* comboSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer->Add(comboSizer, 1, wxEXPAND, 5);
|
||||
wxComboBox* cb = new wxComboBox(&dialog, id++);
|
||||
cb->SetEditable(false);
|
||||
comboSizer->Add(cb, 1, wxALL, 5);
|
||||
}
|
||||
|
||||
for (c = 0; c < joystick_get_pov_count(type)*2; c++)
|
||||
{
|
||||
sprintf(s, "POV %i:", c);
|
||||
sizer->Add(new wxStaticText(&dialog, id++, s), 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
|
||||
wxBoxSizer* comboSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer->Add(comboSizer, 1, wxEXPAND, 5);
|
||||
wxComboBox* cb = new wxComboBox(&dialog, id++);
|
||||
cb->SetEditable(false);
|
||||
comboSizer->Add(cb, 1, wxALL, 5);
|
||||
}
|
||||
|
||||
wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
root->Add(okCancelSizer, 1, wxEXPAND, 5);
|
||||
|
||||
okCancelSizer->Add(0, 0, 1, wxEXPAND, 5);
|
||||
okCancelSizer->Add(new wxButton(&dialog, wxID_OK), 0, wxALL, 5);
|
||||
okCancelSizer->Add(new wxButton(&dialog, wxID_CANCEL), 0, wxALL, 5);
|
||||
|
||||
dialog.Fit();
|
||||
dialog.OnInit();
|
||||
dialog.ShowModal();
|
||||
dialog.Destroy();
|
||||
}
|
||||
15
src/wx-joystickconfig.h
Normal file
15
src/wx-joystickconfig.h
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef SRC_WX_DEVICECONFIG_H_
|
||||
#define SRC_WX_DEVICECONFIG_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
void joystickconfig_open(void *hwnd, int joy_nr, int type);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SRC_WX_DEVICECONFIG_H_ */
|
||||
1120
src/wx-resources.cpp
1120
src/wx-resources.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -1,15 +1,165 @@
|
|||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include "ibm.h"
|
||||
#include "device.h"
|
||||
#include "gameport.h"
|
||||
#include "plat-joystick.h"
|
||||
|
||||
int joysticks_present;
|
||||
joystick_t joystick_state[MAX_JOYSTICKS];
|
||||
|
||||
plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
|
||||
static SDL_Joystick *sdl_joy[MAX_PLAT_JOYSTICKS];
|
||||
|
||||
void joystick_init()
|
||||
{
|
||||
joysticks_present = 0;
|
||||
int c;
|
||||
|
||||
SDL_InitSubSystem(SDL_INIT_JOYSTICK);
|
||||
joysticks_present = SDL_NumJoysticks();
|
||||
|
||||
memset(sdl_joy, 0, sizeof(sdl_joy));
|
||||
for (c = 0; c < joysticks_present; c++)
|
||||
{
|
||||
sdl_joy[c] = SDL_JoystickOpen(c);
|
||||
|
||||
if (sdl_joy[c])
|
||||
{
|
||||
int d;
|
||||
|
||||
pclog("Opened Joystick %i\n", c);
|
||||
pclog(" Name: %s\n", SDL_JoystickName(sdl_joy[c]));
|
||||
pclog(" Number of Axes: %d\n", SDL_JoystickNumAxes(sdl_joy[c]));
|
||||
pclog(" Number of Buttons: %d\n", SDL_JoystickNumButtons(sdl_joy[c]));
|
||||
pclog(" Number of Hats: %d\n", SDL_JoystickNumHats(sdl_joy[c]));
|
||||
|
||||
strncpy(plat_joystick_state[c].name, SDL_JoystickNameForIndex(c), 64);
|
||||
plat_joystick_state[c].nr_axes = SDL_JoystickNumAxes(sdl_joy[c]);
|
||||
plat_joystick_state[c].nr_buttons = SDL_JoystickNumButtons(sdl_joy[c]);
|
||||
plat_joystick_state[c].nr_povs = SDL_JoystickNumHats(sdl_joy[c]);
|
||||
|
||||
for (d = 0; d < MIN(plat_joystick_state[c].nr_axes, 8); d++)
|
||||
{
|
||||
sprintf(plat_joystick_state[c].axis[d].name, "Axis %i", d);
|
||||
plat_joystick_state[c].axis[d].id = d;
|
||||
}
|
||||
for (d = 0; d < MIN(plat_joystick_state[c].nr_buttons, 8); d++)
|
||||
{
|
||||
sprintf(plat_joystick_state[c].button[d].name, "Button %i", d);
|
||||
plat_joystick_state[c].button[d].id = d;
|
||||
}
|
||||
for (d = 0; d < MIN(plat_joystick_state[c].nr_povs, 4); d++)
|
||||
{
|
||||
sprintf(plat_joystick_state[c].pov[d].name, "POV %i", d);
|
||||
plat_joystick_state[c].pov[d].id = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void joystick_close()
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = 0; c < joysticks_present; c++)
|
||||
{
|
||||
if (sdl_joy[c])
|
||||
SDL_JoystickClose(sdl_joy[c]);
|
||||
}
|
||||
}
|
||||
|
||||
static int joystick_get_axis(int joystick_nr, int mapping)
|
||||
{
|
||||
if (mapping & POV_X)
|
||||
{
|
||||
switch (plat_joystick_state[joystick_nr].p[mapping & 3])
|
||||
{
|
||||
case SDL_HAT_LEFTUP: case SDL_HAT_LEFT: case SDL_HAT_LEFTDOWN:
|
||||
return -32767;
|
||||
|
||||
case SDL_HAT_RIGHTUP: case SDL_HAT_RIGHT: case SDL_HAT_RIGHTDOWN:
|
||||
return 32767;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (mapping & POV_Y)
|
||||
{
|
||||
switch (plat_joystick_state[joystick_nr].p[mapping & 3])
|
||||
{
|
||||
case SDL_HAT_LEFTUP: case SDL_HAT_UP: case SDL_HAT_RIGHTUP:
|
||||
return -32767;
|
||||
|
||||
case SDL_HAT_LEFTDOWN: case SDL_HAT_DOWN: case SDL_HAT_RIGHTDOWN:
|
||||
return 32767;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
return plat_joystick_state[joystick_nr].a[plat_joystick_state[joystick_nr].axis[mapping].id];
|
||||
}
|
||||
void joystick_poll()
|
||||
{
|
||||
int c, d;
|
||||
|
||||
SDL_JoystickUpdate();
|
||||
for (c = 0; c < joysticks_present; c++)
|
||||
{
|
||||
int b;
|
||||
|
||||
plat_joystick_state[c].a[0] = SDL_JoystickGetAxis(sdl_joy[c], 0);
|
||||
plat_joystick_state[c].a[1] = SDL_JoystickGetAxis(sdl_joy[c], 1);
|
||||
plat_joystick_state[c].a[2] = SDL_JoystickGetAxis(sdl_joy[c], 2);
|
||||
plat_joystick_state[c].a[3] = SDL_JoystickGetAxis(sdl_joy[c], 3);
|
||||
plat_joystick_state[c].a[4] = SDL_JoystickGetAxis(sdl_joy[c], 4);
|
||||
plat_joystick_state[c].a[5] = SDL_JoystickGetAxis(sdl_joy[c], 5);
|
||||
|
||||
for (b = 0; b < 16; b++)
|
||||
plat_joystick_state[c].b[b] = SDL_JoystickGetButton(sdl_joy[c], b);
|
||||
|
||||
for (b = 0; b < 4; b++)
|
||||
plat_joystick_state[c].p[b] = SDL_JoystickGetHat(sdl_joy[c], b);
|
||||
// pclog("joystick %i - x=%i y=%i b[0]=%i b[1]=%i %i\n", c, joystick_state[c].x, joystick_state[c].y, joystick_state[c].b[0], joystick_state[c].b[1], joysticks_present);
|
||||
}
|
||||
|
||||
for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++)
|
||||
{
|
||||
if (joystick_state[c].plat_joystick_nr)
|
||||
{
|
||||
int joystick_nr = joystick_state[c].plat_joystick_nr - 1;
|
||||
|
||||
for (d = 0; d < joystick_get_axis_count(joystick_type); d++)
|
||||
joystick_state[c].axis[d] = joystick_get_axis(joystick_nr, joystick_state[c].axis_mapping[d]);
|
||||
for (d = 0; d < joystick_get_button_count(joystick_type); d++)
|
||||
joystick_state[c].button[d] = plat_joystick_state[joystick_nr].b[joystick_state[c].button_mapping[d]];
|
||||
for (d = 0; d < joystick_get_pov_count(joystick_type); d++)
|
||||
{
|
||||
int x, y;
|
||||
double angle, magnitude;
|
||||
|
||||
x = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][0]);
|
||||
y = joystick_get_axis(joystick_nr, joystick_state[c].pov_mapping[d][1]);
|
||||
|
||||
angle = (atan2((double)y, (double)x) * 360.0) / (2*M_PI);
|
||||
magnitude = sqrt((double)x*(double)x + (double)y*(double)y);
|
||||
|
||||
if (magnitude < 16384)
|
||||
joystick_state[c].pov[d] = -1;
|
||||
else
|
||||
joystick_state[c].pov[d] = ((int)angle + 90 + 360) % 360;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (d = 0; d < joystick_get_axis_count(joystick_type); d++)
|
||||
joystick_state[c].axis[d] = 0;
|
||||
for (d = 0; d < joystick_get_button_count(joystick_type); d++)
|
||||
joystick_state[c].button[d] = 0;
|
||||
for (d = 0; d < joystick_get_pov_count(joystick_type); d++)
|
||||
joystick_state[c].pov[d] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include "model.h"
|
||||
#include "mouse.h"
|
||||
#include "nvr.h"
|
||||
#include "plat-joystick.h"
|
||||
#include "sound.h"
|
||||
#include "thread.h"
|
||||
#include "disc.h"
|
||||
|
|
@ -512,6 +513,7 @@ int pc_main(int argc, char** argv)
|
|||
display_init();
|
||||
#endif
|
||||
sdl_video_init();
|
||||
joystick_init();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue