]> git.mxchange.org Git - quix0rs-blobwars.git/blobdiff - src/CEngine.cpp
Fix all issues found by the Clang Static Analyzer.
[quix0rs-blobwars.git] / src / CEngine.cpp
index 45f30eff7d65632ea499b839addaa083a480a5d2..0f4721fd7c8cbe05704eb82770ba46abee65516c 100644 (file)
@@ -111,7 +111,7 @@ void Engine::clearCheatVars()
 
 bool Engine::compareLastKeyInputs()
 {
-       if (strstr(lastKeyEvents, "lockandload"))
+       if (strstr(lastKeyEvents, "LOCKANDLOAD"))
        {
                cheats = true;
                return true;
@@ -230,7 +230,7 @@ void Engine::getInput()
                                }
 
                                keyState[event.key.keysym.scancode] = 1;
-                               strlcpy(lastKeyPressed, SDL_GetKeyName(event.key.keysym.scancode), sizeof lastKeyPressed);
+                               strlcpy(lastKeyPressed, SDL_GetKeyName(SDL_GetKeyFromScancode(event.key.keysym.scancode)), sizeof lastKeyPressed);
                                addKeyEvent();
                                break;
 
@@ -241,17 +241,21 @@ void Engine::getInput()
                        case SDL_JOYAXISMOTION:
                                if (event.jaxis.axis == 0)
                                {
-                                 joyX = event.jaxis.value;
+                                       joyX = event.jaxis.value;
+                                       int joycurX = joyX < -25000 ? -1 : joyX > 25000 ? 1 : 0;
+                                       if (joycurX != joyprevX)
+                                               joykeyX = joyprevX = joycurX;
                                }
                                else if (event.jaxis.axis == 1)
                                {
-                                 joyY = event.jaxis.value;
+                                       joyY = event.jaxis.value;
+                                       int joycurY = joyY < -25000 ? -1 : joyY > 25000 ? 1 : 0;
+                                       if (joycurY != joyprevY)
+                                               joykeyY = joyprevY = joycurY;
                                }
-                               
                                break;
 
                        case SDL_JOYBUTTONDOWN:
-                       
                                if (waitForButton)
                                {
                                        lastButtonPressed = event.jbutton.button;
@@ -263,10 +267,12 @@ void Engine::getInput()
                                }
                                
                                joystickState[event.jbutton.button] = 1;
+                               joykeyFire = true;
                                break;
 
                        case SDL_JOYBUTTONUP:
                                joystickState[event.jbutton.button] = 0;
+                               joykeyFire = false;
                                break;
 
                        case SDL_WINDOWEVENT:
@@ -297,7 +303,7 @@ void Engine::setMouse(int x, int y)
 
 bool Engine::userAccepts()
 {
-       if ((keyState[SDL_SCANCODE_SPACE]) || (keyState[SDL_SCANCODE_ESCAPE]) || (keyState[SDL_SCANCODE_LCTRL]) || (keyState[SDL_SCANCODE_RCTRL]) || (keyState[SDL_SCANCODE_RETURN]) || (keyState[SDL_SCANCODE_LCTRL]))
+       if ((keyState[SDL_SCANCODE_SPACE]) || (keyState[SDL_SCANCODE_ESCAPE]) || (keyState[SDL_SCANCODE_LCTRL]) || (keyState[SDL_SCANCODE_RCTRL]) || (keyState[SDL_SCANCODE_RETURN]) || (keyState[SDL_SCANCODE_LCTRL]) || joykeyFire)
        {
                return true;
        }
@@ -315,6 +321,8 @@ void Engine::clearInput()
        memset(keyState, 0, sizeof keyState);
 
        mouseLeft = mouseRight = 0;
+       joykeyX = joykeyY = 0;
+       joykeyFire = false;
 }
 
 void Engine::setUserHome(const char *path)
@@ -385,14 +393,12 @@ bool Engine::unpack(const char *filename, int fileType)
                        snprintf(tempPath, sizeof tempPath, "%smusic.mod", userHomeDirectory);
                        fp = fopen(tempPath, "wb");
                }
