mirror of
https://codeberg.org/ACME-Corporation/cub3d.git
synced 2025-12-06 09:58:09 +01:00
feat: separate utility functions for cardinal and intercardinal directions
This commit is contained in:
parent
8fd70cb18a
commit
b53fa93377
2 changed files with 44 additions and 11 deletions
39
src/main.c
39
src/main.c
|
|
@ -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))
|
||||
return (SOUTH);
|
||||
|
|
@ -81,9 +81,25 @@ t_direction angle_dir(float angle)
|
|||
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)
|
||||
|
|
@ -91,13 +107,22 @@ int game_loop(t_cub3d_data *data)
|
|||
mlx_destroy_image(data->mlx, data->img_data->img);
|
||||
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");
|
||||
if (player_dir(data->player) == EAST)
|
||||
if (player_cardinal_dir(data->player) == EAST)
|
||||
ft_printf("east\n");
|
||||
if (player_dir(data->player) == NORTH)
|
||||
if (player_cardinal_dir(data->player) == NORTH)
|
||||
ft_printf("north\n");
|
||||
if (player_dir(data->player) == WEST)
|
||||
if (player_cardinal_dir(data->player) == WEST)
|
||||
ft_printf("west\n");
|
||||
|
||||
float ray_angle = data->player.yaw - M_PI / 6;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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>
|
||||
|
||||
typedef enum e_direction
|
||||
typedef enum e_caridnal_dir
|
||||
{
|
||||
NORTH,
|
||||
SOUTH,
|
||||
EAST,
|
||||
WEST
|
||||
} t_direction;
|
||||
} t_cardinal_dir;
|
||||
|
||||
typedef enum e_intercardinal_dir
|
||||
{
|
||||
NORTHEAST,
|
||||
SOUTHEAST,
|
||||
NORTHWEST,
|
||||
SOUTHWEST,
|
||||
} t_intercardinal_dir;
|
||||
|
||||
# define ERRLEN 1024
|
||||
|
||||
|
|
@ -41,7 +49,7 @@ typedef struct s_mapdata
|
|||
bool isvalid;
|
||||
int startx;
|
||||
int starty;
|
||||
t_direction startdirection;
|
||||
t_cardinal_dir startdirection;
|
||||
char error[ERRLEN];
|
||||
} t_mapdata;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue