cub3d/src/manager/game_manager.c

69 lines
2.2 KiB
C

/* ************************************************************************** */
/* */
/* :::::::: */
/* game_manager.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
/* Updated: 2025/06/10 20:24:00 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include "game_manager.h"
t_game_manager *game_manager_create(t_game *game, int state)
{
t_game_manager *manager;
manager = malloc(sizeof(t_game_manager));
if (!manager)
return (NULL);
manager->game = game;
manager->menu = NULL;
manager->state = state;
game->manager = manager;
return (manager);
}
void game_manager_display(t_game_manager *manager)
{
t_game *game;
if (!manager || !manager->game)
return ;
game = manager->game;
if (manager->state == GAME_STATE_MENU)
menu_display(*(manager->active_menu), game->screen);
else if (manager->state == GAME_STATE_PLAYING)
game_run(game);
else if (manager->state == GAME_STATE_END_SCREEN)
draw_end_screen(manager, manager->end_screen);
}
void game_manager_update(void *param)
{
t_game_manager *manager;
manager = (t_game_manager *)param;
game_manager_handle_input(manager);
game_manager_display(manager);
keyboard_update(manager->game);
}
void game_manager_destroy(t_game_manager *manager)
{
if (!manager)
return ;
if (manager->menu)
menu_free(manager->menu, manager->game->screen);
if (manager->end_screen)
menu_free(manager->end_screen, manager->game->screen);
mlx_close_window(manager->game->screen->mlx);
mlx_terminate(manager->game->screen->mlx);
if (manager->game)
game_free(manager->game);
free(manager);
exit(EXIT_SUCCESS);
}