From 6cee3288cf4d7f389790f8bc7213865ae630aa58 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 22 Nov 2024 15:35:25 +0100 Subject: [PATCH] feat: adding the list --- Makefile | 26 ++++---- mlx_layer/mlx_init.c | 24 +++---- mlx_layer/mlx_load_texture.c | 2 +- raycast/rc_utils.c | 124 ++++++++++++++++++++++------------- 4 files changed, 106 insertions(+), 70 deletions(-) diff --git a/Makefile b/Makefile index ce59e6e..cc5d027 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: rparodi +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/12 11:05:05 by rparodi #+# #+# # -# Updated: 2024/11/18 14:54:37 by rparodi ### ########.fr # +# Updated: 2024/11/22 13:06:59 by rparodi ### ########.fr # # # # **************************************************************************** # @@ -42,17 +42,19 @@ MLXFLAGS = -L$(MLX_DIR) -lmlx -L/opt/X11/lib -lX11 -lXext -lXrender -lXrandr -lX LDFLAGS += $(MLXFLAGS) SRC =\ - raycast/frame_update.c \ - mlx_layer/mlx_init.c \ - parsing/blank_for_raph.c \ - parsing/arguments.c \ - parsing/map.c \ - sources/main.c \ - sources/cleanups.c \ - sources/options.c \ - sources/rgb_to_color.c \ - sources/error.c \ - sources/options_impl.c + mlx_layer/mlx_init.c \ + mlx_layer/mlx_load_texture.c \ + raycast/frame_update.c \ + raycast/rc_utils.c \ + sources/options_impl.c \ + sources/main.c \ + sources/error.c \ + sources/cleanups.c \ + sources/options.c \ + sources/rgb_to_color.c \ + parsing/map.c \ + parsing/blank_for_raph.c \ + parsing/arguments.c # Objects diff --git a/mlx_layer/mlx_init.c b/mlx_layer/mlx_init.c index 91022d7..df0abcc 100644 --- a/mlx_layer/mlx_init.c +++ b/mlx_layer/mlx_init.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/11 19:53:42 by rparodi #+# #+# */ -/* Updated: 2024/11/12 06:19:04 by bgoulard ### ########.fr */ +/* Updated: 2024/11/22 15:17:07 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,17 +32,17 @@ int c3_redcross(t_info *info) { return (mlx_loop_end(info->mlx_ptr), EXIT_SUCCESS); } - -t_win_list *c3_init_mlx_window(t_info *info) -{ - int x; - int y; - - x = 0; - y = 0; - mlx_get_screen_size(info->mlx_ptr, &x, &y); - return (mlx_new_window(info->mlx_ptr, x, y, "C3D")); -} +t_win_list *c3_init_mlx_window(t_info *info); +/*t_win_list *c3_init_mlx_window(t_info *info)*/ +/*{*/ +/* int x;*/ +/* int y;*/ +/**/ +/* x = 0;*/ +/* y = 0;*/ +/* mlx_get_screen_size(info->mlx_ptr, &x, &y);*/ +/* return (mlx_new_window(info->mlx_ptr, x, y, "C3D"));*/ +/*}*/ int init_mlx_env(t_info *info) { diff --git a/mlx_layer/mlx_load_texture.c b/mlx_layer/mlx_load_texture.c index 72d5bd0..b07b643 100644 --- a/mlx_layer/mlx_load_texture.c +++ b/mlx_layer/mlx_load_texture.c @@ -28,7 +28,7 @@ t_img *mlx_load_image(t_info *info, char *path) bool mlx_load_all_textures(t_info *info) { size_t i; - + i = 0; info->map.texture[0] = mlx_load_image(info, "../textures/a.xpm"); info->map.texture[1] = mlx_load_image(info, "../textures/b.xpm"); diff --git a/raycast/rc_utils.c b/raycast/rc_utils.c index 803646a..c72c69e 100644 --- a/raycast/rc_utils.c +++ b/raycast/rc_utils.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/12 12:24:35 by rparodi #+# #+# */ -/* Updated: 2024/11/18 15:41:34 by rparodi ### ########.fr */ +/* Updated: 2024/11/22 15:35:10 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,59 +29,93 @@ double cub_convert_deg_to_rad(double degrees) /** * @brief Launches a ray for raycasting to determine the distance to the first wall. * - * This function calculates the distance of a ray cast in a specified angle + * This function calculates the distance of a ray cast in a specified angle * until it either hits a wall or reaches the maximum range. * * @param info A pointer to the `t_info` structure containing the map and other relevant data. * @param angle The angle of the ray being cast, in radians. - * - * @return The distance from the starting position to the first wall hit. + * + * @return The distance from the starting position to the first wall hit. * If no wall is hit within `MAX_RANGE`, the function returns `MAX_RANGE`. */ -double rc_launch(t_info *info, double angle) -{ - double distance; - t_dpoint direction; - t_dpoint rayon; + double rc_launch(t_info *info, double angle) + { + double distance; + t_dpoint direction; + t_dpoint rayon; - distance = 0; - direction.x = 0; - direction.y = 0; - rayon.x = 0; - rayon.y = 0; - while (distance < MAX_RANGE) - { + distance = 0; + direction.x = cos(angle); + direction.y = sin(angle); + rayon.x = 0; + rayon.y = 0; + while (distance < MAX_RANGE) + { rayon.x = direction.x * distance; rayon.y = direction.y * distance; - if (info->map.map[info->map.fraw[(int)rayon.x][(int)rayon.y]] == WALL) + if (info->map.map[(int)info->map.fraw[(int)rayon.x][(int)rayon.y]] == '1') return (distance); distance += STEP_SIZE; - } - return (MAX_RANGE); -} - -/** - * @brief Launches algorithm over a specified width with angle adjustments. - * - * @param info The structure of the game (for the view) - * @param spacing The spacing between rays. - * @param focal The focal length affecting the angle adjustment. - * @param width The total width (number of columns) to iterate over. - * - * @note The function assumes `rc_launch` is defined elsewhere to handle the angle. - */ -void shelves_launch(t_info *info, double spacing, double focal, int width) -{ - int x; - double angle; - - x = 0; - angle = 0; - while (x < width) - { - angle = info->player.view + atan(\ - (spacing / 2 - x * spacing / (width - 1)) / focal); - rc_launch(info, angle); - x++; } -} + return (MAX_RANGE); + } + + /** + * @brief Launches algorithm over a specified width with angle adjustments. + * + * @param info The structure of the game (for the view) + * @param spacing The spacing between rays. + * @param focal The focal length affecting the angle adjustment. + * @param width The total width (number of columns) to iterate over. + * + * @note The function assumes `rc_launch` is defined elsewhere to handle the angle. + */ + void shelves_launch(t_info *info, double spacing, double focal, int width) + { + int x; + double angle; + + x = 0; + while (x < width) + { + angle = info->player.view + atan(\ + (spacing / 2 - x * spacing / (width - 1)) / focal); + rc_launch(info, angle); + x++; + } + } + + /* ----------------------------------- */ + /* Some utils for the mlx window view */ + /* ----------------------------------- */ + + t_win_list *c3_init_mlx_window(t_info *info) + { + void *window; + int i; + int j; + int x; + int y; + + x = 0; + y = 0; + mlx_get_screen_size(info->mlx_ptr, &x, &y); + + i = 0; + window = mlx_new_window(info->mlx_ptr, x, y, "Raycasting"); + while (i < x) + { + j = 0; + while (j < y) + { + if (info->map.fraw[i / info->map.size.x][j / info->map.size.y] == '1') + mlx_pixel_put(info->mlx_ptr, window, i, j, 0xFFFFFF); + else + mlx_pixel_put(info->mlx_ptr, window, i, j, 0x000000); + j++; + } + i++; + } + mlx_loop(info->mlx_ptr); + return (window); + }