/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_exit.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:28:46 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:28:46 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #include #include #include #include #include #include static void ft_free_some_extras(t_cub *clist) { uint8_t i; i = 0; while (i < 8) { ft_memdel((void*)&clist->sprites[i]); i++; } i = 0; while (i < 4) { if (clist->tweap[i].img) mlx_destroy_image(clist->wlist.wlx, clist->tweap[i].img); i++; } i = 0; while (i < 2) { if (clist->mlist.isweapon[i] && clist->tlist[i + 18].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[i + 18].img); i++; } ft_memdel((void*)&clist->sprites); ft_memdel((void*)&clist); } static void ft_free_lists(t_cub *clist) { uint8_t i; ft_memdel((void*)&clist->mlist.filename); ft_memdel((void*)&clist->mlist.no_tex_path); ft_memdel((void*)&clist->mlist.so_tex_path); ft_memdel((void*)&clist->mlist.ea_tex_path); ft_memdel((void*)&clist->mlist.we_tex_path); ft_memdel((void*)&clist->mlist.nl_tex_path); ft_memdel((void*)&clist->mlist.fl_tex_path); ft_memdel((void*)&clist->mlist.ce_tex_path); ft_memdel((void*)&clist->mlist.nlevel_path); ft_memdel((void*)&clist->mlist.skybox_path); ft_memdel((void*)&clist->mlist.traps_path); ft_memdel((void*)&clist->mlist.music_path); ft_memdel((void*)&clist->mlist.music_cmd); ft_memdel((void*)&clist->mlist.mapl); ft_free_words(clist->mlist.map); i = -1; while (++i < 10) ft_memdel((void*)&clist->sfx[i].cmd); ft_memdel((void*)&clist->sfx[1].cmd_alt); ft_memdel((void*)&clist->sfx[3].cmd_alt); ft_free_sprites(clist->mlist.sprite_path); i = -1; while (++i < 2) ft_memdel((void*)&clist->weaps[i]); ft_memdel((void*)&clist->weaps); if (!clist->wlist.inited) ft_memdel((void*)&clist->wlist.winptr); } static void ft_del_tex(t_cub *clist) { int8_t i; if (clist->tlist[0].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[0].img); if (clist->tlist[1].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[1].img); if (clist->tlist[2].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[2].img); if (clist->tlist[3].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[3].img); if (clist->tlist[4].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[4].img); if (clist->mlist.isnlvl && clist->tlist[5].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[5].img); if (clist->mlist.isftex && clist->tlist[6].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[6].img); if (clist->mlist.isctex && clist->tlist[7].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[7].img); if (clist->mlist.istraps && clist->tlist[15].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[15].img); if (clist->tlist[16].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[16].img); if (clist->mlist.isheals && clist->tlist[17].img) mlx_destroy_image(clist->wlist.wlx, clist->tlist[17].img); i = -1; while (++i < 11) if (clist->tnum[i].img) mlx_destroy_image(clist->wlist.wlx, clist->tnum[i].img); ft_del_extra_sprites(clist); } static void ft_cancel_threads(t_cub *clist) { uint8_t i; if (clist->isoldmus && clist->wlist.inited) { pthread_cancel(clist->mtid); pthread_join(clist->mtid, NULL); } i = -1; while (++i < 10) { pthread_mutex_unlock(&clist->sfx[i].mutex); pthread_cancel(clist->sfx[i].tid); pthread_join(clist->sfx[i].tid, NULL); } } int ft_exit(uint8_t exit_code, t_cub *clist) { if (clist->walltexgood) ft_del_tex(clist); if (clist->wlist.inited) { if (FT_OS == 1) mlx_destroy_image(clist->wlist.wlx, clist->img.img); mlx_destroy_window(clist->wlist.wlx, clist->wlist.winptr); } ft_cancel_threads(clist); ft_free_lists(clist); ft_free_some_extras(clist); ft_printf("Exiting program\n"); exit(exit_code); return (0); }