Created
March 7, 2021 14:43
-
-
Save lethal-guitar/711da79bdd7fe0a89129e8a14314caa4 to your computer and use it in GitHub Desktop.
gptokeyb with kill mode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool kill_mode = // ... | |
bool back_pressed = false; | |
bool start_pressed = false; | |
SDL_Event event; | |
bool running = true; | |
while (running) { | |
if (!SDL_WaitEvent(&event)) { | |
printf("SDL_WaitEvent() failed: %s\n", SDL_GetError()); | |
return -1; | |
} | |
switch (event.type) { | |
case SDL_CONTROLLERBUTTONDOWN: | |
case SDL_CONTROLLERBUTTONUP: | |
{ | |
const bool is_pressed = | |
event.type == SDL_CONTROLLERBUTTONDOWN; | |
if (kill_mode) { | |
switch (event.cbutton.button) { | |
case SDL_CONTROLLER_BUTTON_BACK: // aka select | |
back_pressed = is_pressed; | |
break; | |
case SDL_CONTROLLER_BUTTON_START: | |
start_pressed = is_pressed; | |
break; | |
} | |
if (start_pressed && back_pressed) { | |
printf("Killing: %s\n", AppToKill); | |
system( (" killall '"+std::string(AppToKill)+"' ").c_str() ); | |
exit(0); | |
} | |
} else { | |
switch (event.cbutton.button) { | |
case SDL_CONTROLLER_BUTTON_DPAD_LEFT: | |
emitKey(KEY_LEFT, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_DPAD_UP: | |
emitKey(KEY_UP, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: | |
emitKey(KEY_RIGHT, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_DPAD_DOWN: | |
emitKey(KEY_DOWN, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_A: | |
emitKey(KEY_ENTER, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_B: | |
emitKey(KEY_ESC, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_BACK: // aka select | |
emitKey(KEY_PLAYPAUSE, is_pressed); | |
break; | |
case SDL_CONTROLLER_BUTTON_START: | |
emitKey(KEY_ENTER, is_pressed); | |
break; | |
} | |
} | |
} | |
break; | |
case SDL_CONTROLLERDEVICEADDED: | |
SDL_GameControllerOpen(event.cdevice.which); | |
break; | |
case SDL_CONTROLLERDEVICEREMOVED: | |
if (SDL_GameController* controller = SDL_GameControllerFromInstanceID(event.cdevice.which)) | |
{ | |
SDL_GameControllerClose(controller); | |
} | |
break; | |
case SDL_QUIT: | |
running = false; | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment