shithub: m8c

Download patch

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
--