Add CreationMenu (to be upgradeed (redraw permanetly)) (also, the numbre of player is not update on the scree)

origin/fixingSettings
Allan POINT 3 years ago
parent 755106d512
commit d0500097c8

@ -2,14 +2,15 @@
//#include "../test/testFontLoader.c"
//#include "../test/testAudioHandler.c"
//#include "../test/testGenerateurTexture.c"
/*#include "../test/testButton.c"
#include "../test/testTextInput.c"
#include "../test/testConnectionMenu.c"*/
#include "../test/testMenuEndGame.c"
/*#include "../test/testGameInterface.c"
#include "../test/testConnectionMenu.c"*/
//#include "../test/testButton.c"
//#include "../test/testTextInput.c"
//#include "../test/testConnectionMenu.c"
//#include "../test/testMenuEndGame.c"
//#include "../test/testGameInterface.c"
//#include "../test/testConnectionMenu.c"
//#include "../test/testDrawMainMenu.c
//#include "../test/testSettingsView.c"
#include "../test/testCreationMenu.c"
/*
This file is meant to be modified (used only to called other tests functions)
*/
@ -22,10 +23,11 @@ int main(int argc, char *argv[]) {
//testTextInput();
//testButtonTextureLoader();
//testConnectionMenu();
testMenuEndGame();
//testMenuEndGame();
//testGameInterface();
//testConnectionMenu();
//testDrawMainMenu();
testCreationMenu();
//testSettingsView();
return 0;

@ -7,5 +7,9 @@ extern const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND;
extern const SDL_Color COLOR_GENERIC_BUTTON_BORDER;
extern const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND_HOVER;
extern const SDL_Color PLAYER_ONE_COLOR;
extern const SDL_Color PLAYER_TWO_COLOR;
extern const SDL_Color PLAYER_THREE_COLOR;
extern const SDL_Color PLAYER_FOUR_COLOR;
#endif

@ -5,5 +5,50 @@
#include "engine/TextureLoader.h"
#include "engine/Colors.h"
#include "engine/FontUtils.h"
#include "engine/GeneralState.h"
#include "engine/InputProcessor.h"
#include "engine/Colors.h"
#include "model/Player.h"
#include "engine/TextInput.h"
#define NB_COLORS 4
#define NB_PLAYER_MAX 4
/*
bool drawGameCreationMenu(SDL_Renderer* renderer, P_Button* incrementBtn, P_Button* decrementBtn, TextLabel* nbJoueurTxtLabel, TextLabel* nbPlayerLabel);
*/
typedef struct
{
P_Button aiButton;
P_Button* colorButtons;
TextInput pseudoInput;
Player* player;
}CreateMenuLine;
typedef struct
{
Player* p;
SDL_Color color;
} ChangeColorParams;
typedef struct
{
int* nbPlayers;
TTF_Font* font;
int minx;
int maxx;
int miny;
CreateMenuLine* lines;
SDL_Renderer* renderer;
}IncrementParams;
typedef struct
{
int* nbPlayers;
CreateMenuLine* lines;
SDL_Renderer* renderer;
}DecrementParams;
bool drawGameCreationMenu(SDL_Renderer* renderer, TTF_Font* font, int width, int height);
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState, TTF_Font* font, int width, int height);

@ -3,3 +3,8 @@
const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND = {225, 225, 225, 255};
const SDL_Color COLOR_GENERIC_BUTTON_BORDER = {10, 10, 10, 255};
const SDL_Color COLOR_GENERIC_BUTTON_BACKGROUND_HOVER = {250, 250, 250, 255};
const SDL_Color PLAYER_ONE_COLOR = {166, 58, 252, 255};
const SDL_Color PLAYER_TWO_COLOR = {14, 159, 100, 255};
const SDL_Color PLAYER_THREE_COLOR = {240, 45, 45, 255};
const SDL_Color PLAYER_FOUR_COLOR = {255, 255, 255, 255};

