From 5a706fdfcbf801c72f4fb31ceee8dbef8b02e160 Mon Sep 17 00:00:00 2001
From: JozanLeClerc <bousset.rudy@gmail.com>
Date: Mon, 23 Mar 2020 19:36:30 +0100
Subject: Almost there

---
 src/ft_draw_textures.c | 17 +++++++++--------
 src/ft_draw_verline.c  |  7 ++++---
 src/ft_raycasting.c    | 20 ++++++++++++++++++--
 3 files changed, 31 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/ft_draw_textures.c b/src/ft_draw_textures.c
index 0724a6d..c7684f9 100644
--- a/src/ft_draw_textures.c
+++ b/src/ft_draw_textures.c
@@ -28,20 +28,20 @@ void
 	float	dist;
 	t_rgb	rgb;
 
-	if ((dist = cl->rlist.wall_dist) <= 0)
+	if ((dist = cl->rlist.wall_dist_tab[x]) <= 0)
 		dist = 0.0001;
-	rgb.b = (uint8_t)cl->tlist[cl->w_side].ptr[cl->tlist[cl->w_side].tex_x
-		* 4 + 4 * cl->tlist[cl->w_side].img_h * tex_y];
-	rgb.g = (uint8_t)cl->tlist[cl->w_side].ptr[cl->tlist[cl->w_side].tex_x
-		* 4 + 4 * cl->tlist[cl->w_side].img_h * tex_y + 1];
-	rgb.r = (uint8_t)cl->tlist[cl->w_side].ptr[cl->tlist[cl->w_side].tex_x
-		* 4 + 4 * cl->tlist[cl->w_side].img_h * tex_y + 2];
+	rgb.r = (uint8_t)cl->tlist[cl->rlist.w_side_tab[x]].ptr[cl->tlist[cl->rlist.w_side_tab[x]].tex_x
+		* 4 + 4 * cl->tlist[cl->rlist.w_side_tab[x]].img_h * tex_y + 2];
+	rgb.g = (uint8_t)cl->tlist[cl->rlist.w_side_tab[x]].ptr[cl->tlist[cl->rlist.w_side_tab[x]].tex_x
+		* 4 + 4 * cl->tlist[cl->rlist.w_side_tab[x]].img_h * tex_y + 1];
+	rgb.b = (uint8_t)cl->tlist[cl->rlist.w_side_tab[x]].ptr[cl->tlist[cl->rlist.w_side_tab[x]].tex_x
+		* 4 + 4 * cl->tlist[cl->rlist.w_side_tab[x]].img_h * tex_y];
 	*(int*)(cl->img.ptr + ((uint16_t)x * 4 +
 		(y * cl->img.sizeline))) = ft_rgb_to_hex(dist, rgb, cl);
 }
 
 void
-	ft_choose_tex(t_cub *clist)
+	ft_choose_tex(uint16_t x, t_cub *clist)
 {
 	if (clist->rlist.sqy == clist->mlist.nlx
 		&& clist->rlist.sqx == clist->mlist.nly)
@@ -59,4 +59,5 @@ void
 		else
 			clist->w_side = 2;
 	}
+	clist->rlist.w_side_tab[x] = clist->w_side;
 }
diff --git a/src/ft_draw_verline.c b/src/ft_draw_verline.c
index 7bfba8d..3ecde46 100644
--- a/src/ft_draw_verline.c
+++ b/src/ft_draw_verline.c
@@ -21,12 +21,13 @@ int8_t
 
 	(y < 0) ? (y = 0) : 0;
 	(y2 < 0) ? (y2 = 0) : 0;
-	(cl->rlist.line_h <= 0) ? (cl->rlist.line_h = 1) : 0;
+	(cl->rlist.line_h_tab[x] <= 0) ? (cl->rlist.line_h_tab[x] = 1) : 0;
 	while (y < y2)
 	{
-		d = y * 256 - cl->wlist.y_size * 128 + cl->rlist.line_h * 128;
+		d = y * 256 - cl->wlist.y_size * 128 + cl->rlist.line_h_tab[x] * 128;
 		d = (d <= 0) ? (-d) : (d);
-		tex_y = ((d * cl->tlist[cl->w_side].img_h) / cl->rlist.line_h) / 256;
+		tex_y = ((d * cl->tlist[cl->rlist.w_side_tab[x]].img_h)
+			/ cl->rlist.line_h_tab[x]) / 256;
 		(tex_y <= 0) ? (tex_y = 1) : 0;
 		ft_draw_texture(cl, x, y, tex_y);
 		y++;
diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c
index 1a12c46..3429f20 100644
--- a/src/ft_raycasting.c
+++ b/src/ft_raycasting.c
@@ -71,13 +71,16 @@ static void
 {
 	ft_initray(i, cl);
 	cl->rlist.line_h = (int16_t)(wl->y_size / cl->rlist.wall_dist);
+	cl->rlist.line_h_tab[i] = cl->rlist.line_h;
 	cl->rlist.wall_t = -cl->rlist.line_h / 2 + wl->y_size / 2;
 	if (cl->rlist.wall_t < 0)
 		cl->rlist.wall_t = 0;
+	cl->rlist.wall_t_tab[i] = cl->rlist.wall_t;
 	cl->rlist.wall_b = cl->rlist.line_h / 2 + wl->y_size / 2;
 	if (cl->rlist.wall_b >= (int16_t)wl->y_size)
 		cl->rlist.wall_b = wl->y_size - 1;
-	ft_choose_tex(cl);
+	cl->rlist.wall_b_tab[i] = cl->rlist.wall_b;
+	ft_choose_tex(i, cl);
 	ft_calc_tex(cl);
 	cl->rlist.wall_bz[i] = cl->rlist.wall_b;
 	cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist;
@@ -94,11 +97,20 @@ void
 	if (!(cl->rlist.wall_bz =
 			(int16_t*)malloc(cl->wlist.x_size * sizeof(int16_t))))
 		return ;
+	cl->rlist.w_side_tab = (uint8_t*)ft_calloc(cl->wlist.x_size, sizeof(uint8_t));
+	cl->rlist.line_h_tab = (uint16_t*)ft_calloc(cl->wlist.x_size, sizeof(uint16_t));
+	cl->rlist.wall_t_tab = (int16_t*)ft_calloc(cl->wlist.x_size, sizeof(int16_t));
+	cl->rlist.wall_b_tab = (int16_t*)ft_calloc(cl->wlist.x_size, sizeof(int16_t));
 	i = 0;
 	while (i < cl->wlist.x_size)
 	{
 		ft_castray_loop(i, &cl->wlist, cl);
-		ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b);
+		i++;
+	}
+	i = 0;
+	while (i < cl->wlist.x_size)
+	{
+		ft_draw_verline(cl, i, cl->rlist.wall_t_tab[i], cl->rlist.wall_b_tab[i]);
 		i++;
 	}
 	ft_floor_cast(cl);
@@ -108,6 +120,10 @@ void
 	ft_calc_weaps(cl);
 	if (cl->plist.handles_weapon > -1)
 		ft_draw_handweap(cl);
+	ft_memdel((void*)&cl->rlist.wall_t_tab);
+	ft_memdel((void*)&cl->rlist.wall_b_tab);
+	ft_memdel((void*)&cl->rlist.w_side_tab);
+	ft_memdel((void*)&cl->rlist.line_h_tab);
 	ft_memdel((void*)&cl->rlist.wall_dist_tab);
 	ft_memdel((void*)&cl->rlist.wall_bz);
 }
-- 
cgit v1.2.3