From 1b307d24e2a86995fc8a8080f51e13d1f2129a60 Mon Sep 17 00:00:00 2001 From: whaffman Date: Fri, 25 Apr 2025 15:24:02 +0200 Subject: [PATCH] refactoring player pos etc --- inc/cub3d.h | 15 +++---- inc/map.h | 8 ++-- inc/parser.h | 7 ++-- src/map/map_create.c | 32 +++++++-------- src/map/parse_args.c | 6 +-- src/parser/parse_file.c | 8 ++-- src/parser/parse_map.c | 87 ++++++++++++++++++++++++++++------------- src/player.c | 11 +++--- src/util/initialize.c | 18 ++++----- 9 files changed, 113 insertions(+), 79 deletions(-) diff --git a/inc/cub3d.h b/inc/cub3d.h index 5ec7ddb..a3f325a 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/22 17:15:32 by qmennen ### ########.fr */ +/* :::::::: */ +/* cub3d.h :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ +/* Updated: 2025/04/25 13:53:48 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -38,6 +38,7 @@ # include # include "types.h" # include "errors.h" +# include "vec_math.h" # include "map.h" # include "game.h" # include "screen.h" diff --git a/inc/map.h b/inc/map.h index 91fb664..d1c8e69 100644 --- a/inc/map.h +++ b/inc/map.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ -/* Updated: 2025/04/23 12:26:56 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:37:55 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -18,11 +18,11 @@ 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); +t_tile get_tile(t_map *map, int x, int y); int enclosed_map(t_map *map); -void grid_free(t_tile **grid, int height); +void grid_free(t_tile **grid, int height); t_tile **copy_map(t_tile **grid, int width, int height); -int parse_args(const char *mapfile, t_map *map); +int parse_args(const char *mapfile, t_game *game); t_tile **create_grid(int width, int height); int find_player_or_empty(t_map *map, int *x, int *y); diff --git a/inc/parser.h b/inc/parser.h index 7e31609..cd1db92 100644 --- a/inc/parser.h +++ b/inc/parser.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */ -/* Updated: 2025/04/24 11:38:31 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:43:55 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -23,9 +23,10 @@ unsigned int parse_color(const char *color_str); int parse_config_line(const char *line, t_map *map); int map_width(char **lines); int parse_tile(char c); -int parse_map(char **lines, t_map *map); -int parse_file(char *buffer, t_map *map); +int parse_map(char **lines, t_game *game); +int parse_file(char *buffer, t_game *game); void print_config(t_map *map); +int parse_map_line(char **lines, t_game *game, int i); t_tile **copy_map(t_tile **grid, int width, int height); char **pointer_lines(char *buffer, char c); int valid_arguments(int argc, char **argv); diff --git a/src/map/map_create.c b/src/map/map_create.c index 5ba2969..1c970c3 100644 --- a/src/map/map_create.c +++ b/src/map/map_create.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/23 12:21:13 by whaffman #+# #+# */ -/* Updated: 2025/04/24 11:45:24 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:36:18 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -16,36 +16,34 @@ int map_create(t_game **game, const char *mapfile) { - t_map *map; t_tile **grid; - if (!game || !*game) + if (!(*game)) return (FAILURE); - map = malloc(sizeof(t_map)); - if (!map) + (*game)->map = malloc(sizeof(t_map)); + if (!(*game)->map) { - perror("Error allocating memory for map"); + perror("Error allocating memory for (*game)->map"); return (FAILURE); } - parse_args(mapfile, map); - grid = copy_map(map->grid, map->width, map->height); + parse_args(mapfile, (*game)); + grid = copy_map((*game)->map->grid, (*game)->map->width, (*game)->map->height); if (!grid) { - perror("Error copying map"); - free(map); + perror("Error copying (*game)->map"); + free((*game)->map); return (FAILURE); } - if (!enclosed_map(map)) + if (!enclosed_map((*game)->map)) { ft_putendl_fd("Map is not enclosed", STDERR_FILENO); - grid_free(grid, map->height); - map_free(map); + grid_free(grid, (*game)->map->height); + map_free((*game)->map); return (FAILURE); } - grid_free(map->grid, map->height); - map->grid = grid; - print_config(map); + grid_free((*game)->map->grid, (*game)->map->height); + (*game)->map->grid = grid; + print_config((*game)->map); - (*game)->map = map; return (SUCCESS); } \ No newline at end of file diff --git a/src/map/parse_args.c b/src/map/parse_args.c index 89cb746..754841b 100644 --- a/src/map/parse_args.c +++ b/src/map/parse_args.c @@ -6,13 +6,13 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/23 12:17:49 by whaffman #+# #+# */ -/* Updated: 2025/04/23 12:26:24 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:36:47 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "cub3d.h" -int parse_args(const char *mapfile, t_map *map) +int parse_args(const char *mapfile, t_game *game) { char *buffer; @@ -22,7 +22,7 @@ int parse_args(const char *mapfile, t_map *map) perror("Error reading map file"); return (FAILURE); } - if (!parse_file(buffer, map)) + if (!parse_file(buffer, game)) { ft_putstr_fd("Error parsing map file\n", 2); free(buffer); diff --git a/src/parser/parse_file.c b/src/parser/parse_file.c index 81e9781..37d0946 100644 --- a/src/parser/parse_file.c +++ b/src/parser/parse_file.c @@ -6,13 +6,13 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/22 13:11:37 by whaffman #+# #+# */ -/* Updated: 2025/04/24 11:45:52 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:38:44 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "cub3d.h" -int parse_file(char *buffer, t_map *map) +int parse_file(char *buffer, t_game *game) { char **lines; int i; @@ -23,11 +23,11 @@ int parse_file(char *buffer, t_map *map) i = 0; while (lines[i] && !is_map_line(lines[i])) { - if (*lines[i] && !parse_config_line(lines[i], map)) + if (*lines[i] && !parse_config_line(lines[i], game->map)) return (free(lines), FAILURE); i++; } - if (!parse_map(&lines[i], map)) + if (!parse_map(&lines[i], game)) return (free(lines), FAILURE); free(lines); return (SUCCESS); diff --git a/src/parser/parse_map.c b/src/parser/parse_map.c index d316a4b..006e4f6 100644 --- a/src/parser/parse_map.c +++ b/src/parser/parse_map.c @@ -6,55 +6,88 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ -/* Updated: 2025/04/22 13:19:21 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 11:55:27 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "cub3d.h" -int parse_map_line(char **lines, t_map *map, int i) +t_vec2 parse_dir(int x, int y) { - int j; + t_vec2 dir; - map->grid[i] = malloc(sizeof(t_tile) * (map->width + 1)); - if (!map->grid[i]) + dir.x = (float)x; + dir.y = (float)y; + return (dir); +} + +int parse_player(t_game *game, int y, int x, char c) +{ + t_player *player; + + player = game->player; + player->pos.x = ((float)x + 0.5f) * TILE_SIZE; + player->pos.y = ((float)y + 0.5f) * TILE_SIZE; + + if (c == 'N') + player->dir = parse_dir(0, 1); + else if (c == 'E') + player->dir = parse_dir(1, 0); + else if (c == 'S') + player->dir = parse_dir(0, -1); + else if (c == 'W') + player->dir = parse_dir(-1, 0); + return (SUCCESS); +} + +int parse_map_line(char **lines, t_game *game, int y) +{ + int x; + t_map *map; + + map = game->map; + map->grid[y] = malloc(sizeof(t_tile) * (map->width + 1)); + if (!map->grid[y]) return (FAILURE); - j = 0; - while (j < map->width) + x = 0; + while (x < map->width) { - if (j >= ft_strlen(lines[i])) - map->grid[i][j] = TILE_VOID; + if (x >= ft_strlen(lines[y])) + map->grid[y][x] = TILE_VOID; else - map->grid[i][j] = parse_tile(lines[i][j]); - if (map->grid[i][j] == -2) + map->grid[y][x] = parse_tile(lines[y][x]); + if (map->grid[y][x] == TILE_PLAYER) + parse_player(game, y, x, lines[y][x]); + else if (map->grid[y][x] == -2) return (FAILURE); - j++; + if (map->grid[y][x] == -2) + return (FAILURE); + x++; } return (SUCCESS); } -int parse_map(char **lines, t_map *map) +int parse_map(char **lines, t_game *game) { - int i; + int y; + t_map *map; - i = 0; - while (lines[i]) - i++; - map->height = i; + y = 0; + while (lines[y]) + y++; + map = game->map; + map->height = y; map->width = map_width(lines); map->grid = malloc(sizeof(t_tile *) * (map->height + 1)); if (!map->grid) return (FAILURE); - i = 0; - while (i < map->height) + y = 0; + while (y < map->height) { - if (parse_map_line(lines, map, i) == FAILURE) - { - map_free(map); - return (FAILURE); - } - i++; + if (!parse_map_line(lines, game, y)) + return (map_free(map), FAILURE); + y++; } - map->grid[i] = NULL; + map->grid[y] = NULL; return (SUCCESS); } diff --git a/src/player.c b/src/player.c index 2649f91..74dac8b 100644 --- a/src/player.c +++ b/src/player.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ */ /* +#+ */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ -/* Updated: 2025/04/18 12:15:31 by whaffman ######## odam.nl */ +/* Updated: 2025/04/25 13:54:11 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -47,11 +47,12 @@ static void move(t_map *map, t_player *player, int dir, float delta) static void rotate(t_player *player, float rot_speed) { - double old_x; + // double old_x; - old_x = player->dir.x; - player->dir.x = player->dir.x * cos(rot_speed) - player->dir.y * sin(rot_speed); - player->dir.y = old_x * sin(rot_speed) + player->dir.y * cos(rot_speed); + // // old_x = player->dir.x; + // // player->dir.x = player->dir.x * cos(rot_speed) - player->dir.y * sin(rot_speed); + // // player->dir.y = old_x * sin(rot_speed) + player->dir.y * cos(rot_speed); + player->dir = rot(player->dir, rot_speed); } void player_update(t_game *game, float delta_time) diff --git a/src/util/initialize.c b/src/util/initialize.c index 2314fb2..0793566 100644 --- a/src/util/initialize.c +++ b/src/util/initialize.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* initialize.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ -/* Updated: 2025/04/22 17:21:37 by qmennen ### ########.fr */ +/* :::::::: */ +/* initialize.c :+: :+: */ +/* +:+ */ +/* By: qmennen +#+ */ +/* +#+ */ +/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ +/* Updated: 2025/04/25 11:20:49 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -16,12 +16,12 @@ int initialize_cub3d(t_game **game, const char *mapfile) { if (!game_create(game)) return (FAILURE); + if (!player_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))