Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ SRC = src/main.c \
src/start_game.c \
src/change_map.c \
src/flags.c \
src/menu.c \
$(addprefix src/utils/create/, \
$(addsuffix .c, \
raycasting \
Expand Down
59 changes: 59 additions & 0 deletions include/menu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
** EPITECH PROJECT, 2023
** rpg
** File description:
** menu
*/

/*
** game->menu is a stack of screens encoded in base 10: menu = menu * 10 + N
** pushes screen N, menu /= 10 pops. These helpers name the states and the
** predicates/transitions that were previously raw decimal arithmetic; the
** computations are kept identical to the original behaviour.
*/

#ifndef MENU_H_
#define MENU_H_

#include "game.h"

#define MENU_START 0
#define MENU_SETTINGS 20
#define MENU_GAME 5
#define MENU_WIN 42
#define MENU_LOSE (-42)
#define SCREEN_SAVE 3
#define SCREEN_PLAY 4
#define SCREEN_PAUSE 6
#define MENU_PAUSE_INVENTORY 560
#define MENU_PAUSE_CHARACTER 561
#define MENU_PAUSE_QUEST 562
#define MENU_PAUSE_SETTINGS 5630

void menu_pop(game_t *game);
void menu_push(game_t *game, int screen);
void menu_set_tab(game_t *game, int tab);

bool menu_is_start(game_t *game);
bool menu_is_dialog(game_t *game);
bool menu_is_save(game_t *game);
bool menu_in_overworld(game_t *game);
bool menu_show_hud(game_t *game);
bool menu_won(game_t *game);
bool menu_lost(game_t *game);

bool menu_pause_open(game_t *game);
bool menu_pause_active(game_t *game);
bool menu_in_pause_tab(game_t *game);
bool menu_tab_inventory(game_t *game);
bool menu_tab_character(game_t *game);
bool menu_tab_quest(game_t *game);

bool menu_in_settings(game_t *game);
bool menu_settings_open(game_t *game);
bool menu_tab_fps(game_t *game);
bool menu_tab_music(game_t *game);
bool menu_tab_keyboard(game_t *game);
bool menu_tab_window(game_t *game);

#endif /* !MENU_H_ */
3 changes: 2 additions & 1 deletion src/change_map.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
*/

#include "game.h"
#include "menu.h"

void change_map(game_t *game)
{
if (game->menu == 5) {
if (game->menu == MENU_GAME) {
if (game->perso->pos.x > game->map->rect.size.x * 3 - 32) {
game->map->rect.position.x += game->map->rect.size.x / 2;
game->perso->pos.x = (game->map->rect.size.x * 3.0) / 2;
Expand Down
121 changes: 121 additions & 0 deletions src/menu.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/*
** EPITECH PROJECT, 2023
** rpg
** File description:
** menu
*/

#include "game.h"
#include "menu.h"

void menu_pop(game_t *game)
{
game->menu /= 10;
}

void menu_push(game_t *game, int screen)
{
game->menu = game->menu * 10 + screen;
}

void menu_set_tab(game_t *game, int tab)
{
game->menu = game->menu / 10 * 10 + tab;
}

bool menu_is_start(game_t *game)
{
return game->menu == 0;
}

bool menu_is_dialog(game_t *game)
{
return game->menu == 4;
}

bool menu_is_save(game_t *game)
{
return game->menu == 3;
}

bool menu_in_overworld(game_t *game)
{
return game->menu >= 5 && game->menu < 10;
}

bool menu_show_hud(game_t *game)
{
return game->menu >= 5 && game->menu <= 6;
}

bool menu_won(game_t *game)
{
return game->is_finished == 1 && game->menu == 42;
}

bool menu_lost(game_t *game)
{
return game->is_finished == 1 && game->menu == -42;
}

bool menu_pause_open(game_t *game)
{
return game->menu % 10 == 6;
}

bool menu_pause_active(game_t *game)
{
return (game->menu % 10 == 6 || (game->menu / 10) % 10 == 6)
&& game->menu < 563;
}

bool menu_in_pause_tab(game_t *game)
{
return (game->menu / 10) % 10 == 6;
}

bool menu_tab_inventory(game_t *game)
{
return (game->menu / 10) % 10 == 6 && game->menu % 10 == 0;
}

bool menu_tab_character(game_t *game)
{
return (game->menu / 10) % 10 == 6 && game->menu % 10 == 1;
}

bool menu_tab_quest(game_t *game)
{
return (game->menu / 10) % 10 == 6 && game->menu % 10 == 2;
}

bool menu_in_settings(game_t *game)
{
return game->menu == 2 || game->menu / 10 == 2
|| (game->menu / 10) % 10 == 3;
}

bool menu_settings_open(game_t *game)
{
return game->menu == 2 || game->menu / 10 == 2 || game->menu % 10 == 2;
}

bool menu_tab_fps(game_t *game)
{
return game->menu == 2 || game->menu == 25 || game->menu % 10 == 0;
}

bool menu_tab_music(game_t *game)
{
return game->menu == 21 || game->menu % 10 == 1;
}

bool menu_tab_keyboard(game_t *game)
{
return game->menu == 22 || game->menu % 10 == 2;
}

bool menu_tab_window(game_t *game)
{
return game->menu == 24 || game->menu % 10 == 4;
}
13 changes: 7 additions & 6 deletions src/utils/actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,28 @@

#include "game.h"
#include "display.h"
#include "menu.h"

void go_back(game_t *game)
{
game->menu /= 10;
menu_pop(game);
if (game->menu > 500)
game->menu /= 10;
menu_pop(game);
relase_button(game->params->visu->navbar->button, 0, 5);
}

void change_to_settings(game_t *game)
{
game->params->tmp = 0;
if (game->menu <= 563)
game->menu = 20;
game->menu = MENU_SETTINGS;
else
game->menu = game->menu / 10 * 10 + 1;
menu_set_tab(game, 1);
}

void close_start_all(game_t *game)
{
game->menu = game->menu * 10 + 4;
menu_push(game, SCREEN_PLAY);
}

void exit_start_all(game_t *game)
Expand All @@ -37,5 +38,5 @@ void exit_start_all(game_t *game)

void change_to_save(game_t *game)
{
game->menu = game->menu * 10 + 3;
menu_push(game, SCREEN_SAVE);
}
3 changes: 2 additions & 1 deletion src/utils/display/change_to_game.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "game.h"
#include "display.h"
#include "menu.h"

static void fade_out(game_t *game, float duration)
{
Expand All @@ -31,7 +32,7 @@ static void fade_out(game_t *game, float duration)

void change_to_game(game_t *game)
{
if (game->menu != 4 || game->params->tmp != 0)
if (!menu_is_dialog(game) || game->params->tmp != 0)
return;
sfMusic_stop(game->window->song->music);
sfMusic_destroy(game->window->song->music);
Expand Down
3 changes: 2 additions & 1 deletion src/utils/display/clients.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
#include "game.h"
#include "display.h"
#include "network_functions.h"
#include "menu.h"

void display_clients(game_t *game)
{
int i = 0;

if (game->network == NULL || game->menu < 5 || game->menu >= 10)
if (game->network == NULL || !menu_in_overworld(game))
return;
send_player_position(game);
receive_clients_infos(game);
Expand Down
5 changes: 3 additions & 2 deletions src/utils/display/dialog.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "game.h"
#include "display.h"
#include "menu.h"

static int poll_dialog(game_t *game)
{
Expand Down Expand Up @@ -39,8 +40,8 @@ int diplay_text(game_t *game, char *str)

void display_dialog(game_t *game)
{
if (game->menu != 4)
if (!menu_is_dialog(game))
return;
diplay_text(game, game->dialogs->dialog_text[0]);
game->menu = 5;
game->menu = MENU_GAME;
}
5 changes: 3 additions & 2 deletions src/utils/display/end.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,18 @@

#include "game.h"
#include "display.h"
#include "menu.h"

void display_end(game_t *game)
{
if (game->is_finished == 1 && game->menu == 42) {
if (menu_won(game)) {
sfRenderWindow_drawRectangleShape(game->window->window,
game->win->container, NULL);
sfRenderWindow_drawRectangleShape(game->window->window,
game->win->content, NULL);
sfRenderWindow_drawText(game->window->window, game->win->text, NULL);
}
if (game->is_finished == 1 && game->menu == -42) {
if (menu_lost(game)) {
sfRenderWindow_drawRectangleShape(game->window->window,
game->loose->container, NULL);
sfRenderWindow_drawRectangleShape(game->window->window,
Expand Down
3 changes: 2 additions & 1 deletion src/utils/display/inventory_bar.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "game.h"
#include "display.h"
#include "menu.h"

static void set_item_color(sfRectangleShape *content, sfRectangleShape *cont,
int selected)
Expand All @@ -30,7 +31,7 @@ void display_inventory(game_t *game)
sfRectangleShape *content = NULL;
int i = 0;

if (game->menu < 5 || game->menu > 6)
if (!menu_show_hud(game))
return;
for (i = 0; i < 3; i++) {
container = game->inventory->items[i]->container;
Expand Down
3 changes: 2 additions & 1 deletion src/utils/display/map_iso.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
*/

#include "game.h"
#include "menu.h"

void display_iso_map(game_t *game)
{
if (game->menu >= 5 && game->menu < 10) {
if (menu_in_overworld(game)) {
sfRenderWindow_drawSprite(game->window->window,
game->map->iso_sprite, NULL);
}
Expand Down
6 changes: 3 additions & 3 deletions src/utils/display/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

#include "game.h"
#include "display.h"
#include "menu.h"

static void active_button(game_t *game, int i)
{
Expand Down Expand Up @@ -62,12 +63,11 @@ void display_menu(game_t *game)
{
sfVector2i mpos = sfMouse_getPositionRenderWindow(game->window->window);

if ((game->menu % 10 != 6 && (game->menu / 10) % 10 != 6)
|| game->menu >= 563) {
if (!menu_pause_active(game)) {
game->params->tmp = 0;
return;
}
if (game->menu % 10 == 6)
if (menu_pause_open(game))
relase_button(game->game_menu->sidebar->buttons, 5, 4);
draw_menu_bg(game);
if (game->params->tmp == 0) {
Expand Down
9 changes: 5 additions & 4 deletions src/utils/display/menu/actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@
*/

#include "game.h"
#include "menu.h"

void change_to_inventory(game_t *game)
{
game->menu = 560;
game->menu = MENU_PAUSE_INVENTORY;
}

void change_to_character(game_t *game)
{
game->menu = 561;
game->menu = MENU_PAUSE_CHARACTER;
}

void change_to_quest(game_t *game)
{
game->menu = 562;
game->menu = MENU_PAUSE_QUEST;
}

void change_to_option(game_t *game)
{
game->menu = 5630;
game->menu = MENU_PAUSE_SETTINGS;
}
Loading
Loading