diff options
author | Rudy Bousset <rbousset@z3r8p1.le-101.fr> | 2020-02-13 18:30:37 +0100 |
---|---|---|
committer | Rudy Bousset <rbousset@z3r8p1.le-101.fr> | 2020-02-13 18:30:37 +0100 |
commit | d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7 (patch) | |
tree | dc63c1a193330cabf201fd4afab0c4b02a2d5f65 /src/ft_raycasting.c | |
parent | Divided minimap scale by 4, Makefile update (diff) | |
download | 42-cub3d-d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7.tar.gz 42-cub3d-d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7.tar.bz2 42-cub3d-d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7.tar.xz 42-cub3d-d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7.tar.zst 42-cub3d-d91a3ef90ba3975b7c3bd47b69ce7febda2a77a7.zip |
Smooth
Diffstat (limited to 'src/ft_raycasting.c')
-rw-r--r-- | src/ft_raycasting.c | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index d36eacf..8aa4dbe 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -2,21 +2,50 @@ #include <stdint.h> static void -ft_initray(t_cub *clist, uint16_t i) +ft_initray(t_cub *cl, uint16_t i) { - (void)clist; - (void)i; + t_win *wl; + t_player *pl; + + wl = cl->wlist; + pl = cl->plist; + pl->cam_x = 2 * i / (float)(wl->x_size) - 1; + cl->rlist.x_ray_pos = pl->pos_y; + cl->rlist.y_ray_pos = pl->pos_x; + cl->rlist.x_ray_dir = pl->dir_x + pl->plane_x * + pl->cam_x; + cl->rlist.y_ray_dir = pl->dir_y + pl->plane_y * + pl->cam_x; + cl->rlist.sqx = (int16_t)cl->rlist.x_ray_pos; + cl->rlist.sqy = (int16_t)cl->rlist.y_ray_pos; + ft_detect(cl); + if (cl->rlist.side == 0) + cl->rlist.wall_dist = (cl->rlist.sqx - cl->rlist.x_ray_pos + + (1 - cl->x_step) / 2) / cl->rlist.x_ray_dir; + else + cl->rlist.wall_dist = (cl->rlist.sqy - cl->rlist.y_ray_pos + + (1 - cl->y_step) / 2) / cl->rlist.y_ray_dir; } void -ft_castray(t_cub *clist) +ft_castray(t_cub *cl) { uint16_t i; + t_win *wl; i = 0; - while (i < clist->wlist->y_size) + wl = cl->wlist; + while (i < wl->x_size) { - ft_initray(clist, i); + ft_initray(cl, i); + cl->rlist.line_h = (int16_t)(wl->y_size / cl->rlist.wall_dist); + 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_b = cl->rlist.line_h / 2 + wl->y_size / 2; + if (cl->rlist.wall_b >= wl->y_size)\ + cl->rlist.wall_b = wl->y_size - 1; + ft_draw_verline(cl, i, cl->rlist.wall_t - 1, cl->rlist.wall_b, 0x0000ffaa); i++; } } |