From 7c925e37406fa91d9f2e37340055a64dd814949c Mon Sep 17 00:00:00 2001 From: thmaillarb Date: Mon, 28 Feb 2022 10:13:08 +0100 Subject: [PATCH] Commented GameCreationMenu & optimized createPlayerLines createPlayerLines created its own array of players w/ memory leak because its address was passed in a function --- .gitignore | 3 ++ Pontu/include/view/GameCreationMenu.h | 5 ++- Pontu/src/view/GameCreationMenu.c | 59 +++++++++++++++++-------- Pontu/test/testCreationMenu.c | 4 +- Pontu/test/testTextInputWithProcessor.c | 2 +- 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 474af3c..f811cd5 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,6 @@ Documentation/doxygen/ # .idea since only 1 person uses CLion Pontu/.idea/ + + +*.swp diff --git a/Pontu/include/view/GameCreationMenu.h b/Pontu/include/view/GameCreationMenu.h index 38058d5..561e8ba 100644 --- a/Pontu/include/view/GameCreationMenu.h +++ b/Pontu/include/view/GameCreationMenu.h @@ -10,6 +10,7 @@ #include "engine/Colors.h" #include "model/Player.h" #include "engine/TextInput.h" +#include "engine/AudioHandler.h" #define NB_COLORS 4 #define NB_PLAYER_MAX 4 @@ -48,6 +49,8 @@ typedef struct CreateMenuLine* lines; SDL_Renderer* renderer; SDL_Color* bg; + InputProcessor* inproc; + Player players[4]; }IncrementParams; typedef struct @@ -60,4 +63,4 @@ typedef struct TTF_Font* font; }DecrementParams; -bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height, Player players[], int* nbPlayers); +bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, AudioHandler* ah, TTF_Font* font, int width, int height, Player players[], int* nbPlayers); diff --git a/Pontu/src/view/GameCreationMenu.c b/Pontu/src/view/GameCreationMenu.c index 8855329..40d7dfa 100644 --- a/Pontu/src/view/GameCreationMenu.c +++ b/Pontu/src/view/GameCreationMenu.c @@ -3,8 +3,8 @@ #include void freeCreateMenuLine(CreateMenuLine* line); -CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player); -void createPlayersLines(SDL_Renderer* renderer, TTF_Font* font, int minx, int maxx, int miny,int nbPlayer, CreateMenuLine* lines); +CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player, InputProcessor* inproc); +void createPlayersLines(SDL_Renderer* renderer, TTF_Font* font, int minx, int maxx, int miny,int nbPlayer, CreateMenuLine* lines, InputProcessor* inproc, Player players[]); bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer, const SDL_Color* bg); bool drawCreateMenuLine(SDL_Renderer* renderer, CreateMenuLine* line); void changePlayerColor(P_Button* caller); @@ -24,7 +24,7 @@ void incrementNbPlayer(P_Button* caller) return; } - createPlayersLines(params->renderer, params->font, params->minx, params->maxx, params->lines[*nbPlayers-1].h+params->lines[*nbPlayers-1].y, 1, ¶ms->lines[*nbPlayers]); + createPlayersLines(params->renderer, params->font, params->minx, params->maxx, params->lines[*nbPlayers-1].h+params->lines[*nbPlayers-1].y, 1, ¶ms->lines[*nbPlayers], params->inproc, params->players); drawCreateMenuLine(params->renderer, ¶ms->lines[*nbPlayers]); ++(*nbPlayers); @@ -64,14 +64,17 @@ void changePlayerColor(P_Button* caller) { ChangeColorParams* params = (ChangeColorParams*)caller->arg; params->p->color = params->color; + printf("change color %d\n", params->p->color); + fflush(stdout); } bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer, const SDL_Color* bg) { - //Draw everything + //Draw background (blue-ish) SDL_SetRenderDrawColor(renderer, bg->r, bg->g, bg->b, bg->a); SDL_RenderClear(renderer); + // Buttons for(int i=0; iaiButton); + // Color chooser for(int i=0; icolorButtons[i]); } + // TextInput drawTextInputOnRenderer(renderer, &line->pseudoInput); return true; } -CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player) +CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player, InputProcessor* inproc) { int const wColorBtn = 32; int const hColorBtn = 32; @@ -134,6 +142,7 @@ CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int CreateMenuLine line = {.x=xmin, y}; + // AI checkbox SDL_Texture* aiTexture = createGenericButtonTexture("X", font, 16, COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(ai.rect.w), &(ai.rect.h), renderer); SDL_Texture* aiTextureHovered = createGenericButtonTexture("X", font, 16, COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &ai.rect.w, &ai.rect.h, renderer); line.h = ai.rect.h; @@ -142,9 +151,11 @@ CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int SDL_Rect rect = {.x = xmin + ai.rect.x + ai.rect.w, .y = y, .h = TTF_FontHeight(font),.w = xmax - ai.rect.w - NB_COLORS * (wColorBtn + colorBtnXMargin*2)- 16}; + // Text input of nickname TextInput pseudoInput; initTextInput(&pseudoInput, &rect, NULL, font); + // Color chooser ChangeColorParams* params; for(int i=0; itabButton, colorsBtn[i]); } + + // Filling struct line.w = colorsBtn[0].rect.x + colorsBtn[0].rect.w; line.aiButton=ai; line.colorButtons=colorsBtn; @@ -180,7 +194,7 @@ void freeCreateMenuLine(CreateMenuLine* line) } } -bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height, Player players[], int* nbPlayers) +bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, AudioHandler* ah, TTF_Font* font, int width, int height, Player players[], int* nbPlayers) { *nbPlayers = 2; int const nbLabels = 5; @@ -218,7 +232,6 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon if(btnHoveredTexture == NULL) { fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError()); - return false; } decrementBtn.texture = btnTexture; decrementBtn.hoverTexture = btnHoveredTexture; @@ -260,12 +273,11 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon if(btnHoveredTexture == NULL) { fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError()); - return false; } incrementBtn.texture = btnTexture; incrementBtn.hoverTexture = btnHoveredTexture; - + // AI label SDL_Point aiLabelPos = {.x=titleLabel.textZone.x, .y=decrementBtn.rect.y+ decrementBtn.rect.h + 16}; TextLabel aiLabel = createTextLabel( "IA", @@ -278,6 +290,7 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon POSY_TOP ); + // Color label SDL_Point colorLabelPos = { .x=incrementBtn.rect.x+incrementBtn.rect.w, decrementBtn.rect.y+ decrementBtn.rect.h + 16 @@ -293,6 +306,7 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon POSY_TOP ); + // Pseudo input SDL_Point pseudoLabelPos = { .x= (titleLabel.textZone.x+ aiLabel.textZone.w+ @@ -312,26 +326,35 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon ); - createPlayersLines(renderer, font, titleLabelPos.x, incrementBtn.rect.x+incrementBtn.rect.w, colorLabel.textZone.y+colorLabel.textZone.h , *nbPlayers, lines); + // Filling TextLabel array labels[0] = &titleLabel; labels[1] = &nbPlayerLabel; labels[2] = &aiLabel; labels[3] = &pseudoLabel; labels[4] = &colorLabel; + + + // Initializing InputProcessor + InputProcessor inputProcessor = createInputProcessor(); + + // Creating 2 player lines (lines with a AI checkbox, a text input for the nickname, and a color chooser) + createPlayersLines(renderer, font, titleLabelPos.x, incrementBtn.rect.x+incrementBtn.rect.w, colorLabel.textZone.y+colorLabel.textZone.h , *nbPlayers, lines, &inputProcessor, players); + DecrementParams dparams= {.nbPlayers=nbPlayers, .lines=lines, .renderer=renderer, .bg = &bg, .nbPlayersLbl=&nbPlayerLabel, .font=font}; decrementBtn.arg = &dparams; - IncrementParams iparams= {.nbPlayers=nbPlayers, .lines=lines, .minx=titleLabelPos.x, .maxx=incrementBtn.rect.x+incrementBtn.rect.w, .miny=colorLabelPos.y+colorLabel.textZone.h + 16, .font=font, .renderer=renderer, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg}; + + IncrementParams iparams= {.nbPlayers=nbPlayers, .lines=lines, .minx=titleLabelPos.x, .maxx=incrementBtn.rect.x+incrementBtn.rect.w, .miny=colorLabelPos.y+colorLabel.textZone.h + 16, .font=font, .renderer=renderer, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg, .inproc=&inputProcessor, .players = players}; incrementBtn.arg = &iparams; buttons[0] = decrementBtn; buttons[1] = incrementBtn; - InputProcessor inputProcessor = createInputProcessor(); array_P_Button_AddElement(&inputProcessor.tabButton, incrementBtn); array_P_Button_AddElement(&inputProcessor.tabButton, decrementBtn); + // Displaying menu drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg); while(*generalState == GS_GameCreationMenu) { @@ -358,7 +381,7 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon { if(inputElement.data.buttonEvent.button == &incrementBtn || inputElement.data.buttonEvent.button == &decrementBtn) { - nbPlayerLabel.text[0] = *nbPlayers + 48; + //nbPlayerLabel.text[0] = *nbPlayers + 48; drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg); } diff --git a/Pontu/test/testCreationMenu.c b/Pontu/test/testCreationMenu.c index 33e3553..d6168f6 100644 --- a/Pontu/test/testCreationMenu.c +++ b/Pontu/test/testCreationMenu.c @@ -67,7 +67,9 @@ int testCreationMenu(void) { SDL_GetWindowSize(window, &w, &h); GeneralState generalState = GS_GameCreationMenu; printf("%d/%d\n", w, h); - gameCreationMenu(renderer, &generalState, fontHandler.fonts[FONT_retro], w, h); + Player players[4]; + int nbPlayers; + gameCreationMenu(renderer, &generalState, NULL, fontHandler.fonts[FONT_retro], w, h, players, &nbPlayers); Quit: freeFonts(fontHandler); diff --git a/Pontu/test/testTextInputWithProcessor.c b/Pontu/test/testTextInputWithProcessor.c index 5385333..59f3c5d 100644 --- a/Pontu/test/testTextInputWithProcessor.c +++ b/Pontu/test/testTextInputWithProcessor.c @@ -115,4 +115,4 @@ void testTextInputProcessor() { fprintf(stderr, "Texte tapĂ© : %s\n", textInput->value); freeInputProcessor(&inputProcessor); -} \ No newline at end of file +}