fdf/src/map_init.c
2017-03-16 00:48:56 +02:00

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);
}