/* ************************************************************************** */ /* */ /* :::::::: */ /* parse_map.c :+: :+: */ /* +:+ */ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ /* Updated: 2025/05/04 15:07:44 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include t_vec2 parse_dir(int x, int y) { t_vec2 dir; 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); player->pos.y = ((float)y + 0.5f); 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); player->camera = rot(player->dir, 0.5f * M_PI); 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); x = 0; while (x < map->width) { if (x >= ft_strlen(lines[y])) map->grid[y][x] = TILE_VOID; else 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); if (map->grid[y][x] == -2) return (FAILURE); x++; } return (SUCCESS); } int parse_map(char **lines, t_game *game) { int y; t_map *map; 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); y = 0; while (y < map->height) { if (!parse_map_line(lines, game, y)) return (map_free(map), FAILURE); y++; } map->grid[y] = NULL; return (SUCCESS); }