123 lines
2.1 KiB
C
123 lines
2.1 KiB
C
#include "fdf.h"
|
|
|
|
int wrong_symbols(char **line)
|
|
{
|
|
char *tmp;
|
|
|
|
tmp = *line;
|
|
while (*tmp)
|
|
{
|
|
while ((*tmp == '-' || (*tmp >= '0' && *tmp <= '9') || *tmp == ',' || *tmp == 'x') && *tmp)
|
|
tmp++;
|
|
if (!tmp)
|
|
return (1);
|
|
}
|
|
return (0);
|
|
}
|
|
|
|
void wrong_map(void)
|
|
{
|
|
ft_putstr("Wrong map!\n");
|
|
quit(0);
|
|
}
|
|
|
|
char *to_str_map(char *path)
|
|
{
|
|
int fd;
|
|
|
|
fd = open(path, O_RDONLY);
|
|
if (fd != -1)
|
|
return (ft_read_file(fd));
|
|
return (0);
|
|
}
|
|
|
|
int map_width(char **tab)
|
|
{
|
|
int width;
|
|
int width_tmp;
|
|
char **line_tab;
|
|
|
|
line_tab = ft_strsplit(*tab, ' ');
|
|
width = tab_length(line_tab);
|
|
width_tmp = width;
|
|
tab++;
|
|
while (*tab)
|
|
{
|
|
if ((line_tab = ft_strsplit(*tab, ' ')))
|
|
{
|
|
if (wrong_symbols(line_tab))
|
|
wrong_map();
|
|
if ((width = tab_length(line_tab)) != width_tmp)
|
|
wrong_map();
|
|
}
|
|
free_tab(line_tab);
|
|
tab++;
|
|
}
|
|
return (width);
|
|
}
|
|
|
|
|
|
void min_max_z(t_map *map, int i, int j)
|
|
{
|
|
if (map->arr_vec[i][j].z > map->z_max)
|
|
map->z_max = (int)map->arr_vec[i][j].z;
|
|
if (map->arr_vec[i][j].z < map->z_min)
|
|
map->z_min = (int)map->arr_vec[i][j].z;
|
|
}
|
|
|
|
void to_vec_arr(char **tab, t_map *map)
|
|
{
|
|
char **line;
|
|
int i;
|
|
int j;
|
|
|
|
map->y_max = tab_length(tab);
|
|
map->x_max = map_width(tab);
|
|
map->arr_vec = malloc(sizeof(t_vec *) * (map->y_max));
|
|
i = 0;
|
|
while (i < map->y_max)
|
|
{
|
|
j = 0;
|
|
line = ft_strsplit(tab[i], ' ');
|
|
map->arr_vec[i] = malloc(sizeof(t_vec) * (map->x_max));
|
|
while (j < map->x_max)
|
|
{
|
|
map->arr_vec[i][j].z = ft_atoi(line[j]);
|
|
map->arr_vec[i][j].x = j;
|
|
map->arr_vec[i][j].y = i;
|
|
min_max_z(map, i, j);
|
|
j++;
|
|
}
|
|
free_tab(line);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
t_map *map_init(char *path)
|
|
{
|
|
char *str_map;
|
|
char **tab_map;
|
|
t_map *map;
|
|
|
|
map = malloc(sizeof(t_map));
|
|
map->z_min = 0;
|
|
map->x_max = 0;
|
|
map->x_rot = 0;
|
|
map->y_rot = 0;
|
|
map->z_rot = 0;
|
|
map->scale[0] = 1;
|
|
map->scale[1] = 1;
|
|
map->scale[2] = 1;
|
|
map->low = NULL;
|
|
map->high = NULL;
|
|
if (!(str_map = to_str_map(path)))
|
|
{
|
|
ft_putstr("Wrong path to a map! For help help put \"fdf --help\"\n");
|
|
quit(0);
|
|
}
|
|
tab_map = ft_strsplit(str_map, '\n');
|
|
to_vec_arr(tab_map, map);
|
|
free(str_map);
|
|
free_tab(tab_map);
|
|
return (map);
|
|
}
|