fixed and added some range checks for joysticks
[rocksndiamonds.git] / src / tools.c
index 55a28fc40d0cf13ef90ec1df29c3910bb15e5661..626cb8973a892c62612bf68454ebc6f488251ac7 100644 (file)
@@ -3736,6 +3736,9 @@ void WaitForEventToContinue()
 {
   boolean still_wait = TRUE;
 
+  if (program.headless)
+    return;
+
   /* simulate releasing mouse button over last gadget, if still pressed */
   if (button_status)
     HandleGadgets(-1, -1, 0);
@@ -3883,6 +3886,19 @@ static int RequestHandleEvents(unsigned int req_state)
            break;
          }
 
+#if defined(TARGET_SDL2)
+         case SDL_WINDOWEVENT:
+           HandleWindowEvent((WindowEvent *) &event);
+           break;
+
+         case SDL_APP_WILLENTERBACKGROUND:
+         case SDL_APP_DIDENTERBACKGROUND:
+         case SDL_APP_WILLENTERFOREGROUND:
+         case SDL_APP_DIDENTERFOREGROUND:
+           HandlePauseResumeEvent((PauseResumeEvent *) &event);
+           break;
+#endif
+
          case EVENT_KEYPRESS:
          {
            Key key = GetEventKey((KeyEvent *)&event, TRUE);
@@ -3923,6 +3939,35 @@ static int RequestHandleEvents(unsigned int req_state)
            ClearPlayerAction();
            break;
 
+#if defined(TARGET_SDL2)
+         case SDL_CONTROLLERBUTTONDOWN:
+           switch (event.cbutton.button)
+           {
+             case SDL_CONTROLLER_BUTTON_A:
+             case SDL_CONTROLLER_BUTTON_X:
+             case SDL_CONTROLLER_BUTTON_LEFTSHOULDER:
+               result = 1;
+               break;
+
+             case SDL_CONTROLLER_BUTTON_B:
+             case SDL_CONTROLLER_BUTTON_Y:
+             case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
+             case SDL_CONTROLLER_BUTTON_BACK:
+               result = 0;
+               break;
+           }
+
+           if (req_state & REQ_PLAYER)
+             result = 0;
+
+           break;
+
+         case SDL_CONTROLLERBUTTONUP:
+           HandleJoystickEvent(&event);
+           ClearPlayerAction();
+           break;
+#endif
+
          default:
            HandleOtherEvents(&event);
            break;
@@ -8531,6 +8576,8 @@ void SetAnimStatus(int anim_status_new)
 {
   if (anim_status_new == GAME_MODE_MAIN)
     anim_status_new = GAME_MODE_PSEUDO_MAINONLY;
+  else if (anim_status_new == GAME_MODE_SCORES)
+    anim_status_new = GAME_MODE_PSEUDO_SCORESOLD;
 
   global.anim_status_next = anim_status_new;