diff options
-rw-r--r-- | inc/cub3d.h | 3 | ||||
-rw-r--r-- | inc/cub3d_structs.h | 2 | ||||
-rw-r--r-- | map/map_six.cub | 21 | ||||
-rw-r--r-- | src/ft_darken_rgb.c | 33 | ||||
-rw-r--r-- | src/ft_draw_verline.c | 29 | ||||
-rw-r--r-- | src/ft_floor_cast.c | 39 | ||||
-rw-r--r-- | src/ft_tex_init.c | 10 |
7 files changed, 74 insertions, 63 deletions
diff --git a/inc/cub3d.h b/inc/cub3d.h index 77ade74..ba8ee89 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -137,7 +137,6 @@ int8_t ft_warp_level(t_cub *cl); int ft_exit(uint8_t exit_code, t_cub *clist); uint32_t ft_rgb_to_hex(t_rgb rgb); t_bmp_rgb ft_hex_to_rgb(uint32_t color); -uint32_t ft_darken_ceil(t_rgb rgb, int32_t y, t_cub *cl); -uint32_t ft_darken_floor(t_rgb rgb, int32_t y, t_cub *cl); +uint32_t ft_darken(t_rgb rgb, t_cub *cl); # endif diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index a516036..64db18c 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -203,7 +203,7 @@ typedef struct s_cub struct s_img img; struct s_rgb f_rgb; struct s_rgb c_rgb; - struct s_img tlist[7]; + struct s_img tlist[8]; struct s_sprite sp_list; } t_cub; diff --git a/map/map_six.cub b/map/map_six.cub new file mode 100644 index 0000000..5678d4e --- /dev/null +++ b/map/map_six.cub @@ -0,0 +1,21 @@ +R 1600 1100 + +NO ./media/img/larry.xpm +SO ./media/img/larry.xpm +EA ./media/img/larry.xpm +WE ./media/img/larry.xpm +S ./media/img/larry.xpm + +C 26,165,204 +F 24,170,25 + +11111111111111111 +100000000000000W1 +10111111111111101 +10100000000000111 +10111111111100001 +10000000000100001 +10111111111100001 +10100000000000001 +10000000000000001 +11111111111111111
\ No newline at end of file diff --git a/src/ft_darken_rgb.c b/src/ft_darken_rgb.c index 656aac7..4c571cf 100644 --- a/src/ft_darken_rgb.c +++ b/src/ft_darken_rgb.c @@ -14,33 +14,20 @@ #include <stdint.h> uint32_t - ft_darken_ceil(t_rgb rgb, int32_t y, t_cub *cl) + ft_darken(t_rgb rgb, t_cub *cl) { t_rgb darker; float calc; + float dist; + if ((dist = cl->rlist.row_dist) <= 0) + dist = 0.0001; + calc = (dist * 0.4); + calc = (calc >= 255) ? (255) : (calc); + calc = (calc < 1) ? (1) : (calc); darker = rgb; - calc = ((float)(y - (75000.0 / cl->wlist.y_size)) - / (cl->wlist.y_size / 2)); - calc = (calc < 0) ? (0) : (calc); - darker.r *= 1 - calc; - darker.g *= 1 - calc; - darker.b *= 1 - calc; + darker.r /= calc; + darker.g /= calc; + darker.b /= calc; return (ft_rgb_to_hex(darker)); } - -/* uint32_t */ -/* ft_darken_floor(t_rgb rgb, int32_t y, t_cub *cl) */ -/* { */ -/* t_rgb darker; */ -/* float calc; */ - -/* calc = ((float)(y + (75000.0 / cl->wlist.y_size)) */ -/* / (cl->wlist.y_size / 2)) - 1.0; */ -/* calc = (calc < 0) ? (0) : (calc); */ -/* darker = rgb; */ -/* darker.r *= calc; */ -/* darker.g *= calc; */ -/* darker.b *= calc; */ -/* return (ft_rgb_to_hex(darker)); */ -/* } */ diff --git a/src/ft_draw_verline.c b/src/ft_draw_verline.c index b6729de..7bfba8d 100644 --- a/src/ft_draw_verline.c +++ b/src/ft_draw_verline.c @@ -13,33 +13,6 @@ #include <cub3d.h> #include <stdint.h> -/* static void */ -/* ft_draw_floor(t_cub *cl, int32_t y, int32_t x) */ -/* { */ -/* while ((uint32_t)y < cl->wlist.y_size) */ -/* { */ -/* *(int*)(cl->img.ptr + */ -/* (x * 4 + (y * cl->img.sizeline))) */ -/* = ft_darken_floor(cl->f_rgb, y, cl); */ -/* y++; */ -/* } */ -/* } */ - -static void - ft_draw_ceil(t_cub *cl, int32_t y, int32_t x) -{ - int16_t i; - - i = 0; - while (i <= y) - { - *(int*)(cl->img.ptr + - (x * 4 + (i * cl->img.sizeline))) - = ft_darken_ceil(cl->c_rgb, i, cl); - i++; - } -} - int8_t ft_draw_verline(t_cub *cl, int32_t x, int32_t y, int32_t y2) { @@ -48,7 +21,6 @@ int8_t (y < 0) ? (y = 0) : 0; (y2 < 0) ? (y2 = 0) : 0; - ft_draw_ceil(cl, y, x); (cl->rlist.line_h <= 0) ? (cl->rlist.line_h = 1) : 0; while (y < y2) { @@ -59,6 +31,5 @@ int8_t ft_draw_texture(cl, x, y, tex_y); y++; } - /* ft_draw_floor(cl, y, x); */ return (0); } diff --git a/src/ft_floor_cast.c b/src/ft_floor_cast.c index 6947403..1b22a71 100644 --- a/src/ft_floor_cast.c +++ b/src/ft_floor_cast.c @@ -13,18 +13,34 @@ #include <cub3d.h> #include <stdint.h> +/* static void */ +/* ft_draw_plain_horizontal(t_rgb rgb, t_cub *cl, int32_t y, int32_t x) */ +/* { */ +/* *(int*)(cl->img.ptr + */ +/* (x * 4 + (y * cl->img.sizeline))) */ +/* = ft_darken(rgb, cl); */ +/* } */ + static void - ft_put_floor_tex(uint16_t y, uint16_t x, t_cub *cl) + ft_draw_extra_tex(uint8_t tid, uint16_t y, uint16_t x, t_cub *cl) { + float dist; + float calc; + + if ((dist = cl->rlist.row_dist) <= 0) + dist = 0.0001; + calc = (dist * 0.4); + calc = (calc >= 255) ? (255) : (calc); + calc = (calc < 1) ? (1) : (calc); cl->img.ptr[x * 4 + (cl->img.sizeline * y)] = - (uint8_t)cl->tlist[6].ptr[cl->tlist[6].tex_x * 4 + 4 * - cl->tlist[6].img_h * cl->tlist[6].tex_y]; + (uint8_t)cl->tlist[tid].ptr[cl->tlist[tid].tex_x * 4 + 4 * + cl->tlist[tid].img_h * cl->tlist[tid].tex_y] / calc; cl->img.ptr[x * 4 + (cl->img.sizeline * y) + 1] = - (uint8_t)cl->tlist[6].ptr[cl->tlist[6].tex_x * 4 + 4 * - cl->tlist[6].img_h * cl->tlist[6].tex_y + 1]; + (uint8_t)cl->tlist[tid].ptr[cl->tlist[tid].tex_x * 4 + 4 * + cl->tlist[tid].img_h * cl->tlist[tid].tex_y + 1] / calc; cl->img.ptr[x * 4 + (cl->img.sizeline * y) + 2] = - (uint8_t)cl->tlist[6].ptr[cl->tlist[6].tex_x * 4 + 4 * - cl->tlist[6].img_h * cl->tlist[6].tex_y + 2]; + (uint8_t)cl->tlist[tid].ptr[cl->tlist[tid].tex_x * 4 + 4 * + cl->tlist[tid].img_h * cl->tlist[tid].tex_y + 2] / calc; cl->img.ptr[x * 4 + cl->wlist.x_size * y + 3] = (char)0; } @@ -37,9 +53,16 @@ static void * (rl->x_floor - rl->x_cell)) % (cl->tlist[6].img_w); cl->tlist[6].tex_x = (int32_t)(cl->tlist[6].img_h * (rl->y_floor - rl->y_cell)) % (cl->tlist[6].img_h); + cl->tlist[7].tex_y = (int32_t)(cl->tlist[7].img_w + * (rl->x_floor - rl->x_cell)) % (cl->tlist[7].img_w); + cl->tlist[7].tex_x = (int32_t)(cl->tlist[7].img_h + * (rl->y_floor - rl->y_cell)) % (cl->tlist[7].img_h); rl->x_floor += cl->mlist.x_floor_step; rl->y_floor += cl->mlist.y_floor_step; - ft_put_floor_tex(y, x, cl); + ft_draw_extra_tex(6, y, x, cl); + ft_draw_extra_tex(7, cl->wlist.y_size - y - 1, x, cl); + /* ft_draw_plain_horizontal(cl->f_rgb, cl, y, x); */ + /* ft_draw_plain_horizontal(cl->c_rgb, cl, cl->wlist.y_size - y - 1, x); */ } void diff --git a/src/ft_tex_init.c b/src/ft_tex_init.c index 116f537..599e902 100644 --- a/src/ft_tex_init.c +++ b/src/ft_tex_init.c @@ -42,6 +42,15 @@ static void &cl->tlist[6].bpp, &cl->tlist[6].sizeline, &cl->tlist[6].endian); } +static void + ft_get_ceil_tex(t_cub *cl) +{ + cl->tlist[7].img = mlx_xpm_file_to_image(cl->wlist.wlx, + cl->mlist.no_tex_path, &cl->tlist[7].img_w, &cl->tlist[7].img_h); + cl->tlist[7].ptr = mlx_get_data_addr(cl->tlist[7].img, + &cl->tlist[7].bpp, &cl->tlist[7].sizeline, &cl->tlist[7].endian); +} + void ft_wall_tex_init(t_cub *cl) { @@ -68,5 +77,6 @@ void if (cl->mlist.isnlvl) ft_get_nlvl_img(cl); ft_get_floor_tex(cl); + ft_get_ceil_tex(cl); cl->walltexgood = 1; } |