diff --git a/.vscode/settings.json b/.vscode/settings.json index dea6451..abb0233 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,8 @@ "game.h": "c", "cub3d.h": "c", "screen.h": "c", - "mlx42.h": "c" + "mlx42.h": "c", + "glfw3.h": "c" }, "cmake.ignoreCMakeListsMissing": true } \ No newline at end of file diff --git a/inc/cub3d.h b/inc/cub3d.h index 4c19362..5ec7ddb 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* cub3d.h :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/04/19 14:46:34 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* cub3d.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ +/* Updated: 2025/04/22 17:15:32 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -48,4 +48,6 @@ # include "collision.h" # include "parser.h" +int initialize_cub3d(t_game **game, const char *mapfile); + #endif diff --git a/inc/game.h b/inc/game.h index dc5aa90..8ec6849 100644 --- a/inc/game.h +++ b/inc/game.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:16 by qmennen #+# #+# */ -/* Updated: 2025/04/15 17:58:22 by qmennen ### ########.fr */ +/* Updated: 2025/04/22 17:11:16 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,7 @@ int game_create(t_game **game); void game_loop(void *param); +void game_free(t_game *game); void game_terminate(t_game *game); #endif diff --git a/inc/map.h b/inc/map.h index 663e20d..1b8c01c 100644 --- a/inc/map.h +++ b/inc/map.h @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* map.h :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ -/* Updated: 2025/04/20 13:51:19 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* map.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ +/* Updated: 2025/04/22 17:24:47 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ # include "cub3d.h" -int map_create(t_game **game, int argc, char **argv); +int map_create(t_game **game, const char *mapfile); void map_free(t_map *map); void print_map(t_map *map); t_tile get_tile(t_map * map, int x, int y); diff --git a/inc/screen.h b/inc/screen.h index 960982e..3bad569 100644 --- a/inc/screen.h +++ b/inc/screen.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:30:34 by qmennen #+# #+# */ -/* Updated: 2025/04/15 16:48:24 by qmennen ### ########.fr */ +/* Updated: 2025/04/22 17:20:41 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ #include "cub3d.h" -t_screen *screen_create(); -void screen_center(t_screen *screen); +int screen_create(t_game **game); +int screen_display(t_screen *screen); #endif diff --git a/src/game.c b/src/game.c index 1e2c2c1..e4a7c39 100644 --- a/src/game.c +++ b/src/game.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/04/22 15:24:24 by qmennen ### ########.fr */ +/* Updated: 2025/04/22 17:25:34 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,12 +19,8 @@ int game_create(t_game **game) return (FAILURE); (*game)->player = NULL; (*game)->map = NULL; - (*game)->screen = screen_create(); - if ((*game)->screen == NULL) - return (FAILURE); - if (((*game)->screen->mlx == NULL) || ((*game)->screen->img == NULL)) - return (FAILURE); - mlx_image_to_window((*game)->screen->mlx, (*game)->screen->img, 0, 0); + (*game)->screen = NULL; + (*game)->keyboard = NULL; return (SUCCESS); } @@ -42,7 +38,7 @@ void game_loop(void *param) keyboard_update(game); // Goes last } -void game_terminate(t_game *game) +void game_free(t_game *game) { if (game->screen) { @@ -58,5 +54,10 @@ void game_terminate(t_game *game) if (game->keyboard) free(game->keyboard); free(game); +} + +void game_terminate(t_game *game) +{ + game_free(game); exit(EXIT_SUCCESS); } diff --git a/src/main.c b/src/main.c index af43476..5ebf257 100644 --- a/src/main.c +++ b/src/main.c @@ -1,71 +1,36 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* main.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ -/* Updated: 2025/04/20 13:46:26 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* main.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/15 16:01:29 by qmennen #+# #+# */ +/* Updated: 2025/04/22 17:21:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ # include "cub3d.h" -static int init_game(t_game **game, int argc, char **argv) -{ - if (!game_create(game)) - return (FAILURE); - if (!player_create(game)) - return (FAILURE); - if (!map_create(game, argc, argv)) - return (FAILURE); - if (!keyboard_create(game)) - return (FAILURE); - screen_center((*game)->screen); - mlx_key_hook((*game)->screen->mlx, keyhandle, *game); - mlx_loop_hook((*game)->screen->mlx, game_loop, *game); - return (SUCCESS); -} - - int main(int argc, char **argv) { t_game *game; errno = 0; game = NULL; - init_game(&game, argc, argv); + if (argc != 2) + { + ft_putstr_fd("Usage: ./cub3d \n", 2); + return (EXIT_FAILURE); + } + if (!initialize_cub3d(&game, argv[1])) + { + perror("initialize_cub3d"); + game_free(game); + return (EXIT_FAILURE); + } perror("after init"); mlx_loop(game->screen->mlx); game_terminate(game); return (EXIT_SUCCESS); -} - - -// int main(int argc, char **argv) -// { -// t_map map; -// char *buffer; - -// if (argc != 2) -// { -// ft_putstr_fd("Usage: ./cub3d \n", 2); -// return (1); -// } -// buffer = read_map_file(argv[1]); -// if (!buffer) -// { -// perror("Error reading map file"); -// return (1); -// } -// if (parse_file(buffer, &map) == FAILURE) -// { -// ft_putstr_fd("Error parsing map file\n", 2); -// free(buffer); -// return (1); -// } -// print_map(&map); -// free(buffer); -// return (0); -// } \ No newline at end of file +} \ No newline at end of file diff --git a/src/map.c b/src/map.c index c3bca31..d038e6e 100644 --- a/src/map.c +++ b/src/map.c @@ -149,36 +149,11 @@ int enclosed_map(t_map *map) return SUCCESS; } -// int main(void) -// { -// t_map *map; - -// map = get_temp_map(); -// if (!map) -// { -// fprintf(stderr, "Failed to allocate memory for map\n"); -// return 1; -// } -// print_map(map); -// if(!enclosed_map(map)) -// fprintf(stderr, "NOT GOOD MAP FRIEND\n"); -// else -// fprintf(stderr, "YES, GOOD MAP FRIEND\n"); -// free_map(&map); -// return 0; -// } - - -static int parse_args(int argc, char **argv, t_map *map) +static int parse_args(const char *mapfile, t_map *map) { char *buffer; - if (argc != 2) - { - ft_putstr_fd("Usage: ./cub3d \n", 2); - return (FAILURE); - } - buffer = read_map_file(argv[1]); + buffer = read_map_file(mapfile); if (!buffer) { perror("Error reading map file"); @@ -195,7 +170,7 @@ static int parse_args(int argc, char **argv, t_map *map) return (SUCCESS); } -int map_create(t_game **game, int argc, char **argv) +int map_create(t_game **game, const char *mapfile) { t_map *map; @@ -208,7 +183,7 @@ int map_create(t_game **game, int argc, char **argv) perror("Error allocating memory for map"); return (FAILURE); } - parse_args(argc, argv, map); + parse_args(mapfile, map); print_map(map); if(!enclosed_map(map)) fprintf(stderr, "NOT GOOD MAP FRIEND\n"); diff --git a/src/screen.c b/src/screen.c index 9acd38c..d105f2f 100644 --- a/src/screen.c +++ b/src/screen.c @@ -6,15 +6,13 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */ -/* Updated: 2025/04/15 19:21:23 by qmennen ### ########.fr */ +/* Updated: 2025/04/22 17:25:13 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "screen.h" -#include "MLX42.h" -#include -t_screen *screen_create() +int screen_create(t_game **game) { t_screen *screen; mlx_image_t *img; @@ -22,29 +20,40 @@ t_screen *screen_create() screen = malloc(sizeof(t_screen)); if (!screen) - return (NULL); + return (FAILURE); screen->width = WIDTH; screen->height = HEIGHT; mlx = mlx_init(WIDTH, HEIGHT, TITLE, false); + if (!mlx) + return (FAILURE); //TODO: figure out why errno = 11 after this call screen->mlx = mlx; img = mlx_new_image(screen->mlx, WIDTH, HEIGHT); + if (!img) + return (FAILURE); screen->img = img; - return (screen); + (*game)->screen = screen; + return (SUCCESS); } -void screen_center(t_screen *screen) +int screen_display(t_screen *screen) { int m_width; int m_height; m_width = 0; m_height = 0; + if (mlx_image_to_window(screen->mlx, screen->img, 0, 0) < 0) + { + printf(RED"Failed to display buffer image\n"RESET); + return (FAILURE); + } mlx_get_monitor_size(0, &m_width, &m_height); if (m_width == 0 || m_height == 0) { printf(RED"Failed to retrieve monitor size to center window\n"RESET); - return ; + return (FAILURE); } mlx_set_window_pos(screen->mlx, (m_width - screen->width) / 2, (m_height - screen->height) / 2); + return (SUCCESS); } diff --git a/src/util/initialize.c b/src/util/initialize.c new file mode 100644 index 0000000..2314fb2 --- /dev/null +++ b/src/util/initialize.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* initialize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ +/* Updated: 2025/04/22 17:21:37 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d.h" + +int initialize_cub3d(t_game **game, const char *mapfile) +{ + if (!game_create(game)) + return (FAILURE); + if (!map_create(game, mapfile)) + return (FAILURE); + if (!screen_create(game)) + return (FAILURE); + if (!player_create(game)) + return (FAILURE); + if (!keyboard_create(game)) + return (FAILURE); + if (!screen_display((*game)->screen)) + return (FAILURE); + mlx_key_hook((*game)->screen->mlx, keyhandle, *game); + mlx_loop_hook((*game)->screen->mlx, game_loop, *game); + return (SUCCESS); +} \ No newline at end of file