/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_find_item.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/17 20:06:26 by rbousset #+# #+# */ /* Updated: 2020/02/17 20:06:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include static uint16_t ft_fetch_heals_id(uint64_t pos_y, uint64_t pos_x, t_cub *cl) { uint16_t id; id = 0; while (id <= 64) { if (cl->heals[id].s_pos_y == pos_y && cl->heals[id].s_pos_x == pos_x) return (id); id++; } return (0); } static void ft_set_ammo(uint8_t weap_id, t_player *pl) { if (weap_id == 0) pl->ammo[0] = FT_WEAP_ONE_STRT_AMMO; else if (weap_id == 1) pl->ammo[1] = FT_WEAP_TWO_STRT_AMMO; else if (weap_id == 2) pl->ammo[2] = FT_WEAP_THREE_STRT_AMMO; } static void ft_weapon_check(const char map_char, t_player *pl, t_cub *cl) { uint8_t weap_id; if (ft_ischarset(FT_CHRST_WEAPONS, map_char)) { weap_id = 0; if (map_char == '@') weap_id = 1; else if (map_char == '#') weap_id = 2; cl->mlist.map[(uint64_t)pl->pos_y][(uint64_t)pl->pos_x] = '0'; cl->weaps[weap_id][0].s_pos_x = 0; cl->weaps[weap_id][0].s_pos_y = 0; pl->has_weapon[weap_id] = 1; pl->handles_weapon = (weap_id == 0) ? (0) : (pl->handles_weapon); pl->handles_weapon = (weap_id == 1) ? (2) : (pl->handles_weapon); pl->handles_weapon = (weap_id == 2) ? (4) : (pl->handles_weapon); ft_set_ammo(weap_id, pl); if (weap_id == 0) cl->sfx[6].sfx_play(cl->sfx); else if (weap_id == 1) cl->sfx[8].sfx_play(cl->sfx); else if (weap_id == 2) cl->sfx[10].sfx_play(cl->sfx); } } void ft_find_item(t_player *pl, t_map *ml, t_cub *cl) { uint16_t id; const char map_char = ml->map[(uint64_t)pl->pos_y][(uint64_t)pl->pos_x]; if (ft_ischarset(FT_CHRST_ITEM, map_char)) { if (map_char == '+' && pl->life < FT_STRT_LIFE) { pl->life += FT_HEAL_PACK_AMOUNT; pl->life = (pl->life > FT_STRT_LIFE) ? (FT_STRT_LIFE) : (pl->life); ml->map[(uint64_t)pl->pos_y][(uint64_t)pl->pos_x] = '0'; id = ft_fetch_heals_id((uint64_t)pl->pos_y, (uint64_t)pl->pos_x, cl); cl->heals[id].s_pos_x = 0; cl->heals[id].s_pos_y = 0; cl->sfx[5].sfx_play(cl->sfx); } ft_weapon_check(map_char, pl, cl); } }