From c8de182e9fa0c8a2674bf2f13d2ed9f500607ebd Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 4 Feb 2020 03:40:05 +0100 Subject: Norming --- src/sprite_sort.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/sprite_sort.c (limited to 'src/sprite_sort.c') diff --git a/src/sprite_sort.c b/src/sprite_sort.c new file mode 100644 index 0000000..4227743 --- /dev/null +++ b/src/sprite_sort.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sprite_sort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/04 02:35:05 by cacharle #+# #+# */ +/* Updated: 2020/02/04 03:38:15 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d.h" + +static t_vector vector_sub(t_vector a, t_vector b) +{ + a.x -= b.x; + a.y -= b.y; + return (a); +} + +static int sprite_compar(const void *a, const void *b) +{ + const t_sprite *sprite_a; + const t_sprite *sprite_b; + + sprite_a = a; + sprite_b = b; + if (sprite_a->dist > sprite_b->dist) + return (-1); + if (sprite_a->dist < sprite_b->dist) + return (1); + return (0); +} + +static void sprites_dist(t_state *state) +{ + int i; + + i = -1; + while (++i < state->sprites_num) + state->sprites[i].dist = + vector_norm(vector_sub(state->sprites[i].pos, state->pos)); +} + +void sprite_sort(t_state *state) +{ + sprites_dist(state); + ft_qsort(state->sprites, state->sprites_num, + sizeof(t_sprite), sprite_compar); +} -- cgit