Input processor handle button events

origin/fixingSettings
marouault 3 years ago
parent ada68519ae
commit 51b9a76acb

@ -48,7 +48,7 @@ int main(int argc, char *argv[]) {
switch (generalState) { switch (generalState) {
case GS_MainMenu: case GS_MainMenu:
mainMenu(renderer,window,&generalState, fontHandler, audioHandler); mainMenu(renderer,window,&generalState, fontHandler, audioHandler);
playSFX(validate_sound, audioHandler) playSFX(SFX_validate_sound, audioHandler);
break; break;
case GS_GameCreationMenu:{ case GS_GameCreationMenu:{
int windowW; int windowW;
@ -76,8 +76,8 @@ int main(int argc, char *argv[]) {
gameView(&generalState, window, renderer, players, nbPlayers, &fontHandler); gameView(&generalState, window, renderer, players, nbPlayers, &fontHandler);
//Pour tester le endGameMenu directement //Pour tester le endGameMenu directement
/*generalState = GS_EndOfGameMenu; generalState = GS_EndOfGameMenu;
players[0].eliminationTurn = 10; /*players[0].eliminationTurn = 10;
players[0].rank = 3; players[0].rank = 3;
players[1].eliminationTurn = 15; players[1].eliminationTurn = 15;
players[1].rank = 2; players[1].rank = 2;

@ -13,7 +13,7 @@
struct P_buttonArg; struct P_buttonArg;
enum BUTTON_EVENT {BUTTON_NOTHING, BUTTON_ENTRY, BUTTON_EXIT}; typedef enum {BUTTON_NOTHING, BUTTON_ENTRY, BUTTON_EXIT} ButtonEvent;
/** /**
* \struct P_Button * \struct P_Button

@ -10,13 +10,14 @@
#include "model/Coord.h" #include "model/Coord.h"
#include "engine/Button.h"
/** /**
* \enum InputType * \enum InputType
* \brief Different types for input * \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 * \enum UIAction
@ -47,6 +48,12 @@ typedef struct {
int w; int w;
int h; int h;
} windowSize; ///< La nouvelle taille de l'ecran } windowSize; ///< La nouvelle taille de l'ecran
struct buttonEvent {
P_Button* button;
ButtonEvent event;
} buttonEvent;
} data; ///< Informations about the input } data; ///< Informations about the input
InputType type; ///< Type of input InputType type; ///< Type of input
@ -86,4 +93,7 @@ InputElement createInputElementMoveBoard(const Coord start, const Coord end);
*/ */
InputElement createInputElementResizeWindow(); InputElement createInputElementResizeWindow();
InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent event);
#endif // INPUT_ELEMENT_INCLUDED #endif // INPUT_ELEMENT_INCLUDED

@ -29,9 +29,9 @@ bool drawButtonOnRenderer(SDL_Renderer* renderer, P_Button* button)
return true; 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) bool changeButtonTexture(P_Button* button, SDL_Texture* texture)
@ -59,11 +59,18 @@ void freeButton(P_Button * button){
SDL_DestroyTexture(button->hoverTexture); SDL_DestroyTexture(button->hoverTexture);
} }
bool isHover(P_Button * button) {
return button->hover;
}
int isButtonInteractWithCursor(P_Button * button,const int x,const int y){ int isButtonInteractWithCursor(P_Button * button,const int x,const int y){
if (!button->enable) return BUTTON_NOTHING;
SDL_Point coord; SDL_Point coord;
coord.x = x; coord.x = x;
coord.y = y; coord.y = y;
if(isHover(button)){
if(button->hover){
button->hover = SDL_PointInRect(&coord,&(button->rect)); button->hover = SDL_PointInRect(&coord,&(button->rect));
if(button->hover == false){ if(button->hover == false){
return BUTTON_EXIT; return BUTTON_EXIT;

@ -30,3 +30,11 @@ InputElement createInputElementResizeWindow(const int w, const int h) {
}; };
return i; return i;
} }
InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent event) {
InputElement i = {
.type = InputType_ButtonChanged,
.data.buttonEvent={.event=event, .button = button}
};
return i;
}

@ -39,7 +39,10 @@ InputElement proccessInput(InputProcessor *inputProcessor)
{ {
for (size_t i = 0; i<inputProcessor->tabButton.size; ++i) { for (size_t i = 0; i<inputProcessor->tabButton.size; ++i) {
P_Button* b = &inputProcessor->tabButton.elems[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; break;
} }
@ -48,7 +51,6 @@ InputElement proccessInput(InputProcessor *inputProcessor)
return createInputElementResizeWindow(event.window.data1, event.window.data2); return createInputElementResizeWindow(event.window.data1, event.window.data2);
} }
break; break;
} }
return createInputElementNone(); return createInputElementNone();

@ -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); PositionSpecifier positionSpecifierButtonRetour = newPositionSpecifier(&base100, POSX_CENTER, POSY_BOTTOM, ASPECT_KEEP_FIT);
buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &endGameMenuRect); buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &endGameMenuRect);
buttonMenuEndGame->enable = false;
struct endGameMenuTextLabel labels = createLabels(renderer, players, nbPlayers, fontHandler); struct endGameMenuTextLabel labels = createLabels(renderer, players, nbPlayers, fontHandler);
drawEndGameMenu(renderer, endGameMenuRect, &labels); drawEndGameMenu(renderer, endGameMenuRect, &labels);
drawButtonOnRenderer(renderer, buttonMenuEndGame); drawButtonOnRenderer(renderer, buttonMenuEndGame);
SDL_RenderPresent(renderer);
bool needToPresent = true;
while(*generalState == GS_EndOfGameMenu) while(*generalState == GS_EndOfGameMenu)
{ {
@ -224,9 +224,21 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r
drawEndGameMenu(renderer, rectM, &labels); drawEndGameMenu(renderer, rectM, &labels);
buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &rectM); buttonMenuEndGame->rect = adaptPosToRect(&positionSpecifierButtonRetour, &rectM);
buttonMenuEndGame->enable = false;
drawButtonOnRenderer(renderer, buttonMenuEndGame);
fprintf(stderr, "Resize\n"); fflush(stderr);
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: default:
break; break;
@ -234,9 +246,9 @@ void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* r
} }
} }
if (!buttonMenuEndGame->enable) { if (needToPresent) {
drawButtonOnRenderer(renderer, buttonMenuEndGame);
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
needToPresent = false;
} }
SDL_Delay(10); SDL_Delay(10);

Loading…
Cancel
Save