Added gamepad support
This commit is contained in:
parent
4a223f91b5
commit
9f743399b1
28
src/uxnemu.c
28
src/uxnemu.c
|
@ -171,7 +171,7 @@ init(void)
|
||||||
as.callback = audio_callback;
|
as.callback = audio_callback;
|
||||||
as.samples = 512;
|
as.samples = 512;
|
||||||
as.userdata = NULL;
|
as.userdata = NULL;
|
||||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
|
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_GAMECONTROLLER) < 0) {
|
||||||
error("sdl", SDL_GetError());
|
error("sdl", SDL_GetError());
|
||||||
if(SDL_Init(SDL_INIT_VIDEO) < 0)
|
if(SDL_Init(SDL_INIT_VIDEO) < 0)
|
||||||
return error("sdl", SDL_GetError());
|
return error("sdl", SDL_GetError());
|
||||||
|
@ -192,6 +192,7 @@ init(void)
|
||||||
SDL_StartTextInput();
|
SDL_StartTextInput();
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
|
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
|
||||||
|
SDL_GameControllerEventState(SDL_ENABLE);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +392,7 @@ restart(Uxn *u)
|
||||||
start(u, "boot.rom");
|
start(u, "boot.rom");
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint8
|
static Uint8
|
||||||
get_button(SDL_Event *event)
|
get_button(SDL_Event *event)
|
||||||
{
|
{
|
||||||
switch(event->key.keysym.sym) {
|
switch(event->key.keysym.sym) {
|
||||||
|
@ -407,7 +408,24 @@ get_button(SDL_Event *event)
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint8
|
static Uint8
|
||||||
|
get_button_dpad(SDL_Event *e)
|
||||||
|
{
|
||||||
|
switch(e->cbutton.button) {
|
||||||
|
case SDL_CONTROLLER_BUTTON_A: return 0x01;
|
||||||
|
case SDL_CONTROLLER_BUTTON_B: return 0x02;
|
||||||
|
case SDL_CONTROLLER_BUTTON_X: return 0x04;
|
||||||
|
case SDL_CONTROLLER_BUTTON_Y:
|
||||||
|
case SDL_CONTROLLER_BUTTON_START: return 0x08;
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_UP: return 0x10;
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_DOWN: return 0x20;
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_LEFT: return 0x40;
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: return 0x80;
|
||||||
|
}
|
||||||
|
return 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Uint8
|
||||||
get_key(SDL_Event *event)
|
get_key(SDL_Event *event)
|
||||||
{
|
{
|
||||||
SDL_Keymod mods = SDL_GetModState();
|
SDL_Keymod mods = SDL_GetModState();
|
||||||
|
@ -491,6 +509,10 @@ run(Uxn *u)
|
||||||
controller_up(devctrl, get_button(&event));
|
controller_up(devctrl, get_button(&event));
|
||||||
else if(event.type == SDL_TEXTINPUT)
|
else if(event.type == SDL_TEXTINPUT)
|
||||||
controller_key(devctrl, event.text.text[0]);
|
controller_key(devctrl, event.text.text[0]);
|
||||||
|
else if(event.type == SDL_CONTROLLERBUTTONDOWN)
|
||||||
|
controller_down(devctrl, get_button_dpad(&event));
|
||||||
|
else if(event.type == SDL_CONTROLLERBUTTONUP)
|
||||||
|
controller_up(devctrl, get_button_dpad(&event));
|
||||||
/* Console */
|
/* Console */
|
||||||
else if(event.type == stdin_event)
|
else if(event.type == stdin_event)
|
||||||
console_input(u, event.cbutton.button);
|
console_input(u, event.cbutton.button);
|
||||||
|
|
Loading…
Reference in New Issue