From 285f6f3c55f298431066c241a88f365802ce75e2 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Thu, 28 Apr 2022 09:35:05 +0200 Subject: [PATCH] add struct wall --- README.md | 1 - headers/cube3d_struct.h | 14 ++++++++++--- srcs/draw/raycast.c | 44 +++++++++++++++++++---------------------- srcs/init/init_struct.c | 2 +- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 5fd0b58..59c7835 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ - resolve wall height - resolve view buble -- resolve vertical ray - add textures # ressources diff --git a/headers/cube3d_struct.h b/headers/cube3d_struct.h index 64c14be..e2df48d 100644 --- a/headers/cube3d_struct.h +++ b/headers/cube3d_struct.h @@ -26,6 +26,16 @@ typedef struct s_vec t_coord end; } t_vec; +/* + * struct for walls 3d drawing + */ + +typedef struct s_wall +{ + t_vec pos; + int height; +} t_wall; + /* * struct with all elements for raycasting */ @@ -35,9 +45,6 @@ typedef struct s_rcast t_vec screen_dist; t_vec screen_size; t_vec ray; - t_vec wall; - int tmp; - int wall_height; int screen_width; int screen_height; int cell; @@ -125,6 +132,7 @@ typedef struct s_game t_plr plr; // rays t_rcast rcast; + t_wall wall; // map t_map map; // map window diff --git a/srcs/draw/raycast.c b/srcs/draw/raycast.c index 66d69d1..4bef579 100644 --- a/srcs/draw/raycast.c +++ b/srcs/draw/raycast.c @@ -30,65 +30,67 @@ } // tmp end -static void wall_length(t_rcast *rcast) +static void wall_length(t_rcast *rcast, t_wall *wall) { int length; - rcast->wall.start.x = rcast->ray_nb; - rcast->wall.end.x = rcast->ray_nb; + wall->pos.start.x = rcast->ray_nb; + wall->pos.end.x = rcast->ray_nb; if (rcast->is_x == 1) { length = rcast->next_x - rcast->ray_step_x; if (rcast->slope_y) length /= ft_abs(rcast->slope_y); -// length = (double)length * (double)rcast->screen_dist.end.y / (double)rcast->slope_x; + length = (double)length * (double)rcast->screen_dist.end.y / (double)rcast->slope_x; } else if (rcast->is_x == 0) { length = rcast->next_y - rcast->ray_step_y; if (rcast->slope_x) length /= ft_abs(rcast->slope_x); -// length = (double)length * (double)rcast->screen_dist.end.y / (double)rcast->slope_y; + length = (double)length * (double)rcast->screen_dist.end.y / (double)rcast->slope_y; } rcast->ray_len = ft_abs(length); } -static void wall_height(t_rcast *rcast) +static void wall_height(t_rcast *rcast, t_wall *wall) { int height; - height = rcast->wall_height - rcast->ray_len; + height = wall->height - rcast->ray_len; + if (height < 0) height = 0; if (height > rcast->screen_height) height = rcast->screen_height; - rcast->wall.start.y = rcast->screen_height / 2 + height / 2; - rcast->wall.end.y = rcast->screen_height / 2 - height / 2; + + wall->pos.start.y = rcast->screen_height / 2 + height / 2; + wall->pos.end.y = rcast->screen_height / 2 - height / 2; } -void draw_column(t_game *game, t_rcast *rcast) +void draw_column(t_game *game, t_rcast *rcast, t_wall *wall) { t_vec plane; int color; plane.start.x = rcast->ray_nb; plane.end.x = rcast->ray_nb; - if (rcast->wall.start.y > 0) + if (wall->pos.start.y > 0) { plane.start.y = rcast->screen_height; - plane.end.y = rcast->wall.start.y; + plane.end.y = wall->pos.start.y; draw_line(&game->img, &plane, 0x00FF0000); } - if (rcast->wall.start.y < rcast->screen_height) + if (wall->pos.start.y < rcast->screen_height) { - plane.start.y = rcast->wall.end.y; + plane.start.y = wall->pos.end.y; plane.end.y = 0; draw_line(&game->img, &plane, 0x000000FF); } color = 0x00FF00FF; if (rcast->is_x) color = 0x00EE00EE; - draw_line(&game->img, &rcast->wall, color); + draw_line(&game->img, &wall->pos, color); } void raycast(t_game *game, t_rcast *rcast) @@ -106,15 +108,9 @@ void raycast(t_game *game, t_rcast *rcast) // tmp end - wall_length(rcast); - wall_height(rcast); - draw_column(game, rcast); + wall_length(rcast, &game->wall); + wall_height(rcast, &game->wall); + draw_column(game, rcast, &game->wall); (rcast->ray_nb)++; - - // tmp, to draw the map - if (rcast->tmp) - printf("\n"); - // tmp end - } } diff --git a/srcs/init/init_struct.c b/srcs/init/init_struct.c index 5546c5a..542dcc5 100644 --- a/srcs/init/init_struct.c +++ b/srcs/init/init_struct.c @@ -70,7 +70,6 @@ static void init_raycast(t_rcast *rcast) dist = cos(dist) * ((SCREEN_WIDTH / 2) / sin(dist)); rcast->screen_width = SCREEN_WIDTH; rcast->screen_height = SCREEN_HEIGHT; - rcast->wall_height = WALL_HEIGHT; // screen dist rcast->screen_dist.start.x = 0; rcast->screen_dist.start.y = 0; @@ -133,5 +132,6 @@ t_game *init_game(void) // raycasting init_raycast(&(game->rcast)); game->rcast.cell = game->map.cell; + game->wall.height = WALL_HEIGHT; return (game); }