ref: d898f8c27247d31bf40f17cf181a55276766714c
parent: 9ed3e3ad7b229b22593a2bcbd50f15caaa58f3a5
author: smootalicious <smootalicious@gmail.com>
date: Sun Jun 12 21:18:13 EDT 2022
Added config and handling for special game controller buttons to quit and reset display.
--- a/config.c
+++ b/config.c
@@ -50,6 +50,8 @@
c.gamepad_start = SDL_CONTROLLER_BUTTON_START;
c.gamepad_opt = SDL_CONTROLLER_BUTTON_B;
c.gamepad_edit = SDL_CONTROLLER_BUTTON_A;
+ c.gamepad_quit = SDL_CONTROLLER_BUTTON_RIGHTSTICK;
+ c.gamepad_reset = SDL_CONTROLLER_BUTTON_LEFTSTICK;
c.gamepad_analog_threshold = 32766;
c.gamepad_analog_invert = 0;
@@ -74,7 +76,7 @@
SDL_Log("Writing config file to %s", config_path);- const unsigned int INI_LINE_COUNT = 37;
+ const unsigned int INI_LINE_COUNT = 39;
const unsigned int LINELEN = 50;
// Entries for the config file
@@ -129,6 +131,10 @@
conf->gamepad_opt);
snprintf(ini_values[initPointer++], LINELEN, "gamepad_edit=%d\n",
conf->gamepad_edit);
+ snprintf(ini_values[initPointer++], LINELEN, "gamepad_quit=%d\n",
+ conf->gamepad_quit);
+ snprintf(ini_values[initPointer++], LINELEN, "gamepad_reset=%d\n",
+ conf->gamepad_reset);
snprintf(ini_values[initPointer++], LINELEN, "gamepad_analog_threshold=%d\n",
conf->gamepad_analog_threshold);
snprintf(ini_values[initPointer++], LINELEN, "gamepad_analog_invert=%s\n",
@@ -282,6 +288,8 @@
const char *gamepad_start = ini_get(ini, "gamepad", "gamepad_start");
const char *gamepad_opt = ini_get(ini, "gamepad", "gamepad_opt");
const char *gamepad_edit = ini_get(ini, "gamepad", "gamepad_edit");
+ const char *gamepad_quit = ini_get(ini, "gamepad", "gamepad_quit");
+ const char *gamepad_reset = ini_get(ini, "gamepad", "gamepad_reset");
const char *gamepad_analog_threshold =
ini_get(ini, "gamepad", "gamepad_analog_threshold");
const char *gamepad_analog_invert =
@@ -315,6 +323,10 @@
conf->gamepad_opt = SDL_atoi(gamepad_opt);
if (gamepad_edit)
conf->gamepad_edit = SDL_atoi(gamepad_edit);
+ if (gamepad_quit)
+ conf->gamepad_quit = SDL_atoi(gamepad_quit);
+ if (gamepad_reset)
+ conf->gamepad_reset = SDL_atoi(gamepad_reset);
if (gamepad_analog_threshold)
conf->gamepad_analog_threshold = SDL_atoi(gamepad_analog_threshold);
--- a/config.h
+++ b/config.h
@@ -36,6 +36,8 @@
int gamepad_start;
int gamepad_opt;
int gamepad_edit;
+ int gamepad_quit;
+ int gamepad_reset;
int gamepad_analog_threshold;
int gamepad_analog_invert;
--- a/config.ini.sample
+++ b/config.ini.sample
@@ -42,6 +42,8 @@
gamepad_start=6
gamepad_opt=1
gamepad_edit=0
+gamepad_quit=8
+gamepad_reset=7
gamepad_analog_threshold=32766 ;the threshold for analog sticks to trigger cursor movement (working values: 1-32766)
gamepad_analog_invert=false ;NOT IMPLEMENTED YET: invert up/down and left/right axis (true/false)
--- a/input.c
+++ b/input.c
@@ -357,6 +357,17 @@
prev_key_analog = key_analog;
}
+ // Read special case game controller buttons quit and reset
+ for (int gc = 0; gc < num_joysticks; gc++) {+ if (SDL_GameControllerGetButton(game_controllers[gc], conf->gamepad_quit) &&
+ SDL_GameControllerGetButton(game_controllers[gc], conf->gamepad_select)) {+ key = (input_msg_s){special, msg_quit};+ } else if (SDL_GameControllerGetButton(game_controllers[gc], conf->gamepad_reset) &&
+ SDL_GameControllerGetButton(game_controllers[gc], conf->gamepad_select)) {+ key = (input_msg_s){special, msg_reset_display};+ }
+ }
+
SDL_PollEvent(&event);
switch (event.type) {@@ -443,10 +454,6 @@
// Query for SDL events
handle_sdl_events(conf);
-
- if (keycode == (key_start | key_select | key_opt | key_edit)) {- key = (input_msg_s){special, msg_reset_display};- }
if (key.type == normal) {/* Normal input keys go through some event-based manipulation in
--
⑨