Files
cub3d/src/parsing/parsing.c
2025-11-28 19:59:01 +01:00

85 lines
2.6 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* parsing.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/25 19:47:38 by aortigos #+# #+# */
/* Updated: 2025/11/28 19:58:50 by aortigos ### ########.fr */
/* */
/* ************************************************************************** */
#include "../../includes/cub3d.h"
int read_map(char *av, t_data *map, int *count)
{
map->fd = open(av, O_RDONLY);
if (map->fd == -1)
return (ft_putstr_fd(ERR_INV_FILE, 2), 0);
map->line = get_next_line(map->fd);
if (map->line == NULL)
return (ft_putstr_fd(ERR_EMPTY_FILE, 2), 0);
map->ture = ft_strdup("");
process_map(map, count);
if (!check_count_textures(map, *count))
return (freetl(map->ture, map->line, map->fd), 0);
map->ture2d = ft_split(map->ture, '\n');
if (!map->ture2d)
return (freetl(map->ture, map->line, map->fd), 0);
if (!read_map_(map, *count))
return (freetl(map->ture, map->line, map->fd), free2d(map->ture2d), 0);
return (freetl(map->ture, map->line, map->fd), 1);
}
void get_x_y_player(t_data *data)
{
int i;
int j;
i = 0;
while (data->sq_map[i])
{
j = 0;
while (data->sq_map[i][j])
{
if (data->sq_map[i][j] == 'N' || data->sq_map[i][j] == 'S'
|| data->sq_map[i][j] == 'W' || data->sq_map[i][j] == 'E')
{
data->p_x = j;
data->p_y = i;
return ;
}
j++;
}
i++;
}
}
int check_extension_map(char *file)
{
char *str;
str = ft_strrchr(file, '.');
return (str && !ft_strcmp(str, ".cub"));
}
int parsing(int ac, char **av, t_data *data)
{
int count;
if (ac != 2 || !check_extension_map(av[1]))
return (ft_putstr_fd(ERR_INV_COP, 2), 0);
count = 0;
if (!read_map(av[1], data, &count))
return (0);
if (!valid_map(data))
return (0);
data->t_list = NULL;
if (!lst_ture(data, &data->t_list))
return (free_map(data), freelist(&data->t_list), 0);
if (!color_ture(data, data->t_list))
return (free_map(data), freelist(&data->t_list), 0);
get_x_y_player(data);
return (1);
}