new interaction system for button, we can now know if cursor exit the button

origin/fixingSettings
Mathis RIBEMONT 3 years ago
parent 5d455b4cbc
commit ebff452e44

@ -63,9 +63,9 @@ bool isHover(P_Button* button);// dit si le bouton est survolé en donnant les c
* \param[in] button the button target
* \param[in] x x of the point
* \param[in] y y of the point
* \return true if the cursor has juste entered the button.
* \return 1 if the cursor has just entry in the button, 2 if it has just exit, else 0
*/
bool isButtonEntry(P_Button * button,const int x,const int y);
int isButtonInteractWithCursor(P_Button * button,const int x,const int y);
/**
* \brief Free the texture of a button.

@ -24,6 +24,7 @@ bool drawButtonOnRenderer(SDL_Renderer* renderer, P_Button* button)
return false;
}
button->drawn = true;
//printf("Redraw de %p\n",button);
return true;
}
@ -57,14 +58,19 @@ void freeButton(P_Button * button){
SDL_DestroyTexture(button->hoverTexture);
}
bool isButtonEntry(P_Button * button,const int x,const int y){
int isButtonInteractWithCursor(P_Button * button,const int x,const int y){
SDL_Point coord;
coord.x = x;
coord.y = y;
if(isHover(button)){
button->hover = SDL_PointInRect(&coord,&(button->rect));
return false;
if(button->hover == false){
return 2;
}
return 0;
}
button->hover = SDL_PointInRect(&coord,&(button->rect));
return button->hover;
if(button->hover)
return 1;
return 0;
}

@ -81,7 +81,7 @@ InputElement proccessGameInput(GameInputProcessor *gameInputProcessor, const SDL
{
for (size_t i = 0; i<gameInputProcessor->tabButton.size; ++i) {
P_Button* b = &gameInputProcessor->tabButton.elems[i];
isButtonEntry(b, event.motion.x, event.motion.y);
isButtonInteractWithCursor(b, event.motion.x, event.motion.y);
}
break;
}

@ -39,7 +39,7 @@ InputElement proccessInput(InputProcessor *inputProcessor)
{
for (size_t i = 0; i<inputProcessor->tabButton.size; ++i) {
P_Button* b = &inputProcessor->tabButton.elems[i];
isButtonEntry(b, event.motion.x, event.motion.y);
isButtonInteractWithCursor(b, event.motion.x, event.motion.y);
}
break;
}

@ -90,6 +90,10 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general
}
SDL_Event event;
drawButtonOnRenderer(renderer,&(buttons[0]));
drawButtonOnRenderer(renderer,&(buttons[1]));
drawButtonOnRenderer(renderer,&(buttons[2]));
while(*generalState == GS_MainMenu)
{
while(SDL_PollEvent(&event))
@ -110,10 +114,32 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general
}
break;
case SDL_MOUSEMOTION:
if(isButtonEntry(&(buttons[0]),event.motion.x,event.motion.y) ||
isButtonEntry(&(buttons[1]),event.motion.x,event.motion.y) ||
isButtonEntry(&(buttons[2]),event.motion.x,event.motion.y)){
playSFX(SFX_menu_sound_effect, audioHandler);
switch (isButtonInteractWithCursor(&(buttons[0]),event.motion.x,event.motion.y)) {
case 1:
drawButtonOnRenderer(renderer,&(buttons[0]));
playSFX(SFX_menu_sound_effect, audioHandler);
break;
case 2:
drawButtonOnRenderer(renderer,&(buttons[0]));
break;
}
switch (isButtonInteractWithCursor(&(buttons[1]),event.motion.x,event.motion.y)) {
case 1:
drawButtonOnRenderer(renderer,&(buttons[1]));
playSFX(SFX_menu_sound_effect, audioHandler);
break;
case 2:
drawButtonOnRenderer(renderer,&(buttons[1]));
break;
}
switch (isButtonInteractWithCursor(&(buttons[2]),event.motion.x,event.motion.y)) {
case 1:
drawButtonOnRenderer(renderer,&(buttons[2]));
playSFX(SFX_menu_sound_effect, audioHandler);
break;
case 2:
drawButtonOnRenderer(renderer,&(buttons[2]));
break;
}
break;
case SDL_WINDOWEVENT:
@ -135,9 +161,6 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general
break;
}
}
drawButtonOnRenderer(renderer,&(buttons[0]));
drawButtonOnRenderer(renderer,&(buttons[1]));
drawButtonOnRenderer(renderer,&(buttons[2]));
SDL_RenderPresent(renderer);
SDL_Delay(20);

Loading…
Cancel
Save