/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_get_sprite_spawns.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: joelecle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:51 by joelecle #+# #+# */ /* Updated: 2020/02/14 17:28:51 by joelecle ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include /* ** cl->sprite[] index summary ** -------------------------- ** 0: sprite 2 - tlist[4] - 4096 ** 1: sprite 3 - tlist[8] - 4096 ** 2: sprite 4 - tlist[9] - 4096 ** 3: sprite 5 - tlist[10] - 4096 ** 4: sprite 6 - tlist[11] - 4096 ** 5: sprite 7 - tlist[12] - 4096 ** 6: sprite 8 - tlist[13] - 4096 ** 7: sprite 9 - tlist[14] - 4096 ** 8: trap - tlist[15] - 512 ** 9: heal - tlist[17] - 64 ** 10: weapon one - tlist[18] - 4 ** 11: weapon two - tlist[19] - 4 ** 12: weapon three - tlist[20] - 4 ** 13: enemy - tlist[23] | ** '- - - - - - - tlist[24] | ** '- - - - - - - tlist[25] | ** '- - - - - - - tlist[26] - 32 */ static void ft_check_amount(t_cub *cl, int s_n) { if (s_n < 8 && cl->mlist.sprite_nbr[s_n] > 4096) ft_map_error(FT_ERR_TOO_MUCH_SPRT, cl); else if (s_n == 8 && cl->mlist.sprite_nbr[s_n] > 512) ft_map_error(FT_ERR_TOO_MUCH_TRAPS, cl); else if (s_n == 9 && cl->mlist.sprite_nbr[s_n] > 64) ft_map_error(FT_ERR_TOO_MUCH_HEALS, cl); else if (s_n == 10 && cl->mlist.sprite_nbr[s_n] > 4) ft_map_error(FT_ERR_TOO_MUCH_W_ONE, cl); else if (s_n == 11 && cl->mlist.sprite_nbr[s_n] > 4) ft_map_error(FT_ERR_TOO_MUCH_W_TWO, cl); else if (s_n == 12 && cl->mlist.sprite_nbr[s_n] > 4) ft_map_error(FT_ERR_TOO_MUCH_W_THREE, cl); else if (s_n == 13 && cl->mlist.sprite_nbr[s_n] > 32) ft_map_error(FT_ERR_TOO_MUCH_ENMY, cl); } static int8_t ft_other_next_sprite(t_cub *cl, int s_n) { if (s_n + 1 == 8) return (ft_get_next_sprite(cl, 8, 'T', 0)); if (s_n + 1 == 9) return (ft_get_next_sprite(cl, 9, '+', 0)); if (s_n + 1 == 10) return (ft_get_next_sprite(cl, 10, '!', 0)); if (s_n + 1 == 11) return (ft_get_next_sprite(cl, 11, '@', 0)); if (s_n + 1 == 12) return (ft_get_next_sprite(cl, 12, '#', 0)); if (s_n + 1 == 13) return (ft_get_next_sprite(cl, 13, 'e', 0)); if (cl->mlist.sprite_nbr[13] > 0) return (ft_init_bad_boys(cl)); return (0); } int8_t ft_get_next_sprite(t_cub *clist, int s_n, char c, size_t x) { size_t y; int16_t i; y = 0; i = 0; clist->mlist.sprite_nbr[s_n] = 0; while (clist->mlist.map[++y]) { while (clist->mlist.map[y][++x]) { if (clist->mlist.map[y][x] == c) { clist->mlist.sprite_nbr[s_n]++; clist->sprites[s_n][i].exists = 1; clist->sprites[s_n][i].s_pos_x = x; clist->sprites[s_n][i].s_pos_y = y; i++; } } x = 0; } ft_check_amount(clist, s_n); if (s_n + 1 <= 7) return (ft_get_next_sprite(clist, s_n + 1, c + 1, 0)); return (ft_other_next_sprite(clist, s_n)); } void ft_get_sprite_spawn(t_cub *clist) { size_t x; size_t y; uint8_t i; x = 1; y = 0; i = 0; clist->mlist.sprite_nbr[0] = 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[0]++; clist->sprites[0][i].exists = 1; clist->sprites[0][i].s_pos_x = x; clist->sprites[0][i].s_pos_y = y; i++; } x++; } x = 1; } ft_get_next_sprite(clist, 1, '3', 0); }