From 3c4b3803c98cb3f513bae972dfd6ca2b66b3fc9f Mon Sep 17 00:00:00 2001 From: Quinten Date: Tue, 10 Jun 2025 15:48:59 +0200 Subject: [PATCH] Norm work: Refactor code for improved readability and maintainability, including function signature updates, new utility functions for score handling, and removal of unused error handling code. --- inc/cub3d.h | 4 +- inc/game_menu.h | 8 +++- inc/parser.h | 3 +- inc/types.h | 8 +--- src/game/game.c | 28 ++++++----- src/manager/game_manager.c | 2 +- src/menu/end_screen.c | 86 +++++++++++++--------------------- src/menu/end_screen_utils.c | 79 +++++++++++++++++++++++++++++++ src/parser/floodfill.c | 5 +- src/parser/parse_config_line.c | 4 +- src/parser/parse_map.c | 63 ++----------------------- src/parser/parse_map_sprites.c | 57 ++++++++++++++++++++++ src/parser/print_map.c | 4 +- src/render/dda.c | 17 ++++--- src/render/render.c | 57 ++++++++++++---------- src/render/render_floor.c | 11 +++-- src/shader/shaders.c | 4 +- src/util/errors.c | 35 -------------- src/util/hooks.c | 18 +++---- src/util/score.c | 7 +-- 20 files changed, 274 insertions(+), 226 deletions(-) create mode 100644 src/menu/end_screen_utils.c create mode 100644 src/parser/parse_map_sprites.c delete mode 100644 src/util/errors.c diff --git a/inc/cub3d.h b/inc/cub3d.h index c4111e9..9dfb676 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/06/10 14:42:13 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:48:20 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -71,7 +71,7 @@ # include "monster.h" int initialize_cub3d(t_game **game, const char *mapfile); -int shader_init(); +int shader_init(void); void set_uniforms(t_game *game); int load_uniforms(t_game **game); void count_scores(t_game *game); diff --git a/inc/game_menu.h b/inc/game_menu.h index 6a75d02..a7229c8 100644 --- a/inc/game_menu.h +++ b/inc/game_menu.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/27 15:07:48 by qmennen #+# #+# */ -/* Updated: 2025/06/10 14:28:20 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:20:30 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,5 +27,11 @@ t_menu_item *menu_item_create(t_screen *screen, const char *text, void (*act)(struct s_menu_item *item, t_game_manager *manager)); void menu_free(t_menu *menu, t_screen *screen); void menu_toggle(t_menu *menu); +char *get_score_prefix(int index); +char *get_score_suffix(int index); +void draw_score_line( + mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos +); +char *get_score_text(char *prefix, char *suffix, int score); #endif \ No newline at end of file diff --git a/inc/parser.h b/inc/parser.h index fb03149..b453880 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */ -/* Updated: 2025/06/03 15:49:59 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:46:42 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -48,5 +48,6 @@ t_tile **create_grid(int width, int height); int find_player_or_empty(t_map *map, int *x, int *y); int floodfill(t_map *map, int x, int y); t_sprite make_sprite(t_sprite_lib *def, double x, double y); +int parse_map_line_sprites(char *line, t_game *game, int y); #endif \ No newline at end of file diff --git a/inc/types.h b/inc/types.h index c752d4d..9690a7f 100644 --- a/inc/types.h +++ b/inc/types.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */ -/* Updated: 2025/06/05 17:08:34 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:06:16 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -170,11 +170,7 @@ typedef struct s_scoreboard int enemies; int start_time; int end_time; - mlx_image_t *tiles_text; - mlx_image_t *collectibles_text; - mlx_image_t *battery_text; - mlx_image_t *enemies_text; - mlx_image_t *time_text; + mlx_image_t *texts[5]; } t_scoreboard; typedef struct s_game diff --git a/src/game/game.c b/src/game/game.c index dade107..d29e458 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/06/05 18:43:54 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:25:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -64,16 +64,22 @@ void game_run(t_game *game) game_over(game->manager); } -static void scoreboard_free(mlx_t *mlx, t_scoreboard *scoreboard) +static void free_scoreboard(mlx_t *mlx, t_scoreboard *scoreboard) { - if (scoreboard->tiles_text) - mlx_delete_image(mlx, scoreboard->tiles_text); - if (scoreboard->collectibles_text) - mlx_delete_image(mlx, scoreboard->collectibles_text); - if (scoreboard->battery_text) - mlx_delete_image(mlx, scoreboard->battery_text); - if (scoreboard->enemies_text) - mlx_delete_image(mlx, scoreboard->enemies_text); + int i; + + if (!scoreboard) + return ; + i = 0; + while (i < 5) + { + if (scoreboard->texts[i]) + { + mlx_delete_image(mlx, scoreboard->texts[i]); + scoreboard->texts[i] = NULL; + } + i++; + } free(scoreboard); } @@ -95,6 +101,6 @@ void game_free(t_game *game) if (game->keyboard) free(game->keyboard); if (game->scoreboard) - scoreboard_free(game->screen->mlx, game->scoreboard); + free_scoreboard(game->screen->mlx, game->scoreboard); game->scoreboard = NULL; } diff --git a/src/manager/game_manager.c b/src/manager/game_manager.c index f8a946c..f6e9557 100644 --- a/src/manager/game_manager.c +++ b/src/manager/game_manager.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */ -/* Updated: 2025/06/04 18:52:53 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:19:59 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/menu/end_screen.c b/src/menu/end_screen.c index 63f0a42..67ce283 100644 --- a/src/menu/end_screen.c +++ b/src/menu/end_screen.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/06/03 16:20:35 by qmennen #+# #+# */ -/* Updated: 2025/06/10 14:29:07 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:30:05 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,49 +21,47 @@ static void slideshow(t_game *game) game->screenshots[frame_idx]->instances[0].enabled = true; if (last_frame_time == 0) last_frame_time = mlx_get_time(); - if (mlx_get_time() - last_frame_time > 5 && frame_idx < game->screenshot_idx && frame_idx < MAX_SCREENSHOTS) { + if (mlx_get_time() - last_frame_time > 5 && frame_idx < game->screenshot_idx + && frame_idx < MAX_SCREENSHOTS) + { game->screenshots[frame_idx++]->instances[0].enabled = true; game->screenshots[frame_idx - 1]->instances[0].enabled = false; last_frame_time = mlx_get_time(); - frame_idx %= (MAX_SCREENSHOTS < game->screenshot_idx) * MAX_SCREENSHOTS + (MAX_SCREENSHOTS >= game->screenshot_idx) * game->screenshot_idx; + frame_idx %= (MAX_SCREENSHOTS < game->screenshot_idx) * MAX_SCREENSHOTS + + (MAX_SCREENSHOTS >= game->screenshot_idx) * game->screenshot_idx; } } -char *get_score_text(char *prefix, char *suffix, int score) +static void draw_scoreboard(t_game_manager *manager) { - char *score_text; - char *score_complete; - char *score_value; + const int s_val[] = { + (int)(manager->game->scoreboard->tiles_visited + / (double)manager->game->scoreboard->total_tiles * 100), + (int)(manager->game->player->battery * 100), + manager->game->scoreboard->collectibles, + manager->game->scoreboard->enemies, + manager->game->scoreboard->end_time + - manager->game->scoreboard->start_time + }; + t_game *game; + int i; + char *s_text; - score_text = ft_itoa(score); - if (!score_text) - return (NULL); - score_value = ft_strjoin(prefix, score_text); - free(score_text); - if (!score_value) - return (NULL); - if (!suffix) - return (score_value); - score_complete = ft_strjoin(score_value, suffix); - free(score_value); - return (score_complete); -} - -static void draw_score_line(mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos) -{ - if (!text || *img != NULL) - return ; - *img = mlx_put_string(mlx, text, pos.x, pos.y); - free(text); + i = -1; + game = manager->game; + while (++i < 5) + { + s_text = get_score_text(get_score_prefix(i), get_score_suffix(i), + s_val[i]); + if (s_text) + draw_score_line(game->screen->mlx, &game->scoreboard->texts[i], + s_text, (t_vec2_int){350, + game->screen->height / 2 - 150 + i * 50}); + } } void draw_end_screen(t_game_manager *manager, t_menu *menu) { - char *tiles_score; - char *battery_percentage; - char *collectibles_score; - char *enemies_score; - char *time_text; t_game *game; if (!manager || !manager->game) @@ -75,28 +73,8 @@ void draw_end_screen(t_game_manager *manager, t_menu *menu) menu_toggle(menu); count_scores(game); } - menu->selector->instances[0].y = manager->game->screen->height / 2 - + menu->selected_option * 50; - tiles_score = get_score_text("Discovered area: ", "%", - (double) game->scoreboard->tiles_visited / game->scoreboard->total_tiles * 100); - draw_score_line(game->screen->mlx, &game->scoreboard->tiles_text, - tiles_score, (t_vec2_int){350, game->screen->height / 2 - 150}); - battery_percentage = get_score_text("Battery percentage: ", - "%", (double) game->player->battery * 100); - draw_score_line(game->screen->mlx, &game->scoreboard->battery_text, - battery_percentage, (t_vec2_int){350, game->screen->height / 2 - 100}); - collectibles_score = get_score_text("Batteries found: ", NULL, - game->scoreboard->collectibles); - draw_score_line(game->screen->mlx, &game->scoreboard->collectibles_text, - collectibles_score, (t_vec2_int){350, game->screen->height / 2 - 50}); - enemies_score = get_score_text("Enemies defeated: ", NULL, - game->scoreboard->enemies); - draw_score_line(game->screen->mlx, &game->scoreboard->enemies_text, - enemies_score, (t_vec2_int){350, game->screen->height / 2}); - time_text = get_score_text("Play time: ", " seconds", - game->scoreboard->end_time - game->scoreboard->start_time); - draw_score_line(game->screen->mlx, &game->scoreboard->time_text, - time_text, (t_vec2_int){350, game->screen->height / 2 + 50}); + menu->selector->instances[0].enabled = false; + draw_scoreboard(manager); } static void game_exit(struct s_menu_item *item, t_game_manager *manager) diff --git a/src/menu/end_screen_utils.c b/src/menu/end_screen_utils.c new file mode 100644 index 0000000..d133448 --- /dev/null +++ b/src/menu/end_screen_utils.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* end_screen_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/06/10 14:54:49 by qmennen #+# #+# */ +/* Updated: 2025/06/10 15:30:18 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "game_menu.h" + +char *get_score_prefix(int index) +{ + const char *score_prefix[] = { + "Discovered area: ", + "Battery percentage: ", + "Batteries found: ", + "Enemies defeated: ", + "Play time: " + }; + + if (index < 0 || index >= 5) + return (NULL); + return ((char *)score_prefix[index]); +} + +char *get_score_suffix(int index) +{ + const char *score_suffix[] = { + "%", + "%", + NULL, + NULL, + " seconds" + }; + + if (index < 0 || index >= 5) + return (NULL); + return ((char *)score_suffix[index]); +} + +void draw_score_line( + mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos +) +{ + if (!text) + return ; + if (*img != NULL) + { + free(text); + return ; + } + printf("Drawing score line: %s at (%d, %d)\n", text, pos.x, pos.y); + *img = mlx_put_string(mlx, text, pos.x, pos.y); + free(text); +} + +char *get_score_text(char *prefix, char *suffix, int score) +{ + char *score_text; + char *score_complete; + char *score_value; + + score_text = ft_itoa(score); + if (!score_text) + return (NULL); + score_value = ft_strjoin(prefix, score_text); + free(score_text); + if (!score_value) + return (NULL); + if (!suffix) + return (score_value); + score_complete = ft_strjoin(score_value, suffix); + free(score_value); + return (score_complete); +} diff --git a/src/parser/floodfill.c b/src/parser/floodfill.c index 122d22c..f4b9c7f 100644 --- a/src/parser/floodfill.c +++ b/src/parser/floodfill.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/23 12:14:58 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:38:14 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:42:03 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,8 @@ int floodfill(t_map *map, int x, int y) { - if (!map || x < 0 || y < 0 || x >= (int) map->width || y >= (int) map->height) + if (!map || x < 0 || y < 0 + || x >= (int) map->width || y >= (int) map->height) return (FAILURE); if (map->grid[y][x] == TILE_VOID) return (FAILURE); diff --git a/src/parser/parse_config_line.c b/src/parser/parse_config_line.c index 16bd5df..4794e6c 100644 --- a/src/parser/parse_config_line.c +++ b/src/parser/parse_config_line.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 13:10:06 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:39:39 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:47:23 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,7 +27,6 @@ mlx_texture_t *load_texture(const char *path) t_token_handler handle_config_token(const char *token, t_map *map) { - (void)map; const char *config_tokens[] = { "NO", "SO", "WE", "EA", "D", "F", "C", "FT", "CT", "-c", "-s", "-e", NULL @@ -39,6 +38,7 @@ t_token_handler handle_config_token(const char *token, t_map *map) }; int i; + (void)map; i = 0; while (config_tokens[i] != NULL) { diff --git a/src/parser/parse_map.c b/src/parser/parse_map.c index eb7672c..e921413 100644 --- a/src/parser/parse_map.c +++ b/src/parser/parse_map.c @@ -6,22 +6,13 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:39:03 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:45:35 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include -t_vec2 parse_dir(int x, int y) -{ - t_vec2 dir; - - dir.x = (double)x; - dir.y = (double)y; - return (dir); -} - int parse_player(t_game *game, int y, int x, char c) { t_player *player; @@ -35,13 +26,13 @@ int parse_player(t_game *game, int y, int x, char c) player->pos.x = ((double)x + 0.5f); player->pos.y = ((double)y + 0.5f); if (c == 'N') - player->dir = parse_dir(0, -1); + player->dir = (t_vec2){0.0, -1.0}; else if (c == 'E') - player->dir = parse_dir(1, 0); + player->dir = (t_vec2){1.0, 0.0}; else if (c == 'S') - player->dir = parse_dir(0, 1); + player->dir = (t_vec2){0.0, 1.0}; else if (c == 'W') - player->dir = parse_dir(-1, 0); + player->dir = (t_vec2){-1.0, 0.0}; player->camera = rot(player->dir, 0.5f * M_PI); return (SUCCESS); } @@ -74,22 +65,6 @@ int parse_map_line(char **lines, t_game *game, int y) return (SUCCESS); } -int count_sprites(char *line) -{ - int count; - int i; - - count = 0; - i = 0; - while (line[i]) - { - if (line[i] >= 'a' && line[i] <= 'z') - count++; - i++; - } - return (count); -} - int prepare_map(char **lines, t_game *game) { int y; @@ -118,34 +93,6 @@ int prepare_map(char **lines, t_game *game) return (SUCCESS); } -int parse_map_line_sprites(char *line, t_game *game, int y) -{ - int x; - t_map *map; - t_sprite_lib *sprite_lib; - - map = game->map; - sprite_lib = map->sprite_lib; - x = 0; - while (line[x]) - { - if (line[x] >= 'a' && line[x] <= 'z') - { - if (sprite_lib[line[x] - 'a'].texture == NULL) - { - ft_putstr_fd("Error: Undefined sprite symbol\n", 2); - return (FAILURE); - } - map->sprites[map->n_sprites] = make_sprite( - &sprite_lib[line[x] - 'a'], - (double)x + 0.5f, (double)y + 0.5f); - map->n_sprites++; - } - x++; - } - return (SUCCESS); -} - int parse_map(char **lines, t_game *game) { unsigned int y; diff --git a/src/parser/parse_map_sprites.c b/src/parser/parse_map_sprites.c new file mode 100644 index 0000000..239ebf6 --- /dev/null +++ b/src/parser/parse_map_sprites.c @@ -0,0 +1,57 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* parse_map_sprites.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/06/10 15:45:12 by qmennen #+# #+# */ +/* Updated: 2025/06/10 15:47:07 by qmennen ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d.h" + +int count_sprites(char *line) +{ + int count; + int i; + + count = 0; + i = 0; + while (line[i]) + { + if (line[i] >= 'a' && line[i] <= 'z') + count++; + i++; + } + return (count); +} + +int parse_map_line_sprites(char *line, t_game *game, int y) +{ + int x; + t_map *map; + t_sprite_lib *sprite_lib; + + map = game->map; + sprite_lib = map->sprite_lib; + x = 0; + while (line[x]) + { + if (line[x] >= 'a' && line[x] <= 'z') + { + if (sprite_lib[line[x] - 'a'].texture == NULL) + { + ft_putstr_fd("Error: Undefined sprite symbol\n", 2); + return (FAILURE); + } + map->sprites[map->n_sprites] = make_sprite( + &sprite_lib[line[x] - 'a'], + (double)x + 0.5f, (double)y + 0.5f); + map->n_sprites++; + } + x++; + } + return (SUCCESS); +} diff --git a/src/parser/print_map.c b/src/parser/print_map.c index a07454c..f8d6435 100644 --- a/src/parser/print_map.c +++ b/src/parser/print_map.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/23 12:11:12 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:40:11 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:47:33 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ void print_map(t_map *map) { - const int chars[] = {'X', ' ', '.', '#', 'P'}; + const int chars[] = {'X', ' ', '.', '#', 'P'}; unsigned int i; unsigned int j; diff --git a/src/render/dda.c b/src/render/dda.c index 2d306b8..80a612e 100644 --- a/src/render/dda.c +++ b/src/render/dda.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:35:17 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:40:24 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -67,14 +67,13 @@ int dda_main(t_vec2 ray_dir, t_vec2_int map_pos, t_vec2 *side_dist, t_map *map) side_dist->y += delta_dist.y * side; map_pos.x += step.x * (1 - side); map_pos.y += step.y * side; - if (map_pos.x < 0 - || map_pos.x >= (int) map->width - || map_pos.y < 0 - || map_pos.y >= (int) map->height) - printf("Out of bounds: %d %d\n", map_pos.x, map_pos.y); + if (map_pos.x < 0 || map_pos.x >= (int) map->width + || map_pos.y < 0 || map_pos.y >= (int) map->height) + break ; if (map->grid[map_pos.y][map_pos.x] == TILE_EMPTY) map->grid[map_pos.y][map_pos.x] = TILE_VISITED; - hit = (map->grid[map_pos.y][map_pos.x] == TILE_WALL) - (map->grid[map_pos.y][map_pos.x] == TILE_DOOR); + hit = (map->grid[map_pos.y][map_pos.x] == TILE_WALL) + - (map->grid[map_pos.y][map_pos.x] == TILE_DOOR); } side = -1 * (1 - side) + side; if (hit == -1) @@ -99,9 +98,9 @@ double dda(t_render *render, t_vec2 ray_dir, t_vec2 pos, t_map *map) if (abs(side) == 2) { render->door = 1; - side /= 2; + side /= 2; } - side = (side + 1)/2; + side = (side + 1) / 2; return ((1 - side) * (side_dist.x - delta_dist.x) - side * (side_dist.y - delta_dist.y)); } diff --git a/src/render/render.c b/src/render/render.c index f4c3f51..85bf978 100644 --- a/src/render/render.c +++ b/src/render/render.c @@ -6,50 +6,59 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */ -/* Updated: 2025/06/10 14:34:55 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:36:55 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" -void create_screenshot(t_game *game) +static void cut_image(t_screen *screen, mlx_image_t **canvas) { unsigned int i; unsigned int j; - int idx1; - int idx2; - mlx_image_t *screenshot; - - if (!game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]) - { - game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS] = mlx_new_image(game->screen->mlx, game->screen->width / 3, game->screen->height / 3); - mlx_image_to_window(game->screen->mlx, game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS], 1000, 250); - game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]->instances[0].enabled = false; - } - screenshot = game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]; - if (!screenshot) - return ; + unsigned int idx1; + unsigned int idx2; + i = 0; - while (i < game->screen->height / 3) + while (i < screen->height / 3) { j = 0; - while (j < game->screen->width / 3) + while (j < screen->width / 3) { - idx1 = (i * game->screen->width / 3 + j) * 4; - idx2 = (i * game->screen->img->width + j) * 12; - screenshot->pixels[idx1] = game->screen->img->pixels[idx2]; - screenshot->pixels[idx1 + 1] = game->screen->img->pixels[idx2 + 1]; - screenshot->pixels[idx1 + 2] = game->screen->img->pixels[idx2 + 2]; - screenshot->pixels[idx1 + 3] = game->screen->img->pixels[idx2 + 3]; + idx1 = (i * screen->width / 3 + j) * 4; + idx2 = (i * screen->img->width + j) * 12; + (*canvas)->pixels[idx1] = screen->img->pixels[idx2]; + (*canvas)->pixels[idx1 + 1] = screen->img->pixels[idx2 + 1]; + (*canvas)->pixels[idx1 + 2] = screen->img->pixels[idx2 + 2]; + (*canvas)->pixels[idx1 + 3] = screen->img->pixels[idx2 + 3]; j++; } i++; } - printf("Screenshot %d taken\n", game->screenshot_idx); +} +void create_screenshot(t_game *game) +{ + mlx_image_t *screenshot; + + if (!game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]) + { + game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS] + = mlx_new_image(game->screen->mlx, game->screen->width / 3, + game->screen->height / 3); + mlx_image_to_window(game->screen->mlx, game->screenshots[ + game->screenshot_idx % MAX_SCREENSHOTS], 1000, 250); + game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS] + ->instances[0].enabled = false; + } + screenshot = game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]; + if (!screenshot) + return ; + cut_image(game->screen, &screenshot); game->screenshot_idx++; return ; } + void flash(t_game *game) { mlx_image_t *img; diff --git a/src/render/render_floor.c b/src/render/render_floor.c index 9d6a248..c9b3fec 100644 --- a/src/render/render_floor.c +++ b/src/render/render_floor.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/14 13:06:39 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:45:54 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:41:41 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,21 +26,24 @@ static t_vec2 calc_floor_step(t_game *game, static void draw_floor_ceiling_pixel(t_game *game, t_vec2_int coord, double row_dist, t_vec2 floor_pos) { - const t_vec2_int tex = vec2_to_int(mul(get_fraction(floor_pos), game->map->texture_floor->width)); + const t_vec2_int tex = vec2_to_int( + mul(get_fraction(floor_pos), game->map->texture_floor->width)); int color; if (game->map->texture_floor == NULL) color = game->map->floor_color << 8 | (int)(1.0 / row_dist * 255); else color = get_texture_color(game->map->texture_floor, - (t_render){.perp_dist = row_dist, .sign = 0, .door = 0, .side = SIDE_DOOR, .wall_x = 0}, tex); + (t_render){.perp_dist = row_dist, .sign = 0, .door = 0, + .side = SIDE_DOOR, .wall_x = 0}, tex); mlx_put_pixel(game->screen->img, coord.x, coord.y, color); if (game->map->texture_ceiling == NULL) color = game->map->ceiling_color << 8 | (int)(1.0 / row_dist * 255); else color = get_texture_color(game->map->texture_ceiling, - (t_render){.perp_dist = row_dist, .sign = 0, .door = 0, .side = SIDE_DOOR, .wall_x = 0}, tex); + (t_render){.perp_dist = row_dist, .sign = 0, .door = 0, + .side = SIDE_DOOR, .wall_x = 0}, tex); mlx_put_pixel(game->screen->img, coord.x, game->screen->height - coord.y - 1, color); } diff --git a/src/shader/shaders.c b/src/shader/shaders.c index 99e2fb1..974293f 100644 --- a/src/shader/shaders.c +++ b/src/shader/shaders.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/08 18:27:59 by qmennen #+# #+# */ -/* Updated: 2025/06/10 14:42:39 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:48:16 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -105,7 +105,7 @@ static const char *read_fragment_shader(void) return (close(fd), shader); } -int shader_init() +int shader_init(void) { vert_shader = read_vertex_shader(); if (!vert_shader) diff --git a/src/util/errors.c b/src/util/errors.c deleted file mode 100644 index f83e76e..0000000 --- a/src/util/errors.c +++ /dev/null @@ -1,35 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* :::::::: */ -/* errors.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/15 15:40:14 by qmennen #+# #+# */ -/* Updated: 2025/05/07 11:34:57 by whaffman ######## odam.nl */ -/* */ -/* ************************************************************************** */ - -#include "MLX42.h" -#include "cub3d.h" - -const char *last_error(void) -{ - if (mlx_errno > 0) - return (mlx_strerror(mlx_errno)); - else if (errno > 0) - return (strerror(errno)); - else - return (NULL); -} - -void game_error(t_game *game, const char *msg) -{ - const char *last_err = last_error(); - - if (msg == NULL && last_err) - printf(RED"%s\n"RESET, last_err); - else - printf(RED"%s\n"RESET, msg); - game_terminate(game); -} diff --git a/src/util/hooks.c b/src/util/hooks.c index 97f9c9d..5eb7fa8 100644 --- a/src/util/hooks.c +++ b/src/util/hooks.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* hooks.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/15 17:51:26 by qmennen #+# #+# */ -/* Updated: 2025/06/04 16:48:57 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* hooks.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/15 17:51:26 by qmennen #+# #+# */ +/* Updated: 2025/06/10 15:48:10 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ void keyhandle(mlx_key_data_t keydata, void *param) game_manager_destroy(manager); } -void handle_mouse(t_game *game) +void handle_mouse(t_game *game) { t_vec2_int mouse_pos; mlx_t *mlx; @@ -31,4 +31,4 @@ void handle_mouse(t_game *game) mlx_get_mouse_pos(mlx, &mouse_pos.x, &mouse_pos.y); rotate(game->player, 0.1 * (mouse_pos.x - mlx->width / 2), mlx->delta_time); mlx_set_mouse_pos(mlx, mlx->width / 2, mlx->height / 2); -} \ No newline at end of file +} diff --git a/src/util/score.c b/src/util/score.c index 69d59b9..a920ccc 100644 --- a/src/util/score.c +++ b/src/util/score.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/25 20:54:23 by whaffman #+# #+# */ -/* Updated: 2025/06/10 14:40:40 by qmennen ### ########.fr */ +/* Updated: 2025/06/10 15:47:55 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -67,9 +67,10 @@ void print_scores(t_game *game) void count_scores(t_game *game) { t_scoreboard *scoreboard; - + scoreboard = game->scoreboard; scoreboard->tiles_visited = count_tiles(game->map, TILE_VISITED); - scoreboard->total_tiles = count_tiles(game->map, TILE_EMPTY) + scoreboard->tiles_visited; + scoreboard->total_tiles = count_tiles(game->map, TILE_EMPTY) + + scoreboard->tiles_visited; scoreboard->collectibles = count_collected(game); }