Repository navigation
Expand file tree
/
Copy pathdda.c
More file actions
78 lines (71 loc) · 2.47 KB
/
Copy pathdda.c
File metadata and controls
78 lines (71 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* dda.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: dbarba-v <dbarba-v@student.42madrid.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2026/01/16 11:19:40 by dbarba-v #+# #+# */
/* Updated: 2026/01/16 16:16:24 by dbarba-v ### ########.fr */
/* */
/* ************************************************************************** */
#include "game.h"
#include <math.h>
int get_step(float ray_dir)
{
if (ray_dir < 0)
return (-1);
else
return (1);
}
float get_side_dist(float ray_dir, float player_xy, int map_xy,
float delta_dist)
{
if (ray_dir < 0)
return ((player_xy - map_xy) * delta_dist);
else
return ((map_xy + 1.0 - player_xy) * delta_dist);
}
void setup_dda(t_render *render_info, t_game *game)
{
t_player *player;
float ray_dir_x;
float ray_dir_y;
player = &(game->scene->map.player);
ray_dir_x = render_info->ray_dir_x;
ray_dir_y = render_info->ray_dir_y;
render_info->map_x = (int)player->x;
render_info->map_y = (int)player->y;
render_info->delta_dist_x = fabs(1 / render_info->ray_dir_x);
render_info->delta_dist_y = fabs(1 / render_info->ray_dir_y);
render_info->step_x = get_step(render_info->ray_dir_x);
render_info->step_y = get_step(render_info->ray_dir_y);
render_info->side_dist_x = get_side_dist(ray_dir_x, player->x,
render_info->map_x, render_info->delta_dist_x);
render_info->side_dist_y = get_side_dist(ray_dir_y, player->y,
render_info->map_y, render_info->delta_dist_y);
}
void dda(t_render *render_info, t_game *game)
{
int map_x;
int map_y;
map_x = render_info->map_x;
map_y = render_info->map_y;
while (1)
{
if (render_info->side_dist_x < render_info->side_dist_y)
{
render_info->side_dist_x += render_info->delta_dist_x;
map_x += render_info->step_x;
render_info->side = 0;
}
else
{
render_info->side_dist_y += render_info->delta_dist_y;
map_y += render_info->step_y;
render_info->side = 1;
}
if (game->scene->map.matrix[map_y][map_x] == '1')
return ;
}
}