aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_raycasting.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/ft_raycasting.c41
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++;
}
}