From 5d455b4cbccfde9389debd2efeea06f6f9d43c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathis=20Rib=C3=A9mont?= Date: Sun, 13 Feb 2022 15:00:16 +0100 Subject: [PATCH] resizable windows for main menu, fix bug with WARNING msg in playSFX --- Pontu/entryPoints/main.c | 4 ++-- Pontu/src/engine/AudioHandler.c | 2 +- Pontu/src/engine/TextureHandler.c | 3 ++- Pontu/src/view/MainMenu.c | 31 ++++++++++++++++++++++++------- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index 2b46c07..063ea61 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -11,7 +11,7 @@ int main(int argc, char *argv[]) { GeneralState generalState; - + SDL_Window* window = NULL; SDL_Rect windowSize = {10, 10, 900, 900}; SDL_Renderer* renderer = NULL; @@ -44,7 +44,7 @@ int main(int argc, char *argv[]) { FontHandler fontHandler = loadFonts(); AudioHandler audioHandler = newAudioHandler(128, 128, 128); - generalState = GS_GameCreationMenu; + generalState = GS_MainMenu; while(generalState != GS_Quit){ switch (generalState) { case GS_MainMenu: diff --git a/Pontu/src/engine/AudioHandler.c b/Pontu/src/engine/AudioHandler.c index c468e41..eb10c0a 100644 --- a/Pontu/src/engine/AudioHandler.c +++ b/Pontu/src/engine/AudioHandler.c @@ -191,7 +191,7 @@ void playSFX(EnumAudios sfx, AudioHandler audioHandler) { } // Playing the SFX once (0 repetitions) - if (Mix_PlayChannel(channel,chunkSFX,0) != 0) { + if (Mix_PlayChannel(channel,chunkSFX,0) == -1) { fprintf(stderr,"WARNING: %s\n",Mix_GetError()); return; } diff --git a/Pontu/src/engine/TextureHandler.c b/Pontu/src/engine/TextureHandler.c index 9869492..fa14286 100644 --- a/Pontu/src/engine/TextureHandler.c +++ b/Pontu/src/engine/TextureHandler.c @@ -1,4 +1,5 @@ #include "engine/TextureHandler.h" +#include #define MACRO_TO_TEXTURE_NAME(N) #N".png", @@ -33,4 +34,4 @@ void freeTextureHandler(TextureHandler* textureHandler) { textureHandler->textures[i] = NULL; } } -} \ No newline at end of file +} diff --git a/Pontu/src/view/MainMenu.c b/Pontu/src/view/MainMenu.c index 9602a09..38cdd4f 100644 --- a/Pontu/src/view/MainMenu.c +++ b/Pontu/src/view/MainMenu.c @@ -21,7 +21,6 @@ P_Button* drawMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, uns *nb = 0; SDL_Color lightBlue = {.r = 0,.g = 195,.b = 255,.a = 0}; //0, 195, 255 SDL_Color darkBlue = {.r = 0,.g = 123,.b = 161,.a = 0}; //0, 123, 161 - char* path = "../rsrc/img/Lenna.png"; SDL_SetRenderTarget(renderer, NULL); TTF_Font* font = fontHandler.fonts[FONT_retro]; @@ -63,15 +62,16 @@ P_Button* drawMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, uns SDL_SetRenderTarget(renderer,NULL); - SDL_Texture* picture = createTextureFromPath(renderer, path); - SDL_RenderCopy(renderer, picture, NULL, NULL); SDL_RenderPresent(renderer); - SDL_DestroyTexture(picture); return buttons; } int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * generalState,FontHandler fontHandler, AudioHandler audioHandler){ int statut = EXIT_FAILURE; + + char* path = "../rsrc/img/Lenna.png"; + SDL_SetRenderTarget(renderer,NULL); + SDL_Texture* picture = createTextureFromPath(renderer, path); //Initialisation P_Button* buttons = NULL; @@ -80,9 +80,11 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general SDL_SetRenderDrawColor(renderer, 0,0,0,0); SDL_RenderClear(renderer); - SDL_Rect rect = {.x = 0, .y = 0, .w = 0, .h = 0}; - SDL_GetWindowSize(window,&(rect.w),&(rect.h)); - if(!(buttons = drawMainMenu(renderer,fontHandler,&nb,&rect, generalState))){ + SDL_RenderCopy(renderer, picture, NULL, NULL); + + SDL_Rect windowSize = {.x = 0, .y = 0, .w = 0, .h = 0}; + SDL_GetWindowSize(window,&(windowSize.w),&(windowSize.h)); + if(!(buttons = drawMainMenu(renderer,fontHandler,&nb,&windowSize, generalState))){ fprintf(stderr, "Le menu principale ne s'est pas déssiné correctement\n"); return statut; } @@ -114,6 +116,21 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general playSFX(SFX_menu_sound_effect, audioHandler); } break; + case SDL_WINDOWEVENT: + if(event.window.event == SDL_WINDOWEVENT_RESIZED){ + SDL_SetRenderDrawColor(renderer, 0,0,0,0); + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, picture, NULL, NULL); + printf("Window %d resized to %dx%d\n", + event.window.windowID, event.window.data1, + event.window.data2); + windowSize.w = event.window.data1; + windowSize.h = event.window.data2; + buttons[0].rect.x = (windowSize.w/2)-(buttons[0].rect.w/2); + buttons[1].rect.x = (windowSize.w/2)-(buttons[1].rect.w/2); + buttons[2].rect.x = (windowSize.w/2)-(buttons[2].rect.w/2); + } + break; default: break; }