From 9c4b6c787a8f987090e018aaa25e8c5dcae1a6e4 Mon Sep 17 00:00:00 2001 From: marouault Date: Sun, 27 Feb 2022 21:29:24 +0100 Subject: [PATCH] Diverse modifications legere du menu de fin de partie et du menu de jeu. Revu du code de creation de partie pour voir ce qui ne fonctionne pas, on en parle demain --- Pontu/entryPoints/main.c | 6 +-- Pontu/include/engine/ButtonActions.h | 18 +++++++++ Pontu/include/view/GameCreationMenu.h | 2 +- Pontu/include/view/GameInterface.h | 3 +- Pontu/src/engine/Button.c | 6 +-- Pontu/src/engine/ButtonActions.c | 16 ++++++++ Pontu/src/view/GameCreationMenu.c | 53 ++++++++++++++------------- Pontu/src/view/GameInterface.c | 23 +++++------- Pontu/src/view/GameMain.c | 2 +- Pontu/src/view/MenuEndGame.c | 14 ++----- 10 files changed, 83 insertions(+), 60 deletions(-) create mode 100644 Pontu/include/engine/ButtonActions.h create mode 100644 Pontu/src/engine/ButtonActions.c diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index 5cac622..94f8a73 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) { SDL_GetWindowSize(window, &windowW, &windowH); - size_t nbPlayers = 4; + int nbPlayers = 4; Player players[] = { newPlayer("Bépo", PlayerViolet), newPlayer("Azeryty", PlayerBlue), @@ -78,13 +78,13 @@ int main(int argc, char *argv[]) { }; //players[2] = ; - //bool crashed = gameCreationMenu(renderer, &generalState, &fontHandler, windowW, windowH, &players, &nbPlayers); + bool crashed = gameCreationMenu(renderer, &generalState, fontHandler.fonts[FONT_PublicPixel], windowW, windowH, players, &nbPlayers); /*if (crashed) { fprintf(stderr,"sorry"); exit(-1); }*/ - generalState = GS_Game; + //generalState = GS_Game; gameView(&generalState, window, renderer, players, nbPlayers, &fontHandler); diff --git a/Pontu/include/engine/ButtonActions.h b/Pontu/include/engine/ButtonActions.h new file mode 100644 index 0000000..a930d70 --- /dev/null +++ b/Pontu/include/engine/ButtonActions.h @@ -0,0 +1,18 @@ +#ifndef BUTTON_ACTION_INCLUDED +#define BUTTON_ACTION_INCLUDED + +#include "engine/Button.h" + + +void action_none(P_Button* caller); + +void action_print(P_Button* caller); + +/** + * @brief Button handle which set a generalState to GS_MainMenu + * + * @param caller The button clicked + */ +void action_setStateToMainMenu(P_Button* caller); + +#endif //BUTTON_ACTION_INCLUDED \ No newline at end of file diff --git a/Pontu/include/view/GameCreationMenu.h b/Pontu/include/view/GameCreationMenu.h index 44e46ab..38058d5 100644 --- a/Pontu/include/view/GameCreationMenu.h +++ b/Pontu/include/view/GameCreationMenu.h @@ -60,4 +60,4 @@ typedef struct TTF_Font* font; }DecrementParams; -bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height); +bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height, Player players[], int* nbPlayers); diff --git a/Pontu/include/view/GameInterface.h b/Pontu/include/view/GameInterface.h index 5d7649a..61c6763 100644 --- a/Pontu/include/view/GameInterface.h +++ b/Pontu/include/view/GameInterface.h @@ -12,6 +12,7 @@ #include "engine/Button.h" #include #include "engine/arrayButton.h" +#include "engine/GeneralState.h" /** @@ -26,7 +27,7 @@ void drawButtons(SDL_Renderer* renderer,FontHandler fontHandler); * \param fontHandler The fontHandler to apply * \return an array of P_Button to draw on the renderer */ -struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler); +struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler, GeneralState* generalState); /** diff --git a/Pontu/src/engine/Button.c b/Pontu/src/engine/Button.c index c80e226..8caf68d 100644 --- a/Pontu/src/engine/Button.c +++ b/Pontu/src/engine/Button.c @@ -2,10 +2,8 @@ #include #include #include +#include -void onClickDefault(struct P_button* buttonCaller){ - //printf("Clicked on button: %p\n", buttonCaller); -} P_Button createButton(SDL_Texture* texture, SDL_Texture* hoverTexture ,const int coordx, const int coordy, const int sizex, const int sizey, void (*onClick)(P_Button* buttonCaller)) { @@ -13,7 +11,7 @@ P_Button createButton(SDL_Texture* texture, SDL_Texture* hoverTexture ,const int P_Button b = { .rect = { .x = coordx, .y = coordy, .w = sizex, .h = sizey }, .onClick = onClick, .enable = true}; if(onClick == NULL){ fprintf(stderr, "Attention: aucune action onClick n'est passé au bouton. Il prend le onClick par défaut\n"); - b.onClick = onClickDefault; + b.onClick = action_none; } b.texture = texture; b.hoverTexture = hoverTexture; diff --git a/Pontu/src/engine/ButtonActions.c b/Pontu/src/engine/ButtonActions.c new file mode 100644 index 0000000..5494a83 --- /dev/null +++ b/Pontu/src/engine/ButtonActions.c @@ -0,0 +1,16 @@ +#include "engine/ButtonActions.h" +#include "engine/GeneralState.h" + + +void action_none(P_Button* caller) { +} + + +void action_print(P_Button* caller) { + printf("Button pressed\n"); +} + +void action_setStateToMainMenu(P_Button* caller) +{ + *((GeneralState*)caller->arg) = GS_MainMenu; +} diff --git a/Pontu/src/view/GameCreationMenu.c b/Pontu/src/view/GameCreationMenu.c index f8c7e15..8855329 100644 --- a/Pontu/src/view/GameCreationMenu.c +++ b/Pontu/src/view/GameCreationMenu.c @@ -2,11 +2,10 @@ #include -bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height); 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); -bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer); +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); void decrementNbPlayer(P_Button* caller); @@ -67,9 +66,11 @@ void changePlayerColor(P_Button* caller) params->p->color = params->color; } -bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer) +bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer, const SDL_Color* bg) { //Draw everything + SDL_SetRenderDrawColor(renderer, bg->r, bg->g, bg->b, bg->a); + SDL_RenderClear(renderer); for(int i=0; icolorButtons[i]); } } -bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height) + +bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height, Player players[], int* nbPlayers) { - int nbPlayers = 2; + *nbPlayers = 2; int const nbLabels = 5; int nbButtons = 2; TextLabel *labels[nbLabels]; @@ -224,12 +226,12 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon // TextLabel for the number of players creation SDL_Point nbPlayerLabelPos = {.x=decrementBtn.rect.x+decrementBtn.rect.w+8, .y=decrementBtn.rect.y*1.5}; char nbPlayerStr[2]; - if(nbPlayers < 0 || nbPlayers > 9) + if(*nbPlayers < 0 || *nbPlayers > NB_PLAYER_MAX) { - fprintf(stderr, "WARNING: The number of players has to be between 0 and 9\n"); + fprintf(stderr, "WARNING: The number of players has to be between 0 and %d\n", NB_PLAYER_MAX); return false; } - nbPlayerStr[0] = nbPlayers + 48; // ASCII code of '0' is 48 and ASSCI code of '9' is 57 (48+9) + nbPlayerStr[0] = *nbPlayers + 48; // ASCII code of '0' is 48 and ASSCI code of '9' is 57 (48+9) nbPlayerStr[1] = '\0'; TextLabel nbPlayerLabel = createTextLabel( nbPlayerStr, @@ -310,17 +312,17 @@ 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); + createPlayersLines(renderer, font, titleLabelPos.x, incrementBtn.rect.x+incrementBtn.rect.w, colorLabel.textZone.y+colorLabel.textZone.h , *nbPlayers, lines); labels[0] = &titleLabel; labels[1] = &nbPlayerLabel; labels[2] = &aiLabel; labels[3] = &pseudoLabel; labels[4] = &colorLabel; - DecrementParams dparams= {.nbPlayers=&nbPlayers, .lines=lines, .renderer=renderer, .bg = &bg, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg, .font=font}; + 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}; incrementBtn.arg = &iparams; buttons[0] = decrementBtn; @@ -329,8 +331,8 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon InputProcessor inputProcessor = createInputProcessor(); array_P_Button_AddElement(&inputProcessor.tabButton, incrementBtn); array_P_Button_AddElement(&inputProcessor.tabButton, decrementBtn); - SDL_SetRenderDrawColor(renderer, bg.r, bg.g, bg.b, bg.a); - drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, nbPlayers); + + drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg); while(*generalState == GS_GameCreationMenu) { InputElement inputElement; @@ -342,7 +344,7 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon switch (inputElement.data.uiAction) { case UIAction_Quit: - *generalState = GS_MainMenu; + *generalState = GS_Quit; break; case UIAction_Validate: break; @@ -356,32 +358,31 @@ 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; - SDL_RenderClear(renderer); - drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, nbPlayers); + nbPlayerLabel.text[0] = *nbPlayers + 48; + + drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg); } } - case InputType_MoveGame: - - break; - case InputType_ClickGame: - - break; case InputType_None: default: break; } } - nbPlayerLabel.text[0] = nbPlayers+48; + nbPlayerLabel.text[0] = *nbPlayers+48; } - - //free freeInputProcessor(&inputProcessor); freeTextLabel(&titleLabel); freeButton(&incrementBtn); freeButton(&decrementBtn); + free(buttons); + + + for (size_t i=0; i<*nbPlayers; ++i) { + players[i] = newPlayer(lines[i].player->pseudo, lines[i].player->color); + freeCreateMenuLine(&lines[i]); + } return true; } diff --git a/Pontu/src/view/GameInterface.c b/Pontu/src/view/GameInterface.c index 818bc0e..1908dea 100644 --- a/Pontu/src/view/GameInterface.c +++ b/Pontu/src/view/GameInterface.c @@ -5,15 +5,9 @@ #include #include #include +#include -//void action boutton - -void action(P_Button* buttonCaller){ - printf("Bouton menu\n"); - //changeButtonTexture(arg->buttonCaller,arg->texture); -} - -struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler) { +struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler, GeneralState* generalState) { SDL_Color menuBorderColor= {0,0,255,255}; SDL_Color menuBackgroundColor = {0,255,0,255}; //SDL_Color menuBackgroundColor = {0,0,255,255}; @@ -35,11 +29,12 @@ struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHan struct array_P_Button buttons = array_P_Button_Create(); // Menu - array_P_Button_AddElement(&buttons, createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action)); //top left corner (rectangle) + array_P_Button_AddElement(&buttons, createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action_setStateToMainMenu)); //top left corner (rectangle) + array_P_Button_Last(&buttons)->arg = (void*)generalState; // Settings - array_P_Button_AddElement(&buttons, createButton(settingsButtonTexture, settingsButtonHoverTexture, 750,10,50,50,&action)); //top right corner (square or circle) + array_P_Button_AddElement(&buttons, createButton(settingsButtonTexture, settingsButtonHoverTexture, 750,10,50,50,&action_print)); //top right corner (square or circle) // Mute/Unmute - array_P_Button_AddElement(&buttons, createButton(muteButtonTexture, muteButtonHoverTexture, 825,10,50,50,&action)); //top right cornre (square or circle) + array_P_Button_AddElement(&buttons, createButton(muteButtonTexture, muteButtonHoverTexture, 825,10,50,50,&action_print)); //top right cornre (square or circle) return buttons; } @@ -130,9 +125,9 @@ void drawButtons(SDL_Renderer* renderer, FontHandler fontHandler) SDL_Texture *menuButtonHoverTexture = createGenericButtonTexture("MenuHover", fontHandler.fonts[FONT_retro], 125, menuBorderColor,menuBackgroundColor,24,5,&sizex,&sizey,renderer); //Buttons - P_Button menuButton = createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action); //top left corner (rectangle) - P_Button settingButton = createButton(menuButtonTexture, menuButtonHoverTexture, 750,10,50,50,&action); //top right corner (square or circle) - P_Button soundButton = createButton(menuButtonTexture, menuButtonHoverTexture, 825,10,50,50,&action); //top right cornre (square or circle) + P_Button menuButton = createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action_print); //top left corner (rectangle) + P_Button settingButton = createButton(menuButtonTexture, menuButtonHoverTexture, 750,10,50,50,&action_print); //top right corner (square or circle) + P_Button soundButton = createButton(menuButtonTexture, menuButtonHoverTexture, 825,10,50,50,&action_print); //top right cornre (square or circle) //Labels TextLabel nbTurnLabel = createTextLabel("Turn : ",&positonNbTurnLabel,1,&colorLabel,fontHandler.fonts[FONT_retro],renderer,positionX,positionY); diff --git a/Pontu/src/view/GameMain.c b/Pontu/src/view/GameMain.c index 78f2170..2162c09 100644 --- a/Pontu/src/view/GameMain.c +++ b/Pontu/src/view/GameMain.c @@ -44,7 +44,7 @@ void gameView(GeneralState* generalState, SDL_Window* window, SDL_Renderer* rend Game game = newGame(nbPlayers, players); TextureHandler textureHandler = newTextureHandler(renderer); - inputProcessor.tabButton = createGameInterfaceButtons(renderer, fontHandler); + inputProcessor.tabButton = createGameInterfaceButtons(renderer, fontHandler, generalState); struct array_TextLabel tabLabel = createGameInterfaceLabels(renderer,fontHandler); diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 799e163..c58853f 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -7,6 +7,7 @@ #include "engine/UIElementUtils.h" #include "engine/arrayTextLabel.h" #include "engine/arrayPositionSpecifier.h" +#include "engine/ButtonActions.h" struct endGameMenuTextLabel { @@ -14,15 +15,6 @@ struct endGameMenuTextLabel { struct array_PositionSpecifier positionSpecifiers; }; -/** - * @brief Button handle which set a generalState to GS_MainMenu - * - * @param caller The button clicked - */ -void setStateToMainMenu(P_Button* caller) { - *((GeneralState*)caller->arg) = GS_MainMenu; -} - SDL_Rect getEndGameMenuRect(SDL_Window* window) { int windowW; int windowH; @@ -62,7 +54,7 @@ P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, cons } - P_Button buttonMenuEndGame = createButton(texture, textureHover, rect->x, rect->y, sizeX, sizeY, &setStateToMainMenu); + P_Button buttonMenuEndGame = createButton(texture, textureHover, rect->x, rect->y, sizeX, sizeY, &action_setStateToMainMenu); buttonMenuEndGame.arg = state; buttonMenuEndGame.rect.y = rect->h*8/10; buttonMenuEndGame.rect.x = rect->x + rect->w/2-buttonMenuEndGame.rect.w/2; @@ -171,6 +163,8 @@ void drawEndGameMenu(SDL_Renderer* renderer, const SDL_Rect rectMenuEndGame, str } void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers) { + if (*generalState != GS_EndOfGameMenu) return; + InputProcessor inputProcessor = createInputProcessor(); const SDL_Rect endGameMenuRect = getEndGameMenuRect(window); array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &endGameMenuRect, generalState));