diff options
-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); |