diff options
Diffstat (limited to '')
-rw-r--r-- | inc/cub3d_structs.h | 2 | ||||
-rw-r--r-- | map/map_one.cub | 11 | ||||
-rw-r--r-- | src/ft_draw_sprite.c | 90 | ||||
-rw-r--r-- | src/ft_draw_sprite_extra.c | 2 |
4 files changed, 47 insertions, 58 deletions
diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 7545f3b..6db79de 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -197,7 +197,7 @@ typedef struct s_map size_t mapl_len; int32_t sprite_nbr; uint8_t sprite_var; - int32_t sprite_order[4096]; + int32_t sprite_order[8][4096]; int32_t traps_nbr; int32_t traps_order[512]; size_t line_chk; diff --git a/map/map_one.cub b/map/map_one.cub index 3e9886e..244bd53 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -9,20 +9,25 @@ S ./media/img/pillar.xpm C ./media/img/wood_ceil.xpm F ./media/img/parquet.xpm +S3 ./media/img/pylon.xpm +S4 ./media/img/larry.xpm +S5 ./media/img/wood_chest.xpm + + T ./media/img/spikes.xpm SH 2 111111111111111111 -100000000000000001 +140000000000300001 100220E02200000001 -100100000000000001 +100100000000300001 101100000111000001 111111111111110011 1000001 100001 1001001 100001 1011001 100001 111101111111110111 -100000001101010111 +120500001101010111 100000000000000011 100000000000000011 11T000001101000111 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index ca38fcd..c4e305e 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -17,69 +17,53 @@ #include <stdlib.h> #include <math.h> -/* static void */ -/* ft_sort_sprites_norme(float *dist_tab, int32_t *i, t_cub *cl) */ -/* { */ -/* uint32_t tmp; */ -/* uint32_t it; */ +static void + ft_sort_sprites_norme(float *dist_tab, uint16_t *i, uint16_t j, t_cub *cl) +{ + uint32_t tmp; + uint32_t it; -/* it = *i; */ -/* tmp = 0; */ -/* if (dist_tab[it] > dist_tab[it + 1]) */ -/* { */ -/* puts("qwe"); */ -/* tmp = dist_tab[it]; */ -/* dist_tab[it] = dist_tab[it + 1]; */ -/* dist_tab[it + 1] = tmp; */ -/* tmp = cl->mlist.sprite_order[it]; */ -/* cl->mlist.sprite_order[it] = cl->mlist.sprite_order[it + 1]; */ -/* cl->mlist.sprite_order[it + 1] = tmp; */ -/* it = 0; */ -/* } */ -/* } */ + it = *i; + tmp = 0; + if (dist_tab[it] < dist_tab[it + 1]) + { + tmp = dist_tab[it]; + dist_tab[it] = dist_tab[it + 1]; + dist_tab[it + 1] = tmp; + tmp = cl->mlist.sprite_order[j][it]; + cl->mlist.sprite_order[j][it] = cl->mlist.sprite_order[j][it + 1]; + cl->mlist.sprite_order[j][it + 1] = tmp; + it = 0; + } +} void ft_sort_sprites(t_cub *cl) { - float dist_tab[4096]; - int32_t it; - int32_t jt; - int32_t tmp; + float dist_tab[8][4096]; + uint16_t it; + uint16_t jt; - it = 0; - jt = 0; - while (jt < cl->mlist.sprite_var) + it = -1; + jt = -1; + while (++jt < cl->mlist.sprite_var) { - while (it < cl->mlist.sprite_nbr) + 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++; + dist_tab[jt][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[jt][it] = it; } - it = 0; - jt++; - } - it = 0; - while (it < cl->mlist.sprite_nbr) - { - if (dist_tab[it] < dist_tab[it + 1]) - { - tmp = dist_tab[it]; - dist_tab[it] = dist_tab[it + 1]; - dist_tab[it + 1] = tmp; - tmp = cl->mlist.sprite_order[it]; - cl->mlist.sprite_order[it] = cl->mlist.sprite_order[it + 1]; - cl->mlist.sprite_order[it + 1] = tmp; - it = 0; - } - it++; + it = -1; } - for (int i = 0; i < 4; i++) - printf("%d\n", cl->mlist.sprite_order[i]); + it = -1; + jt = -1; + while (++jt < cl->mlist.sprite_var) + while (++it < cl->mlist.sprite_nbr) + ft_sort_sprites_norme(dist_tab[jt], &it, jt, cl); } static void diff --git a/src/ft_draw_sprite_extra.c b/src/ft_draw_sprite_extra.c index 696bdff..25c9c7a 100644 --- a/src/ft_draw_sprite_extra.c +++ b/src/ft_draw_sprite_extra.c @@ -68,7 +68,7 @@ void { while (i < cl->mlist.sprite_nbr) { - sprite = cl->sprites[j][cl->mlist.sprite_order[i]]; + sprite = cl->sprites[j][cl->mlist.sprite_order[j][i]]; sprite.current_sprite = (j == 0) ? 4 : j + 7; sprite.spritey = sprite.s_pos_x - (cl->plist.pos_x - 0.5); sprite.spritex = sprite.s_pos_y - (cl->plist.pos_y - 0.5); |