Diverse modifications legere du menu de fin de partie et du menu de jeu. Revu du code de creation de partie pour voir ce qui ne fonctionne pas, on en parle demain

makingSettings
marouault 3 years ago
parent 2269f25b56
commit 9c4b6c787a

@ -69,7 +69,7 @@ int main(int argc, char *argv[]) {
SDL_GetWindowSize(window, &windowW, &windowH);
size_t nbPlayers = 4;
int nbPlayers = 4;
Player players[] = {
newPlayer("Bépo", PlayerViolet),
newPlayer("Azeryty", PlayerBlue),
@ -78,13 +78,13 @@ int main(int argc, char *argv[]) {
};
//players[2] = ;
//bool crashed = gameCreationMenu(renderer, &generalState, &fontHandler, windowW, windowH, &players, &nbPlayers);
bool crashed = gameCreationMenu(renderer, &generalState, fontHandler.fonts[FONT_PublicPixel], windowW, windowH, players, &nbPlayers);
/*if (crashed) {
fprintf(stderr,"sorry");
exit(-1);
}*/
generalState = GS_Game;
//generalState = GS_Game;
gameView(&generalState, window, renderer, players, nbPlayers, &fontHandler);

@ -0,0 +1,18 @@
#ifndef BUTTON_ACTION_INCLUDED
#define BUTTON_ACTION_INCLUDED
#include "engine/Button.h"
void action_none(P_Button* caller);
void action_print(P_Button* caller);
/**
* @brief Button handle which set a generalState to GS_MainMenu
*
* @param caller The button clicked
*/
void action_setStateToMainMenu(P_Button* caller);
#endif //BUTTON_ACTION_INCLUDED

@ -60,4 +60,4 @@ typedef struct
TTF_Font* font;
}DecrementParams;
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height);
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height, Player players[], int* nbPlayers);

