int analyse_cone(t_cone **cone, t_lstline **list, int *line) { int nb_obj; char **str; int i; if (*cone != NULL || !ft_strisdigit(&(*list)->line[9])) return (1); nb_obj = ft_atoi(&(*list)->line[9]); i = -1; *cone = (t_cone *)ft_memalloc(sizeof(t_cone) * (nb_obj + 1)); while (++i < nb_obj) { next_line(list, line); if (ft_strncmp((*list)->line, "\t\t\t", 3) != 0) return (1); str = ft_strsplit(&(*list)->line[3], '/'); if (!analyse_cone_help((*list)->line, str, &(*cone)[i])) return (1); (*cone)[i].ray_size = ft_absd(ft_atoid(str[1])); (*cone)[i].height = ft_absd(ft_atoid(str[2])); ft_memdel2((void ***)&str); } (*cone)[nb_obj].end = -1; next_line(list, line); return (0); }
static void ft_fill_cone(t_rtv1 *rtv1, char **tab, char **tri, int i) { char *hexa; rtv1->obj.cone[i].posx = ft_atoid(tri[0]); rtv1->obj.cone[i].posy = ft_atoid(tri[1]); rtv1->obj.cone[i].posz = ft_atoid(tri[2]); rtv1->obj.cone[i].base_size = ft_atoid(tab[1]); rtv1->obj.cone[i].height = ft_atoid(tab[2]); if ((hexa = ft_strstr(tab[3], "0x"))) rtv1->obj.cone[i].color = ft_abs(ft_atoi_base(&hexa[2], 16)); else rtv1->obj.cone[i].color = ft_abs(ft_atoi_base(tab[3], 16)); }
int analyse_spot(t_spot **spot, t_lstline **list, int *line) { int nb_obj; char **str; int i; if (*spot != NULL || !ft_strisdigit(&(*list)->line[9])) return (1); nb_obj = ft_atoi(&(*list)->line[9]); i = -1; *spot = (t_spot *)ft_memalloc(sizeof(t_spot) * (nb_obj + 1)); while (++i < nb_obj) { next_line(list, line); if (ft_strncmp((*list)->line, "\t\t\t", 3) != 0) return (1); str = ft_strsplit(&(*list)->line[3], '/'); if (!analyse_slash((*list)->line, 2) || ft_memlen((void **)str) != 2 || !analyse_3d_value_d(str[0], &(*spot)[i].x, &(*spot)[i].y, &(*spot)[i].z) || !ft_strisdouble(str[1])) return (1); (*spot)[i].lux = ft_absd(ft_atoid(str[1])); ft_memdel2((void ***)&str); } (*spot)[nb_obj].end = -1; next_line(list, line); return (0); }
static void ft_fill_rot_cone(t_rtv1 *rtv1, char **tri, int i) { rtv1->obj.cone[i].rot.x = (float)ft_atoid(tri[0]); rtv1->obj.cone[i].rot.y = (float)ft_atoid(tri[1]); rtv1->obj.cone[i].rot.z = (float)ft_atoid(tri[2]); }