diff --git a/Makefile b/Makefile index 2114e01..9532e94 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: rparodi +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/12 11:05:05 by rparodi #+# #+# # -# Updated: 2024/12/02 00:17:35 by rparodi ### ########.fr # +# Updated: 2024/12/16 14:50:54 by bgoulard ### ########.fr # # # # **************************************************************************** # @@ -44,16 +44,19 @@ MLXFLAGS += -L/opt/X11/lib LDFLAGS += $(MLXFLAGS) SRC =\ + ft_addons/ft_inrange.c \ mlx_layer/mlx_init.c \ mlx_layer/looks.c \ - mlx_layer/mlx_load_texture.c \ mlx_layer/mooves.c \ mlx_layer/hooks.c \ + mlx_layer/keys_event.c \ raycast/frame_update.c \ raycast/frame_update2.c \ raycast/rc_utils.c \ raycast/utils_math.c \ raycast/get_cl.c \ + raycast/draw_call.c \ + raycast/get_texture.c \ sources/options_impl.c \ sources/main.c \ sources/error.c \ @@ -127,7 +130,6 @@ $(OBJDIRNAME)/%.o: %.c # Header header: - @clear @printf '\n\n' @printf '$(GOLD) ******* ****** ******* $(END)\n' @printf '$(GOLD) ****** *** ******* $(END)\n' diff --git a/ft_addons/ft_inrange.c b/ft_addons/ft_inrange.c new file mode 100644 index 0000000..e87b88f --- /dev/null +++ b/ft_addons/ft_inrange.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_inrange.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: bgoulard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/16 06:04:32 by bgoulard #+# #+# */ +/* Updated: 2024/12/16 09:01:36 by bgoulard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +// dest ft_math/ft_inrange.c +#include + +bool ft_inrange_ex(int value, int min, int max) +{ + return (value > min && value < max); +} + +bool ft_inrange(int value, int min, int max) +{ + return (value >= min && value <= max); +} diff --git a/includes/cub3d.h b/includes/cub3d.h index 9e74661..191c01d 100644 --- a/includes/cub3d.h +++ b/includes/cub3d.h @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/30 16:30:26 by rparodi #+# #+# */ -/* Updated: 2024/12/05 16:45:30 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:48:17 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,9 +22,15 @@ # include +// raycasting +void draw_bg(t_info *data); +void set_step(t_ipoint *step, t_dpoint raydir); +void set_side_dist(t_dpoint *side_dist, t_dpoint *tb, t_ipoint pos_i); +t_texture *get_texture(int side, t_ipoint step, t_info *data); +void draw_(int *ti, double *td, t_ipoint step, t_info *data); + // utils void draw_floor(t_info *data); -void dump_info(t_info *info); int render_frame(t_info *data); void my_mlx_pixel_put(t_info *data, int x, int y, int color); double deg2rad(int deg); @@ -38,6 +44,9 @@ void move_backward(t_info *data); void move_left(t_info *data); void move_right(t_info *data); +int keyrelease_feature(int keycode, t_info *data); +int keypress_feature(int keycode, t_info *data); +int displacement_hook(t_info *data); int get_cl(int side, t_ipoint step); t_tile *c3_get_cell(t_tile *map, t_ipoint dimensions, t_ipoint pos); diff --git a/includes/cub3d_struct.h b/includes/cub3d_struct.h index 4f12c04..130df45 100644 --- a/includes/cub3d_struct.h +++ b/includes/cub3d_struct.h @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/28 13:53:54 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 18:01:48 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:15:43 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,7 @@ # define FILE_EXTENSION ".cub" # define FILE_EXTENSION_LEN 4 -# define BG_CLG 0 +# define BG_SKY 0 # define BG_FLR 1 # define TILE_SIZE 64 # define WIN_COEF .5 @@ -26,8 +26,8 @@ // defines that should be mooved to a config option / file # define FOV 70 -# define ROT_SPEED 0.1 -# define MOVE_SPEED 0.5 +# define ROT_SPEED 0.004 +# define MOVE_SPEED 0.008 // -- graphic utils @@ -132,12 +132,25 @@ typedef enum e_error ERROR_MISSING_FILE, ERROR_MALLOC, ERROR_PARSE, + ERROR_MAP_OPEN, + ERROR_PARSE_BG_COLOR_FORMAT, + ERROR_PARSE_ALREADY_SET, ERROR_CLI, ERROR_MLX, ERROR_TEXTURE_FORMAT, ERROR_IMPLEM, } t_error; +typedef struct s_kb +{ + bool forward; + bool backward; + bool left; + bool right; + bool l_left; + bool l_right; +} t_keyboard; + typedef struct s_pixel_buffer { char *img_addr; @@ -153,11 +166,13 @@ typedef struct s_info { t_error last_error; int errno_state; + t_keyboard kb; t_xvar *mlx_ptr; t_win_list *win_ptr; t_ipoint screen_size; t_pixel_buffer camera; + bool redraw; t_map map; t_player player; diff --git a/includes/ft_addons.h b/includes/ft_addons.h new file mode 100644 index 0000000..78c7492 --- /dev/null +++ b/includes/ft_addons.h @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_addons.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: bgoulard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/16 06:09:01 by bgoulard #+# #+# */ +/* Updated: 2024/12/16 09:36:19 by bgoulard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_ADDONS_H + +# include + +// ft_addons +/// @brief Says if a value is in a range excluding the bounds +/// @param value The value to check +/// @param min The lower bound +/// @param max The upper bound +/// @return true if the value is in the range, false otherwise +bool ft_inrange_ex(int value, int min, int max); + +/// @brief Says if a value is in a range including the bounds +/// @param value The value to check +/// @param min The lower bound +/// @param max The upper bound +/// @return true if the value is in the range, false otherwise +bool ft_inrange(int value, int min, int max); + +#endif diff --git a/libft/include/ft_string.h b/libft/include/ft_string.h index f0daf7a..b315674 100644 --- a/libft/include/ft_string.h +++ b/libft/include/ft_string.h @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/07 23:25:27 by bgoulard #+# #+# */ -/* Updated: 2024/08/21 21:42:42 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 06:02:56 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -322,7 +322,7 @@ size_t ft_strclen(char *str, char c); /// @param str String to search from /// @param c Char to search /// @return the number of occurance of char c in string str -size_t ft_strcnb(char *str, char c); +size_t ft_strcnb(const char *str, char c); /// @brief Calculate the length of the starting segment of str that contain /// char from the accept string diff --git a/libft/src/ft_string/ft_str/ft_strcnb.c b/libft/src/ft_string/ft_str/ft_strcnb.c index 19f5960..7bda7df 100644 --- a/libft/src/ft_string/ft_str/ft_strcnb.c +++ b/libft/src/ft_string/ft_str/ft_strcnb.c @@ -6,13 +6,13 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/28 10:58:46 by bgoulard #+# #+# */ -/* Updated: 2024/05/18 20:04:31 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 06:02:31 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ #include -size_t ft_strcnb(char *str, char c) +size_t ft_strcnb(const char *str, char c) { size_t i; size_t nb; diff --git a/maps/bad_format_color_c.cub b/maps/bad_format_color_c.cub deleted file mode 100644 index c5ff595..0000000 --- a/maps/bad_format_color_c.cub +++ /dev/null @@ -1,23 +0,0 @@ -SO ./textures/png_ugly.png -NO ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255,255 -C 255,,255 - - - - - - - - - - - - - -111 -1N1 -111 diff --git a/maps/bad_format_color_f.cub b/maps/bad_format_color_f.cub deleted file mode 100644 index 04da1ac..0000000 --- a/maps/bad_format_color_f.cub +++ /dev/null @@ -1,23 +0,0 @@ -SO ./textures/png_ugly.png -NO ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255, -C 255,255,255 - - - - - - - - - - - - - -111 -1N1 -111 diff --git a/maps/bad_format_map_char.cub b/maps/bad_format_map_char.cub deleted file mode 100644 index 49ea9c7..0000000 --- a/maps/bad_format_map_char.cub +++ /dev/null @@ -1,24 +0,0 @@ -SO ./textures/png_ugly.png -NO ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255,255 -C 255,255,255 - - - - - - - - - - - - - -111 -1N11111 -1000xy1 -1111111 diff --git a/maps/bad_format_map_open.cub b/maps/bad_format_map_open.cub deleted file mode 100644 index fe70115..0000000 --- a/maps/bad_format_map_open.cub +++ /dev/null @@ -1,23 +0,0 @@ -SO ./textures/png_ugly.png -NO ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255,255 -C 255,255,255 - - - - - - - - - - - - - -1111 -00N1 -1111 diff --git a/maps/bad_format_texture.cub b/maps/bad_format_texture.cub deleted file mode 100644 index 2d0daff..0000000 --- a/maps/bad_format_texture.cub +++ /dev/null @@ -1,23 +0,0 @@ -SO ./textures/png_ugly.png -NO = ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255,255 -C 255,255,255 - - - - - - - - - - - - - -111 -1N1 -111 diff --git a/maps/bad_open_map.cub b/maps/bad_open_map.cub new file mode 100644 index 0000000..6d730a2 --- /dev/null +++ b/maps/bad_open_map.cub @@ -0,0 +1,20 @@ +SO ./textures/b.xpm +NO ./textures/wasteland_32.xpm +WE ./textures/sandy_32.xpm +EA ./textures/cobblestone_32.xpm + +F 0,255,0 +C 0,123,255 + + + + +11111111111111111111 +10000011000001010101 +10000011000000000001 +10111111111111000101 +1011 1000000 +10111111 11000100 +10000011111110000000 +100000000000000N0000 +11111111111111111111 diff --git a/maps/bad_open_map_inside.cub b/maps/bad_open_map_inside.cub new file mode 100644 index 0000000..066eeb3 --- /dev/null +++ b/maps/bad_open_map_inside.cub @@ -0,0 +1,20 @@ +SO ./textures/b.xpm +NO ./textures/wasteland_32.xpm +WE ./textures/sandy_32.xpm +EA ./textures/cobblestone_32.xpm + +F 0,255,0 +C 0,123,255 + + + + +11111111111111111111 +10000011000001010101 +10000011000000000001 +10111111101111000101 +1011 1000000 +10111111 11000100 +10000011111110000000 +100000000000000N0000 +11111111111111111111 diff --git a/maps/bad_perm.cub b/maps/bad_perm.cub deleted file mode 100644 index 07fbde4..0000000 --- a/maps/bad_perm.cub +++ /dev/null @@ -1,23 +0,0 @@ -SO ./textures/png_ugly.png -NO ./textures/png_ugly.png -WE ./textures/png_pretty.png -EA ./textures/png_pretty.png - -F 255,255,255 -C 255,255,255 - - - - - - - - - - - - - -111 -1N1 -111 diff --git a/maps/valid_01.cub b/maps/valid_01.cub index 4fe51a5..eba4ccc 100644 --- a/maps/valid_01.cub +++ b/maps/valid_01.cub @@ -1,10 +1,10 @@ -SO ./textures/a.xpm -NO ./textures/a.xpm -WE ./textures/a.xpm -EA ./textures/a.xpm +SO ./textures/b.xpm +NO ./textures/wasteland_32.xpm +WE ./textures/sandy_32.xpm +EA ./textures/cobblestone_32.xpm -F 255,255,255 -C 255,255,255 +F 0,255,0 +C 0,255,255 @@ -19,7 +19,7 @@ C 255,255,255 11111111111111111111111 -100000000N0000000000001 +100000000S0000000000001 10000000000000000000001 10000000000000000000001 11111011101100111110011 diff --git a/maps/valid_02.cub b/maps/valid_02.cub new file mode 100644 index 0000000..c467d8c --- /dev/null +++ b/maps/valid_02.cub @@ -0,0 +1,20 @@ +SO ./textures/b.xpm +NO ./textures/wasteland_32.xpm +WE ./textures/sandy_32.xpm +EA ./textures/cobblestone_32.xpm + +F 0,255,0 +C 0,123,255 + + + + +11111111111111111111 +10000011000001010101 +10000011000000000001 +10111111111111000101 +1011 1000001 +10111111 11000101 +10000011111110000001 +100000000000000N0001 +11111111111111111111 diff --git a/mlx_layer/hooks.c b/mlx_layer/hooks.c index d280339..b78ce3b 100644 --- a/mlx_layer/hooks.c +++ b/mlx_layer/hooks.c @@ -6,44 +6,38 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/28 14:12:25 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 18:46:32 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:16:17 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include "cub3d_struct.h" -#include "mlx_functions.h" - -#include "ft_char.h" #include -#include +#include -int key_hook(int keycode, t_info *data) +static void update_pos_i(t_player *player) { - if (ft_isalpha(keycode)) - printf("Event detected: %d\t(%c)\n", keycode, keycode); - else if (keycode == 65361) - printf("Event detected: %d\t(Left Arrow)\n", keycode); - else if (keycode == 65363) - printf("Event detected: %d\t(Right Arrow)\n", keycode); - else if (keycode == 65307) - printf("Event detected: %d\t(Echap)\n", keycode); - else - printf("Event detected: %d\n", keycode); - if (keycode == XK_Escape) - mlx_loop_end(data->mlx_ptr); - if (keycode == XK_w) + player->pos_i.x = (int)player->pos.x; + player->pos_i.y = (int)player->pos.y; +} + +int displacement_hook(t_info *data) +{ + data->redraw = true; + update_pos_i(&data->player); + if (data->kb.forward && !data->kb.backward) move_straight(data); - if (keycode == XK_s) + if (data->kb.backward && !data->kb.forward) move_backward(data); - if (keycode == XK_a) + if (data->kb.left && !data->kb.right) move_left(data); - if (keycode == XK_d) + if (data->kb.right && !data->kb.left) move_right(data); - if (keycode == XK_Left) + if (data->kb.l_left && !data->kb.l_right) look_left(data); - if (keycode == XK_Right) + if (data->kb.l_right && !data->kb.l_left) look_right(data); + update_pos_i(&data->player); return (0); } diff --git a/mlx_layer/keys_event.c b/mlx_layer/keys_event.c new file mode 100644 index 0000000..ad7b0c9 --- /dev/null +++ b/mlx_layer/keys_event.c @@ -0,0 +1,63 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* keys_event.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: bgoulard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/16 14:40:02 by bgoulard #+# #+# */ +/* Updated: 2024/12/16 14:41:40 by bgoulard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d_struct.h" +#include "mlx_functions.h" + +#include +#include + +void set_kb(t_keyboard *kb, int keycode) +{ + if (keycode == XK_w) + kb->forward = true; + if (keycode == XK_s) + kb->backward = true; + if (keycode == XK_a) + kb->left = true; + if (keycode == XK_d) + kb->right = true; + if (keycode == XK_Right) + kb->l_right = true; + if (keycode == XK_Left) + kb->l_left = true; +} + +void unset_kb(t_keyboard *kb, int keycode) +{ + if (keycode == XK_w) + kb->forward = false; + if (keycode == XK_s) + kb->backward = false; + if (keycode == XK_a) + kb->left = false; + if (keycode == XK_d) + kb->right = false; + if (keycode == XK_Left) + kb->l_left = false; + if (keycode == XK_Right) + kb->l_right = false; +} + +int keypress_feature(int keycode, t_info *data) +{ + if (keycode == XK_Escape) + mlx_loop_end(data->mlx_ptr); + set_kb(&data->kb, keycode); + return (0); +} + +int keyrelease_feature(int keycode, t_info *data) +{ + unset_kb(&data->kb, keycode); + return (0); +} diff --git a/mlx_layer/mlx_init.c b/mlx_layer/mlx_init.c index f3bdab0..852ee40 100644 --- a/mlx_layer/mlx_init.c +++ b/mlx_layer/mlx_init.c @@ -6,25 +6,22 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/11 19:53:42 by rparodi #+# #+# */ -/* Updated: 2024/12/05 16:55:30 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:40:55 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include "cub3d_struct.h" + #include "mlx_functions.h" #include "mlx_structs.h" -#include "ft_string.h" + #include "ft_math.h" +#include #include #include -int c3_frame_update(void *inf_ptr); - -int key_hook(int keycode, t_info *data); - -/* move player w keys and call to redraw screen */ int c3_keyhook(int keycode, t_info *info) { if (keycode == XK_Escape || keycode == 65307) @@ -41,8 +38,8 @@ t_win_list *c3_init_mlx_window(t_info *info) { mlx_get_screen_size(info->mlx_ptr, \ &info->screen_size.x, &info->screen_size.y); - /*info->screen_size.x *= WIN_COEF;*/ - /*info->screen_size.y *= WIN_COEF;*/ + info->screen_size.x *= WIN_COEF; + info->screen_size.y *= WIN_COEF; ft_clamp(info->screen_size.x, 0, 1920); ft_clamp(info->screen_size.y, 0, 1080); return (\ @@ -58,7 +55,9 @@ int init_mlx_env(t_info *info) info->win_ptr = c3_init_mlx_window(info); if (!info->win_ptr) return (ERROR_MLX); - mlx_hook(info->win_ptr, KeyPress, KeyPressMask, key_hook, info); + mlx_hook(info->win_ptr, KeyPress, KeyPressMask, keypress_feature, info); + mlx_hook(info->win_ptr, KeyRelease, KeyReleaseMask, keyrelease_feature, \ + info); mlx_hook(info->win_ptr, DestroyNotify, StructureNotifyMask, \ c3_redcross, info); mlx_loop_hook(info->mlx_ptr, (int (*)())shelves_launch, info); diff --git a/mlx_layer/mlx_load_texture.c b/mlx_layer/mlx_load_texture.c deleted file mode 100644 index 66e5ab3..0000000 --- a/mlx_layer/mlx_load_texture.c +++ /dev/null @@ -1,45 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* mlx_load_texture.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: rparodi +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2024/11/20 12:25:45 by rparodi #+# #+# */ -/* Updated: 2024/12/05 17:01:12 by rparodi ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "cub3d.h" -#include "mlx_functions.h" - -t_img *mlx_load_image(t_info *info, char *path) -{ - t_img *image; - int size; - - size = TILES_SIZE; - image = mlx_xpm_file_to_image(info->mlx_ptr, path, &size, &size); - if (!image) - return (NULL); - return (image); -} - -bool mlx_load_all_textures(t_info *info) -{ - size_t i; - - i = 0; - info->map.texture[0] = mlx_load_image(info, "../textures/wasteland_32.xpm"); - info->map.texture[1] = mlx_load_image(info, "../textures/b.xpm"); - info->map.texture[2] = mlx_load_image(info, "../textures/sandy_32.xpm"); - info->map.texture[3] = mlx_load_image(info, "../textures/cobblestone_32.xpm"); - - while (i < 4) - { - if (!info->map.texture[i]) - return (false); - i++; - } - return (true); -} diff --git a/mlx_layer/mooves.c b/mlx_layer/mooves.c index 4fa1a9e..2b857b6 100644 --- a/mlx_layer/mooves.c +++ b/mlx_layer/mooves.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/28 14:10:44 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 18:36:26 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 08:36:17 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,12 +14,6 @@ #include "cub3d_struct.h" #include "cub3d_parsing.h" -void update_pos_i(t_player *player) -{ - player->pos_i.x = (int)player->pos.x; - player->pos_i.y = (int)player->pos.y; -} - void move_straight(t_info *data) { t_tile *tile_x; @@ -35,7 +29,6 @@ void move_straight(t_info *data) + data->player.dir.y * MOVE_SPEED)}); if (tile_y->tile_type == EMPTY) data->player.pos.y += data->player.dir.y * MOVE_SPEED; - update_pos_i(&data->player); } void move_backward(t_info *data) @@ -53,7 +46,6 @@ void move_backward(t_info *data) - data->player.dir.y * MOVE_SPEED)}); if (tile_y->tile_type == EMPTY) data->player.pos.y -= data->player.dir.y * MOVE_SPEED; - update_pos_i(&data->player); } void move_left(t_info *data) @@ -74,7 +66,6 @@ void move_left(t_info *data) pplayer.y * MOVE_SPEED)}); if (tile_y->tile_type == EMPTY) data->player.pos.y += pplayer.y * MOVE_SPEED; - update_pos_i(&data->player); } void move_right(t_info *data) @@ -95,5 +86,4 @@ void move_right(t_info *data) * MOVE_SPEED)}); if (tile_y->tile_type == EMPTY) data->player.pos.y -= pplayer.y * MOVE_SPEED; - update_pos_i(&data->player); } diff --git a/parsing/load_bgs.c b/parsing/load_bgs.c index 3bff69d..a02069c 100644 --- a/parsing/load_bgs.c +++ b/parsing/load_bgs.c @@ -6,63 +6,66 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 17:47:37 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:52:28 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 09:36:28 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ +#include "ft_addons.h" #include "cub3d_struct.h" #include "cub3d_parsing.h" #include "ft_string.h" +#include +#include +// col [ 3 ] is alpha channel (not used in the project) bool color_from_str(const char *str, t_color *color) { - int col[4]; - char **split; + int col[4]; + const char *arr[3]; - split = ft_split(str, ','); - if (split == NULL) + if (ft_strcnb(str, ',') != 2) return (false); - col[0] = ft_atoi(split[0]); - col[1] = ft_atoi(split[1]); - col[2] = ft_atoi(split[2]); - if (split[3]) - col[3] = ft_atoi(split[3]); - else - col[3] = 255; - if (col[0] < 0 || col[0] > 255 || col[1] < 0 || col[1] > 255 || col[2] < 0 - || col[2] > 255 || col[3] < 0 || col[3] > 255) + arr[0] = ft_strtok((char *)str, ","); + arr[1] = ft_strtok(NULL, ","); + arr[2] = ft_strtok(NULL, ","); + if (!arr[0] || !arr[1] || !arr[2] || !ft_str_isnum(arr[0]) || \ + !ft_str_isnum(arr[1]) || !ft_str_isnum(arr[2])) + return (false); + col[0] = ft_atoi(arr[0]); + col[1] = ft_atoi(arr[1]); + col[2] = ft_atoi(arr[2]); + col[3] = 255; + if (ft_inrange(col[0], 0, 255) == false || \ + ft_inrange(col[1], 0, 255) == false || \ + ft_inrange(col[2], 0, 255) == false) return (false); *color = (t_color){.r = col[0], .g = col[1], .b = col[2], .a = col[3]}; - ft_free_2d((void **)split); return (true); } bool load_bg(t_info *info, const char *line, const char **id_str) { t_color color; - size_t i; + size_t id_idx; - i = 0; + id_idx = 0; ft_bzero(&color, sizeof(t_color)); - while (id_str[i]) - { - if (ft_strstart_with(line, id_str[i]) && (color_from_str(line - + ft_strlen(id_str[i]), &color) == false || color.a < 255)) - return (info->last_error = ERROR_PARSE, false); - if (ft_strstart_with(id_str[i], "F ")) - info->map.bg_colors[BG_FLR] = color; - else - info->map.bg_colors[BG_CLG] = color; - i++; - } - if (color.color == 0) - return (info->last_error = ERROR_PARSE, false); + while (id_str[id_idx] && ft_strstart_with(line, id_str[id_idx]) == false) + id_idx++; + if (color_from_str(line + ft_strlen(id_str[id_idx]), &color) == false) + return (info->last_error = ERROR_PARSE_BG_COLOR_FORMAT, false); + if (id_idx == BG_FLR && info->map.bg_colors[BG_FLR].color == 0) + info->map.bg_colors[BG_FLR] = color; + else if (id_idx == BG_SKY && info->map.bg_colors[BG_SKY].color == 0) + info->map.bg_colors[BG_SKY] = color; + else + return (info->last_error = ERROR_PARSE_ALREADY_SET, false); return (true); } void *load_bgs(void *data) { - const char *id_str[] = {"F ", "C ", NULL}; + const char *id_str[] = {[BG_FLR] = "F ", [BG_SKY] = "C ", [2] = NULL}; t_info *info; size_t i; @@ -70,8 +73,8 @@ void *load_bgs(void *data) info = (t_info *)data; while (info->map.fraw[i]) { - if (is_identifier(info->map.fraw[i], id_str) && load_bg(info, - info->map.fraw[i], id_str) == false) + if (is_identifier(info->map.fraw[i], id_str) && \ + load_bg(info, info->map.fraw[i], id_str) == false) return (NULL); i++; } diff --git a/parsing/load_textures.c b/parsing/load_textures.c index 618a868..78cce53 100644 --- a/parsing/load_textures.c +++ b/parsing/load_textures.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 17:46:52 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:53:44 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 14:25:52 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,13 @@ #include "mlx_functions.h" #include +#include + +static void sv_errno(t_info *inf, int err_code) +{ + inf->errno_state = errno; + inf->last_error = err_code; +} bool load_texture(t_info *info, const char *str, const char **id_str) { @@ -28,17 +35,17 @@ bool load_texture(t_info *info, const char *str, const char **id_str) { if (ft_strstart_with(str, id_str[i])) { - texture.path = ft_strtrim(str + ft_strlen(id_str[i]), " "); + if (info->map.texture_[i].img != NULL) + return (sv_errno(info, ERROR_PARSE_ALREADY_SET), false); + texture.path = ft_strtrim(str + ft_strlen(id_str[i]), " \t"); if (texture.path == NULL) - return (info->errno_state = errno, - info->last_error = ERROR_MALLOC, false); + return (sv_errno(info, ERROR_MALLOC), false); if (ft_strend_with(texture.path, ".xpm") == false) - return (info->last_error = ERROR_TEXTURE_FORMAT, false); + return (sv_errno(info, ERROR_TEXTURE_FORMAT), false); texture.img = mlx_xpm_file_to_image(info->mlx_ptr, texture.path, &texture.width, &texture.height); if (texture.img == NULL) - return (info->errno_state = errno, info->last_error = ERROR_MLX, - false); + return (sv_errno(info, ERROR_MLX), false); return (info->map.texture_[i] = texture, true); } i++; diff --git a/parsing/load_tiles.c b/parsing/load_tiles.c index 86cf811..c87fe00 100644 --- a/parsing/load_tiles.c +++ b/parsing/load_tiles.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 17:47:15 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:53:53 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 09:33:53 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,8 @@ #include "ft_vector.h" #include "ft_math.h" +#include + void *ft_strchrs(const char *str, const char *chrs) { while (*str) @@ -68,16 +70,28 @@ t_vector *load_vector(t_map *map) int set_player(t_info *info, int i, t_vector *str_map) { t_dpoint pos; + char *str; ft_bzero(&pos, sizeof(t_dpoint)); if (info->player.pos.x != 0 || info->player.pos.y != 0 || i == 0) return (ft_vec_destroy(&str_map), info->last_error = ERROR_PARSE, \ EXIT_FAILURE); + str = ft_strchrs(ft_vec_at(str_map, i), "SNWE"); pos.y = i + .5; - pos.x = ft_strchrs(ft_vec_at(str_map, i), "SNWE") - - ft_vec_at(str_map, i) + .5; + pos.x = str - (char *)ft_vec_at(str_map, i) + .5; + info->player.dir = (t_dpoint){.x = 0, 0}; info->player.pos = pos; info->player.pos_i = (t_ipoint){.x = (int)pos.x, .y = (int)pos.y}; + if (*str == 'N') + info->player.dir.y = -1; + else if (*str == 'S') + info->player.dir.y = 1; + else if (*str == 'W') + info->player.dir.x = -1; + else if (*str == 'E') + info->player.dir.x = 1; + info->player.plane = (t_dpoint){.x = info->player.dir.y, \ + .y = -info->player.dir.x}; return (EXIT_SUCCESS); } diff --git a/parsing/map.c b/parsing/map.c index 5d49bd9..20ae453 100644 --- a/parsing/map.c +++ b/parsing/map.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/12 08:31:06 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:51:13 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 08:49:53 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,8 +37,8 @@ void parse_map(t_info *info) opt = (t_optional){.val = info, .pres = OPT_SOME}; info->map.path = info->cli_ctx.file; - if (ft_optional_chain(&opt, function_list) == false) - return (c3_perror(info), (void)0); info->player.plane = (t_dpoint){.x = 0, .y = 2 * atan(deg2rad(FOV / 2))}; info->player.dir = (t_dpoint){.x = -1, .y = 0}; + if (ft_optional_chain(&opt, function_list) == false) + return (c3_perror(info), (void)0); } diff --git a/parsing/traverse_map.c b/parsing/traverse_map.c index 384e015..d61ecf7 100644 --- a/parsing/traverse_map.c +++ b/parsing/traverse_map.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 17:49:12 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:54:03 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 09:45:25 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,6 +49,6 @@ void *traverse_map(void *data) info = (t_info *)data; pos_start = (t_ipoint){.x = info->player.pos.x, .y = info->player.pos.y}; if (flood_fill(info->map.map, pos_start, info->map.size) == false) - return (info->last_error = ERROR_PARSE, NULL); + return (info->last_error = ERROR_MAP_OPEN, NULL); return (info); } diff --git a/parsing/utils.c b/parsing/utils.c index 0d8a1a4..6682c49 100644 --- a/parsing/utils.c +++ b/parsing/utils.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 17:43:17 by bgoulard #+# #+# */ -/* Updated: 2024/12/01 17:45:58 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 09:39:50 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,9 +21,7 @@ t_tile *c3_get_cell(t_tile *map, t_ipoint dimensions, t_ipoint pos) { if (pos.x < 0 || pos.y < 0 || pos.x >= dimensions.x || pos.y >= dimensions.y) - return (printf("runtime error: %s:%d (pos:%d,%d on dims:%d,%d)\n", - __func__, __LINE__, pos.x, pos.y, dimensions.x, dimensions.y), - NULL); + return (NULL); return (map + (pos.y * dimensions.x + pos.x)); } diff --git a/raycast/draw_call.c b/raycast/draw_call.c new file mode 100644 index 0000000..aff8930 --- /dev/null +++ b/raycast/draw_call.c @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* draw_call.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: bgoulard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/16 14:43:09 by bgoulard #+# #+# */ +/* Updated: 2024/12/16 14:47:56 by bgoulard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d_struct.h" +#include "cub3d.h" + +#include "ft_math.h" +#include + +#define PT_LINEH 0 +#define PT_D_START 1 +#define PT_D_END 2 +#define PT_X 3 + +#define TI_SIDE 0 +#define TI_X 1 + +#define TD_PERP_WALL_DIST 0 +#define TD_WALL_X 1 + +static void draw__(t_texture *texture, int *passthroug, t_info *data, \ + double wallX) +{ + t_ipoint text_off; + const double _step = (double)texture->height / passthroug[PT_LINEH]; + double text_offset; + char *ptr_pix; + + text_offset = (passthroug[PT_D_START] - (double)data->screen_size.y / 2 + \ + (double)passthroug[PT_LINEH] / 2) * _step; + text_off.x = (wallX * texture->width); + while (passthroug[PT_D_START] < passthroug[PT_D_END]) + { + text_off.y = (int)text_offset & (texture->height - 1); + text_offset += _step; + ptr_pix = texture->img->data + (text_off.y * \ + texture->img->image->bytes_per_line + text_off.x * \ + (texture->img->image->bits_per_pixel / 8)); + my_mlx_pixel_put(data, passthroug[PT_X], passthroug[PT_D_START], \ + *(unsigned int *)ptr_pix); + passthroug[PT_D_START]++; + } +} + +// int texX = (int)(wallX * (double)texture->width); +void draw_(int *ti, double *td, t_ipoint step, t_info *data) +{ + const int line_height = (int)(data->screen_size.y / \ + td[TD_PERP_WALL_DIST]) * cos(deg2rad(FOV / 2)); + int draw_start; + int draw_end; + t_texture *texture; + + draw_start = ft_clamp(-line_height / 2 + data->screen_size.y / 2, 0, \ + data->screen_size.y - 1); + draw_end = ft_clamp(line_height / 2 + data->screen_size.y / 2, 0, \ + data->screen_size.y - 1); + texture = get_texture(ti[TI_SIDE], step, data); + draw__(texture, (int []){line_height, draw_start, draw_end, ti[TI_X]}, \ + data, td[TD_WALL_X]); +} diff --git a/raycast/frame_update.c b/raycast/frame_update.c index d80669f..f7406d1 100644 --- a/raycast/frame_update.c +++ b/raycast/frame_update.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/12 06:02:54 by bgoulard #+# #+# */ -/* Updated: 2024/12/05 16:44:04 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:51:46 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,51 +15,31 @@ #include "mlx_functions.h" #include "ft_string.h" -#include "ft_math.h" #include #include -void set_step(t_ipoint *step, t_dpoint raydir); -void set_side_dist(t_dpoint *side_dist, t_dpoint *tb, t_ipoint pos_i); - -/// line 33: normalize draw_start and draw_end -void draw_(int side, double perpWallDist, t_ipoint step, int x, t_info *data) +void search_hit(t_dpoint delta_dist, t_ipoint *pos_i, t_ipoint step, \ + void *_data[3]) { - const int line_height = (int)(data->screen_size.y / perpWallDist) \ - * cos(deg2rad(FOV / 2)); - int draw_start; - int draw_end; - int color; - - draw_start = -line_height / 2 + data->screen_size.y / 2; - draw_end = line_height / 2 + data->screen_size.y / 2; - draw_start = ft_clamp(draw_start, 0, data->screen_size.y - 1); - draw_end = ft_clamp(draw_end, 0, data->screen_size.y - 1); - color = get_cl(side, step); - while (draw_start < draw_end) - my_mlx_pixel_put(data, x, draw_start++, color); -} - -void search_hit(t_dpoint *sideDist, t_dpoint deltaDist, t_ipoint *pos_i, \ - t_ipoint step, void *_data[2]) -{ - int *side; - t_info *data; + int *side; + t_info *data; + t_dpoint *side_dist; side = (int *)_data[1]; data = (t_info *)_data[0]; + side_dist = (t_dpoint *)_data[2]; while (true) { - if (sideDist->x < sideDist->y) + if (side_dist->x < side_dist->y) { - sideDist->x += deltaDist.x; + side_dist->x += delta_dist.x; pos_i->x += step.x; *side = 0; } else { - sideDist->y += deltaDist.y; + side_dist->y += delta_dist.y; pos_i->y += step.y; *side = 1; } @@ -69,11 +49,14 @@ void search_hit(t_dpoint *sideDist, t_dpoint deltaDist, t_ipoint *pos_i, \ } } +// t_dpoint prep_distoff -> +// x - perpwall_dist +// y - wall_off void column_handler(t_ipoint pos_i, t_dpoint ray_dir, t_info *data, int x) { t_dpoint side_dist; t_dpoint delta_dist; - double perp_wall_dist; + t_dpoint perp_distoff; t_ipoint step; int side; @@ -81,17 +64,23 @@ void column_handler(t_ipoint pos_i, t_dpoint ray_dir, t_info *data, int x) set_step(&step, ray_dir); set_side_dist(&side_dist, (t_dpoint[]){ray_dir, data->player.pos, \ delta_dist}, pos_i); - search_hit(&side_dist, delta_dist, &pos_i, step, (void *[]){data, &side}); + search_hit(delta_dist, &pos_i, step, (void *[]){data, &side, &side_dist}); if (side == 0) - perp_wall_dist = (pos_i.x - data->player.pos.x + \ + perp_distoff.x = (pos_i.x - data->player.pos.x + \ (double)(1 - step.x) / 2) / ray_dir.x; else - perp_wall_dist = (pos_i.y - data->player.pos.y + \ + perp_distoff.x = (pos_i.y - data->player.pos.y + \ (double)(1 - step.y) / 2) / ray_dir.y; - draw_(side, perp_wall_dist, step, x, data); + perp_distoff.y = data->player.pos.x + perp_distoff.x * ray_dir.x; + if (side == 0) + perp_distoff.y = data->player.pos.y + perp_distoff.x * ray_dir.y; + perp_distoff.y -= floor(perp_distoff.y); + draw_((int []){side, x}, (double []){perp_distoff.x, perp_distoff.y}, \ + step, data); } int render_frame(t_info *data) + { double camera_x; double coef; @@ -101,7 +90,7 @@ int render_frame(t_info *data) coef = 2 * tan(deg2rad(FOV) / 2) / (double)data->screen_size.x; ft_bzero(data->camera.img_addr, data->screen_size.x * data->screen_size.y \ * (data->camera.bpp / 8)); - draw_floor(data); + draw_bg(data); while (x < data->screen_size.x) { camera_x = x * coef - 1; @@ -112,28 +101,6 @@ int render_frame(t_info *data) x++; } mlx_put_image_to_window(data->mlx_ptr, data->win_ptr, \ - data->camera.screen_buff, 0, 0); + data->camera.screen_buff, 0, 0); return (0); } - -// Return 42 is irrelevant check mlx_loop to see that mlx doesn't care for the -// return of the function... -// (Why 'int (*)(void*)' when you dont use the int) -// -// This function is called each time the mlx loops over the mlx pointer in -// mlx_loop. here we do calc on time since last frame and player position -// to know if we need to re-draw the screen. if yes call raph function for -// calc. -// The need to redraw can also be expressed in the diferent key_pressed -// functions, I would recomend to make a bool field for that in the info -// struct. -// As a pure artefact of using mlx this function will likely be mooved to -// mlx_layer in the final repo. -int c3_frame_update(void *inf_ptr) -{ - t_info *info; - - info = inf_ptr; - mlx_clear_window(info->mlx_ptr, info->win_ptr); - return (EXIT_SUCCESS); -} diff --git a/raycast/frame_update2.c b/raycast/frame_update2.c index 39a595c..6e9dfd7 100644 --- a/raycast/frame_update2.c +++ b/raycast/frame_update2.c @@ -6,34 +6,36 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/12/01 18:55:11 by rparodi #+# #+# */ -/* Updated: 2024/12/05 16:43:53 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 09:43:18 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include "cub3d_struct.h" - -#include "mlx_functions.h" #include "ft_string.h" -#include "ft_math.h" -#include #include -void draw_floor(t_info *data) +void draw_bg(t_info *data) { t_ipoint temp; + int switch_point; + int color; - temp.y = data->screen_size.y / 2; + ft_bzero(&temp, sizeof(t_ipoint)); + switch_point = data->screen_size.y / 2; + color = data->map.bg_colors[BG_SKY].color; while (temp.y < data->screen_size.y) { temp.x = 0; while (temp.x < data->screen_size.x) { - my_mlx_pixel_put(data, temp.x, temp.y, 0xFFFFFF); + my_mlx_pixel_put(data, temp.x, temp.y, color); temp.x++; } temp.y++; + if (temp.y >= switch_point) + color = data->map.bg_colors[BG_FLR].color; } } diff --git a/raycast/get_texture.c b/raycast/get_texture.c new file mode 100644 index 0000000..d64f832 --- /dev/null +++ b/raycast/get_texture.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_texture.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: bgoulard +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/16 14:46:04 by bgoulard #+# #+# */ +/* Updated: 2024/12/16 14:46:14 by bgoulard ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "cub3d_struct.h" + +t_texture *get_texture(int side, t_ipoint step, t_info *data) +{ + if (side == 0 && step.x > 0) + return (&data->map.texture_[0]); + else if (side == 0 && step.x < 0) + return (&data->map.texture_[1]); + else if (side == 1 && step.y > 0) + return (&data->map.texture_[2]); + else + return (&data->map.texture_[3]); +} diff --git a/raycast/rc_utils.c b/raycast/rc_utils.c index 7e76d40..9ac0d4e 100644 --- a/raycast/rc_utils.c +++ b/raycast/rc_utils.c @@ -6,13 +6,13 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/12 12:24:35 by rparodi #+# #+# */ -/* Updated: 2024/12/01 18:39:11 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 14:08:46 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include "cub3d_struct.h" -#include "mlx_functions.h" + #include "raycast.h" #include @@ -55,6 +55,8 @@ double rc_launch(t_info *info, double angle) int shelves_launch(t_info *info) { - render_frame(info); + displacement_hook(info); + if (info->redraw) + (render_frame(info), info->redraw = false); return (EXIT_SUCCESS); } diff --git a/sources/error.c b/sources/error.c index 549f220..2b37afd 100644 --- a/sources/error.c +++ b/sources/error.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/31 11:09:00 by rparodi #+# #+# */ -/* Updated: 2024/11/27 12:00:34 by bgoulard ### ########.fr */ +/* Updated: 2024/12/16 14:37:11 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,7 +17,7 @@ #include -const char *const g_error_message[] = { +static const char *g_error_message[] = { "no error", "unknown error", "could not open file", @@ -27,6 +27,9 @@ const char *const g_error_message[] = { "missing file", "malloc error", "parse error", + "map open error", + "bad format for background color", + "variable was set multiple times", "cli error", "mlx error", "texture format error", diff --git a/sources/main.c b/sources/main.c index a280aa1..b31623e 100644 --- a/sources/main.c +++ b/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/30 16:30:03 by rparodi #+# #+# */ -/* Updated: 2024/12/01 18:53:12 by rparodi ### ########.fr */ +/* Updated: 2024/12/16 09:38:44 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,69 +19,7 @@ #include #include #include - -void dump_map(t_tile *map, t_ipoint size) -{ - int i; - int j; - - i = 0; - while (i < size.y) - { - j = 0; - printf("\t\t\t"); - while (j < size.x) - { - printf("%d", map[i * size.x + j].tile_type); - j++; - } - printf("\n"); - i++; - } -} - -// not normed but we'll take care of this as a niceties at the last -// possible moment :) -void dump_info(t_info *info) -{ - const char *bool_str[2] = {"False", "True"}; - size_t i; - - i = 0; - printf("t_info:\n"); - printf("\tplayer:\n"); - printf("\t\tpos_i:\t(x: %d, y:%d)\n", \ - info->player.pos_i.x, info->player.pos_i.y); - printf("\t\tpos:\t(x:%lf, y:%lf)\n", \ - info->player.pos.x, info->player.pos.y); - printf("\t\tdir:\t(x:%lf, y:%lf)\n", \ - info->player.dir.x, info->player.dir.y); - printf("\t\tplane:\t(x:%lf, y:%lf)\n", \ - info->player.plane.x, info->player.plane.y); - printf("\tcli_ctx:\n"); - printf("\t\tfile:\t%s\n", info->cli_ctx.file); - printf("\t\tdebug:\t%s\n", bool_str[info->cli_ctx.debug]); - printf("\t\tsave:\t%s\n", bool_str[info->cli_ctx.save]); - printf("\t\thelp:\t%s\n", bool_str[info->cli_ctx.help]); - printf("\tmap:\n"); - printf("\t\tpath:%s\n", info->map.path); - printf("\t\tfd:\t%d\n", info->map.fd); - printf("\t\tsize:\t(x:%d, y:%d)\n", info->map.size.x, info->map.size.y); - while (info->map.fraw[i]) - { - printf("\t\tmap.fraw[%*zu]: %s\n", 3, i, info->map.fraw[i]); - i++; - } - printf("\t\ttexture[0]: %p\n", info->map.texture[0]); - printf("\t\ttexture[1]: %p\n", info->map.texture[1]); - printf("\t\ttexture[2]: %p\n", info->map.texture[2]); - printf("\t\ttexture[3]: %p\n", info->map.texture[3]); - printf("\t\tmap: %p\n", info->map.map); - dump_map(info->map.map, info->map.size); - printf("\tlast_error: %d\n", info->last_error); - printf("\terno_state: %d\n", info->errno_state); - printf("\n"); -} +#include void check_err(t_info *info) { @@ -103,13 +41,16 @@ void run_cub3d(t_info *info) return ; parse_map(info); if (info->cli_ctx.debug) - dump_info(info); + ft_putstr_fd("no debug mod on production run", STDERR_FILENO); if (info->last_error != NO_ERROR) return ; + if (info->cli_ctx.no_graphics == true) + return ; info->camera.screen_buff = mlx_new_image(info->mlx_ptr, info->screen_size.x, info->screen_size.y); info->camera.img_addr = mlx_get_data_addr(info->camera.screen_buff, &info->camera.bpp, &info->camera.line_len, &info->camera.endian); + info->redraw = true; mlx_loop(info->mlx_ptr); }