diff --git a/Pontu/entryPoints/main.c b/Pontu/entryPoints/main.c index 1470c8e..d2e981f 100644 --- a/Pontu/entryPoints/main.c +++ b/Pontu/entryPoints/main.c @@ -48,7 +48,7 @@ int main(int argc, char *argv[]) { switch (generalState) { case GS_MainMenu: mainMenu(renderer,window,&generalState, fontHandler, audioHandler); - playSFX(validate_sound, audioHandler) + playSFX(SFX_validate_sound, audioHandler); break; case GS_GameCreationMenu:{ int windowW; @@ -76,8 +76,8 @@ int main(int argc, char *argv[]) { gameView(&generalState, window, renderer, players, nbPlayers, &fontHandler); //Pour tester le endGameMenu directement - /*generalState = GS_EndOfGameMenu; - players[0].eliminationTurn = 10; + generalState = GS_EndOfGameMenu; + /*players[0].eliminationTurn = 10; players[0].rank = 3; players[1].eliminationTurn = 15; players[1].rank = 2; diff --git a/Pontu/include/engine/Button.h b/Pontu/include/engine/Button.h index 0f2082d..e8815b2 100644 --- a/Pontu/include/engine/Button.h +++ b/Pontu/include/engine/Button.h @@ -13,7 +13,7 @@ struct P_buttonArg; -enum BUTTON_EVENT {BUTTON_NOTHING, BUTTON_ENTRY, BUTTON_EXIT}; +typedef enum {BUTTON_NOTHING, BUTTON_ENTRY, BUTTON_EXIT} ButtonEvent; /** * \struct P_Button diff --git a/Pontu/include/engine/InputElement.h b/Pontu/include/engine/InputElement.h index 792d667..0b83771 100644 --- a/Pontu/include/engine/InputElement.h +++ b/Pontu/include/engine/InputElement.h @@ -10,13 +10,14 @@ #include "model/Coord.h" +#include "engine/Button.h" /** * \enum InputType * \brief Different types for input */ -typedef enum {InputType_None, InputType_ClickGame, InputType_MoveGame, InputType_ActivateUI, InputType_Window_Resize} InputType; +typedef enum {InputType_None, InputType_ClickGame, InputType_MoveGame, InputType_ActivateUI, InputType_Window_Resize, InputType_ButtonChanged} InputType; /** * \enum UIAction @@ -47,6 +48,12 @@ typedef struct { int w; int h; } windowSize; ///< La nouvelle taille de l'ecran + + struct buttonEvent { + P_Button* button; + ButtonEvent event; + } buttonEvent; + } data; ///< Informations about the input InputType type; ///< Type of input @@ -86,4 +93,7 @@ InputElement createInputElementMoveBoard(const Coord start, const Coord end); */ InputElement createInputElementResizeWindow(); + +InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent event); + #endif // INPUT_ELEMENT_INCLUDED diff --git a/Pontu/src/engine/Button.c b/Pontu/src/engine/Button.c index c711ef6..3e0a762 100644 --- a/Pontu/src/engine/Button.c +++ b/Pontu/src/engine/Button.c @@ -29,9 +29,9 @@ bool drawButtonOnRenderer(SDL_Renderer* renderer, P_Button* button) return true; } -bool isHover(P_Button* button) +bool isEnable(P_Button* button) { - return button->hover && button->enable; + return button->enable; } bool changeButtonTexture(P_Button* button, SDL_Texture* texture) @@ -59,11 +59,18 @@ void freeButton(P_Button * button){ SDL_DestroyTexture(button->hoverTexture); } +bool isHover(P_Button * button) { + return button->hover; +} + int isButtonInteractWithCursor(P_Button * button,const int x,const int y){ + if (!button->enable) return BUTTON_NOTHING; + SDL_Point coord; coord.x = x; coord.y = y; - if(isHover(button)){ + + if(button->hover){ button->hover = SDL_PointInRect(&coord,&(button->rect)); if(button->hover == false){ return BUTTON_EXIT; diff --git a/Pontu/src/engine/InputElement.c b/Pontu/src/engine/InputElement.c index 5a609c7..e0a2e13 100644 --- a/Pontu/src/engine/InputElement.c +++ b/Pontu/src/engine/InputElement.c @@ -30,3 +30,11 @@ InputElement createInputElementResizeWindow(const int w, const int h) { }; return i; } + +InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent event) { + InputElement i = { + .type = InputType_ButtonChanged, + .data.buttonEvent={.event=event, .button = button} + }; + return i; +} diff --git a/Pontu/src/engine/InputProcessor.c b/Pontu/src/engine/InputProcessor.c index 48594c5..065f9a4 100644 --- a/Pontu/src/engine/InputProcessor.c +++ b/Pontu/src/engine/InputProcessor.c @@ -39,7 +39,10 @@ InputElement proccessInput(InputProcessor *inputProcessor) { for (size_t i = 0; itabButton.size; ++i) { P_Button* b = &inputProcessor->tabButton.elems[i]; - isButtonInteractWithCursor(b, event.motion.x, event.motion.y); + int res = isButtonInteractWithCursor(b, event.motion.x, event.motion.y); + if (res != BUTTON_NOTHING) { + return createInputElementButtonClicked(b, res); + } } break; } @@ -48,7 +51,6 @@ InputElement proccessInput(InputProcessor *inputProcessor) return createInputElementResizeWindow(event.window.data1, event.window.data2); } break; - } return createInputElementNone(); diff --git a/Pontu/src/view/MenuEndGame.c b/Pontu/src/view/MenuEndGame.c index f93a8cb..722e757 100644 --- a/Pontu/src/view/MenuEndGame.c +++ b/Pontu/src/view/MenuEndGame.c @@ -183,13 +183,13 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r }; PositionSpecifier positionSpecifierButtonRetour = newPositionSpecifier(&base100, POSX_CENTER, POSY_BOTTOM, ASPECT_KEEP_FIT); buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &endGameMenuRect); - buttonMenuEndGame->enable = false; struct endGameMenuTextLabel labels = createLabels(renderer, players, nbPlayers, fontHandler); drawEndGameMenu(renderer, endGameMenuRect, &labels); drawButtonOnRenderer(renderer, buttonMenuEndGame); - SDL_RenderPresent(renderer); + + bool needToPresent = true; while(*generalState == GS_EndOfGameMenu) { @@ -224,9 +224,21 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r drawEndGameMenu(renderer, rectM, &labels); buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &rectM); - buttonMenuEndGame->enable = false; - - fprintf(stderr, "Resize\n"); fflush(stderr); + + drawButtonOnRenderer(renderer, buttonMenuEndGame); + + needToPresent = true; + break; + } + case InputType_ButtonChanged: { + switch (inputElement.data.buttonEvent.event) { + case BUTTON_ENTRY: + case BUTTON_EXIT: + fprintf(stderr, "Button changed"); fflush(stderr); + drawButtonOnRenderer(renderer, inputElement.data.buttonEvent.button); + needToPresent = true; + break; + } } default: break; @@ -234,9 +246,9 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r } } - if (!buttonMenuEndGame->enable) { - drawButtonOnRenderer(renderer, buttonMenuEndGame); + if (needToPresent) { SDL_RenderPresent(renderer); + needToPresent = false; } SDL_Delay(10);