@ -1,14 +1,182 @@
#include "view/GameCreationMenu.h"
bool drawGameCreationMenu(SDL_Renderer* renderer, TTF_Font* font, int width, int height)
#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 drawCreateMenuLine(SDL_Renderer* renderer, CreateMenuLine* line);
void changePlayerColor(P_Button* caller);
void decrementNbPlayer(P_Button* caller);
void incrementNbPlayer(P_Button* caller);
void incrementNbPlayer(P_Button* caller)
{
IncrementParams* params = (IncrementParams*) caller->arg;
int* nbPlayers = params->nbPlayers;
if(*nbPlayers == 4)
{
fprintf(stderr, "WARNING: Can't increment up to 5 and more\n");
return;
}
++(*nbPlayers);
createPlayersLines(params->renderer, params->font, params->minx, params->maxx, params->miny, *params->nbPlayers, params->lines);
drawCreateMenuLine(params->renderer, params->lines+*params->nbPlayers-1);
}
void decrementNbPlayer(P_Button* caller)
{
DecrementParams* params = (DecrementParams*)caller->arg;
int* nbPlayers = params->nbPlayers;
if(*nbPlayers == 2)
{
fprintf(stderr, "WARNING: Can't decrement down to 1 and less\n");
return;
}
freeCreateMenuLine(&params->lines[*nbPlayers-1]);
*nbPlayers -= 1;
}
void changePlayerColor(P_Button* caller)
{
ChangeColorParams* params = (ChangeColorParams*)caller->arg;
params->p->color = params->color;
}
bool drawGameCreationMenu(SDL_Renderer* renderer, TextLabel** labels, int nbLabels, P_Button* buttons, int nbButtons, CreateMenuLine* lines, int nbPlayer)
{
//Draw everything
for(int i=0; i<nbButtons; ++i)
{
if(!drawButtonOnRenderer(renderer, &(buttons[i])))
{
fprintf(stderr, "WARNING: Can't draw button\n");
return false;
}
}
for(int i=0; i<nbLabels; ++i)
{
drawTextLabel(renderer, labels[i]);
}
for(int i=0; i<nbPlayer; ++i)
{
drawCreateMenuLine(renderer, &lines[i]);
}
SDL_RenderPresent(renderer);
return true;
}
void createPlayersLines(SDL_Renderer* renderer, TTF_Font* font, int minx, int maxx, int miny,int nbPlayer, CreateMenuLine* lines)
{
Player players[nbPlayer];
for(int i=0; i<nbPlayer; ++i)
{
if(i==0)
{
lines[i] = createCreateMenuLine(renderer, minx, miny + 16, maxx,font, &players[i]);
}else{
lines[i] = createCreateMenuLine(renderer, minx, miny + 16 + 16 + i* lines[i-1].aiButton.rect.h, maxx,font, &players[i]);
}
}
return;
}
bool drawCreateMenuLine(SDL_Renderer* renderer, CreateMenuLine* line)
{
drawButtonOnRenderer(renderer, &line->aiButton);
for(int i=0; i<NB_COLORS; ++i)
{
drawButtonOnRenderer(renderer, &line->colorButtons[i]);
}
drawTextInputOnRenderer(renderer, &line->pseudoInput);
return true;
}
CreateMenuLine createCreateMenuLine(SDL_Renderer* renderer, int xmin, int y, int xmax, TTF_Font* font, Player* player)
{
int const wColorBtn = 32;
int const hColorBtn = 32;
int const colorBtnXMargin = 8;
SDL_Texture* btnTexture, *btnTextureHover;
SDL_Color const colors[NB_COLORS]= {
PLAYER_ONE_COLOR,
PLAYER_TWO_COLOR,
PLAYER_THREE_COLOR,
PLAYER_FOUR_COLOR
};
P_Button* colorsBtn = (P_Button*) malloc(sizeof(P_Button)*NB_COLORS);
P_Button ai = createButton(NULL, NULL, xmin, y, 0, 0, NULL);
CreateMenuLine line;
SDL_Texture* aiTexture = createGenericButtonTexture("X", font, 16, COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(ai.rect.w), &(ai.rect.h), renderer);
SDL_Texture* aiTextureHovered = createGenericButtonTexture("X", font, 16, COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &ai.rect.w, &ai.rect.h, renderer);
ai.texture = aiTexture;
ai.hoverTexture = aiTextureHovered;
SDL_Rect rect = {.x = xmin + ai.rect.x + ai.rect.w, .y = y, .h = TTF_FontHeight(font),.w = xmax - ai.rect.w - NB_COLORS * (wColorBtn + colorBtnXMargin*2)- 16};
TextInput pseudoInput;
initTextInput(&pseudoInput, &rect, NULL, font);
ChangeColorParams* params;
for(int i=0; i<NB_COLORS; ++i)
{
params = (ChangeColorParams*) malloc(sizeof(ChangeColorParams));
params->p = player;
params->color=colors[i];
colorsBtn[i] = createButton(NULL, NULL, xmax-wColorBtn*(i+1), y, wColorBtn, hColorBtn, changePlayerColor);
colorsBtn[i].arg = params;
btnTexture = createGenericButtonTexture("", font, 0, COLOR_GENERIC_BUTTON_BORDER, colors[i], 4, 8, NULL, NULL, renderer);
btnTextureHover = createGenericButtonTexture("", font, 0, COLOR_GENERIC_BUTTON_BACKGROUND, colors[i], 4, 8, NULL, NULL, renderer);
colorsBtn[i].texture = btnTexture;
colorsBtn[i].hoverTexture = btnTextureHover;
}
line.aiButton=ai;
line.colorButtons=colorsBtn;
line.player=player;
line.pseudoInput=pseudoInput;
return line;
}
void freeCreateMenuLine(CreateMenuLine* line)
{
destroyTextInput(&line->pseudoInput);
freeButton(&line->aiButton);
for(int i=0; i<NB_COLORS; ++i)
{
free(line->colorButtons[i].arg);
freeButton(&line->colorButtons[i]);
// free(&line->colorButtons[i]);
}
}
bool gameCreationMenu(SDL_Renderer* renderer, GeneralState* generalState,TTF_Font* font, int width, int height)
{
int nbPlayers = 2;
int const nbLabels = 5;
int nbButtons = 2;
TextLabel *labels[nbLabels];
P_Button* buttons = (P_Button*) malloc(sizeof(P_Button)*nbButtons);
// TextLabel for "Nombre de joueur.euse.s" creation
SDL_Point nbJoueurLabelPos = {.x=width*0.05, .y=height*0.05};
SDL_Color black = {0,0,0,255};
SDL_Point titleLabelPos = {.x=width*0.05, .y=height*0.05};
SDL_Color white = {225, 255, 255, 255};
TextLabel nbJoueurLabel = createTextLabel(
"Nombre de joueur.euse.s",
&nbJoueurLabelPos,
CreateMenuLine lines[NB_PLAYER_MAX];
TextLabel titleLabel = createTextLabel(
"Nombre de joueur·euse·s",
&titleLabelPos,
1,
&white,
font,
@ -17,52 +185,181 @@ bool drawGameCreationMenu(SDL_Renderer* renderer, TTF_Font* font, int width, int
POSY_TOP
);
// Incrementation Btn creation
P_Button incrementBtn = createButton(NULL, NULL, nbJoueurLabelPos.x+calculateStringPixelLenght(font, nbJoueurLabel.text)+32, nbJoueurLabelPos.y, 0, 0, NULL);
SDL_Texture* btnTexture = createGenericButtonTexture("+", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer);
// Decrementation Btn creation
P_Button decrementBtn = createButton(NULL, NULL, titleLabelPos.x+calculateStringPixelLenght(font, titleLabel.text)+32, titleLabelPos.y, 0, 0, &decrementNbPlayer);
SDL_Texture* btnTexture = createGenericButtonTexture("-", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer);
if(btnTexture == NULL)
{
fprintf(stderr, "WARNING: Can't create texture: %s\n", SDL_GetError());
return false;
}
SDL_Texture* btnHoveredTexture = createGenericButtonTexture("+", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer);
SDL_Texture* btnHoveredTexture = createGenericButtonTexture("-", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer);
if(btnHoveredTexture == NULL)
{
fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError());
return false;
}
incrementBtn.texture = btnTexture;
incrementBtn.hoverTexture = btnHoveredTexture;
decrementBtn.texture = btnTexture;
decrementBtn.hoverTexture = btnHoveredTexture;
// 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)
{
fprintf(stderr, "WARNING: The number of players has to be between 0 and 9\n");
return false;
}
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,
&nbPlayerLabelPos,
1,
&white,
font,
renderer,
POSX_LEFT,
POSY_CENTER
);
// Decrementation Btn creation
P_Button decrementBtn = createButton(NULL, NULL, nbJoueurLabelPos.x+calculateStringPixelLenght(font, nbJoueurLabel.text)+32, nbJoueurLabelPos.y, 0, 0, NULL);
btnTexture = createGenericButtonTexture("-", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer);
// Incrementation Btn creation
P_Button incrementBtn = createButton(NULL, NULL, nbPlayerLabel.textZone.x + nbPlayerLabel.textZone.w + 8, titleLabelPos.y, 0, 0, &incrementNbPlayer);
btnTexture = createGenericButtonTexture("+", font, 8,COLOR_GENERIC_BUTTON_BACKGROUND, COLOR_GENERIC_BUTTON_BORDER, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer);
if(btnTexture == NULL)
{
fprintf(stderr, "WARNING: Can't create texture: %s\n", SDL_GetError());
return false;
}
btnHoveredTexture = createGenericButtonTexture("-", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(decrementBtn.rect.w), &(decrementBtn.rect.h), renderer);
btnHoveredTexture = createGenericButtonTexture("+", font, 8, COLOR_GENERIC_BUTTON_BORDER, COLOR_GENERIC_BUTTON_BACKGROUND, 4, 8, &(incrementBtn.rect.w), &(incrementBtn.rect.h), renderer);
if(btnHoveredTexture == NULL)
{
fprintf(stderr, "WARNING: Can't create hover texture: %s\n", SDL_GetError());
return false;
}
decrementBtn.texture = btnTexture;
decrementBtn.hoverTexture = btnHoveredTexture;
incrementBtn.texture = btnTexture;
incrementBtn.hoverTexture = btnHoveredTexture;
SDL_Point aiLabelPos = {.x=titleLabel.textZone.x, .y=decrementBtn.rect.y+ decrementBtn.rect.h + 16};
TextLabel aiLabel = createTextLabel(
"IA",
&aiLabelPos,
1,
&white,
font,
renderer,
POSX_LEFT,
POSY_TOP
);
SDL_Point colorLabelPos = {
.x=incrementBtn.rect.x+incrementBtn.rect.w,
decrementBtn.rect.y+ decrementBtn.rect.h + 16
};
TextLabel colorLabel = createTextLabel(
"Couleur",
&colorLabelPos,
1,
&white,
font,
renderer,
POSX_RIGHT,
POSY_TOP
);
SDL_Point pseudoLabelPos = {
.x= (titleLabel.textZone.x+
aiLabel.textZone.w+
colorLabelPos.x)
/2,
.y=decrementBtn.rect.y+ decrementBtn.rect.h + 16
};
TextLabel pseudoLabel = createTextLabel(
"Pseudonyme",
&pseudoLabelPos,
1,
&white,
font,
renderer,
POSX_CENTER,
POSY_TOP
);
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};
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};
incrementBtn.arg = &iparams;
buttons[0] = decrementBtn;
buttons[1] = incrementBtn;
InputProcessor inputProcessor = createInputProcessor();
array_P_Button_AddElement(&inputProcessor.tabButton, incrementBtn);
array_P_Button_AddElement(&inputProcessor.tabButton, decrementBtn);
while(*generalState == GS_GameCreationMenu)
{
printf("%d\n", nbPlayers);
SDL_SetRenderDrawColor(renderer, 55, 120, 175, 255);
SDL_RenderClear(renderer);
InputElement inputElement;
while (InputType_None != (inputElement = proccessInput(&inputProcessor)).type)
{
switch (inputElement.type)
{
case InputType_ActivateUI:
switch (inputElement.data.uiAction)
{
case UIAction_Quit:
*generalState = GS_MainMenu;
break;
case UIAction_Validate:
break;
case UIAction_Cancel:
break;
default:
break;
}
break;
case InputType_MoveGame:
break;
case InputType_ClickGame:
break;
case InputType_None:
default:
break;
}
}
nbPlayerLabel.text[0] = nbPlayers+48;
drawGameCreationMenu(renderer, labels, nbLabels, buttons, nbButtons, lines, nbPlayers);
SDL_RenderPresent(renderer);
SDL_Delay(25);
}
//Draw everything
drawButtonOnRenderer(renderer, &incrementBtn);
drawButtonOnRenderer(renderer, &decrementBtn);
drawTextLabel(renderer, &nbJoueurLabel);
//free
freeTextLabel(&nbJoueurLabel);
freeInputProcessor(&inputProcessor);
freeTextLabel(&titleLabel);
freeButton(&incrementBtn);
freeButton(&decrementBtn);
return true;
}

