From da87ea716ea0a4a24d6bb2d45ed827a75c154c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathis=20Rib=C3=A9mont?= Date: Mon, 31 Jan 2022 21:35:01 +0100 Subject: [PATCH] main fonctionnel vers menu principal --- Pontu/entryPoints/main.c | 55 +++++++++++++++++++++++++++-- Pontu/include/view/MainMenu.h | 2 ++ Pontu/src/view/MainMenu.c | 65 ++++++++++++++++++++++++++++++++++- 3 files changed, 118 insertions(+), 4 deletions(-) diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index 0a8260d..f61fe0f 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -1,13 +1,62 @@ #include #include #include "engine/GeneralState.h" +#include "view/MainMenu.h" +#include "engine/FontLoader.h" int main(int argc, char const *argv[]) { - GeneralState generalState = GS_MainMenu; + GeneralState generalState; + SDL_Window* window = NULL; + SDL_Rect windowSize = {10, 10, 900, 900}; + SDL_Renderer* renderer = NULL; + + int statut = EXIT_FAILURE; + + if(SDL_Init(SDL_INIT_VIDEO) != 0) { + fprintf(stderr, "Error : %s\n", SDL_GetError()); + goto Quit; + } + + window = SDL_CreateWindow("Pontu",windowSize.x, windowSize.y, windowSize.w, windowSize.h, SDL_WINDOW_SHOWN); + if (!window) + { + fprintf(stderr, "Error : %s\n", SDL_GetError()); + goto Quit; + } + + renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED); + if(!renderer) + { + fprintf(stderr, "Erreur : %s", SDL_GetError()); + goto Quit; + } + + if(TTF_Init()==-1) { + printf("TTF_Init: %s\n", TTF_GetError()); + exit(2); + } + FontHandler fontHandler = loadFonts(); + + generalState = GS_Quit; while(generalState != GS_Quit){ - + switch (generalState) { + case GS_MainMenu: + mainMenu(renderer,window,&generalState, fontHandler); + break; + } } - return 0; + statut = EXIT_SUCCESS; + +Quit: + freeFonts(fontHandler); + if(renderer != NULL) { + SDL_DestroyRenderer(renderer); + } + if(window != NULL) { + SDL_DestroyWindow(window); + } + SDL_Quit(); + return statut; } diff --git a/Pontu/include/view/MainMenu.h b/Pontu/include/view/MainMenu.h index e3f9ede..272e5f8 100644 --- a/Pontu/include/view/MainMenu.h +++ b/Pontu/include/view/MainMenu.h @@ -9,4 +9,6 @@ P_Button* drawMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, unsigned int* nb, const SDL_Rect* windowSize); +int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * generalState,FontHandler fontHandler) + #endif diff --git a/Pontu/src/view/MainMenu.c b/Pontu/src/view/MainMenu.c index 4394f9a..dec4536 100644 --- a/Pontu/src/view/MainMenu.c +++ b/Pontu/src/view/MainMenu.c @@ -1,7 +1,14 @@ #include "view/MainMenu.h" +#include +#include +#include +#include "engine/Button.h" +#include "engine/FontLoader.h" +#include "view/MainMenu.h" +#include "engine/GeneralState.h" void quit(struct P_button* buttonCaller){ - *((bool*)(buttonCaller->arg)) = true; + *((GeneralState*)(buttonCaller->arg)) = GS_Quit; } P_Button* drawMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, unsigned int* nb, const SDL_Rect* windowSize) @@ -55,3 +62,59 @@ P_Button* drawMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, uns SDL_RenderPresent(renderer); return buttons; } + +int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * generalState,FontHandler fontHandler){ + int statut = EXIT_FAILURE; + char* path = "../rsrc/img/Lenna.png"; + //Initialisation + + P_Button* buttons = NULL; + unsigned int nb = 0; + + 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))){ + fprintf(stderr, "Le menu principale ne s'est pas déssiné correctement\n"); + return statut; + } + SDL_Event event; + buttons[2].arg = generalState; + while(*generalState != GS_Quit) + { + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + *generalState = GS_Quit; + break; + case SDL_MOUSEBUTTONUP: + if(isHover(buttons,event.button.x,event.button.y)) + printf("Nouvelle partie\n"); + if(isHover(&(buttons[2]),event.motion.x,event.motion.y)){ + buttons[2].onClick(&(buttons[2])); + break; + } + break; + case SDL_MOUSEMOTION: + isHover(&(buttons[0]),event.motion.x,event.motion.y); + isHover(&(buttons[1]),event.motion.x,event.motion.y); + isHover(&(buttons[2]),event.motion.x,event.motion.y); + break; + default: + break; + } + } + drawButtonOnRenderer(renderer,&(buttons[0])); + drawButtonOnRenderer(renderer,&(buttons[1])); + drawButtonOnRenderer(renderer,&(buttons[2])); + SDL_RenderPresent(renderer); + + SDL_Delay(20); + } + + return 0; +}