-
-               if (fileType == PAK_TAGS)
+               else if (fileType == PAK_TAGS)
                {
                        snprintf(tempPath, sizeof tempPath, "%smusic.tags", userHomeDirectory);
                        fp = fopen(tempPath, "wb");
                }
-
-               if (fileType == PAK_FONT)
+               else if (fileType == PAK_FONT)
                {
                        snprintf(tempPath, sizeof tempPath, "%sfont.ttf", userHomeDirectory);
                        fp = fopen(tempPath, "wb");
@@ -738,21 +744,21 @@ int Engine::processWidgets()
 {
        int update = 0;
 
-       if (keyState[SDL_SCANCODE_UP])
+       if (keyState[SDL_SCANCODE_UP] || joykeyY < 0)
        {
                highlightWidget(-1);
                update = 1;
                clearInput();
        }
 
-       if (keyState[SDL_SCANCODE_DOWN])
+       if (keyState[SDL_SCANCODE_DOWN] || joykeyY > 0)
        {
                highlightWidget(1);
                update = 1;
                clearInput();
        }
 
-       if (keyState[SDL_SCANCODE_LEFT] && (highlightedWidget->type != WG_BUTTON && highlightedWidget->type != WG_JOYPAD))
+       if ((keyState[SDL_SCANCODE_LEFT] || joykeyX < 0) && (highlightedWidget->type != WG_BUTTON && highlightedWidget->type != WG_JOYPAD))
        {
                SDL_Delay(1);
 
@@ -769,7 +775,7 @@ int Engine::processWidgets()
                        clearInput();
        }
 
-       if (keyState[SDL_SCANCODE_RIGHT] && (highlightedWidget->type != WG_BUTTON && highlightedWidget->type != WG_JOYPAD))
+       if ((keyState[SDL_SCANCODE_RIGHT] || joykeyX > 0) && (highlightedWidget->type != WG_BUTTON && highlightedWidget->type != WG_JOYPAD))
        {
                SDL_Delay(1);
 
@@ -786,7 +792,7 @@ int Engine::processWidgets()
                        clearInput();
        }
 
-       if ((keyState[SDL_SCANCODE_RETURN]) || (keyState[SDL_SCANCODE_SPACE]) || (keyState[SDL_SCANCODE_LCTRL]))
+       if ((keyState[SDL_SCANCODE_RETURN]) || (keyState[SDL_SCANCODE_SPACE]) || (keyState[SDL_SCANCODE_LCTRL]) || (joykeyFire && highlightedWidget->type != WG_JOYPAD))
        {
                if (highlightedWidget->value == NULL)
                {
@@ -826,6 +832,39 @@ int Engine::processWidgets()
                clearInput();
        }
 
+       if (joykeyX > 0 && highlightedWidget->type == WG_JOYPAD)
+       {
+               waitForButton = true;
+               waitForKey = false;
+               allowJoypad = true;
+
+               if (*highlightedWidget->value > -1000)
+               {
+                       *highlightedWidget->value = (-1000 - *highlightedWidget->value);
+               }
+
+               clearInput();
+       }
+
+       if (joykeyX < 0 && highlightedWidget->type == WG_JOYPAD)
+       {
+               if (waitForButton)
+               {
+                       lastButtonPressed = -1;
+                       *highlightedWidget->value = abs(*highlightedWidget->value) - 1000;
+               }
+               else
+               {
+                       lastButtonPressed = -2;
+                       *highlightedWidget->value = -2;
+               }
+
+               waitForButton = false;
+               allowJoypad = false;
+               highlightedWidget->redraw();
+               clearInput();
+       }
+
        return update;
 }
 
@@ -879,20 +918,18 @@ bool Engine::loadDefines()
        if (!loadData("data/defines.h"))
                return false;
 
-       char *token = strtok((char*)dataBuffer, "\n");
-
-       Data *data;
+       strtok((char*)dataBuffer, "\n");
 
        while (true)
        {
-               token = strtok(NULL, "\n");
+               char *token = strtok(NULL, "\n");
                if (!token)
                        break;
 
                if (!strstr(token, "/*"))
                {
                        sscanf(token, "%*s %s %[^\n\r]", string[0], string[1]);
-                       data = new Data();
+                       Data *data = new Data();
                        data->set(string[0], string[1], 1, 1);
                        defineList.add(data);
                }