@ -13,6 +13,7 @@ int testCreationMenu(void) {
char* path = "rsrc/img/Lenna.png";
int i=0;
int w, h;
int nbPlayer=1;
if(0 != SDL_Init(SDL_INIT_VIDEO))
{
fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError());
@ -42,7 +43,7 @@ int testCreationMenu(void) {
goto Quit;
}
if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler
if(0 != SDL_SetRenderDrawColor(renderer, 55,120,175,0)) //choisi la couleur avec laquelle travailler
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
@ -61,30 +62,12 @@ int testCreationMenu(void) {
}
SDL_bool quit = SDL_FALSE;
SDL_Event event;
FontHandler fontHandler = loadFonts();
SDL_GetWindowSize(window, &w, &h);
while(!quit)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
quit = SDL_TRUE;
break;
case SDL_MOUSEBUTTONUP:
break;
}
}
drawGameCreationMenu(renderer, fontHandler.fonts[FONT_retro], w, h);
SDL_RenderPresent(renderer);
SDL_Delay(20);
}
GeneralState generalState = GS_GameCreationMenu;
printf("%d/%d\n", w, h);
gameCreationMenu(renderer, &generalState, fontHandler.fonts[FONT_retro], w, h);
Quit:
freeFonts(fontHandler);

Loading…
Cancel
Save