aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_warp_level.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ft_warp_level.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/ft_warp_level.c b/src/ft_warp_level.c
new file mode 100644
index 0000000..de2103d
--- /dev/null
+++ b/src/ft_warp_level.c
@@ -0,0 +1,119 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_warp_level.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/28 20:54:28 by rbousset #+# #+# */
+/* Updated: 2020/02/28 20:54:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <cub3d.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <mlx.h>
+
+static void
+ ft_del_map(t_map *ml)
+{
+ ft_memdel((void**)&ml->filename);
+ ft_memdel((void**)&ml->no_tex_path);
+ ft_memdel((void**)&ml->so_tex_path);
+ ft_memdel((void**)&ml->ea_tex_path);
+ ft_memdel((void**)&ml->we_tex_path);
+ ft_memdel((void**)&ml->sprite_path);
+ ft_memdel((void**)&ml->nl_tex_path);
+ ft_memdel((void**)&ml->fl_tex_path);
+ ft_memdel((void**)&ml->ce_tex_path);
+ ft_memdel((void**)&ml->nlevel_path);
+ ft_memdel((void**)&ml->music_path);
+ ft_memdel((void**)&ml->music_cmd);
+ ft_memdel((void**)&ml->mapl);
+ ft_free_words(ml->map);
+ ft_free_words(ml->mcmd_words);
+}
+
+static void
+ ft_del_some(t_cub *cl)
+{
+ uint8_t i;
+
+ cl->plist.pos_x = 0;
+ cl->plist.pos_y = 0;
+ cl->plist.pos_z = 0;
+ cl->plist.start_x = 0;
+ cl->plist.start_y = 0;
+ cl->plist.cam_x = 0;
+ cl->plist.dir_x = -1;
+ cl->plist.dir_y = 0;
+ cl->plist.plane_x = 0;
+ cl->plist.plane_y = 0.66666666;
+ cl->f_rgb = ft_init_rgb();
+ cl->c_rgb = ft_init_rgb();
+ cl->rlist = ft_init_s_ray();
+ i = 0;
+ while (i <= 5)
+ {
+ mlx_destroy_image(cl->wlist.wlx, cl->tlist[i].img);
+ cl->tlist[i].img = NULL;
+ i++;
+ }
+}
+
+static void
+ ft_treat_music(uint8_t isoldmus, char *tmp_mup, t_cub *cl)
+{
+ if (isoldmus && !cl->mlist.ismusic)
+ {
+ kill(cl->mpid, SIGTERM);
+ wait(&cl->mpid);
+ cl->isoldmus = 0;
+ }
+ else if (isoldmus && cl->mlist.ismusic
+ && ft_strncmp(tmp_mup, cl->mlist.music_path, ft_strlen(tmp_mup) + 1))
+ {
+ kill(cl->mpid, SIGTERM);
+ wait(&cl->mpid);
+ ft_enable_music(cl);
+ }
+ else if (isoldmus && cl->mlist.ismusic
+ && !ft_strncmp(tmp_mup, cl->mlist.music_path, ft_strlen(tmp_mup) + 1))
+ return ;
+}
+
+int8_t
+ ft_warp_level(t_cub *cl)
+{
+ char *next_path;
+ char *tmp_mup;
+ uint8_t isoldmus;
+
+ if ((uint32_t)cl->plist.pos_x == cl->mlist.nlx &&
+ (uint32_t)cl->plist.pos_y == cl->mlist.nly)
+ {
+ if (!(next_path = (char *)malloc((ft_strlen(
+ cl->mlist.nlevel_path) + 1) * sizeof(char))))
+ return (-1);
+ ft_sprintf(next_path, "%s", cl->mlist.nlevel_path);
+ if ((isoldmus = cl->mlist.ismusic))
+ tmp_mup = ft_strdup(cl->mlist.music_path);
+ ft_del_some(cl);
+ ft_del_map(&cl->mlist);
+ if (ft_init_map(&cl->mlist) < 0)
+ return (-1);
+ ft_parse_map(next_path, cl);
+ ft_treat_music(isoldmus, tmp_mup, cl);
+ if (isoldmus)
+ ft_memdel((void**)&tmp_mup);
+ ft_wall_tex_init(cl);
+ ft_memdel((void**)&next_path);
+ }
+ return (0);
+}