/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_sprite.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:51 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:28:51 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include void ft_get_next_sprite(t_cub *clist, int s_n, char c) { size_t x; size_t y; uint8_t i; x = 0; y = 0; i = 0; while (clist->mlist.map[++y]) { while (clist->mlist.map[y][++x]) { if (clist->mlist.map[y][x] == c) { clist->mlist.sprite_nbr++; clist->sprites[s_n][i].s_pos_x = x; clist->sprites[s_n][i].s_pos_y = y; i++; } } x = 0; } if (clist->sprites[s_n][i - 1].s_pos_x != 0) { ft_get_next_sprite(clist, s_n + 1, c + 1); clist->mlist.sprite_var++; } } void ft_get_sprite_spawn(t_cub *clist) { size_t x; size_t y; uint8_t i; x = 1; y = 1; i = 0; while (clist->mlist.map[y]) { while (clist->mlist.map[y][x]) { if (ft_ischarset("2", clist->mlist.map[y][x])) { clist->mlist.sprite_nbr++; clist->sprites[0][i].s_pos_x = x; clist->sprites[0][i].s_pos_y = y; i++; ft_get_next_sprite(clist, 1, '3'); } x++; } x = 1; y++; } } static int8_t ft_get_sprite_id(char *word) { int8_t ret; char ref[8][3]; ft_sprintf(ref[0], "S"); ft_sprintf(ref[1], "S2"); ft_sprintf(ref[2], "S3"); ft_sprintf(ref[3], "S4"); ft_sprintf(ref[4], "S5"); ft_sprintf(ref[5], "S6"); ft_sprintf(ref[6], "S7"); ft_sprintf(ref[7], "S8"); ret = 0; while (ft_strncmp(word, ref[ret], 3) && ref[ret][0]) ret++; return (ret); } static int8_t ft_check_sprite_amount(int8_t id, t_cub *clist) { int8_t i; i = 0; while (i < id) { if (!clist->mlist.sprite_path[i][0]) return (-1); i++; } return (0); } int8_t ft_get_sprite(char **words, t_cub *clist) { int8_t id; if (!(*words) || !words[1] || words[2]) { ft_sprintf(clist->errmsg, FT_ERR_ARGS); return (-1); } if (ft_check_ext(*(words + 1), ".xpm") < 0) { ft_sprintf(clist->errmsg, FT_ERR_NOT_A_XPM); return (-1); } id = ft_get_sprite_id(words[0]); if (ft_check_sprite_amount(id, clist) < 0) { ft_sprintf(clist->errmsg, FT_ERR_SPRITE_DUMB); return (-1); } ft_memdel((void**)&clist->mlist.sprite_path[id]); if (!(clist->mlist.sprite_path[id] = ft_strdup(*(words + 1)))) { ft_sprintf(clist->errmsg, FT_ERR_ALLOCATE); return (-1); } if (ft_check_not_found(clist->mlist.sprite_path[id]) < 0) { ft_sprintf(clist->errmsg, FT_ERR_RD_SP); return (-1); } return (0); }