diff options
Diffstat (limited to '')
| -rw-r--r-- | src/ft_raycasting.c | 48 | 
1 files changed, 23 insertions, 25 deletions
diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index cbcda24..7baac29 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -18,23 +18,23 @@  #include <math.h>  static void -	ft_calc_tex(t_cub *clist) +	ft_calc_tex(t_cub *cl)  { -	if (clist->rlist.side == 0) -		clist->rlist.wall_hit_x = (clist->plist.pos_x) + -			clist->rlist.wall_dist * clist->rlist.y_ray_dir; +	if (cl->rlist.side == 0) +		cl->rlist.wall_hit_x = (cl->plist.pos_x) + +			cl->rlist.wall_dist * cl->rlist.y_ray_dir;  	else -		clist->rlist.wall_hit_x = (clist->plist.pos_y) + -			clist->rlist.wall_dist * clist->rlist.x_ray_dir; -	clist->rlist.wall_hit_x -= floor(clist->rlist.wall_hit_x); -	clist->tlist[clist->w_side].tex_x = (int)(clist->rlist.wall_hit_x * -			(double)clist->tlist[clist->w_side].img_w); -	if (clist->rlist.side == 0 && clist->rlist.x_ray_dir > 0) -		clist->tlist[clist->w_side].tex_x = clist->tlist[clist->w_side].img_w -			- clist->tlist[clist->w_side].tex_x - 1; -	else if (clist->rlist.side == 1 && clist->rlist.y_ray_dir < 0) -		clist->tlist[clist->w_side].tex_x = clist->tlist[clist->w_side].img_w -			- clist->tlist[clist->w_side].tex_x - 1; +		cl->rlist.wall_hit_x = (cl->plist.pos_y) + +			cl->rlist.wall_dist * cl->rlist.x_ray_dir; +	cl->rlist.wall_hit_x -= floor(cl->rlist.wall_hit_x); +	cl->tlist[cl->w_side].tex_x = (int)(cl->rlist.wall_hit_x * +			(double)cl->tlist[cl->w_side].img_w); +	if (cl->rlist.side == 0 && cl->rlist.x_ray_dir > 0) +		cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w +			- cl->tlist[cl->w_side].tex_x - 1; +	else if (cl->rlist.side == 1 && cl->rlist.y_ray_dir < 0) +		cl->tlist[cl->w_side].tex_x = cl->tlist[cl->w_side].img_w +			- cl->tlist[cl->w_side].tex_x - 1;  }  static void @@ -68,7 +68,7 @@ static void  }  static void -	ft_castray_norme(uint16_t i, t_win *wl, t_cub *cl) +	ft_castray_loop(uint16_t i, t_win *wl, t_cub *cl)  {  	ft_initray(i, cl);  	cl->rlist.line_h = (int16_t)(wl->y_size / cl->rlist.wall_dist); @@ -78,15 +78,18 @@ static void  	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); +	ft_calc_tex(cl); +	ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); +	cl->rlist.wall_bz[i] = cl->rlist.wall_b; +	cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist;  }  void  	ft_castray(t_cub *cl)  {  	uint16_t	i; -	t_win		*wl; -	wl = &cl->wlist;  	if (!(cl->rlist.wall_dist_tab =  			(float*)malloc(sizeof(float) * cl->wlist.x_size)))  		return ; @@ -94,14 +97,9 @@ void  			(int16_t*)malloc(cl->wlist.x_size * sizeof(int16_t))))  		return ;  	i = 0; -	while (i < wl->x_size) +	while (i < cl->wlist.x_size)  	{ -		ft_castray_norme(i, wl, cl); -		ft_choose_tex(cl); -		ft_calc_tex(cl); -		ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); -		cl->rlist.wall_bz[i] = cl->rlist.wall_b; -		cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist; +		ft_castray_loop(i, &cl->wlist, cl);  		i++;  	}  	ft_floor_cast(cl);  | 
