From aa496d4f5dbc061c4c0098fdfbf83a1b9c1c9f1c Mon Sep 17 00:00:00 2001 From: "B.Goulard" <84p71573@gmail.com> Date: Fri, 29 Nov 2024 17:12:04 +0100 Subject: [PATCH] merge of parsing and raycast finished (not normed) --- Cub3D 2 | Bin 81960 -> 0 bytes includes/cub3d.h | 3 ++- includes/cub3d_struct.h | 19 +++++++--------- mlx_layer/hooks.c | 4 +++- mlx_layer/mlx_init.c | 24 +++++++++++--------- parsing/blank_for_raph.c | 13 ++++++----- parsing/map.c | 30 ++++++++++++++++--------- raycast/frame_update.c | 47 ++++++++++++++++++++++----------------- raycast/utils_math.c | 6 ++--- sources/cleanups.c | 5 +++-- sources/main.c | 39 ++++++++++++++++---------------- 11 files changed, 106 insertions(+), 84 deletions(-) delete mode 100755 Cub3D 2 diff --git a/Cub3D 2 b/Cub3D 2 deleted file mode 100755 index b4309a9ac80ee36569fde7a41f13b4259f84df05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81960 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 +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/30 16:30:26 by rparodi #+# #+# */ -/* Updated: 2024/11/28 15:15:31 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 16:41:34 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,7 @@ # include // utils +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); diff --git a/includes/cub3d_struct.h b/includes/cub3d_struct.h index 5f635ff..7cc9b62 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/11/28 15:36:36 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:07:00 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,9 @@ # define FILE_EXTENSION_LEN 4 # define BG_CLG 0 # define BG_FLR 1 -#define TILE_SIZE 64 +# define TILE_SIZE 64 +# define WIN_COEF .5 +# define WIN_TITLE "Cub3D" // defines that should be mooved to a config option / file #define FOV 70 @@ -72,21 +74,16 @@ typedef enum e_tile WALL = 1, } t_tile_type; -typedef union u_tile -{ - int raw_tile; - struct { - unsigned int tile_visited: 1; // parsing - unsigned int other: 27; // disponible - unsigned int tile_type: 4; // 16 tile types possible - }; +typedef struct s_tile { + bool tile_visited; // parsing + unsigned int other; // disponible + unsigned int tile_type; // 16 tile types possible } t_tile; typedef struct s_map { int fd; char *path; - t_dpoint player_pos; t_ipoint size; t_tile *map; char **fraw; diff --git a/mlx_layer/hooks.c b/mlx_layer/hooks.c index 7dcd7d5..20992c8 100644 --- a/mlx_layer/hooks.c +++ b/mlx_layer/hooks.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/28 14:12:25 by bgoulard #+# #+# */ -/* Updated: 2024/11/28 14:57:01 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:00:33 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,9 +16,11 @@ #include "mlx_functions.h" #include +#include int key_hook(int keycode, t_info *data) { + printf("Event detected: %d\n", keycode); if (keycode == XK_Escape) mlx_loop_end(data->mlx_ptr); if (keycode == XK_w) diff --git a/mlx_layer/mlx_init.c b/mlx_layer/mlx_init.c index fb28146..ed7ed5e 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/28 14:06:03 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:06:44 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,11 +15,14 @@ #include "mlx_functions.h" #include "mlx_structs.h" +#include "ft_math.h" + #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) { @@ -35,13 +38,14 @@ int c3_redcross(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")); + 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; + ft_clamp(info->screen_size.x, 0, 1920); + ft_clamp(info->screen_size.y, 0, 1080); + return (\ + mlx_new_window(info->mlx_ptr, info->screen_size.x, info->screen_size.y, \ + WIN_TITLE)); } int init_mlx_env(t_info *info) @@ -52,8 +56,8 @@ 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, c3_keyhook, info); + mlx_hook(info->win_ptr, KeyPress, KeyPressMask, key_hook, info); mlx_hook(info->win_ptr, DestroyNotify, StructureNotifyMask, c3_redcross, info); - mlx_loop_hook(info->mlx_ptr, (int (*)())shelves_launch, &info); + mlx_loop_hook(info->mlx_ptr, (int (*)())shelves_launch, info); return (NO_ERROR); } diff --git a/parsing/blank_for_raph.c b/parsing/blank_for_raph.c index 1ef28a3..f35e593 100644 --- a/parsing/blank_for_raph.c +++ b/parsing/blank_for_raph.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/13 06:44:42 by bgoulard #+# #+# */ -/* Updated: 2024/11/28 13:59:33 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 16:07:01 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,9 +17,12 @@ static t_tile char_to_tile(char c) { + t_tile tile; + + ft_bzero(&tile, sizeof(t_tile)); if (c == '1' || c == ' ') - return ((t_tile)WALL); - return ((t_tile)EMPTY); + return ((tile.tile_type = WALL, tile)); + return ((tile.tile_type = EMPTY, tile)); } /// @brief Createsa a blank map for rapahael to test the raycasting @@ -39,8 +42,8 @@ void blank(t_info *info) info->map.size.x = 5; info->map.size.y = 6; - info->map.player_pos.x = 2.5; - info->map.player_pos.y = 2.5; +// info->map.player_pos.x = 2.5; +// info->map.player_pos.y = 2.5; info->map.fraw = malloc(sizeof(char *) * 6); info->map.fraw[0] = ft_strdup("11111"); info->map.fraw[1] = ft_strdup("10001"); diff --git a/parsing/map.c b/parsing/map.c index 3857c98..2d3822f 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/11/28 15:41:02 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 16:46:52 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,7 @@ // sys std #include +#include #include #include @@ -192,14 +193,14 @@ void str_to_tile(const char *str, t_tile *tile, size_t size) i = 0; while (str[i]) { - if (str[i] == '1' || i[str] == ' ') - tile[i].raw_tile = WALL; + if (str[i] == '1' || str[i] == ' ') + tile[i].tile_type = WALL; else - tile[i].raw_tile = EMPTY; + tile[i].tile_type = EMPTY; i++; } while (i < size) - tile[i++].raw_tile = WALL; + tile[i++].tile_type = WALL; } t_vector *load_vector(t_map *map) @@ -250,9 +251,10 @@ void *load_tiles(void *data) if (pos.x != 0 || pos.y != 0 || i == 0) return (ft_vec_destroy(&str_map), \ info->last_error = ERROR_PARSE, NULL); - pos.x = i + .5; - pos.y = ft_strchrs(ft_vec_at(str_map, i), "SNWE") - ft_vec_at(str_map, i) + .5; + pos.y = i + .5; + pos.x = ft_strchrs(ft_vec_at(str_map, i), "SNWE") - ft_vec_at(str_map, i) + .5; info->player.pos = pos; + info->player.pos_i = (t_ipoint){.x = (int)pos.x, .y = (int)pos.y}; } i++; } @@ -261,12 +263,15 @@ void *load_tiles(void *data) 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 (map + (pos.y * dimensions.x + pos.x)); } bool flood_fill(t_tile *tiles, t_ipoint pos, t_ipoint maxs) { - printf("dbg marker %s\n", __func__); t_tile *current; size_t i; const t_ipoint to_check[] = { @@ -286,6 +291,8 @@ bool flood_fill(t_tile *tiles, t_ipoint pos, t_ipoint maxs) if (current->tile_visited == true || current->tile_type == WALL) return (true); current->tile_visited = true; +// printf("dbg (marker %s:%d) pos (%03d : %03d), max (%03d, %03d)\n", +// __func__, __LINE__, pos.x, pos.y, maxs.x, maxs.y); i = 0; while (i != (sizeof(to_check) / sizeof(to_check[0]))) if (flood_fill(tiles, to_check[i++], maxs) == false) @@ -295,7 +302,7 @@ bool flood_fill(t_tile *tiles, t_ipoint pos, t_ipoint maxs) void *traverse_map(void *data) { - printf("dbg marker %s\n", __func__); +// printf("dbg marker %s\n", __func__); t_info *info; t_ipoint pos_start; @@ -306,7 +313,6 @@ void *traverse_map(void *data) return (info); } -void dump_map(t_tile *map, t_ipoint size); void parse_map(t_info *info) { t_optional opt; @@ -323,5 +329,7 @@ void parse_map(t_info *info) info->map.path = info->cli_ctx.file; if (ft_optional_chain(&opt, function_list) == false) return (c3_perror(info), (void)0); - dump_map(info->map.map, info->map.size); + info->player.plane = (t_dpoint){.x = 0, .y = + 2 * atan(deg2rad(FOV / 2))}; + info->player.dir = (t_dpoint){.x = -1, .y = 0}; } diff --git a/raycast/frame_update.c b/raycast/frame_update.c index f6bf105..ff07526 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/11/28 15:18:47 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:01:14 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,6 @@ #include "ft_math.h" #include -#include #include void draw_(int side, double perpWallDist, t_ipoint step, int x, t_info *data) @@ -38,7 +37,7 @@ void draw_(int side, double perpWallDist, t_ipoint step, int x, t_info *data) my_mlx_pixel_put(data, x, drawStart++, color); } -void search_hit(t_dpoint *sideDist, t_dpoint deltaDist, t_ipoint *map, t_ipoint step, void *_data[2]) +void search_hit(t_dpoint *sideDist, t_dpoint deltaDist, t_ipoint *pos_i, t_ipoint step, void *_data[2]) { int *side = (int *)_data[1]; t_info *data = (t_info *)_data[0]; @@ -46,21 +45,25 @@ void search_hit(t_dpoint *sideDist, t_dpoint deltaDist, t_ipoint *map, t_ipoint while (true) { if (sideDist->x < sideDist->y) { sideDist->x += deltaDist.x; - map->x += step.x; + pos_i->x += step.x; *side = 0; } else { sideDist->y += deltaDist.y; - map->y += step.y; + pos_i->y += step.y; *side = 1; } - printf("map.x: %d, map.y: %d\n", map->x, map->y); - if ((*c3_get_cell(data->map.map, data->map.size, *map)) + + if (data->map.size.x < 0 || data->map.size.y < 0 || + data->map.size.x > 100 || data->map.size.y > 100) + exit (EXIT_FAILURE); + + if ((*c3_get_cell(data->map.map, data->map.size, *pos_i)) .tile_type != EMPTY) return ; } } -void static set_step(t_ipoint *step, t_dpoint raydir) +static void set_step(t_ipoint *step, t_dpoint raydir) { if (raydir.x < 0) step->x = -1; @@ -72,23 +75,23 @@ void static set_step(t_ipoint *step, t_dpoint raydir) step->y = 1; } -void static set_side_dist(t_dpoint *sideDist, t_dpoint *tb, t_ipoint map) +static void set_side_dist(t_dpoint *sideDist, t_dpoint *tb, t_ipoint pos_i) { t_dpoint rayDir = tb[0]; t_dpoint pos = tb[1]; t_dpoint deltaDist = tb[2]; if (rayDir.x < 0) - sideDist->x = (pos.x - map.x) * deltaDist.x; + sideDist->x = (pos.x - pos_i.x) * deltaDist.x; else - sideDist->x = (map.x + 1.0 - pos.x) * deltaDist.x; + sideDist->x = (pos_i.x + 1.0 - pos.x) * deltaDist.x; if (rayDir.y < 0) - sideDist->y = (pos.y - map.y) * deltaDist.y; + sideDist->y = (pos.y - pos_i.y) * deltaDist.y; else - sideDist->y = (map.y + 1.0 - pos.y) * deltaDist.y; + sideDist->y = (pos_i.y + 1.0 - pos.y) * deltaDist.y; } -void column_handler(t_ipoint map, t_dpoint rayDir, t_info *data, int x) +void column_handler(t_ipoint pos_i, t_dpoint rayDir, t_info *data, int x) { t_dpoint sideDist; t_dpoint deltaDist; @@ -98,13 +101,13 @@ void column_handler(t_ipoint map, t_dpoint rayDir, t_info *data, int x) deltaDist = (t_dpoint){fabs(1 / rayDir.x), fabs(1 / rayDir.y)}; set_step(&step, rayDir); - set_side_dist(&sideDist, (t_dpoint[]){rayDir, data->player.pos, deltaDist}, map); - search_hit(&sideDist, deltaDist, &map, step, (void *[]){data, &side}); + set_side_dist(&sideDist, (t_dpoint[]){rayDir, data->player.pos, deltaDist}, pos_i); + search_hit(&sideDist, deltaDist, &pos_i, step, (void *[]){data, &side}); if (side == 0) - perpWallDist = (map.x - data->player.pos.x + (double)(1 - step.x) / 2) + perpWallDist = (pos_i.x - data->player.pos.x + (double)(1 - step.x) / 2) / rayDir.x; else - perpWallDist = (map.y - data->player.pos.y + (double)(1 - step.y) / 2) + perpWallDist = (pos_i.y - data->player.pos.y + (double)(1 - step.y) / 2) / rayDir.y; draw_(side, perpWallDist, step, x, data); } @@ -115,12 +118,14 @@ int render_frame(t_info *data) double coef; 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); + ft_bzero(data->camera.img_addr, data->screen_size.x * data->screen_size.y * (data->camera.bpp / 8)); for(int x = 0; x < data->screen_size.x; x++) { camera_x = x * coef - 1; - column_handler((t_ipoint){(int)data->player.pos.x, (int)data->player.pos.y}, - (t_dpoint){data->player.dir.x + data->player.plane.x * camera_x, data->player.dir.y + data->player.plane.y * camera_x}, + column_handler(data->player.pos_i, + (t_dpoint){ + data->player.dir.x + data->player.plane.x * camera_x, + data->player.dir.y + data->player.plane.y * camera_x}, data, x); } mlx_put_image_to_window(data->mlx_ptr, data->win_ptr, data->camera.screen_buff, 0, 0); diff --git a/raycast/utils_math.c b/raycast/utils_math.c index 414b20e..808d749 100644 --- a/raycast/utils_math.c +++ b/raycast/utils_math.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/28 14:09:12 by bgoulard #+# #+# */ -/* Updated: 2024/11/28 14:54:32 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 15:33:19 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,10 +30,10 @@ double deg2rad(int deg) void rotate_plane(t_dpoint *plane, double angle) { double old_plane_x; - double old_plane_y; +// double old_plane_y; old_plane_x = (*plane).x; - old_plane_y = (*plane).y; +// old_plane_y = (*plane).y; plane->x = plane->x * cos(angle) - plane->y * sin(angle); plane->y = old_plane_x * sin(angle) + plane->y * cos(angle); } diff --git a/sources/cleanups.c b/sources/cleanups.c index ae030c7..cc755c6 100644 --- a/sources/cleanups.c +++ b/sources/cleanups.c @@ -6,7 +6,7 @@ /* By: bgoulard +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/09 01:11:01 by bgoulard #+# #+# */ -/* Updated: 2024/11/28 13:58:48 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:09:01 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,7 +45,8 @@ static void cleanup_mlx(t_info *info) if (info->map.texture[i]) mlx_destroy_image(info->mlx_ptr, info->map.texture[i]); } - + if (info->camera.screen_buff) + mlx_destroy_image(info->mlx_ptr, info->camera.screen_buff); mlx_destroy_display(info->mlx_ptr); ft_free((void **)&info->mlx_ptr); } diff --git a/sources/main.c b/sources/main.c index d8a8df1..d7fd13b 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/11/28 15:38:55 by bgoulard ### ########.fr */ +/* Updated: 2024/11/29 17:08:31 by bgoulard ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,8 +20,6 @@ #include #include -void blank(t_info *info); - void dump_map(t_tile *map, t_ipoint size) { int i; @@ -31,6 +29,7 @@ void dump_map(t_tile *map, t_ipoint size) while (i < size.y) { j = 0; + printf("\t\t\t"); while (j < size.x) { printf("%d", map[i * size.x + j].tile_type); @@ -50,20 +49,24 @@ void dump_info(t_info *info) 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: %s\n", info->cli_ctx.file); - printf("\t\tdebug: %s\n", bool_str[info->cli_ctx.debug]); - printf("\t\tsave: %s\n", bool_str[info->cli_ctx.save]); - printf("\t\thelp: %s\n", bool_str[info->cli_ctx.help]); + 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:%d\n", info->map.fd); + 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); - printf("\t\tplayer_pos:\t(x:%lf, y:%lf)\n", info->map.player_pos.x, \ - info->map.player_pos.y); while (info->map.fraw[i]) { - printf("\t\tmap.fraw[%zu]: %s\n", i, 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]); @@ -72,9 +75,9 @@ void dump_info(t_info *info) 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"); } void check_err(t_info *info) @@ -100,14 +103,12 @@ void run_cub3d(t_info *info) dump_info(info); if (info->last_error != NO_ERROR) return ; - if (info->cli_ctx.no_graphics) - printf("no graphics mode\n"); - // todo: here - // - validity check - printf("launching mlx\n"); + 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); mlx_loop(info->mlx_ptr); -// - game loop : already loops over the mlx_ptr -// -> get events if key pressed move player + run math to re-draw screen } /// @brief main function of the cub3d executable