@ -12,6 +12,7 @@
#include "engine/Button.h"
#include <engine/FontLoader.h>
#include "engine/arrayButton.h"
#include "engine/GeneralState.h"
/**
@ -26,7 +27,7 @@ void drawButtons(SDL_Renderer* renderer,FontHandler fontHandler);
* \param fontHandler The fontHandler to apply
* \return an array of P_Button to draw on the renderer
*/
struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler);
struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler, GeneralState* generalState);
/**

@ -2,10 +2,8 @@
#include <stdio.h>
#include <assert.h>
#include <stdbool.h>
#include <engine/ButtonActions.h>
void onClickDefault(struct P_button* buttonCaller){
//printf("Clicked on button: %p\n", buttonCaller);
}
P_Button createButton(SDL_Texture* texture, SDL_Texture* hoverTexture ,const int coordx, const int coordy, const int sizex, const int sizey, void (*onClick)(P_Button* buttonCaller))
{
@ -13,7 +11,7 @@ P_Button createButton(SDL_Texture* texture, SDL_Texture* hoverTexture ,const int
P_Button b = { .rect = { .x = coordx, .y = coordy, .w = sizex, .h = sizey }, .onClick = onClick, .enable = true};
if(onClick == NULL){
fprintf(stderr, "Attention: aucune action onClick n'est passé au bouton. Il prend le onClick par défaut\n");
b.onClick = onClickDefault;
b.onClick = action_none;
}
b.texture = texture;
b.hoverTexture = hoverTexture;

@ -0,0 +1,16 @@
#include "engine/ButtonActions.h"
#include "engine/GeneralState.h"
void action_none(P_Button* caller) {
}
void action_print(P_Button* caller) {
printf("Button pressed\n");
}
void action_setStateToMainMenu(P_Button* caller)
{
*((GeneralState*)caller->arg) = GS_MainMenu;
}

@ -2,11 +2,10 @@
#include <SDL2/SDL_ttf.h>
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height);
void freeCreateMenuLine(CreateMenuLine* line);
CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player);
void createPlayersLines(SDL_Renderer* renderer, TTF_Font* font, int minx, int maxx, int miny,int nbPlayer, CreateMenuLine* lines);
bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer);
bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer, const SDL_Color* bg);
bool drawCreateMenuLine(SDL_Renderer* renderer, CreateMenuLine* line);
void changePlayerColor(P_Button* caller);
void decrementNbPlayer(P_Button* caller);
@ -67,9 +66,11 @@ void changePlayerColor(P_Button* caller)
params->p->color = params->color;
}
bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer)
bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer, const SDL_Color* bg)
{
//Draw everything
SDL_SetRenderDrawColor(renderer, bg->r, bg->g, bg->b, bg->a);
SDL_RenderClear(renderer);
for(int i=0; i<nbButtons; ++i)
{
@ -178,9 +179,10 @@ void freeCreateMenuLine(CreateMenuLine* line)
// free(&line->colorButtons[i]);
}
}
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height)
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height, Player players[], int* nbPlayers)
{
int nbPlayers = 2;
*nbPlayers = 2;
int const nbLabels = 5;
int nbButtons = 2;
TextLabel *labels[nbLabels];
@ -224,12 +226,12 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon
// TextLabel for the number of players creation
SDL_Point nbPlayerLabelPos = {.x=decrementBtn.rect.x+decrementBtn.rect.w+8, .y=decrementBtn.rect.y*1.5};
char nbPlayerStr[2];
if(nbPlayers < 0 || nbPlayers > 9)
if(*nbPlayers < 0 || *nbPlayers > NB_PLAYER_MAX)
{
fprintf(stderr, "WARNING: The number of players has to be between 0 and 9\n");
fprintf(stderr, "WARNING: The number of players has to be between 0 and %d\n", NB_PLAYER_MAX);
return false;
}
nbPlayerStr[0] = nbPlayers + 48; // ASCII code of '0' is 48 and ASSCI code of '9' is 57 (48+9)
nbPlayerStr[0] = *nbPlayers + 48; // ASCII code of '0' is 48 and ASSCI code of '9' is 57 (48+9)
nbPlayerStr[1] = '\0';
TextLabel nbPlayerLabel = createTextLabel(
nbPlayerStr,
@ -310,17 +312,17 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon
);
createPlayersLines(renderer, font, titleLabelPos.x, incrementBtn.rect.x+incrementBtn.rect.w, colorLabel.textZone.y+colorLabel.textZone.h , nbPlayers, lines);
createPlayersLines(renderer, font, titleLabelPos.x, incrementBtn.rect.x+incrementBtn.rect.w, colorLabel.textZone.y+colorLabel.textZone.h , *nbPlayers, lines);
labels[0] = &titleLabel;
labels[1] = &nbPlayerLabel;
labels[2] = &aiLabel;
labels[3] = &pseudoLabel;
labels[4] = &colorLabel;
DecrementParams dparams= {.nbPlayers=&nbPlayers, .lines=lines, .renderer=renderer, .bg = &bg, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg, .font=font};
DecrementParams dparams= {.nbPlayers=nbPlayers, .lines=lines, .renderer=renderer, .bg = &bg, .nbPlayersLbl=&nbPlayerLabel, .font=font};
decrementBtn.arg = &dparams;
IncrementParams iparams= {.nbPlayers=&nbPlayers, .lines=lines, .minx=titleLabelPos.x, .maxx=incrementBtn.rect.x+incrementBtn.rect.w, .miny=colorLabelPos.y+colorLabel.textZone.h + 16, .font=font, .renderer=renderer, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg};
IncrementParams iparams= {.nbPlayers=nbPlayers, .lines=lines, .minx=titleLabelPos.x, .maxx=incrementBtn.rect.x+incrementBtn.rect.w, .miny=colorLabelPos.y+colorLabel.textZone.h + 16, .font=font, .renderer=renderer, .nbPlayersLbl=&nbPlayerLabel, .bg=&bg};
incrementBtn.arg = &iparams;
buttons[0] = decrementBtn;
@ -329,8 +331,8 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon
InputProcessor inputProcessor = createInputProcessor();
array_P_Button_AddElement(&inputProcessor.tabButton, incrementBtn);
array_P_Button_AddElement(&inputProcessor.tabButton, decrementBtn);
SDL_SetRenderDrawColor(renderer, bg.r, bg.g, bg.b, bg.a);
drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, nbPlayers);
drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg);
while(*generalState == GS_GameCreationMenu)
{
InputElement inputElement;
@ -342,7 +344,7 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon
switch (inputElement.data.uiAction)
{
case UIAction_Quit:
*generalState = GS_MainMenu;
*generalState = GS_Quit;
break;
case UIAction_Validate:
break;
@ -356,32 +358,31 @@ bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Fon
{
if(inputElement.data.buttonEvent.button == &incrementBtn || inputElement.data.buttonEvent.button == &decrementBtn)
{
nbPlayerLabel.text[0] = nbPlayers + 48;
SDL_RenderClear(renderer);
drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, nbPlayers);
nbPlayerLabel.text[0] = *nbPlayers + 48;
drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, *nbPlayers, &bg);
}
}
case InputType_MoveGame:
break;
case InputType_ClickGame:
break;
case InputType_None:
default:
break;
}
}
nbPlayerLabel.text[0] = nbPlayers+48;
nbPlayerLabel.text[0] = *nbPlayers+48;
}
//free
freeInputProcessor(&inputProcessor);
freeTextLabel(&titleLabel);
freeButton(&incrementBtn);
freeButton(&decrementBtn);
free(buttons);
for (size_t i=0; i<*nbPlayers; ++i) {
players[i] = newPlayer(lines[i].player->pseudo, lines[i].player->color);
freeCreateMenuLine(&lines[i]);
}
return true;
}

@ -5,15 +5,9 @@
#include <engine/TextLabel.h>
#include <engine/arrayButton.h>
#include <engine/arrayTextLabel.h>
#include <engine/ButtonActions.h>
//void action boutton
void action(P_Button* buttonCaller){
printf("Bouton menu\n");
//changeButtonTexture(arg->buttonCaller,arg->texture);
}
struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler) {
struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHandler* fontHandler, GeneralState* generalState) {
SDL_Color menuBorderColor= {0,0,255,255};
SDL_Color menuBackgroundColor = {0,255,0,255};
//SDL_Color menuBackgroundColor = {0,0,255,255};
@ -35,11 +29,12 @@ struct array_P_Button createGameInterfaceButtons(SDL_Renderer* renderer, FontHan
struct array_P_Button buttons = array_P_Button_Create();
// Menu
array_P_Button_AddElement(&buttons, createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action)); //top left corner (rectangle)
array_P_Button_AddElement(&buttons, createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action_setStateToMainMenu)); //top left corner (rectangle)
array_P_Button_Last(&buttons)->arg = (void*)generalState;
// Settings
array_P_Button_AddElement(&buttons, createButton(settingsButtonTexture, settingsButtonHoverTexture, 750,10,50,50,&action)); //top right corner (square or circle)
array_P_Button_AddElement(&buttons, createButton(settingsButtonTexture, settingsButtonHoverTexture, 750,10,50,50,&action_print)); //top right corner (square or circle)
// Mute/Unmute
array_P_Button_AddElement(&buttons, createButton(muteButtonTexture, muteButtonHoverTexture, 825,10,50,50,&action)); //top right cornre (square or circle)
array_P_Button_AddElement(&buttons, createButton(muteButtonTexture, muteButtonHoverTexture, 825,10,50,50,&action_print)); //top right cornre (square or circle)
return buttons;
}
@ -130,9 +125,9 @@ void drawButtons(SDL_Renderer* renderer, FontHandler fontHandler)
SDL_Texture *menuButtonHoverTexture = createGenericButtonTexture("MenuHover", fontHandler.fonts[FONT_retro], 125, menuBorderColor,menuBackgroundColor,24,5,&sizex,&sizey,renderer);
//Buttons
P_Button menuButton = createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action); //top left corner (rectangle)
P_Button settingButton = createButton(menuButtonTexture, menuButtonHoverTexture, 750,10,50,50,&action); //top right corner (square or circle)
P_Button soundButton = createButton(menuButtonTexture, menuButtonHoverTexture, 825,10,50,50,&action); //top right cornre (square or circle)
P_Button menuButton = createButton(menuButtonTexture, menuButtonHoverTexture,20,20,100,50,&action_print); //top left corner (rectangle)
P_Button settingButton = createButton(menuButtonTexture, menuButtonHoverTexture, 750,10,50,50,&action_print); //top right corner (square or circle)
P_Button soundButton = createButton(menuButtonTexture, menuButtonHoverTexture, 825,10,50,50,&action_print); //top right cornre (square or circle)
//Labels
TextLabel nbTurnLabel = createTextLabel("Turn : ",&positonNbTurnLabel,1,&colorLabel,fontHandler.fonts[FONT_retro],renderer,positionX,positionY);

@ -44,7 +44,7 @@ void gameView(GeneralState* generalState, SDL_Window* window, SDL_Renderer* rend
Game game = newGame(nbPlayers, players);
TextureHandler textureHandler = newTextureHandler(renderer);
inputProcessor.tabButton = createGameInterfaceButtons(renderer, fontHandler);
inputProcessor.tabButton = createGameInterfaceButtons(renderer, fontHandler, generalState);
struct array_TextLabel tabLabel = createGameInterfaceLabels(renderer,fontHandler);

@ -7,6 +7,7 @@
#include "engine/UIElementUtils.h"
#include "engine/arrayTextLabel.h"
#include "engine/arrayPositionSpecifier.h"
#include "engine/ButtonActions.h"
struct endGameMenuTextLabel {
@ -14,15 +15,6 @@ struct endGameMenuTextLabel {
struct array_PositionSpecifier positionSpecifiers;
};
/**
* @brief Button handle which set a generalState to GS_MainMenu
*
* @param caller The button clicked
*/
void setStateToMainMenu(P_Button* caller) {
*((GeneralState*)caller->arg) = GS_MainMenu;
}
SDL_Rect getEndGameMenuRect(SDL_Window* window) {
int windowW;
int windowH;
@ -62,7 +54,7 @@ P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, cons
}
P_Button buttonMenuEndGame = createButton(texture, textureHover, rect->x, rect->y, sizeX, sizeY, &setStateToMainMenu);
P_Button buttonMenuEndGame = createButton(texture, textureHover, rect->x, rect->y, sizeX, sizeY, &action_setStateToMainMenu);
buttonMenuEndGame.arg = state;
buttonMenuEndGame.rect.y = rect->h*8/10;
buttonMenuEndGame.rect.x = rect->x + rect->w/2-buttonMenuEndGame.rect.w/2;
@ -171,6 +163,8 @@ void drawEndGameMenu(SDL_Renderer* renderer, const SDL_Rect rectMenuEndGame, str
}
void endGameMenu(GeneralState* generalState, SDL_Window* window, SDL_Renderer* renderer, FontHandler* fontHandler, const Player players[], const size_t nbPlayers) {
if (*generalState != GS_EndOfGameMenu) return;
InputProcessor inputProcessor = createInputProcessor();
const SDL_Rect endGameMenuRect = getEndGameMenuRect(window);
array_P_Button_AddElement(&inputProcessor.tabButton, createButtonForEndGameMenu(renderer, fontHandler->fonts[FONT_retro], &endGameMenuRect, generalState));

Loading…
Cancel
Save