From 43852938c401dce07ec1064c5f6331d6a7474cda Mon Sep 17 00:00:00 2001 From: hugogogo Date: Sun, 1 May 2022 21:07:11 +0200 Subject: [PATCH] add new file for textures --- Makefile | 3 ++- headers/cube3d_macro.h | 2 +- headers/cube3d_proto.h | 2 ++ srcs/draw/draw_column.c | 31 +++++++++++++++++++++++++++++ srcs/draw/raycast.c | 43 +++++++++++------------------------------ 5 files changed, 47 insertions(+), 34 deletions(-) create mode 100644 srcs/draw/draw_column.c diff --git a/Makefile b/Makefile index 30b2061..f7efbe0 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,8 @@ SRCS += player_moves.c \ # draw/ SRCS += draw.c \ ray_intersect.c \ - raycast.c + raycast.c \ + draw_column.c # headers D_HEADERS = headers diff --git a/headers/cube3d_macro.h b/headers/cube3d_macro.h index 63831fd..8eae2df 100644 --- a/headers/cube3d_macro.h +++ b/headers/cube3d_macro.h @@ -6,7 +6,7 @@ */ /* nbr pixel player move */ -# define PLR_MV 2 +# define PLR_MV 1 /* degree of rotation of the player per press */ # define PLR_ROT 2 /* nbr key you can press at the same time */ diff --git a/headers/cube3d_proto.h b/headers/cube3d_proto.h index ea12ba9..1187710 100644 --- a/headers/cube3d_proto.h +++ b/headers/cube3d_proto.h @@ -86,5 +86,7 @@ void draw(t_game *game); void raycast(t_game *game, t_rcast *rcast); // ray_intersect.c void ray_intersect(t_game *game, t_rcast *rcast, t_vec *ray); +// draw_column.c +void draw_column(t_game *game, t_rcast *rcast); #endif diff --git a/srcs/draw/draw_column.c b/srcs/draw/draw_column.c new file mode 100644 index 0000000..0b9332f --- /dev/null +++ b/srcs/draw/draw_column.c @@ -0,0 +1,31 @@ +#include "cube3d.h" + +void draw_floor_ceiling(t_game *game, t_rcast *rcast) +{ + t_vec plan; + + plan.start.x = rcast->ray_nb; + plan.end.x = rcast->ray_nb; + if (rcast->wall.start.y > 0) + { + plan.start.y = rcast->screen_height; + plan.end.y = rcast->wall.start.y; + draw_line(&game->img, &plan, 0x00FF0000); + } + if (rcast->wall.start.y < rcast->screen_height) + { + plan.start.y = rcast->wall.end.y; + plan.end.y = 0; + draw_line(&game->img, &plan, 0x000000FF); + } +} + +void draw_column(t_game *game, t_rcast *rcast) +{ + int color; + draw_floor_ceiling(game, rcast); + color = 0x00FF00FF; + if (rcast->is_x) + color = 0x00EE00EE; + draw_line(&game->img, &rcast->wall, color); +} diff --git a/srcs/draw/raycast.c b/srcs/draw/raycast.c index 793a385..9bb5ca5 100644 --- a/srcs/draw/raycast.c +++ b/srcs/draw/raycast.c @@ -30,6 +30,16 @@ } // tmp end +static void fill_wall_vector(t_rcast *rcast, int height) +{ + 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; +} + static void calcul_wall(t_rcast *rcast) { int height; @@ -48,39 +58,8 @@ static void calcul_wall(t_rcast *rcast) height *= rcast->slope_y; if (delta && rcast->screen_dist) height /= (delta * rcast->screen_dist); - height = ft_abs(height); - 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; -} - -void draw_column(t_game *game, t_rcast *rcast) -{ - t_vec plan; - int color; - - plan.start.x = rcast->ray_nb; - plan.end.x = rcast->ray_nb; - if (rcast->wall.start.y > 0) - { - plan.start.y = rcast->screen_height; - plan.end.y = rcast->wall.start.y; - draw_line(&game->img, &plan, 0x00FF0000); - } - if (rcast->wall.start.y < rcast->screen_height) - { - plan.start.y = rcast->wall.end.y; - plan.end.y = 0; - draw_line(&game->img, &plan, 0x000000FF); - } - color = 0x00FF00FF; - if (rcast->is_x) - color = 0x00EE00EE; - draw_line(&game->img, &rcast->wall, color); + fill_wall_vector(rcast, height); } void raycast(t_game *game, t_rcast *rcast)