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) {
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;

@ -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

@ -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

@ -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;

@ -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;
}

@ -39,7 +39,10 @@ InputElement proccessInput(InputProcessor *inputProcessor)
{
for (size_t i = 0; i<inputProcessor->tabButton.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();

@ -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);

Loading…
Cancel
Save