Hex/src/menu_principal.c
2016-05-11 17:23:53 +02:00

289 lines
6.5 KiB
C

#include "menu_principal.h"
#include <math.h>
#include "action_menu.h"
#include "affichage_menu.h"
#include "menu.h"
#include "globals.h"
#include "window.h"
#include "scrolling.h"
#include "sound.h"
#include "sauvegarde.h"
#include "sub_menu.h"
int menu_taille (SDL_Surface* window, scrolling_t scroll)
{
char* entries [5] = {"<", "TAILLE", "", "Retour", ">"};
entries [2] = malloc (sizeof (char)* 8);
sprintf (entries [2], "%dx%d", param->size, param->size);
menu_t m = init_menu (window, entries);
Affiche_menu(m);
int retour;
bool end = false;
while (!end)
{
SDL_Event event;
event = scroll_msg (window, scroll);
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE))
{
retour = M_DOWN;
}
else
retour = evenement_menu(window, m, event, 0);
if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f))
scroll = resize_scroll(window, scroll);
switch (retour)
{
case M_UP:
break;
case M_LEFT :
if (param->size > 1)
{
--param->size;
sprintf (entries [2], "%dx%d", param->size, param->size);
vec2 c = m->cur;
m->cur.x = 1;
m->cur.y = 1;
Affiche_entry (m, 0);
m->cur = c;
}
break;
case M_RIGHT :
{
if (param->size < SIZE_MAX)
{
++param->size;
sprintf (entries [2], "%dx%d", param->size, param->size);
vec2 c = m->cur;
m->cur.x = 1;
m->cur.y = 1;
Affiche_entry (m, 0);
m->cur = c;
}
break;
}
case M_DOWN :
end = true;
break;
case M_MID :
break;
}
}
free (entries [2]);
free_menu(m);
Mix_HaltMusic();
return retour;
}
int menu_options (SDL_Surface* window, scrolling_t scroll)
{
char* entries [5] = {"Music", "Taille", "OPTIONS", "Retour", " Son "};
menu_t m = init_menu (window, entries);
Affiche_menu(m);
int retour;
bool end = false;
while (!end)
{
SDL_Event event;
event = scroll_msg (window, scroll);
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE))
{
retour = M_DOWN;
}
else
retour = evenement_menu(window, m, event, 0);
if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f))
scroll = resize_scroll(window, scroll);
switch (retour)
{
case M_UP:
menu_taille (window, scroll);
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
case M_LEFT :
menu_music (window, scroll);
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
case M_RIGHT :
menu_son (window, scroll);
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
case M_DOWN :
end = true;
break;
case M_MID :
break;
}
}
free_menu(m);
return retour;
}
int menu_charger (SDL_Surface* window, scrolling_t scroll, char** file)
{
char* entries [5] = {"<", "CHARGER", "", "Retour", ">"};
entries [2] = malloc (sizeof (char)* 9);
char** liste;
int nb_sav = listeSauvegarde(&liste);
if (nb_sav == 0)
{
liste = malloc(sizeof(char*));
*liste = malloc(sizeof(char) * 5);
strcpy (*liste, "None");
nb_sav = 1;
}
int cur = 0;
sprintf (entries [2], "%s", liste[cur]);
menu_t m = init_menu (window, entries);
Affiche_menu(m);
int retour;
bool end = false;
while (!end)
{
SDL_Event event;
event = scroll_msg (window, scroll);
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE))
{
retour = M_DOWN;
}
else
retour = evenement_menu(window, m, event, 0);
if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f))
scroll = resize_scroll(window, scroll);
switch (retour)
{
case M_UP:
*file = malloc (sizeof (char) * (strlen(entries[2]) + 1));
strcpy (*file, entries [2]);
end = true;
retour = M_UP;
break;
case M_LEFT :
{
if (!cur)
cur = nb_sav - 1;
else
--cur;
printf ("%d\n", cur);
sprintf (entries [2], "%s", liste[cur]);
vec2 c = m->cur;
m->cur.x = 1;
m->cur.y = 1;
Affiche_entry (m, 0);
m->cur = c;
break;
}
case M_RIGHT :
{
cur = (cur + 1) % nb_sav;
printf ("%d\n", cur);
sprintf (entries [2], "%s", liste[cur]);
vec2 c = m->cur;
m->cur.x = 1;
m->cur.y = 1;
Affiche_entry (m, 0);
m->cur = c;
break;
}
case M_DOWN :
end = true;
break;
case M_MID :
if (confirmation (window, scroll, "supprimer", entries [2]) == M_UP)
{
supprimer (entries [2]);
free_liste (liste, nb_sav);
nb_sav = listeSauvegarde(&liste);
if (nb_sav == 0)
{
liste = malloc(sizeof(char*));
*liste = malloc(sizeof(char) * 5);
strcpy (*liste, "None");
nb_sav = 1;
}
cur = 0;
sprintf (entries [2], "%s", liste[cur]);
}
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
}
}
free (entries [2]);
free_liste (liste, nb_sav);
free_menu(m);
return retour;
}
int menu_principal (SDL_Surface* window, char** file)
{
char* entries [5] = {"Charger", "Jouer", "HEX", "Quitter", "Options"};
menu_t m = init_menu (window, entries);
Affiche_menu(m);
int retour;
bool end = false;
char* message [] = {"Crédits : Hugo Mathieux - Nathan Gouardères - Nolain Lehoux", "Crédits : Hugo Mathieux - Nathan Gouardères - Nolain Lehoux", "Crédits : Hugo Mathieux - Nathan Gouardères - Nolain Lehoux", "Crédits : Hugo Mathieux - Nathan Gouardères - Nolain Lehoux"};//"Crédits : petite bite & gros chakal Corp.", "Breaking News : Le Soudan en manque de soudeurs", "lmqsdkmq", "There is nothing to see here ... BASTARD !"};
SDL_Color c [] = {{170,10,107}, {60,255,1}, {0, 0, 0}, {200, 180, 201}};
scrolling_t scroll = init_scroll (window, message, c, 4);
SDL_Event event;
while (!end)
{
event = scroll_msg (window, scroll);
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE))
{
retour = M_DOWN;
}
else
retour = evenement_menu(window, m, event, 0);
switch (retour)
{
case M_UP:
end = true;
break;
case M_LEFT :
if (menu_charger (window, scroll, file) == M_UP)
{
end = true;
retour = M_LEFT;
}
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
case M_RIGHT :
menu_options (window, scroll);
m->cur.x = 1;
m->cur.y = 1;
Affiche_menu(m);
break;
case M_DOWN :
end = true;
break;
case M_MID :
break;
}
if (event.type == SDL_VIDEORESIZE || (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_f))
scroll = resize_scroll(window, scroll);
}
free_menu(m);
free_scroll (scroll);
do
{
SDL_WaitEvent (&event);
} while (event.type != SDL_MOUSEBUTTONUP && event.type != SDL_KEYUP);
return retour;
}