Start of joypad handling.
This commit is contained in:
parent
4e981ecf78
commit
b92c9dea9c
|
@ -26,6 +26,8 @@ static void handleCommandLine(int argc, char *argv[]);
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
long then, nextSecond, frames;
|
long then, nextSecond, frames;
|
||||||
|
|
||||||
|
memset(&app, 0, sizeof(App));
|
||||||
|
|
||||||
atexit(cleanup);
|
atexit(cleanup);
|
||||||
|
|
||||||
|
|
|
@ -320,8 +320,9 @@ typedef struct {
|
||||||
int soundVolume;
|
int soundVolume;
|
||||||
int hideMouse;
|
int hideMouse;
|
||||||
Mouse mouse;
|
Mouse mouse;
|
||||||
|
SDL_GameController *joypad;
|
||||||
int keyboard[MAX_KEYBOARD_KEYS];
|
int keyboard[MAX_KEYBOARD_KEYS];
|
||||||
int joypad[SDL_CONTROLLER_BUTTON_MAX];
|
int joypadButton[SDL_CONTROLLER_BUTTON_MAX];
|
||||||
int keyControls[CONTROL_MAX];
|
int keyControls[CONTROL_MAX];
|
||||||
int joypadControls[CONTROL_MAX];
|
int joypadControls[CONTROL_MAX];
|
||||||
SDL_Texture *backBuffer;
|
SDL_Texture *backBuffer;
|
||||||
|
@ -479,7 +480,8 @@ struct Widget {
|
||||||
char name[MAX_NAME_LENGTH];
|
char name[MAX_NAME_LENGTH];
|
||||||
char group[MAX_NAME_LENGTH];
|
char group[MAX_NAME_LENGTH];
|
||||||
char label[MAX_NAME_LENGTH];
|
char label[MAX_NAME_LENGTH];
|
||||||
char options[MAX_WIDGET_OPTIONS][MAX_NAME_LENGTH];
|
int numOptions;
|
||||||
|
char **options;
|
||||||
int value;
|
int value;
|
||||||
int clicked;
|
int clicked;
|
||||||
Widget *next;
|
Widget *next;
|
||||||
|
|
|
@ -25,7 +25,7 @@ int isControl(int type)
|
||||||
int key = app.keyControls[type];
|
int key = app.keyControls[type];
|
||||||
int btn = app.joypadControls[type];
|
int btn = app.joypadControls[type];
|
||||||
|
|
||||||
return ((key != 0 && app.keyboard[key]) || (btn != 0 && app.joypad[btn]));
|
return ((key != 0 && app.keyboard[key]) || (btn != 0 && app.joypadButton[btn]));
|
||||||
}
|
}
|
||||||
|
|
||||||
int isAcceptControl(void)
|
int isAcceptControl(void)
|
||||||
|
@ -45,7 +45,7 @@ void clearControl(int type)
|
||||||
|
|
||||||
if (btn != 0)
|
if (btn != 0)
|
||||||
{
|
{
|
||||||
app.joypad[btn] = 0;
|
app.joypadButton[btn] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
|
||||||
|
static void initJoypad(void);
|
||||||
|
|
||||||
void init18N(int argc, char *argv[])
|
void init18N(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -87,6 +89,27 @@ void initSDL(void)
|
||||||
printf("Couldn't initialize SDL TTF: %s\n", SDL_GetError());
|
printf("Couldn't initialize SDL TTF: %s\n", SDL_GetError());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initJoypad();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void initJoypad(void)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
n = SDL_NumJoysticks();
|
||||||
|
|
||||||
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "%d joypads available", n);
|
||||||
|
|
||||||
|
for (i = 0 ; i < n ; i++)
|
||||||
|
{
|
||||||
|
if (SDL_IsGameController(i))
|
||||||
|
{
|
||||||
|
app.joypad = SDL_GameControllerOpen(i);
|
||||||
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Using joypad '%s'", SDL_GameControllerName(app.joypad));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initGameSystem(void)
|
void initGameSystem(void)
|
||||||
|
@ -125,6 +148,10 @@ void cleanup(void)
|
||||||
expireTexts(1);
|
expireTexts(1);
|
||||||
|
|
||||||
destroyGame();
|
destroyGame();
|
||||||
|
|
||||||
|
if (app.joypad != NULL) {
|
||||||
|
SDL_GameControllerClose(app.joypad);
|
||||||
|
}
|
||||||
|
|
||||||
SDL_DestroyRenderer(app.renderer);
|
SDL_DestroyRenderer(app.renderer);
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,7 @@ void clearInput(void)
|
||||||
|
|
||||||
memset(app.keyboard, 0, sizeof(int) * MAX_KEYBOARD_KEYS);
|
memset(app.keyboard, 0, sizeof(int) * MAX_KEYBOARD_KEYS);
|
||||||
memset(&app.mouse, 0, sizeof(Mouse));
|
memset(&app.mouse, 0, sizeof(Mouse));
|
||||||
|
memset(&app.joypadButton, 0, sizeof(int) * SDL_CONTROLLER_BUTTON_MAX);
|
||||||
|
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
{
|
{
|
||||||
|
@ -116,6 +117,7 @@ void clearInput(void)
|
||||||
|
|
||||||
void handleInput(void)
|
void handleInput(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
|
|
||||||
app.mouse.dx = 0;
|
app.mouse.dx = 0;
|
||||||
|
@ -156,4 +158,9 @@ void handleInput(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_GetMouseState(&app.mouse.x, &app.mouse.y);
|
SDL_GetMouseState(&app.mouse.x, &app.mouse.y);
|
||||||
|
|
||||||
|
for (i = 0 ; i < SDL_CONTROLLER_BUTTON_MAX ; i++)
|
||||||
|
{
|
||||||
|
app.joypadButton[i] = SDL_GameControllerGetButton(app.joypad, i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,18 +24,19 @@ static void doCheatControls(void);
|
||||||
|
|
||||||
void doPlayer(void)
|
void doPlayer(void)
|
||||||
{
|
{
|
||||||
game.config.control[CONTROL_LEFT] = app.keyboard[SDL_SCANCODE_A];
|
game.config.control[CONTROL_LEFT] = app.keyboard[SDL_SCANCODE_A] || app.joypadButton[0];
|
||||||
game.config.control[CONTROL_RIGHT] = app.keyboard[SDL_SCANCODE_D];
|
game.config.control[CONTROL_RIGHT] = app.keyboard[SDL_SCANCODE_D] || app.joypadButton[1];
|
||||||
game.config.control[CONTROL_UP] = app.keyboard[SDL_SCANCODE_W];
|
game.config.control[CONTROL_UP] = app.keyboard[SDL_SCANCODE_W] || app.joypadButton[2];
|
||||||
game.config.control[CONTROL_DOWN] = app.keyboard[SDL_SCANCODE_S];
|
game.config.control[CONTROL_DOWN] = app.keyboard[SDL_SCANCODE_S] || app.joypadButton[3];
|
||||||
game.config.control[CONTROL_JUMP] = app.keyboard[SDL_SCANCODE_I];
|
game.config.control[CONTROL_JUMP] = app.keyboard[SDL_SCANCODE_I] || app.joypadButton[4];
|
||||||
game.config.control[CONTROL_FIRE] = app.keyboard[SDL_SCANCODE_J];
|
game.config.control[CONTROL_FIRE] = app.keyboard[SDL_SCANCODE_J] || app.joypadButton[5];
|
||||||
|
|
||||||
if (app.keyboard[SDL_SCANCODE_SPACE])
|
if (app.keyboard[SDL_SCANCODE_SPACE] || app.joypadButton[6])
|
||||||
{
|
{
|
||||||
world.bob->activate(1);
|
world.bob->activate(1);
|
||||||
|
|
||||||
app.keyboard[SDL_SCANCODE_SPACE] = 0;
|
app.keyboard[SDL_SCANCODE_SPACE] = 0;
|
||||||
|
app.joypadButton[6] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev.debug)
|
if (dev.debug)
|
||||||
|
|
Loading…
Reference in New Issue