From bd7c64825a3f399ba63dc91dc341748020070b53 Mon Sep 17 00:00:00 2001 From: Adam JOLY <adjoly@student.42angouleme.fr> Date: Wed, 6 Nov 2024 14:00:06 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(Raycasting?= =?UTF-8?q?):=20Working=20as=20expected?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/game/settings.h | 3 +- includes/utils.h | 23 +++++++++++++++ leflo.png | Bin 0 -> 6589 bytes map.cub | 9 +++--- src/cub3d.c | 33 +++++++++++++--------- src/other.c | 21 -------------- src/raycasting/dda.c | 5 ++-- src/raycasting/renderer.c | 7 +++-- src/utils/convert_parsing.c | 55 ++++++++++++++++++++++++++++++++++++ 9 files changed, 110 insertions(+), 46 deletions(-) create mode 100644 includes/utils.h create mode 100755 leflo.png delete mode 100644 src/other.c create mode 100644 src/utils/convert_parsing.c diff --git a/includes/game/settings.h b/includes/game/settings.h index bbf58cc..ea36393 100644 --- a/includes/game/settings.h +++ b/includes/game/settings.h @@ -6,7 +6,7 @@ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/04 14:06:39 by adjoly #+# #+# */ -/* Updated: 2024/11/02 15:55:02 by adjoly ### ########.fr */ +/* Updated: 2024/11/06 13:19:25 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,5 +29,6 @@ # define FOV 70 # define CHUNK_SIZE 64 +# define TEXTURE_SIZE 128 #endif diff --git a/includes/utils.h b/includes/utils.h new file mode 100644 index 0000000..4613c13 --- /dev/null +++ b/includes/utils.h @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/06 13:03:02 by adjoly #+# #+# */ +/* Updated: 2024/11/06 13:21:21 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef UTILS_H +# define UTILS_H + +# include "parsing.h" +# include "game/game.h" + +t_player init_player(t_pars parsing); +t_map init_world(t_pars parsing); +void init_texture(t_render *render, t_pars parsing); + +#endif diff --git a/leflo.png b/leflo.png new file mode 100755 index 0000000000000000000000000000000000000000..79fae6f1db39104b6e6a972f585597b5bb125af9 GIT binary patch literal 6589 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 EHz$bVDgXcg literal 0 HcmV?d00001 diff --git a/map.cub b/map.cub index a4f0d77..ac0a418 100755 --- a/map.cub +++ b/map.cub @@ -1,10 +1,10 @@ -NO ./no_texture.png +NO ./leflo.png -SO ./so_texture.png +SO ./leflo.png -WE ./we_texture.png -EA ./ea_texture.png +WE ./leflo.png +EA ./leflo.png C 255,100,200 F 50,0,250 @@ -13,7 +13,6 @@ F 50,0,250 111111 11111111111111 111111111111 -0 11101 1111111111111111 111111111111111 111111111111111111111111 diff --git a/src/cub3d.c b/src/cub3d.c index 3bce937..e9eb975 100644 --- a/src/cub3d.c +++ b/src/cub3d.c @@ -6,16 +6,19 @@ /* By: madumerg <madumerg@42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/04 16:58:27 by madumerg #+# #+# */ -/* Updated: 2024/11/06 12:53:52 by adjoly ### ########.fr */ +/* Updated: 2024/11/06 13:43:14 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "cub3d.h" #include "game/game.h" #include "game/settings.h" +#include "game/vectwo.h" #include "libft.h" #include "mlx.h" +#include "parsing.h" #include <stdlib.h> +#include "utils.h" int loop(void *param) { @@ -34,27 +37,29 @@ int main(int ac, char **av) t_render render; t_map world; t_player player; + t_pars parsing; - render.player = &player; - render.world = &world; - world.celling = 0xffffa07a; - world.floor = 0xffadd8e6; - world.arr = ft_split("11111 10001 10001 10001 11111", ' '); - world.size.x = 5; - world.size.y = 5; - player.coord.x = 2 * CHUNK_SIZE; - player.coord.y = 3 * CHUNK_SIZE; - player.direction = 0; + parsing = init_pars(); + if (basics_check(ac, av, &parsing)) + return (EXIT_FAILURE); render.mlx = mlx_init(); render.win = mlx_new_window(render.mlx, WINDOW_W, WINDOW_H, "WTF"); + player = init_player(parsing); + world = init_world(parsing); + render.player = &player; + render.world = &world; + init_texture(&render, parsing); render.img = mlx_new_image(render.mlx, WINDOW_W, WINDOW_H); - (void)ac; - (void)av; mlx_on_event(render.mlx, render.win, MLX_KEYDOWN, key_hook, &render); mlx_loop_hook(render.mlx, loop, &render); mlx_loop(render.mlx); mlx_destroy_image(render.mlx, render.img); + mlx_destroy_image(render.mlx, render.texture[0]); + mlx_destroy_image(render.mlx, render.texture[1]); + mlx_destroy_image(render.mlx, render.texture[2]); + mlx_destroy_image(render.mlx, render.texture[3]); mlx_destroy_window(render.mlx, render.win); mlx_destroy_display(render.mlx); - return (0); + free_pars(&parsing); + return (EXIT_SUCCESS); } diff --git a/src/other.c b/src/other.c deleted file mode 100644 index 0172cfe..0000000 --- a/src/other.c +++ /dev/null @@ -1,21 +0,0 @@ - -void f_c_color(void *mlx, void *win, t_pars *pars) -{ - int x; - int y; - - x = 0; - y = 0; - - while (y <= (400 / 2)) //changer 400 par le define - { - x = 0; - while (x <= 800) //changer 800 par le define - { - mlx_pixel_put(mlx, win, x, y, pars->c_color); - mlx_pixel_put(mlx, win, x, 400 - y, pars->f_color); // changer 400 par le define - x++; - } - y++; - } -} diff --git a/src/raycasting/dda.c b/src/raycasting/dda.c index a070334..06f6bb8 100644 --- a/src/raycasting/dda.c +++ b/src/raycasting/dda.c @@ -6,7 +6,7 @@ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/07 16:55:09 by adjoly #+# #+# */ -/* Updated: 2024/11/06 12:34:58 by adjoly ### ########.fr */ +/* Updated: 2024/11/06 13:21:38 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -68,7 +68,8 @@ void setup_dda_hor(t_player *play, t_ray *ray, t_dda *dda) void dda_loop(t_dda *dda, t_ray *ray, t_map *map, t_player *play) { - while (dda->s && dda->i) { + while (dda->s && dda->i) + { dda->map.x = (ray->pos.x / 64); dda->map.y = (ray->pos.y / 64); if (dda->map.x >= 0 && dda->map.x < map->size.x && dda->map.y >= 0 && \ diff --git a/src/raycasting/renderer.c b/src/raycasting/renderer.c index 856cb55..fdf3cf8 100644 --- a/src/raycasting/renderer.c +++ b/src/raycasting/renderer.c @@ -6,7 +6,7 @@ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/28 15:48:39 by adjoly #+# #+# */ -/* Updated: 2024/11/06 11:59:23 by madumerg ### ########.fr */ +/* Updated: 2024/11/06 13:57:29 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,10 +66,11 @@ void print_line(t_render *render, t_ray *ray, int x) if (line_start < 0) line_start = 0; if (line_stop > WINDOW_H) - line_stop = WINDOW_H - 1; + line_stop = WINDOW_H; while (line_start < line_stop) { - mlx_set_image_pixel(render->mlx, render->img, x, line_start, WHITE); + if (x < WINDOW_W && x >= 0) + mlx_set_image_pixel(render->mlx, render->img, x, line_start, WHITE); line_start++; } } diff --git a/src/utils/convert_parsing.c b/src/utils/convert_parsing.c new file mode 100644 index 0000000..63b0098 --- /dev/null +++ b/src/utils/convert_parsing.c @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* convert_parsing.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/06 13:01:03 by adjoly #+# #+# */ +/* Updated: 2024/11/06 13:44:16 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "game/settings.h" +#include "mlx.h" +#include "parsing.h" +#include "game/game.h" + +t_player init_player(t_pars parsing) +{ + t_player player; + + player.coord.x = parsing.coor.x * CHUNK_SIZE + (CHUNK_SIZE / 2); + player.coord.y = parsing.coor.y * CHUNK_SIZE + (CHUNK_SIZE / 2); + if (parsing.l_player == 'N') + player.direction = M_PI / 2; + else if (parsing.l_player == 'S') + player.direction = -(M_PI / 2); + else if (parsing.l_player == 'W') + player.direction = M_PI; + else if (parsing.l_player == 'E') + player.direction = 0; + return (player); +} + +t_map init_world(t_pars parsing) +{ + t_map map; + + map.arr = parsing.map; + map.size.x = ft_strlen(parsing.map[0]); + map.size.y = ft_count_line_map(parsing.map, 0); + map.floor = parsing.f_color; + map.celling = parsing.c_color; + return (map); +} + +void init_texture(t_render *render, t_pars parsing) +{ + int i; + + render->texture[0] = mlx_png_file_to_image(render->mlx, parsing.no_png, &i, &i); + render->texture[1] = mlx_png_file_to_image(render->mlx, parsing.we_png, &i, &i); + render->texture[2] = mlx_png_file_to_image(render->mlx, parsing.so_png, &i, &i); + render->texture[3] = mlx_png_file_to_image(render->mlx, parsing.ea_png, &i, &i); +}