diff options
author | salaaad2 <arthudurant263@gmail.com> | 2020-03-10 17:46:21 +0100 |
---|---|---|
committer | salaaad2 <arthudurant263@gmail.com> | 2020-03-10 17:46:21 +0100 |
commit | b252f8d58790381d5fbece9748e188d42e769aa5 (patch) | |
tree | 7c677a5bade2d4060cb69e33982742818be68682 | |
parent | merge master (diff) | |
download | 42-cub3d-b252f8d58790381d5fbece9748e188d42e769aa5.tar.gz 42-cub3d-b252f8d58790381d5fbece9748e188d42e769aa5.tar.bz2 42-cub3d-b252f8d58790381d5fbece9748e188d42e769aa5.tar.xz 42-cub3d-b252f8d58790381d5fbece9748e188d42e769aa5.tar.zst 42-cub3d-b252f8d58790381d5fbece9748e188d42e769aa5.zip |
2 sprites max ???
-rw-r--r-- | inc/cub3d_defines.h | 2 | ||||
-rw-r--r-- | inc/cub3d_structs.h | 5 | ||||
-rw-r--r-- | map/map_one.cub | 19 | ||||
-rw-r--r-- | src/ft_draw_sprite.c | 45 | ||||
-rw-r--r-- | src/ft_draw_sprite_extra.c | 5 | ||||
-rw-r--r-- | src/ft_tex_init.c | 6 |
6 files changed, 49 insertions, 33 deletions
diff --git a/inc/cub3d_defines.h b/inc/cub3d_defines.h index edc3dec..b348a1c 100644 --- a/inc/cub3d_defines.h +++ b/inc/cub3d_defines.h @@ -115,7 +115,7 @@ enum */ # define FT_CHRST_VALID_PARSE "RNSEWFCLM" -# define FT_CHRST_MAP_ENTRY "012NSEWL " +# define FT_CHRST_MAP_ENTRY "01234NSEWL " # define FT_CHRST_SPAWN "NSEW" # define FT_CHRST_MAP_NON_WALL "02NESWL" # define FT_CHRST_COLLISION "12 " diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 20b64b5..1aaa1d5 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -87,6 +87,7 @@ typedef struct s_rgb typedef struct s_sprite { int32_t spritescreenx; + int32_t current_sprite; int32_t x; int32_t y; int32_t tex_x; @@ -180,7 +181,7 @@ typedef struct s_map size_t mapl_len; int32_t sprite_nbr; uint8_t sprite_var; - int32_t sprite_order[12]; + int32_t sprite_order[4096]; size_t line_chk; size_t map_start; uint8_t isspawn; @@ -219,7 +220,7 @@ typedef struct s_cub struct s_img img; struct s_rgb f_rgb; struct s_rgb c_rgb; - struct s_img tlist[8]; + struct s_img tlist[12]; struct s_sprite sprites[12][12]; } t_cub; diff --git a/map/map_one.cub b/map/map_one.cub index 212db65..724de7d 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -1,20 +1,21 @@ R 1000 700 -NO ./media/img/segfot_small.xpm -SO ./media/img/segfot_small.xpm -EA ./media/img/segfot_small.xpm -WE ./media/img/segfot_small.xpm +NO ./media/img/BRIQUASSES.xpm +SO ./media/img/BRIQUASSES_2.xpm +EA ./media/img/BRIQUASSE_3.xpm +WE ./media/img/MURLOL.xpm S ./media/img/pillar.xpm -C 50,100,200 -F 50,190,124 +C ./media/img/arrow1.xpm +F ./media/img/arrow2.xpm SH 6 111111111111111111 -120003000011000001 -10010E000000000201 -101100000111000001 +100000000002000001 +100000000003000001 +100100000004000201 +1011000N0111000001 111111111111110011 1000001 100001 1001001 100001 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index fcb2166..fbe7961 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -39,17 +39,24 @@ void { float dist_tab[4096]; int32_t it; + int32_t jt; it = 0; - while (it < cl->mlist.sprite_nbr) - { - dist_tab[it] = ((cl->plist.pos_x - cl->sprites[0][it].s_pos_x) * - (cl->plist.pos_x - cl->sprites[0][it].s_pos_x) + - (cl->plist.pos_y - cl->sprites[0][it].s_pos_y) * - (cl->plist.pos_y - cl->sprites[0][it].s_pos_y)); - cl->mlist.sprite_order[it] = it; - it++; - } + jt = 0; + while (jt < cl->mlist.sprite_var) + { + while (it < cl->mlist.sprite_nbr) + { + dist_tab[it] = ((cl->plist.pos_x - cl->sprites[jt][it].s_pos_x) * + (cl->plist.pos_x - cl->sprites[jt][it].s_pos_x) + + (cl->plist.pos_y - cl->sprites[jt][it].s_pos_y) * + (cl->plist.pos_y - cl->sprites[jt][it].s_pos_y)); + cl->mlist.sprite_order[it] = it; + it++; + } + it = 0; + jt++; + } it = 0; while (it < cl->mlist.sprite_nbr) { @@ -69,14 +76,14 @@ static void calc = (calc >= 255) ? (255) : (calc); calc = (calc < 1) ? (1) : (calc); cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = - (uint8_t)cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * - cl->tlist[4].img_h * sprite->tex_y] / calc; + (uint8_t)cl->tlist[sprite->current_sprite].ptr[sprite->tex_x * 4 + 4 * + cl->tlist[sprite->current_sprite].img_h * sprite->tex_y] / calc; cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline) + 1] = - (uint8_t)cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * - cl->tlist[4].img_h * sprite->tex_y + 1] / calc; + (uint8_t)cl->tlist[sprite->current_sprite].ptr[sprite->tex_x * 4 + 4 * + cl->tlist[sprite->current_sprite].img_h * sprite->tex_y + 1] / calc; cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline) + 2] = - (uint8_t)cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * - cl->tlist[4].img_h * sprite->tex_y + 2] / calc; + (uint8_t)cl->tlist[sprite->current_sprite].ptr[sprite->tex_x * 4 + 4 * + cl->tlist[sprite->current_sprite].img_h * sprite->tex_y + 2] / calc; cl->img.ptr[sprite->x * 4 + cl->wlist.x_size * sprite->y + 3] = (char)0; } @@ -89,16 +96,16 @@ void while (sprite->x < sprite->drawendx) { sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + - sprite->spritescreenx)) * cl->tlist[4].img_w / sprite->spritewidth); + sprite->spritescreenx)) * cl->tlist[sprite->current_sprite].img_w / sprite->spritewidth); sprite->y = sprite->drawstarty; while (sprite->y < sprite->drawendy) { d = sprite->y * 256 - cl->wlist.y_size * 128 + sprite->spriteheight * 128; - sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / + sprite->tex_y = ((d * cl->tlist[sprite->current_sprite].img_h / 2) / sprite->spriteheight) / 128; - if (sprite->transformy > 0 && cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * - cl->tlist[4].img_h * sprite->tex_y] + if (sprite->transformy > 0 && cl->tlist[sprite->current_sprite].ptr[sprite->tex_x * 4 + 4 * + cl->tlist[sprite->current_sprite].img_h * sprite->tex_y] && cl->rlist.wall_dist_tab[sprite->x] > sprite->transformy) { ft_put_sprite(sprite, cl); diff --git a/src/ft_draw_sprite_extra.c b/src/ft_draw_sprite_extra.c index f3cdf08..45f0dd5 100644 --- a/src/ft_draw_sprite_extra.c +++ b/src/ft_draw_sprite_extra.c @@ -13,6 +13,7 @@ #include <libft.h> #include <cub3d.h> #include <stdint.h> +#include <stdio.h> #include <stdlib.h> #include <math.h> @@ -49,11 +50,13 @@ void i = 0; j = 0; - while (j < cl->mlist.sprite_var) + while (j < 4) { while (i < cl->mlist.sprite_nbr) { sprite = cl->sprites[j][i]; + sprite.current_sprite = (j == 0) ? 4 : j + 7; + printf("%d\n", j); sprite.spritey = sprite.s_pos_x - (cl->plist.pos_x - 0.5); sprite.spritex = sprite.s_pos_y - (cl->plist.pos_y - 0.5); sprite.invdet = 1.0 / (cl->plist.plane_x * cl->plist.dir_y diff --git a/src/ft_tex_init.c b/src/ft_tex_init.c index 6c9edce..e27ffbe 100644 --- a/src/ft_tex_init.c +++ b/src/ft_tex_init.c @@ -52,9 +52,13 @@ static void cl->tlist[7].ptr = mlx_get_data_addr(cl->tlist[7].img, &cl->tlist[7].bpp, &cl->tlist[7].sizeline, &cl->tlist[7].endian); cl->tlist[8].img = mlx_xpm_file_to_image(cl->wlist.wlx, - cl->mlist.sprite_path, &cl->tlist[4].img_w, &cl->tlist[4].img_h); + "./media/img/hey.xpm", &cl->tlist[8].img_w, &cl->tlist[8].img_h); cl->tlist[8].ptr = mlx_get_data_addr(cl->tlist[8].img, &cl->tlist[8].bpp, &cl->tlist[8].sizeline, &cl->tlist[8].endian); + cl->tlist[9].img = mlx_xpm_file_to_image(cl->wlist.wlx, + "./media/img/crapaud.xpm", &cl->tlist[9].img_w, &cl->tlist[9].img_h); + cl->tlist[9].ptr = mlx_get_data_addr(cl->tlist[9].img, + &cl->tlist[9].bpp, &cl->tlist[9].sizeline, &cl->tlist[9].endian); } static void |