void GetPlayerCmd(int *cmd1, int *cmd2) { // int joy1, joy2; // PollDigiSticks(&joy1, &joy2); GetOnePlayerCmd(&gPlayer1Data, cmd1, 0, 0, cmd2 == NULL); GetOnePlayerCmd(&gPlayer2Data, cmd2, 0, 0, cmd1 == NULL); }
int GetMenuCmd(EventHandlers *handlers) { keyboard_t *kb = &handlers->keyboard; bool firstJoyPressedEsc = false; SDL_JoystickID firstJoyId = 0; if (handlers->joysticks.size > 0) { const Joystick *firstJoy = CArrayGet(&handlers->joysticks, 0); firstJoyId = firstJoy->id; firstJoyPressedEsc = JoyIsPressed(firstJoyId, CMD_ESC); } if (KeyIsPressed(kb, SDL_SCANCODE_ESCAPE) || firstJoyPressedEsc) { return CMD_ESC; } // Check first player keyboard int cmd = GetOnePlayerCmd(handlers, true, INPUT_DEVICE_KEYBOARD, 0); if (!cmd) { // Check keyboard if (KeyIsPressed(kb, SDL_SCANCODE_LEFT)) cmd |= CMD_LEFT; else if (KeyIsPressed(kb, SDL_SCANCODE_RIGHT)) cmd |= CMD_RIGHT; if (KeyIsPressed(kb, SDL_SCANCODE_UP)) cmd |= CMD_UP; else if (KeyIsPressed(kb, SDL_SCANCODE_DOWN)) cmd |= CMD_DOWN; if (KeyIsPressed(kb, SDL_SCANCODE_RETURN)) cmd |= CMD_BUTTON1; if (KeyIsPressed(kb, SDL_SCANCODE_BACKSPACE)) cmd |= CMD_BUTTON2; } if (!cmd && handlers->joysticks.size > 0) { // Check joystick 1 cmd = GetOnePlayerCmd( handlers, true, INPUT_DEVICE_JOYSTICK, firstJoyId); } if (!cmd) { // Check mouse cmd = GetOnePlayerCmd(handlers, true, INPUT_DEVICE_MOUSE, 0); } return cmd; }
void GetPlayerCmds(EventHandlers *handlers, int (*cmds)[MAX_LOCAL_PLAYERS]) { int idx = 0; for (int i = 0; i < (int)gPlayerDatas.size; i++, idx++) { const PlayerData *p = CArrayGet(&gPlayerDatas, i); if (!p->IsLocal) { idx--; continue; } if (p->inputDevice != INPUT_DEVICE_UNSET) { (*cmds)[idx] = GetOnePlayerCmd( handlers, true, p->inputDevice, p->deviceIndex); } } }
int main(int argc, char *argv[]) { UNUSED(argc); UNUSED(argv); if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) != 0) { fprintf(stderr, "Could not initialise SDL: %s\n", SDL_GetError()); return -1; } if (SDLNet_Init() == -1) { fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); exit(EXIT_FAILURE); } if (!SDL_SetVideoMode(320, 200, 0, 0)) { fprintf(stderr, "Could not set video mode: %s\n", SDL_GetError()); SDL_Quit(); exit(-1); } ConfigLoadDefault(&gConfig); ConfigLoad(&gConfig, GetConfigFilePath(CONFIG_FILE)); EventInit(&gEventHandlers, NULL, false); NetInputClient client; NetInputClientInit(&client); NetInputClientConnect(&client, 0x7F000001); // localhost printf("Press esc to exit\n"); Uint32 ticksNow = SDL_GetTicks(); Uint32 ticksElapsed = 0; for (;;) { Uint32 ticksThen = ticksNow; ticksNow = SDL_GetTicks(); ticksElapsed += ticksNow - ticksThen; if (ticksElapsed < 1000 / FPS_FRAMELIMIT) { SDL_Delay(1); debug(D_VERBOSE, "Delaying 1 ticksNow %u elapsed %u\n", ticksNow, ticksElapsed); continue; } EventPoll(&gEventHandlers, SDL_GetTicks()); int cmd = GetOnePlayerCmd( &gEventHandlers, &gConfig.Input.PlayerKeys[0], false, INPUT_DEVICE_KEYBOARD, 0); if (cmd) { printf("Sending %s + %s\n", CmdStr(cmd & (CMD_LEFT | CMD_RIGHT | CMD_UP | CMD_DOWN)), CmdStr(cmd & (CMD_BUTTON1 | CMD_BUTTON2 | CMD_BUTTON3 | CMD_BUTTON4 | CMD_ESC))); NetInputClientSend(&client, cmd); } // Check keyboard escape if (KeyIsPressed(&gEventHandlers.keyboard, SDLK_ESCAPE)) { break; } ticksElapsed -= 1000 / FPS_FRAMELIMIT; } NetInputClientTerminate(&client); EventTerminate(&gEventHandlers); SDLNet_Quit(); SDL_Quit(); return 0; }