From 6957e843348c5a923d8ea0762c0401641d7ed879 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Wed, 8 Oct 2025 13:15:32 +0200 Subject: [PATCH] fix: Fixed undefined behaviors --- src/sprites/sprite_caster.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/sprites/sprite_caster.c b/src/sprites/sprite_caster.c index d327842..edd3648 100644 --- a/src/sprites/sprite_caster.c +++ b/src/sprites/sprite_caster.c @@ -22,6 +22,8 @@ static void calculate_pos_and_transform(t_cub3d_data *data, t_sprite *sprite, int i) { + double tmp; + sprite->sprite_pos_x = data->sprite_list[data->sprite_order[i]]->x - data->player.x; sprite->sprite_pos_y = data->sprite_list[data->sprite_order[i]]->y @@ -33,24 +35,31 @@ static void calculate_pos_and_transform(t_cub3d_data *data, t_sprite *sprite, sprite->transform_y = sprite->inv_det * (-data->player.plane_y * sprite->sprite_pos_x + data->player.plane_x * sprite->sprite_pos_y); - sprite->sprite_screen_x = (int)((WIDTH / 2) + tmp = ((WIDTH / 2) * (1 + sprite->transform_x / sprite->transform_y)); + if (tmp < INFINITY && tmp > -INFINITY) + sprite->sprite_screen_x = (int)tmp; } static void sprite_calculate_pos_and_dist(t_cub3d_data *data, int i) { t_sprite *sprite; + double tmp; sprite = data->sprite_list[i]; calculate_pos_and_transform(data, sprite, i); - sprite->sprite_height = (int)fabs((HEIGHT / sprite->transform_y)); + tmp = fabs((HEIGHT / sprite->transform_y)); + if (tmp < INFINITY && tmp > -INFINITY) + sprite->sprite_height = (int)tmp; sprite->sprite_draw_start_y = -sprite->sprite_height / 2 + HEIGHT / 2; if (sprite->sprite_draw_start_y < 0) sprite->sprite_draw_start_y = 0; sprite->sprite_draw_end_y = sprite->sprite_height / 2 + HEIGHT / 2; if (sprite->sprite_draw_end_y >= HEIGHT) sprite->sprite_draw_end_y = HEIGHT - 1; - sprite->sprite_width = (int)fabs((HEIGHT / sprite->transform_y)); + tmp = fabs((HEIGHT / sprite->transform_y)); + if (tmp < INFINITY && tmp > -INFINITY) + sprite->sprite_width = (int)tmp; sprite->sprite_draw_start_x = -sprite->sprite_width / 2 + sprite->sprite_screen_x; if (sprite->sprite_draw_start_x < 0)