feat: separate utility functions for cardinal and intercardinal directions

This commit is contained in:
Khaïs COLIN 2025-07-28 14:59:07 +02:00 committed by freddy_vqr
parent 8fd70cb18a
commit b53fa93377
2 changed files with 44 additions and 11 deletions

View file

@ -70,7 +70,7 @@ void draw_line(t_cub3d_data *data, float start_angle)
} }
} }
t_direction angle_dir(float angle) t_cardinal_dir angle_cardinal_dir(float angle)
{ {
if (angle >= g_southwest || (angle > g_south && angle < g_southeast)) if (angle >= g_southwest || (angle > g_south && angle < g_southeast))
return (SOUTH); return (SOUTH);
@ -81,9 +81,25 @@ t_direction angle_dir(float angle)
return (WEST); return (WEST);
} }
t_direction player_dir(t_player player) t_cardinal_dir player_cardinal_dir(t_player player)
{ {
return (angle_dir(player.yaw)); return (angle_cardinal_dir(player.yaw));
}
t_intercardinal_dir angle_intercardinal_dir(float angle)
{
if (angle >= g_south && angle < g_east)
return (SOUTHEAST);
if (angle >= g_east && angle < g_north)
return (NORTHEAST);
if (angle >= g_north && angle < g_west)
return (NORTHWEST);
return (SOUTHWEST);
}
t_intercardinal_dir player_intercardinal_dir(t_player player)
{
return (angle_intercardinal_dir(player.yaw));
} }
int game_loop(t_cub3d_data *data) int game_loop(t_cub3d_data *data)
@ -91,13 +107,22 @@ int game_loop(t_cub3d_data *data)
mlx_destroy_image(data->mlx, data->img_data->img); mlx_destroy_image(data->mlx, data->img_data->img);
data->img_data->img = mlx_new_image(data->mlx, WIDTH, HEIGHT); data->img_data->img = mlx_new_image(data->mlx, WIDTH, HEIGHT);
if (player_dir(data->player) == SOUTH) if (player_intercardinal_dir(data->player) == SOUTHEAST)
ft_printf("southeast ");
if (player_intercardinal_dir(data->player) == SOUTHWEST)
ft_printf("southwest ");
if (player_intercardinal_dir(data->player) == NORTHEAST)
ft_printf("northeast ");
if (player_intercardinal_dir(data->player) == NORTHWEST)
ft_printf("northwest ");
if (player_cardinal_dir(data->player) == SOUTH)
ft_printf("south\n"); ft_printf("south\n");
if (player_dir(data->player) == EAST) if (player_cardinal_dir(data->player) == EAST)
ft_printf("east\n"); ft_printf("east\n");
if (player_dir(data->player) == NORTH) if (player_cardinal_dir(data->player) == NORTH)
ft_printf("north\n"); ft_printf("north\n");
if (player_dir(data->player) == WEST) if (player_cardinal_dir(data->player) == WEST)
ft_printf("west\n"); ft_printf("west\n");
float ray_angle = data->player.yaw - M_PI / 6; float ray_angle = data->player.yaw - M_PI / 6;

View file

@ -6,7 +6,7 @@
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */ /* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/07/17 14:58:19 by kcolin #+# #+# */ /* Created: 2025/07/17 14:58:19 by kcolin #+# #+# */
/* Updated: 2025/07/22 12:36:53 by kcolin ### ########.fr */ /* Updated: 2025/07/28 15:04:47 by kcolin ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -15,13 +15,21 @@
# include <stdbool.h> # include <stdbool.h>
typedef enum e_direction typedef enum e_caridnal_dir
{ {
NORTH, NORTH,
SOUTH, SOUTH,
EAST, EAST,
WEST WEST
} t_direction; } t_cardinal_dir;
typedef enum e_intercardinal_dir
{
NORTHEAST,
SOUTHEAST,
NORTHWEST,
SOUTHWEST,
} t_intercardinal_dir;
# define ERRLEN 1024 # define ERRLEN 1024
@ -41,7 +49,7 @@ typedef struct s_mapdata
bool isvalid; bool isvalid;
int startx; int startx;
int starty; int starty;
t_direction startdirection; t_cardinal_dir startdirection;
char error[ERRLEN]; char error[ERRLEN];
} t_mapdata; } t_mapdata;