From 7492987f2fbcd9d43084f3361e28fbb37e0a8347 Mon Sep 17 00:00:00 2001 From: thmaillarb Date: Mon, 31 Jan 2022 11:48:30 +0100 Subject: [PATCH 1/8] More rewritting of Settings view (without commit 5ca9c02b "Added sizeFactor to textLabel") --- Pontu/include/view/Settings.h | 4 +- Pontu/src/view/Settings.c | 123 ++++++++++++++++++++++++++++------ Pontu/test/testSettingsView.c | 7 +- 3 files changed, 111 insertions(+), 23 deletions(-) diff --git a/Pontu/include/view/Settings.h b/Pontu/include/view/Settings.h index 5f8ec76..850f949 100644 --- a/Pontu/include/view/Settings.h +++ b/Pontu/include/view/Settings.h @@ -16,7 +16,7 @@ #include "engine/TextureLoader.h" #include #include "engine/TextLabel.h" - +#include "engine/FontLoader.h" /** * \brief Generates a settings view @@ -24,7 +24,7 @@ * \param[in] ah The AudioHandler in use * \return true if the view could be generated, else false */ -bool settingsView(SDL_Renderer* renderer, AudioHandler* ah); +bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh); #endif // SETTINGS_H diff --git a/Pontu/src/view/Settings.c b/Pontu/src/view/Settings.c index 6b858f9..7298a42 100644 --- a/Pontu/src/view/Settings.c +++ b/Pontu/src/view/Settings.c @@ -1,31 +1,116 @@ #include "view/Settings.h" +void onClick(P_Button* buttonCaller) { + printf("j'ai perdu %d\n",buttonCaller->rect.x); +} + // Global functions -bool settingsView(SDL_Renderer* renderer, AudioHandler* ah) { - SDL_Rect bg_area = {150,0,300,600}; - SDL_Rect title_area = {150,0,300,50}; - SDL_Color white = {255,255,255,255}; - SDL_Color blue = {52,158,235,255}; - SDL_Color black = {0,0,0,255}; - SDL_Texture* bg = NULL; - TextLabel tmp_textLabel; +bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) { + SDL_Window* window; + SDL_Renderer* renderer; + if (0 != SDL_CreateWindowAndRenderer(300,600,SDL_WINDOW_SHOWN, &window, &renderer)) { + fprintf(stderr,"Error when trying to create window or renderer: %s\n", SDL_GetError()); + return false; + } + SDL_Rect title_area = {0,0,300,50}; + SDL_Point title_point = {150,25}; + SDL_Point masterVolTitle_point = {150,75}; + SDL_Color white = {255,255,255,255}; + SDL_Color blue = {52,158,235,255}; + SDL_Color black = {0,0,0,255}; + int hMinus, wMinus, hPlus, wPlus; + TextLabel* arr_textLabel = (TextLabel*)malloc(7*sizeof(TextLabel)); + SDL_Texture** arr_textures = (SDL_Texture**)malloc(2*sizeof(SDL_Texture*)); + P_Button tmp_button; + char tmp_str[3]; + + if (arr_textLabel == NULL) { + fprintf(stderr, "Can't allocate memory for text labels\n"); + return false; + } + + if (arr_textures == NULL) { + fprintf(stderr,"Can't allocate memory for button textures"); + return false; + } + + if (0!=SDL_SetWindowModalFor(window, parent)) { + fprintf(stderr,"Warning: Can't set window as modal: %s\n",SDL_GetError()); + } + + SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a); + SDL_RenderClear(renderer); + + SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a); + SDL_RenderFillRect(renderer,&title_area); + arr_textLabel[0] = createTextLabel("Parametres", &title_point, &black, + fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[0]); + + arr_textures[0] = createGenericButtonTexture("-",fh->fonts[FONT_Curvilingus],16,black,blue, 0, 5, &wMinus, &hMinus, renderer); + arr_textures[1] = createGenericButtonTexture("+",fh->fonts[FONT_Curvilingus],16,black,blue, 0, 5, &wPlus, &hPlus, renderer); + + /* Master volume */ + // Title + arr_textLabel[1] = createTextLabel("Volume principal", &masterVolTitle_point, &black, + fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer,&arr_textLabel[1]); + + // - button + tmp_button = createButton(arr_textures[0], NULL, 0, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wMinus, hMinus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); - SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_TARGET, 300,600); - SDL_SetRenderTarget(renderer, bg); - SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a); - SDL_RenderFillRect(renderer,&bg_area); + // + button + tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wPlus, hPlus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); - SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a); - SDL_RenderFillRect(renderer,&title_area); - tmp_textLabel = createTextLabel("Paramètres", &((SDL_Point) {150,50}), &black, - FONT_Curvilingus, renderer, POSX_CENTER, POSY_CENTER); + // Current value + sprintf(tmp_str, "%d", ah->masterVol); + arr_textLabel[2] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[2]); + /* Music volume */ + // Title + arr_textLabel[3] = createTextLabel("Volume musique", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h+20}), &black, + fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[3]); + // - button + tmp_button = createButton(arr_textures[0], NULL, 0, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wMinus, hMinus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); - SDL_RenderCopy(renderer, bg, NULL, &bg_area); - SDL_SetRenderTarget(renderer, NULL); - SDL_RenderPresent(renderer); + // + button + tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wPlus, hPlus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); + + // Current value + sprintf(tmp_str, "%d", ah->volMusic); + arr_textLabel[4] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[4]); + + /* SFX Volume */ + // Title + arr_textLabel[5] = createTextLabel("Volume sons", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h + 20}), &black, + fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[5]); + + // - button + tmp_button = createButton(arr_textures[0], NULL, 0, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wMinus, hMinus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); + + // + button + tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wPlus, hPlus, onClick); + drawButtonOnRenderer(renderer, &tmp_button); + + // Current value + sprintf(tmp_str, "%d", ah->volSFX); + arr_textLabel[6] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + drawTextLabel(renderer, &arr_textLabel[6]); + + + SDL_RenderPresent(renderer); return true; } + diff --git a/Pontu/test/testSettingsView.c b/Pontu/test/testSettingsView.c index 61fb83d..821825c 100644 --- a/Pontu/test/testSettingsView.c +++ b/Pontu/test/testSettingsView.c @@ -9,6 +9,7 @@ void testSettingsView(void) { SDL_Renderer* renderer = NULL; SDL_Texture* background = NULL; AudioHandler ah; + FontHandler fh; if (0 != SDL_Init(SDL_INIT_VIDEO)) { fprintf(stderr,"Error when initializing SDL: %s\n",SDL_GetError()); @@ -26,11 +27,13 @@ void testSettingsView(void) { } ah = newAudioHandler(10,100,100); + fh = loadFonts(); SDL_SetRenderDrawColor(renderer,255,140,0,255); + printf("%s\n",SDL_GetError()); SDL_RenderClear(renderer); SDL_RenderPresent(renderer); - settingsView(renderer,&ah); + settingsView(window, &ah,&fh); SDL_Delay(5000); @@ -42,4 +45,4 @@ void testSettingsView(void) { TTF_Quit(); SDL_Quit(); -} \ No newline at end of file +} From 7b455ae7180a5be0eb644a7ced8a6b51aa0d13b9 Mon Sep 17 00:00:00 2001 From: Allan POINT Date: Mon, 31 Jan 2022 11:56:47 +0100 Subject: [PATCH 2/8] Create CreationMenue view --- Pontu/entryPoints/test.c | 11 +-- Pontu/include/engine/Colors.h | 4 +- Pontu/include/view/GameCreationMenu.h | 5 ++ Pontu/src/engine/Colors.c | 4 ++ Pontu/src/view/GameCreationMenu.c | 68 +++++++++++++++++++ Pontu/test/testCreationMenu.c | 98 +++++++++++++++++++++++++++ 6 files changed, 184 insertions(+), 6 deletions(-) create mode 100644 Pontu/src/engine/Colors.c create mode 100644 Pontu/src/view/GameCreationMenu.c create mode 100644 Pontu/test/testCreationMenu.c diff --git a/Pontu/entryPoints/test.c b/Pontu/entryPoints/test.c index b3fcb56..a94649c 100644 --- a/Pontu/entryPoints/test.c +++ b/Pontu/entryPoints/test.c @@ -6,10 +6,12 @@ #include "../test/testTextInput.c" #include "../test/testConnectionMenu.c"*/ /*#include "../test/testMenuEndGame.c" -/*#include "../test/testGameInterface.c" -#include "../test/testConnectionMenu.c"*/ + #include "../test/testGameInterface.c" + #include "../test/testConnectionMenu.c"*/ //#include "../test/testDrawMainMenu.c -#include "../test/testSettingsView.c" +//#include "../test/testSettingsView.c" +#include "../test/testCreationMenu.c" + /* This file is meant to be modified (used only to called other tests functions) */ @@ -26,7 +28,8 @@ int main(int argc, char *argv[]) { //testGameInterface(); //testConnectionMenu(); //testDrawMainMenu(); - testSettingsView(); + //testSettingsView(); + testCreationMenu(); return 0; } diff --git a/Pontu/include/engine/Colors.h b/Pontu/include/engine/Colors.h index c659955..16b3a36 100644 --- a/Pontu/include/engine/Colors.h +++ b/Pontu/include/engine/Colors.h @@ -3,8 +3,8 @@ #include -const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND = {225, 225, 225, 255}; -const SDL_Color COLOR_GENERIC_BUTTON_BORDER = {10, 10, 10, 255}; +extern const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND; +extern const SDL_Color COLOR_GENERIC_BUTTON_BORDER; #endif diff --git a/Pontu/include/view/GameCreationMenu.h b/Pontu/include/view/GameCreationMenu.h index 3734cc9..6e5300a 100644 --- a/Pontu/include/view/GameCreationMenu.h +++ b/Pontu/include/view/GameCreationMenu.h @@ -1,4 +1,9 @@ #include #include +#include "engine/TextLabel.h" +#include "engine/Button.h" +#include "engine/TextureLoader.h" +#include "engine/Colors.h" +#include "engine/FontUtils.h" bool drawGameCreationMenu(SDL_Renderer* renderer, TTF_Font* font, int width, int height); diff --git a/Pontu/src/engine/Colors.c b/Pontu/src/engine/Colors.c new file mode 100644 index 0000000..e9f935e --- /dev/null +++ b/Pontu/src/engine/Colors.c @@ -0,0 +1,4 @@ +#include "engine/Colors.h" + +const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND = {225, 225, 225, 255}; +const SDL_Color COLOR_GENERIC_BUTTON_BORDER = {10, 10, 10, 255}; diff --git a/Pontu/src/view/GameCreationMenu.c b/Pontu/src/view/GameCreationMenu.c new file mode 100644 index 0000000..4cf9b85 --- /dev/null +++ b/Pontu/src/view/GameCreationMenu.c @@ -0,0 +1,68 @@ +#include "view/GameCreationMenu.h" + +bool drawGameCreationMenu(SDL_Renderer* renderer, TTF_Font* font, int width, int height) +{ + // TextLabel for "Nombre de joueur.euse.s" creation + SDL_Point nbJoueurLabelPos = {.x=width*0.05, .y=height*0.05}; + SDL_Color black = {0,0,0,255}; + SDL_Color white = {225, 255, 255, 255}; + TextLabel nbJoueurLabel = createTextLabel( + "Nombre de joueur.euse.s", + &nbJoueurLabelPos, + 1, + &white, + font, + renderer, + POSX_LEFT, + POSY_TOP + ); + + // Incrementation Btn creation + + P_Button incrementBtn = createButton(NULL, NULL, nbJoueurLabelPos.x+calculateStringPixelLenght(font, nbJoueurLabel.text)+32, nbJoueurLabelPos.y, 0, 0, NULL); + SDL_Texture* btnTexture = createGenericButtonTexture("+", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer); + if(btnTexture == NULL) + { + fprintf(stderr, "WARNING: Can't create texture: %s\n", SDL_GetError()); + return false; + } + SDL_Texture* btnHoveredTexture = createGenericButtonTexture("+", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer); + + if(btnHoveredTexture == NULL) + { + fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError()); + return false; + } + incrementBtn.texture = btnTexture; + incrementBtn.hoverTexture = btnHoveredTexture; + + // Decrementation Btn creation + + P_Button decrementBtn = createButton(NULL, NULL, nbJoueurLabelPos.x+calculateStringPixelLenght(font, nbJoueurLabel.text)+32, nbJoueurLabelPos.y, 0, 0, NULL); + btnTexture = createGenericButtonTexture("-", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer); + if(btnTexture == NULL) + { + fprintf(stderr, "WARNING: Can't create texture: %s\n", SDL_GetError()); + return false; + } + btnHoveredTexture = createGenericButtonTexture("-", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer); + + if(btnHoveredTexture == NULL) + { + fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError()); + return false; + } + decrementBtn.texture = btnTexture; + decrementBtn.hoverTexture = btnHoveredTexture; + + //Draw everything + drawButtonOnRenderer(renderer, &incrementBtn); + drawButtonOnRenderer(renderer, &decrementBtn); + drawTextLabel(renderer, &nbJoueurLabel); + + //free + freeTextLabel(&nbJoueurLabel); + freeButton(&incrementBtn); + + return true; +} diff --git a/Pontu/test/testCreationMenu.c b/Pontu/test/testCreationMenu.c new file mode 100644 index 0000000..4d907dc --- /dev/null +++ b/Pontu/test/testCreationMenu.c @@ -0,0 +1,98 @@ +#include +#include +#include "view/GameCreationMenu.h" +#include "engine/FontLoader.h" +#include "engine/TextInput.h" + +int testCreationMenu(void) { + SDL_Window *window = NULL; + SDL_Renderer *renderer = NULL; + SDL_Texture* picture; + TextInput textInput; + int statut = EXIT_FAILURE; + char* path = "rsrc/img/Lenna.png"; + int i=0; + int w, h; + if(0 != SDL_Init(SDL_INIT_VIDEO)) + { + fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError()); + goto Quit; + } + + //fenetre + window = SDL_CreateWindow("Fenêtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN); + if(window == NULL) + { + fprintf(stderr, "Erreur SDL_CreateWindow: %s\n", SDL_GetError()); + goto Quit; + } + + //rendu + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if(renderer == NULL) + { + fprintf(stderr, "Erreur SDL_CreateRenderer: %s\n", SDL_GetError()); + goto Quit; + } + + //Fonts + if(TTF_Init() == -1) + { + fprintf(stderr, "Erreur: TTF_Init: %s\n", TTF_GetError()); + goto Quit; + } + + if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + if(0 != SDL_RenderClear(renderer)) //efface le rendu en le repeignant avec la couleur choisi + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + if(0 != SDL_SetRenderDrawColor(renderer, 255,255,255,255)) //choisi la couleur avec laquelle travailler + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + + SDL_bool quit = SDL_FALSE; + SDL_Event event; + + FontHandler fontHandler = loadFonts(); + + SDL_GetWindowSize(window, &w, &h); + while(!quit) + { + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + quit = SDL_TRUE; + break; + case SDL_MOUSEBUTTONUP: + break; + } + } + drawGameCreationMenu(renderer, fontHandler.fonts[FONT_retro], w, h); + SDL_RenderPresent(renderer); + + SDL_Delay(20); + } + +Quit: + freeFonts(fontHandler); + if(renderer != NULL) + SDL_DestroyRenderer(renderer); + if(window != NULL) + SDL_DestroyWindow(window); + TTF_Quit(); + SDL_Quit(); + return statut; +} From e00807a276a40bb97ab77680b1f44d2c3ef46a28 Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 31 Jan 2022 12:03:06 +0100 Subject: [PATCH 3/8] Modified end game menu and input processors --- Pontu/entryPoints/test.c | 8 +-- Pontu/include/engine/ArrayUtils.h | 50 +++++++------ Pontu/include/engine/GameInputProcessor.h | 52 ++++++++++++++ Pontu/include/engine/InputProcessor.h | 19 +++-- Pontu/include/engine/arrayButton.h | 9 +++ Pontu/include/view/MenuEndGame.h | 1 + Pontu/src/engine/GameInputProcessor.c | 87 +++++++++++++++++++++++ Pontu/src/engine/InputProcessor.c | 68 ++++++------------ Pontu/src/view/MenuEndGame.c | 76 ++++++++++++++++++-- Pontu/test/oldMain__ThisCanBeGameMain.c | 3 +- Pontu/test/testMenuEndGame.c | 69 ++++++++++++------ 11 files changed, 332 insertions(+), 110 deletions(-) create mode 100644 Pontu/include/engine/GameInputProcessor.h create mode 100644 Pontu/include/engine/arrayButton.h create mode 100644 Pontu/src/engine/GameInputProcessor.c diff --git a/Pontu/entryPoints/test.c b/Pontu/entryPoints/test.c index b3fcb56..f431a15 100644 --- a/Pontu/entryPoints/test.c +++ b/Pontu/entryPoints/test.c @@ -5,11 +5,11 @@ /*#include "../test/testButton.c" #include "../test/testTextInput.c" #include "../test/testConnectionMenu.c"*/ -/*#include "../test/testMenuEndGame.c" +#include "../test/testMenuEndGame.c" /*#include "../test/testGameInterface.c" #include "../test/testConnectionMenu.c"*/ //#include "../test/testDrawMainMenu.c -#include "../test/testSettingsView.c" +//#include "../test/testSettingsView.c" /* This file is meant to be modified (used only to called other tests functions) */ @@ -22,11 +22,11 @@ int main(int argc, char *argv[]) { //testTextInput(); //testButtonTextureLoader(); //testConnectionMenu(); - //testMenuEndGame(); + testMenuEndGame(); //testGameInterface(); //testConnectionMenu(); //testDrawMainMenu(); - testSettingsView(); + //testSettingsView(); return 0; } diff --git a/Pontu/include/engine/ArrayUtils.h b/Pontu/include/engine/ArrayUtils.h index 326e48e..9ab3b34 100644 --- a/Pontu/include/engine/ArrayUtils.h +++ b/Pontu/include/engine/ArrayUtils.h @@ -26,13 +26,13 @@ #define GENERATE_DYNAMIC_ARRAY(T) \ struct array_##T { \ T* elems; \ - size_t arraySize; \ - size_t arraySpace; \ + size_t size; \ + size_t space; \ }; \ \ /*Contruct an empty array*/\ inline struct array_##T array_##T##_Create() { \ - struct array_##T array = {.elems=NULL, .arraySize=0, .arraySpace=0}; \ + struct array_##T array = {.elems=NULL, .size=0, .space=0}; \ return array; \ } \ \ @@ -40,44 +40,44 @@ inline struct array_##T array_##T##_Create() { \ inline void array_##T##_Free(struct array_##T* array) { \ free(array->elems); \ array->elems = NULL; \ - array->arraySize = 0; \ - array->arraySpace = 0; \ + array->size = 0; \ + array->space = 0; \ } \ \ /*Reserve space for an array*/\ inline void array_##T##_Reserve(struct array_##T* array, const size_t space) { \ - array->arraySpace = space; \ - array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + array->space = space; \ + array->elems = realloc(array->elems, sizeof(T)*(array->space)); \ if (array->elems == NULL) exit(errno); \ } \ \ /*Fit space to size for an array*/\ inline void array_##T##_FitToSize(struct array_##T* array) { \ - array->arraySpace = array->arraySize; \ - array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + array->space = array->size; \ + array->elems = realloc(array->elems, sizeof(T)*(array->space)); \ if (array->elems == NULL) exit(errno); \ } \ \ /*Add an element to an array*/\ inline void array_##T##_AddElement(struct array_##T* array, const T element) { \ - ++(array->arraySize); \ - if (array->arraySize > array->arraySpace) { \ - ++(array->arraySpace); \ - array->elems = realloc(array->elems, sizeof(T)*(array->arraySpace)); \ + ++(array->size); \ + if (array->size > array->space) { \ + ++(array->space); \ + array->elems = realloc(array->elems, sizeof(T)*(array->space)); \ if (array->elems == NULL) exit(errno); \ } \ \ - array->elems[array->arraySize - 1] = element; \ + array->elems[array->size - 1] = element; \ } \ \ /*Remove an element from an array*/\ inline bool array_##T##_RemoveElement(struct array_##T* array, const T element, bool (*areEqual)(const T, const T)) { \ - for (size_t i=0; iarraySize; ++i) { \ + for (size_t i=0; isize; ++i) { \ if (areEqual(array->elems[i], element)) { \ - for (;iarraySize-1; ++i) { \ + for (;isize-1; ++i) { \ array->elems[i] = array->elems[i+1]; \ } \ - --(array->arraySize); \ + --(array->size); \ return true; \ } \ } \ @@ -86,7 +86,7 @@ inline bool array_##T##_RemoveElement(struct array_##T* array, const T element, \ /*Check if an array contains an element*/\ inline bool array_##T##_Contains(const struct array_##T* const array, const T element, bool (*areEqual)(const T, const T)) { \ - for (size_t i = 0; i < array->arraySize; i++) { \ + for (size_t i = 0; i < array->size; i++) { \ if (areEqual(array->elems[i], element)) { \ return true; \ } \ @@ -96,10 +96,20 @@ inline bool array_##T##_Contains(const struct array_##T* const array, const T el \ /*Apply a function to each element in the array*/\ inline void array_##T##_Foreach(const struct array_##T* const array, void (*func)(const T)) { \ - for(size_t i = 0; iarraySize; ++i) { \ + for(size_t i = 0; isize; ++i) { \ func(array->elems[i]);\ }\ -} +}\ +\ +/*Return last element*/\ +inline T* array_##T##_First(const struct array_##T* const array) {\ + return &array->elems[0];\ +}\ +\ +/*Return last element*/\ +inline T* array_##T##_Last(const struct array_##T* const array) {\ + return &array->elems[array->size-1];\ +}\ diff --git a/Pontu/include/engine/GameInputProcessor.h b/Pontu/include/engine/GameInputProcessor.h new file mode 100644 index 0000000..df65782 --- /dev/null +++ b/Pontu/include/engine/GameInputProcessor.h @@ -0,0 +1,52 @@ +/** + * \file GameInputProcessor.h + * \brief Define a structure, GameInputProcessor and functions to convert SDL_event to envent for Pontu + * \author Martin Rouault + * \date 06/12/2021 + */ + +#ifndef GAME_INPUT_PROCESSOR_INCLUDED +#define GAME_INPUT_PROCESSOR_INCLUDED + +#include "engine/Button.h" +#include "engine/arrayButton.h" +#include "engine/InputElement.h" +#include "model/Coord.h" + +/** + * \struct GameInputProcessor + * \brief Contains datas useful to handle input + */ +typedef struct +{ + struct array_P_Button tabButton; + Coord selectedCase; ///< A case in Board (used to handle move actions) , (-1;-1) si inexistant +} GameInputProcessor; + + +/** + * \brief Create a new input processor + * + * \return A new input processor + */ +GameInputProcessor createGameInputProcessor(); + +/** + * \brief Convert a screen coord into a model Coord + * + * \param [in] point Screen coordinates + * \param [in] boardRect The game's board's rect + * \return Game coordinate from point + */ +Coord screenCoordToGameCoord(const SDL_Point* point, const SDL_Rect* boardRect); + +/** + * \brief Poll and convert SDL_Events into specific event for Pontu + * + * \param [in, out] GameinputProcessor The input processor which keeps a state of input in between calls + * \param [in] boardRect The game's board's rect + * \return InputElement : an event for Pontu + */ +InputElement proccessGameInput(GameInputProcessor* gameInputProcessor, const SDL_Rect* boardRect); + +#endif // GAME_INPUT_PROCESSOR_INCLUDED diff --git a/Pontu/include/engine/InputProcessor.h b/Pontu/include/engine/InputProcessor.h index 598102a..e374cbe 100644 --- a/Pontu/include/engine/InputProcessor.h +++ b/Pontu/include/engine/InputProcessor.h @@ -9,8 +9,8 @@ #define INPUT_PROCESSOR_INCLUDED #include "engine/Button.h" +#include "engine/arrayButton.h" #include "engine/InputElement.h" -#include "model/Coord.h" /** * \struct InputProcessor @@ -18,26 +18,23 @@ */ typedef struct { - //ArrayButton tabButton; - Coord selectedCase; ///< A case in Board (used to handle move actions) , (-1;-1) si inexistant + struct array_P_Button tabButton; } InputProcessor; + /** - * \brief Convert a screen coord into a model Coord - * - * \param [in] point Screen coordinates - * \param [in] boardRect The game's board's rect - * \return Game coordinate from point + * \brief Create a new input processor + * + * \return A new input processor */ -Coord screenCoordToGameCoord(const SDL_Point* point, const SDL_Rect* boardRect); +InputProcessor createInputProcessor(); /** * \brief Poll and convert SDL_Events into specific event for Pontu * * \param [in, out] inputProcessor The input processor which keeps a state of input in between calls - * \param [in] boardRect The game's board's rect * \return InputElement : an event for Pontu */ -InputElement proccessInput(InputProcessor* inputProcessor, const SDL_Rect* boardRect); +InputElement proccessInput(InputProcessor* inputProcessor); #endif // INPUT_PROCESSOR_INCLUDED diff --git a/Pontu/include/engine/arrayButton.h b/Pontu/include/engine/arrayButton.h new file mode 100644 index 0000000..0e8c951 --- /dev/null +++ b/Pontu/include/engine/arrayButton.h @@ -0,0 +1,9 @@ +#ifndef ARRAY_BUTTON_INCLUDED +#define ARRAY_BUTTON_INCLUDED + +#include "engine/Button.h" +#include "engine/ArrayUtils.h" + +GENERATE_DYNAMIC_ARRAY(P_Button) + +#endif //ARRAY_BUTTON_INCLUDED diff --git a/Pontu/include/view/MenuEndGame.h b/Pontu/include/view/MenuEndGame.h index c0d1647..0238045 100644 --- a/Pontu/include/view/MenuEndGame.h +++ b/Pontu/include/view/MenuEndGame.h @@ -7,6 +7,7 @@ #include "engine/Button.h" #include "engine/TextureLoader.h" +#include "engine/GeneralState.h" P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect); diff --git a/Pontu/src/engine/GameInputProcessor.c b/Pontu/src/engine/GameInputProcessor.c new file mode 100644 index 0000000..030c8cb --- /dev/null +++ b/Pontu/src/engine/GameInputProcessor.c @@ -0,0 +1,87 @@ +#include "engine/GameInputProcessor.h" + +Coord screenCoordToGameCoord(const SDL_Point* point, const SDL_Rect* boardRect){ + Coord coord = { + coord.x = (point->x-boardRect->x)*9/boardRect->w, + coord.y = (point->y-boardRect->y)*9/boardRect->h + }; + return coord; +} + +GameInputProcessor createGameInputProcessor() { + GameInputProcessor gameInputProcessor = { + .selectedCase = {.x=-1, .y=-1}, + .tabButton = array_P_Button_Create() + }; + return gameInputProcessor; +} + +InputElement proccessGameInput(GameInputProcessor *gameInputProcessor, const SDL_Rect* boardRect) +{ + SDL_Event event; + if (!SDL_PollEvent(&event)) + { + return createInputElementNone(); + } + + switch (event.type) + { + case SDL_QUIT: + return createInputElementUIQuit(); + case SDL_MOUSEBUTTONDOWN: + { + const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y}; + if (SDL_PointInRect(&mousePoint, boardRect)) + { + if (!coordValid(gameInputProcessor->selectedCase)) { + gameInputProcessor->selectedCase = screenCoordToGameCoord(&mousePoint, boardRect); + } + } + else + { + } + break; + } + case SDL_MOUSEBUTTONUP: + { + const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y}; + if (SDL_PointInRect(&mousePoint, boardRect)) + { + if (coordValid(gameInputProcessor->selectedCase)) + { + Coord newCoords = screenCoordToGameCoord(&mousePoint, boardRect); + if (coordEqual(gameInputProcessor->selectedCase, newCoords)) { + gameInputProcessor->selectedCase = newCoords; + return createInputElementClickBoard(newCoords); + } + else { + const Coord oldCoord = gameInputProcessor->selectedCase; + gameInputProcessor->selectedCase = newCoord(-1,-1); + return createInputElementMoveBoard(oldCoord, newCoords); + } + } + } + else + { + for (size_t i = 0; itabButton.size; ++i) { + P_Button* b = &gameInputProcessor->tabButton.elems[i]; + if (SDL_PointInRect(&mousePoint, &b->rect)) { + b->onClick(b); + } + } + return createInputElementNone(); + } + break; + } + case SDL_MOUSEMOTION: + { + for (size_t i = 0; itabButton.size; ++i) { + P_Button* b = &gameInputProcessor->tabButton.elems[i]; + isHover(b, event.motion.x, event.motion.y); + } + } + } + + return createInputElementNone(); +} + diff --git a/Pontu/src/engine/InputProcessor.c b/Pontu/src/engine/InputProcessor.c index f5793e5..fb58781 100644 --- a/Pontu/src/engine/InputProcessor.c +++ b/Pontu/src/engine/InputProcessor.c @@ -1,15 +1,13 @@ #include "engine/InputProcessor.h" -Coord screenCoordToGameCoord(const SDL_Point* point, const SDL_Rect* boardRect){ - Coord coord = { - coord.x = (point->x-boardRect->x)*9/boardRect->w, - coord.y = (point->y-boardRect->y)*9/boardRect->h +InputProcessor createInputProcessor() { + InputProcessor inputProcessor = { + .tabButton = array_P_Button_Create() }; - return coord; + return inputProcessor; } - -InputElement proccessInput(InputProcessor *inputProcessor, const SDL_Rect* boardRect) +InputElement proccessInput(InputProcessor *inputProcessor) { SDL_Event event; if (!SDL_PollEvent(&event)) @@ -19,51 +17,27 @@ InputElement proccessInput(InputProcessor *inputProcessor, const SDL_Rect* board switch (event.type) { - case SDL_QUIT: - return createInputElementUIQuit(); - case SDL_MOUSEBUTTONDOWN: - { - const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y}; - if (SDL_PointInRect(&mousePoint, boardRect)) - { - if (!coordValid(inputProcessor->selectedCase)) { - inputProcessor->selectedCase = screenCoordToGameCoord(&mousePoint, boardRect); - } - } - else + case SDL_QUIT: + return createInputElementUIQuit(); + case SDL_MOUSEBUTTONUP: { - } - break; - } - case SDL_MOUSEBUTTONUP: - { - const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y}; - if (SDL_PointInRect(&mousePoint, boardRect)) - { - if (coordValid(inputProcessor->selectedCase)) - { - Coord newCoords = screenCoordToGameCoord(&mousePoint, boardRect); - if (coordEqual(inputProcessor->selectedCase, newCoords)) { - inputProcessor->selectedCase = newCoords; - return createInputElementClickBoard(newCoords); - } - else { - const Coord oldCoord = inputProcessor->selectedCase; - inputProcessor->selectedCase = newCoord(-1,-1); - return createInputElementMoveBoard(oldCoord, newCoords); + const SDL_Point mousePoint = {.x = event.button.x, .y = event.button.y}; + + for (size_t i = 0; itabButton.size; ++i) { + P_Button* b = &inputProcessor->tabButton.elems[i]; + if (SDL_PointInRect(&mousePoint, &b->rect)) { + b->onClick(b); } } - } - else - { - /*for (size_t i = 0; itabButton.size; ++i) { - if (SDL_PointInRect(&mousePoint, &inputProcessor->tabButton.buttons[i].rect)) { - // ... - } - }*/ return createInputElementNone(); } - break; + case SDL_MOUSEMOTION: + { + for (size_t i = 0; itabButton.size; ++i) { + P_Button* b = &inputProcessor->tabButton.elems[i]; + isHover(b, event.motion.x, event.motion.y); + } + break; } } diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 7d5902e..15c88f6 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -1,16 +1,26 @@ #include "view/MenuEndGame.h" #include #include "engine/TextLabel.h" +#include +#include "engine/Colors.h" +#include "engine/InputProcessor.h" +void nullFunc(P_Button* caller) { + +} + P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect) { - const SDL_Color black = {0,0,0,0}; - const SDL_Color white = {255,255,255,255}; int sizeX; int sizeY; - SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 14, black, white, 1, 4, &sizeX, &sizeY, renderer); + + SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 1, 4, &sizeX, &sizeY, renderer); - return createButton(texture, texture, rect->x, rect->y, sizeX, sizeY, NULL); + if (texture == NULL) { + perror(SDL_GetError()); + exit(errno); + } + return createButton(texture, NULL, rect->x, rect->y, sizeX, sizeY, nullFunc); } void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, FontHandler* fontHandler) { @@ -91,3 +101,61 @@ void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_ drawPlayersScores(renderer, players, nbPlayers, rect, fontHandler); } +void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, const Player players[], const size_t nbPlayers) { + InputProcessor inputProcessor = createInputProcessor(); + + //récupère le numéro de l'écran + SDL_DisplayMode current; + const int i = SDL_GetWindowDisplayIndex(window); + SDL_GetCurrentDisplayMode(i, ¤t); //retourne current, structure avec vrai valeurs de taille de fenêtre + + SDL_Rect rectMenuEndGme = {.x=current.w/20, .y=0, .w=current.w*4/5, .h=current.h}; + + + array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme)); + P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); + + SDL_Color color = {0,0,0,0}; + drawEndGameMenu(renderer, players, nbPlayers, &rectMenuEndGme, &fontHandler); + + while(!quit) + { + { + InputElement inputElement; + while (InputType_None != (inputElement = proccessInput(&inputProcessor)).type) { + + switch (inputElement.type) + { + case InputType_ActivateUI: + switch (inputElement.data.uiAction) + { + case UIAction_Quit: + quit = true; + break; + case UIAction_Validate: + break; + case UIAction_Cancel: + break; + default: + break; + } + break; + case InputType_MoveGame: + + break; + case InputType_ClickGame: + + break; + case InputType_None: + default: + break; + } + } + } + + drawButtonOnRenderer(renderer, buttonMenuEndGame); + + SDL_RenderPresent(renderer); + SDL_Delay(50); + } +} diff --git a/Pontu/test/oldMain__ThisCanBeGameMain.c b/Pontu/test/oldMain__ThisCanBeGameMain.c index d8b9bca..1ab14fe 100644 --- a/Pontu/test/oldMain__ThisCanBeGameMain.c +++ b/Pontu/test/oldMain__ThisCanBeGameMain.c @@ -6,7 +6,6 @@ #include "engine/TextureHandler.h" #include "model/Game.h" #include "view/GameDrawer.h" -#include "engine/ArrayUtils.h" #include "model/arrayCoord.h" #include "debug/printer.h" @@ -37,7 +36,7 @@ int main(int argc, char* argv[]) goto Quit; } - InputProcessor inputProcessor = {.selectedCase = {.x=-1, .y=-1}}; + InputProcessor inputProcessor = createInputProcessor(); struct array_Coord interactiveCases = array_Coord_Create(); int wBoardRect=99*3, hBoardRect=99*3; diff --git a/Pontu/test/testMenuEndGame.c b/Pontu/test/testMenuEndGame.c index 3e1d29b..1659eb6 100644 --- a/Pontu/test/testMenuEndGame.c +++ b/Pontu/test/testMenuEndGame.c @@ -3,9 +3,12 @@ #include "view/MenuEndGame.h" #include "engine/FontLoader.h" #include "model/Player.h" +#include "engine/InputProcessor.h" +#include "engine/InputElement.h" void testMenuEndGame() { SDL_Window *window = NULL; + SDL_Rect windowSize = {10, 10, 600, 600}; SDL_Renderer *renderer = NULL; SDL_Texture* picture; int statut = EXIT_FAILURE; @@ -17,7 +20,7 @@ void testMenuEndGame() { } //fenetre - window = SDL_CreateWindow("Fenêtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN); + window = SDL_CreateWindow("Fenêtre", windowSize.x, windowSize.y, windowSize.w, windowSize.h, SDL_WINDOW_SHOWN); if(window == NULL) { fprintf(stderr, "Erreur SDL_CreateWindow: %s\n", SDL_GetError()); @@ -63,36 +66,59 @@ void testMenuEndGame() { SDL_RenderPresent(renderer); + + InputProcessor inputProcessor = createInputProcessor(); + SDL_Rect rectMenuEndGme = {.x=20, .y=0, .w=300, .h=480}; - P_Button buttonMenuEndGame = createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme); + + + array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme)); + P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); + + SDL_Color color = {0,0,0,0}; + Player players[] = {newPlayer("Bépo", color), newPlayer("Azerty", color)}; + players[0].eliminationTurn = 10; + players[1].eliminationTurn = 10; + players[0].rank = 1; + players[1].rank = 2; + drawEndGameMenu(renderer, players, 2, &rectMenuEndGme, &fontHandler); while(!quit) { - { - SDL_Event event; - while(SDL_PollEvent(&event)) - { - switch(event.type) + InputElement inputElement; + while (InputType_None != (inputElement = proccessInput(&inputProcessor)).type) { + + switch (inputElement.type) { - case SDL_QUIT: - fprintf(stderr, "Quit\n"); - quit = true; + case InputType_ActivateUI: + switch (inputElement.data.uiAction) + { + case UIAction_Quit: + quit = true; + break; + case UIAction_Validate: + break; + case UIAction_Cancel: + break; + default: + break; + } + break; + case InputType_MoveGame: + + break; + case InputType_ClickGame: + + break; + case InputType_None: + default: break; } } } - SDL_SetRenderDrawColor(renderer, 255,255,255,255); - SDL_RenderClear(renderer); - - SDL_Color color = {0,0,0,0}; - Player players[] = {newPlayer("Bépo", color), newPlayer("Azerty", color)}; - players[0].eliminationTurn = 10; - players[1].eliminationTurn = 10; - players[0].rank = 1; - players[1].rank = 2; - drawEndGameMenu(renderer, players, 2, &rectMenuEndGme, &fontHandler); - drawButtonOnRenderer(renderer, &buttonMenuEndGame); + + drawButtonOnRenderer(renderer, buttonMenuEndGame); SDL_RenderPresent(renderer); SDL_Delay(50); @@ -100,7 +126,6 @@ void testMenuEndGame() { Quit: freeFonts(fontHandler); - SDL_DestroyTexture(buttonMenuEndGame.texture); if(renderer != NULL) SDL_DestroyRenderer(renderer); if(window != NULL) From c6fdb662a4b07640ce619f92331993cac5f57554 Mon Sep 17 00:00:00 2001 From: thmaillarb Date: Mon, 31 Jan 2022 12:04:09 +0100 Subject: [PATCH 4/8] Upated Settings view to support last version of TextLabel --- Pontu/src/view/Settings.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Pontu/src/view/Settings.c b/Pontu/src/view/Settings.c index 7298a42..dc50bc8 100644 --- a/Pontu/src/view/Settings.c +++ b/Pontu/src/view/Settings.c @@ -44,17 +44,17 @@ bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) { SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a); SDL_RenderFillRect(renderer,&title_area); - arr_textLabel[0] = createTextLabel("Parametres", &title_point, &black, - fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[0] = createTextLabel("Parametres", &title_point, 2.0, &black, + fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[0]); - arr_textures[0] = createGenericButtonTexture("-",fh->fonts[FONT_Curvilingus],16,black,blue, 0, 5, &wMinus, &hMinus, renderer); - arr_textures[1] = createGenericButtonTexture("+",fh->fonts[FONT_Curvilingus],16,black,blue, 0, 5, &wPlus, &hPlus, renderer); + arr_textures[0] = createGenericButtonTexture("-",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wMinus, &hMinus, renderer); + arr_textures[1] = createGenericButtonTexture("+",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wPlus, &hPlus, renderer); /* Master volume */ // Title - arr_textLabel[1] = createTextLabel("Volume principal", &masterVolTitle_point, &black, - fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[1] = createTextLabel("Volume principal", &masterVolTitle_point, 1.25, &black, + fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer,&arr_textLabel[1]); // - button @@ -62,18 +62,18 @@ bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) { drawButtonOnRenderer(renderer, &tmp_button); // + button - tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wPlus, hPlus, onClick); + tmp_button = createButton(arr_textures[1], NULL, 270, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wPlus, hPlus, onClick); drawButtonOnRenderer(renderer, &tmp_button); // Current value sprintf(tmp_str, "%d", ah->masterVol); - arr_textLabel[2] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[2] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[2]); /* Music volume */ // Title - arr_textLabel[3] = createTextLabel("Volume musique", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h+20}), &black, - fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[3] = createTextLabel("Volume musique", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h+20}), 1.5, &black, + fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[3]); // - button @@ -81,18 +81,18 @@ bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) { drawButtonOnRenderer(renderer, &tmp_button); // + button - tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wPlus, hPlus, onClick); + tmp_button = createButton(arr_textures[1], NULL, 270, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wPlus, hPlus, onClick); drawButtonOnRenderer(renderer, &tmp_button); // Current value sprintf(tmp_str, "%d", ah->volMusic); - arr_textLabel[4] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[4] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[4]); /* SFX Volume */ // Title - arr_textLabel[5] = createTextLabel("Volume sons", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h + 20}), &black, - fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[5] = createTextLabel("Volume sons", &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h + 20}), 1.5, &black, + fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[5]); // - button @@ -100,12 +100,12 @@ bool settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) { drawButtonOnRenderer(renderer, &tmp_button); // + button - tmp_button = createButton(arr_textures[1], NULL, 280, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wPlus, hPlus, onClick); + tmp_button = createButton(arr_textures[1], NULL, 270, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wPlus, hPlus, onClick); drawButtonOnRenderer(renderer, &tmp_button); // Current value sprintf(tmp_str, "%d", ah->volSFX); - arr_textLabel[6] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), &black, fh->fonts[FONT_Curvilingus], renderer, POSX_CENTER, POSY_CENTER); + arr_textLabel[6] = createTextLabel(tmp_str, &((SDL_Point) {150, tmp_button.rect.y+tmp_button.rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER); drawTextLabel(renderer, &arr_textLabel[6]); From dec491cfbdf9a1f0fe9bbdd5d03a72ca5a9d65ca Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 31 Jan 2022 18:28:02 +0100 Subject: [PATCH 5/8] Advancing in endgamemenu loop --- Pontu/include/engine/FontUtils.h | 1 - Pontu/include/view/MenuEndGame.h | 3 ++ Pontu/src/engine/FontUtils.c | 1 + Pontu/src/view/MenuEndGame.c | 32 ++++++++++-------- Pontu/test/testMenuEndGame.c | 57 ++------------------------------ 5 files changed, 26 insertions(+), 68 deletions(-) diff --git a/Pontu/include/engine/FontUtils.h b/Pontu/include/engine/FontUtils.h index 2740e03..6b5fa52 100644 --- a/Pontu/include/engine/FontUtils.h +++ b/Pontu/include/engine/FontUtils.h @@ -2,7 +2,6 @@ #define FONT_UTILS_INCLUDED #include -#include int calculateStringPixelLenght(TTF_Font* font, char* str); diff --git a/Pontu/include/view/MenuEndGame.h b/Pontu/include/view/MenuEndGame.h index 0238045..eb736a0 100644 --- a/Pontu/include/view/MenuEndGame.h +++ b/Pontu/include/view/MenuEndGame.h @@ -13,4 +13,7 @@ P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, cons void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler); +void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers); + + #endif // MENU_FIN_INCLUDED diff --git a/Pontu/src/engine/FontUtils.c b/Pontu/src/engine/FontUtils.c index ee6b8a1..6a3f49a 100644 --- a/Pontu/src/engine/FontUtils.c +++ b/Pontu/src/engine/FontUtils.c @@ -1,4 +1,5 @@ #include "engine/FontUtils.h" +#include int calculateStringPixelLenght(TTF_Font* font, char* str) { diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 15c88f6..82fd619 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -27,7 +27,7 @@ void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, FontHandler* fontHa SDL_Point pos = {rect->x+rect->w/2, rect->y+rect->h/100}; SDL_Color color = {0,0,0,0}; - TextLabel titre = createTextLabel("Scores", &pos, 2, &color, fontHandler->fonts[FONT_retro], renderer, POSX_CENTER, POSY_TOP); + TextLabel titre = createTextLabel("Scores", &pos, 4, &color, fontHandler->fonts[FONT_retro], renderer, POSX_CENTER, POSY_TOP); drawTextLabel(renderer, &titre); @@ -101,24 +101,30 @@ void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_ drawPlayersScores(renderer, players, nbPlayers, rect, fontHandler); } -void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, const Player players[], const size_t nbPlayers) { +void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers) { InputProcessor inputProcessor = createInputProcessor(); - //récupère le numéro de l'écran - SDL_DisplayMode current; - const int i = SDL_GetWindowDisplayIndex(window); - SDL_GetCurrentDisplayMode(i, ¤t); //retourne current, structure avec vrai valeurs de taille de fenêtre + int windowW; + int windowH; - SDL_Rect rectMenuEndGme = {.x=current.w/20, .y=0, .w=current.w*4/5, .h=current.h}; + SDL_GetWindowSize(window, &windowW, &windowH); + + SDL_Rect rectMenuEndGame = { + .x=windowW/10, + .y=0, + .w=windowW*80/100, + .h=windowH + }; - array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme)); + array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &rectMenuEndGame)); P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); + buttonMenuEndGame->rect.y = rectMenuEndGame.h*8/10; + buttonMenuEndGame->rect.x = rectMenuEndGame.x + rectMenuEndGame.w/2-buttonMenuEndGame->rect.w/2; - SDL_Color color = {0,0,0,0}; - drawEndGameMenu(renderer, players, nbPlayers, &rectMenuEndGme, &fontHandler); - - while(!quit) + drawEndGameMenu(renderer, players, nbPlayers, &rectMenuEndGame, fontHandler); + + while(*generalState == GS_EndOfGameMenu) { { InputElement inputElement; @@ -130,7 +136,7 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r switch (inputElement.data.uiAction) { case UIAction_Quit: - quit = true; + *generalState = GS_MainMenu; break; case UIAction_Validate: break; diff --git a/Pontu/test/testMenuEndGame.c b/Pontu/test/testMenuEndGame.c index 1659eb6..99cd527 100644 --- a/Pontu/test/testMenuEndGame.c +++ b/Pontu/test/testMenuEndGame.c @@ -10,8 +10,6 @@ void testMenuEndGame() { SDL_Window *window = NULL; SDL_Rect windowSize = {10, 10, 600, 600}; SDL_Renderer *renderer = NULL; - SDL_Texture* picture; - int statut = EXIT_FAILURE; if(0 != SDL_Init(SDL_INIT_VIDEO)) { @@ -60,69 +58,20 @@ void testMenuEndGame() { goto Quit; } - bool quit = false; FontHandler fontHandler = loadFonts(); SDL_RenderPresent(renderer); - - - InputProcessor inputProcessor = createInputProcessor(); - - SDL_Rect rectMenuEndGme = {.x=20, .y=0, .w=300, .h=480}; - - - array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme)); - P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); + GeneralState generalState = GS_EndOfGameMenu; SDL_Color color = {0,0,0,0}; - Player players[] = {newPlayer("Bépo", color), newPlayer("Azerty", color)}; + Player players[2] = {newPlayer("Bépo", color), newPlayer("Azerty", color)}; players[0].eliminationTurn = 10; players[1].eliminationTurn = 10; players[0].rank = 1; players[1].rank = 2; - drawEndGameMenu(renderer, players, 2, &rectMenuEndGme, &fontHandler); - while(!quit) - { - { - InputElement inputElement; - while (InputType_None != (inputElement = proccessInput(&inputProcessor)).type) { - - switch (inputElement.type) - { - case InputType_ActivateUI: - switch (inputElement.data.uiAction) - { - case UIAction_Quit: - quit = true; - break; - case UIAction_Validate: - break; - case UIAction_Cancel: - break; - default: - break; - } - break; - case InputType_MoveGame: - - break; - case InputType_ClickGame: - - break; - case InputType_None: - default: - break; - } - } - } - - drawButtonOnRenderer(renderer, buttonMenuEndGame); - - SDL_RenderPresent(renderer); - SDL_Delay(50); - } + endGameMenu(&generalState, window, renderer, &fontHandler, players, 2); Quit: freeFonts(fontHandler); From fca84edc00939da3aa484be266e03253fb45a817 Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 31 Jan 2022 18:35:21 +0100 Subject: [PATCH 6/8] Added free function to Input processors --- Pontu/include/engine/GameInputProcessor.h | 7 +++++++ Pontu/include/engine/InputProcessor.h | 8 ++++++++ Pontu/src/engine/GameInputProcessor.c | 4 ++++ Pontu/src/engine/InputProcessor.c | 4 ++++ Pontu/src/view/MenuEndGame.c | 2 ++ 5 files changed, 25 insertions(+) diff --git a/Pontu/include/engine/GameInputProcessor.h b/Pontu/include/engine/GameInputProcessor.h index df65782..d94fc8e 100644 --- a/Pontu/include/engine/GameInputProcessor.h +++ b/Pontu/include/engine/GameInputProcessor.h @@ -31,6 +31,13 @@ typedef struct */ GameInputProcessor createGameInputProcessor(); +/** + * @brief Free a game input processor + * + * @param gameInputProcessor the game input processor to free (do not use after freeing) + */ +void freeGameInputProcessor(GameInputProcessor* gameInputProcessor); + /** * \brief Convert a screen coord into a model Coord * diff --git a/Pontu/include/engine/InputProcessor.h b/Pontu/include/engine/InputProcessor.h index e374cbe..594923f 100644 --- a/Pontu/include/engine/InputProcessor.h +++ b/Pontu/include/engine/InputProcessor.h @@ -29,6 +29,14 @@ typedef struct */ InputProcessor createInputProcessor(); +/** + * @brief Free a game input processor + * + * @param inputProcessor the game input processor to free (do not use after freeing) + */ +void freeInputProcessor(InputProcessor* inputProcessor); + + /** * \brief Poll and convert SDL_Events into specific event for Pontu * diff --git a/Pontu/src/engine/GameInputProcessor.c b/Pontu/src/engine/GameInputProcessor.c index 030c8cb..64006c5 100644 --- a/Pontu/src/engine/GameInputProcessor.c +++ b/Pontu/src/engine/GameInputProcessor.c @@ -16,6 +16,10 @@ GameInputProcessor createGameInputProcessor() { return gameInputProcessor; } +void freeGameInputProcessor(GameInputProcessor* gameInputProcessor) { + array_P_Button_Free(&gameInputProcessor->tabButton); +} + InputElement proccessGameInput(GameInputProcessor *gameInputProcessor, const SDL_Rect* boardRect) { SDL_Event event; diff --git a/Pontu/src/engine/InputProcessor.c b/Pontu/src/engine/InputProcessor.c index fb58781..5b931b3 100644 --- a/Pontu/src/engine/InputProcessor.c +++ b/Pontu/src/engine/InputProcessor.c @@ -7,6 +7,10 @@ InputProcessor createInputProcessor() { return inputProcessor; } +void freeInputProcessor(InputProcessor* inputProcessor) { + array_P_Button_Free(&inputProcessor->tabButton); +} + InputElement proccessInput(InputProcessor *inputProcessor) { SDL_Event event; diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 82fd619..8479b92 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -164,4 +164,6 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r SDL_RenderPresent(renderer); SDL_Delay(50); } + + freeInputProcessor(&inputProcessor); } From 792a97a27ec870dc11a643aa5ed519df1811054e Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 31 Jan 2022 20:43:30 +0100 Subject: [PATCH 7/8] Finished End game menu --- Pontu/include/engine/Colors.h | 2 +- Pontu/include/view/MenuEndGame.h | 2 +- Pontu/src/engine/Colors.c | 1 + Pontu/src/view/MenuEndGame.c | 24 ++++++++++++++++-------- Pontu/test/testMenuEndGame.c | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Pontu/include/engine/Colors.h b/Pontu/include/engine/Colors.h index 16b3a36..d15dd7a 100644 --- a/Pontu/include/engine/Colors.h +++ b/Pontu/include/engine/Colors.h @@ -5,7 +5,7 @@ extern const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND; extern const SDL_Color COLOR_GENERIC_BUTTON_BORDER; - +extern const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND_HOVER; #endif diff --git a/Pontu/include/view/MenuEndGame.h b/Pontu/include/view/MenuEndGame.h index eb736a0..7cdc5f7 100644 --- a/Pontu/include/view/MenuEndGame.h +++ b/Pontu/include/view/MenuEndGame.h @@ -9,7 +9,7 @@ #include "engine/TextureLoader.h" #include "engine/GeneralState.h" -P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect); +P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect, GeneralState* state); void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler); diff --git a/Pontu/src/engine/Colors.c b/Pontu/src/engine/Colors.c index e9f935e..1375ae6 100644 --- a/Pontu/src/engine/Colors.c +++ b/Pontu/src/engine/Colors.c @@ -2,3 +2,4 @@ const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND = {225, 225, 225, 255}; const SDL_Color COLOR_GENERIC_BUTTON_BORDER = {10, 10, 10, 255}; +const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND_HOVER = {250, 250, 250, 255}; diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 8479b92..976b266 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -6,21 +6,31 @@ #include "engine/InputProcessor.h" -void nullFunc(P_Button* caller) { - +void setStateToMainMenu(P_Button* caller) { + *((GeneralState*)caller->arg) = GS_MainMenu; } -P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect) { +P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect, GeneralState* state) { int sizeX; int sizeY; SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 1, 4, &sizeX, &sizeY, renderer); - if (texture == NULL) { perror(SDL_GetError()); exit(errno); } - return createButton(texture, NULL, rect->x, rect->y, sizeX, sizeY, nullFunc); + SDL_Texture* textureHover = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND_HOVER, 4, 4, &sizeX, &sizeY, renderer); + if (textureHover == NULL) { + perror(SDL_GetError()); + exit(errno); + } + + + P_Button buttonMenuEndGame = createButton(texture, textureHover, rect->x, rect->y, sizeX, sizeY, &setStateToMainMenu); + buttonMenuEndGame.arg = state; + buttonMenuEndGame.rect.y = rect->h*8/10; + buttonMenuEndGame.rect.x = rect->x + rect->w/2-buttonMenuEndGame.rect.w/2; + return buttonMenuEndGame; } void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, FontHandler* fontHandler) { @@ -117,10 +127,8 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r }; - array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &rectMenuEndGame)); + array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &rectMenuEndGame, generalState)); P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); - buttonMenuEndGame->rect.y = rectMenuEndGame.h*8/10; - buttonMenuEndGame->rect.x = rectMenuEndGame.x + rectMenuEndGame.w/2-buttonMenuEndGame->rect.w/2; drawEndGameMenu(renderer, players, nbPlayers, &rectMenuEndGame, fontHandler); diff --git a/Pontu/test/testMenuEndGame.c b/Pontu/test/testMenuEndGame.c index 99cd527..79bc552 100644 --- a/Pontu/test/testMenuEndGame.c +++ b/Pontu/test/testMenuEndGame.c @@ -8,7 +8,7 @@ void testMenuEndGame() { SDL_Window *window = NULL; - SDL_Rect windowSize = {10, 10, 600, 600}; + SDL_Rect windowSize = {10, 10, 1100, 600}; SDL_Renderer *renderer = NULL; if(0 != SDL_Init(SDL_INIT_VIDEO)) From b9a1c0ac0915bcbc1cf598f33e5f33ae54d760e0 Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 31 Jan 2022 21:18:53 +0100 Subject: [PATCH 8/8] Modified interface for EndGameMenu and documentation --- Pontu/include/view/MenuEndGame.h | 14 +++++--- Pontu/src/view/MenuEndGame.c | 62 ++++++++++++++++++++++---------- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/Pontu/include/view/MenuEndGame.h b/Pontu/include/view/MenuEndGame.h index 7cdc5f7..b17ec2f 100644 --- a/Pontu/include/view/MenuEndGame.h +++ b/Pontu/include/view/MenuEndGame.h @@ -9,10 +9,16 @@ #include "engine/TextureLoader.h" #include "engine/GeneralState.h" -P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect, GeneralState* state); - -void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler); - +/** + * @brief Handle end game menu + * + * @param generalState The general state of the application (will be mutate to GS_MAIN_MENU) + * @param window Application's menu + * @param renderer Application's renderer + * @param fontHandler Application's fonts handler + * @param players An array of player with rank and elimination turn set + * @param nbPlayers number of player in players + */ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers); diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index 976b266..b13efea 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -5,21 +5,34 @@ #include "engine/Colors.h" #include "engine/InputProcessor.h" - +/** + * @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; } +/** + * @brief Create button For EndGameMenu + * + * @param renderer The renderer where buttons will be drawn + * @param font Font used by buttons + * @param rect Rect in which the endGameMenu is drawn + * @param state generalState which will be attached to the button + * @return P_Button + */ P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect, GeneralState* state) { int sizeX; int sizeY; - SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 1, 4, &sizeX, &sizeY, renderer); + SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 4, &sizeX, &sizeY, renderer); if (texture == NULL) { perror(SDL_GetError()); exit(errno); } - SDL_Texture* textureHover = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND_HOVER, 4, 4, &sizeX, &sizeY, renderer); + SDL_Texture* textureHover = createGenericButtonTexture("Retour menu", font, 50, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND_HOVER, 8, 4, &sizeX, &sizeY, renderer); if (textureHover == NULL) { perror(SDL_GetError()); exit(errno); @@ -33,17 +46,35 @@ P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, cons return buttonMenuEndGame; } -void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, FontHandler* fontHandler) { +/** + * @brief Draw title for End Game + * + * @param renderer The renderer where title will be drawn + * @param rect Rect in which the endGameMenu is drawn + * @param font Font used for title + */ +void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, TTF_Font* font) { SDL_Point pos = {rect->x+rect->w/2, rect->y+rect->h/100}; SDL_Color color = {0,0,0,0}; - TextLabel titre = createTextLabel("Scores", &pos, 4, &color, fontHandler->fonts[FONT_retro], renderer, POSX_CENTER, POSY_TOP); + TextLabel titre = createTextLabel("Scores", &pos, 4, &color, font, renderer, POSX_CENTER, POSY_TOP); drawTextLabel(renderer, &titre); freeTextLabel(&titre); } +/** + * @brief Draw Pseudo and rank for end game menu + * + * @param renderer The renderer where pseudo and rank will be drawn + * @param rect Rect in which the endGameMenu is drawn + * @param height Height of line in score table + * @param font Font used for pseudo and rank + * @param color Color used for pseudo and rank + * @param rank + * @param pseudo + */ void drawPseudoAndRank(SDL_Renderer* renderer, const SDL_Rect* rect, const int height, TTF_Font* font, const SDL_Color* color, const size_t rank, const char *const pseudo) { const SDL_Point posRangPseudo = { .x = rect->x+rect->w*0.05, @@ -90,14 +121,14 @@ void drawEliminationTurn(SDL_Renderer* renderer, const SDL_Rect* rect, const int } -void drawPlayersScores(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler) { +void drawPlayersScores(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, TTF_Font* font) { SDL_Color black = {0,0,0,0}; for (size_t i=0; iy+(players[i].rank+1)*rect->h/10+rect->y+rect->h/100; - drawPseudoAndRank(renderer, rect, height, fontHandler->fonts[FONT_retro], &black, i, players[i].pseudo); + drawPseudoAndRank(renderer, rect, height, font, &black, i, players[i].pseudo); - drawEliminationTurn(renderer, rect, height, fontHandler->fonts[FONT_retro], &black, players[i].eliminationTurn); + drawEliminationTurn(renderer, rect, height, font, &black, players[i].eliminationTurn); } } @@ -106,13 +137,13 @@ void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_ SDL_SetRenderDrawColor(renderer, 220,220,220,255); SDL_RenderFillRect(renderer, rect); - drawTitle(renderer, rect, fontHandler); + drawTitle(renderer, rect, fontHandler->fonts[FONT_retro]); - drawPlayersScores(renderer, players, nbPlayers, rect, fontHandler); + drawPlayersScores(renderer, players, nbPlayers, rect, fontHandler->fonts[FONT_retro]); } void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers) { - InputProcessor inputProcessor = createInputProcessor(); + int windowW; int windowH; @@ -126,7 +157,7 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r .h=windowH }; - + InputProcessor inputProcessor = createInputProcessor(); array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &rectMenuEndGame, generalState)); P_Button* buttonMenuEndGame = array_P_Button_Last(&inputProcessor.tabButton); @@ -154,13 +185,6 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r break; } break; - case InputType_MoveGame: - - break; - case InputType_ClickGame: - - break; - case InputType_None: default: break; }