/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_select_get.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:59 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:28:59 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include static int8_t ft_check_exists(const int8_t ret, t_cub *clist) { if (ret == 12) return (12); if (ret == 0 && clist->currlvl == 0 && (clist->wlist->x_size != 0 || clist->wlist->y_size != 0)) return (-1); else if (ret == 1 && (clist->mlist->no_tex_path[0])) return (-1); else if (ret == 2 && (clist->mlist->so_tex_path[0])) return (-1); else if (ret == 3 && (clist->mlist->ea_tex_path[0])) return (-1); else if (ret == 4 && (clist->mlist->we_tex_path[0])) return (-1); else if (ret == 5 && (clist->mlist->sprite_path[0])) return (-1); else if (ret == 6 && ((clist->f_rgb.r != -1) || (clist->f_rgb.g != -1) || (clist->f_rgb.b != -1))) return (-1); else if (ret == 7 && ((clist->c_rgb.r != -1) || (clist->c_rgb.g != -1) || (clist->c_rgb.b != -1))) return (-1); return (ret); } static int8_t ft_check_exists_two(const int8_t ret, t_cub *clist) { if (ret == 12) return (12); if (ret == 8 && (clist->mlist->nlevel_path[0])) return (-1); if (ret == 9 && (clist->mlist->nl_tex_path[0])) return (-1); return (ret); } static int8_t ft_get_id(char **words, t_cub *clist) { int8_t ret; char ref[11][3]; ft_memcpy(ref[0], "R\0", 3); ft_memcpy(ref[1], "NO", 3); ft_memcpy(ref[2], "SO", 3); ft_memcpy(ref[3], "EA", 3); ft_memcpy(ref[4], "WE", 3); ft_memcpy(ref[5], "S\0", 3); ft_memcpy(ref[6], "F\0", 3); ft_memcpy(ref[7], "C\0", 3); ft_memcpy(ref[8], "L\0", 3); ft_memcpy(ref[9], "LT\0", 3); ft_memcpy(ref[10], "", 1); ret = 0; while (ft_strncmp(words[0], ref[ret], 3) && ref[ret][0]) ret++; if (ret == 10) ret = 12; ret = ft_check_exists(ret, clist); ret = ft_check_exists_two(ret, clist); return (ret); } int8_t ft_select_get(char **words, t_cub *clist) { int8_t (*fun_ptr[10])(char**, t_cub*); int8_t id; fun_ptr[0] = ft_get_res; fun_ptr[1] = ft_get_tex_no; fun_ptr[2] = ft_get_tex_so; fun_ptr[3] = ft_get_tex_ea; fun_ptr[4] = ft_get_tex_we; fun_ptr[5] = ft_get_sprite; fun_ptr[6] = ft_get_f_color; fun_ptr[7] = ft_get_c_color; fun_ptr[8] = ft_get_path_nl; fun_ptr[9] = ft_get_tex_nl; if ((id = ft_get_id(words, clist)) == 12) { ft_free_words(words); return (12); } if (id < 0 || (*fun_ptr[id])(words, clist) < 0) { ft_free_words(words); return ((id < 0) ? (-2) : (-1)); } ft_free_words(words); return (id); }