From c37faa03b61cba6c177a0b024d3f9c3e30cb1ed6 Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Sun, 10 Nov 2024 16:58:44 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=8F=EF=B8=8F=E3=80=8D=20norm:=20?= =?UTF-8?q?Everything=20it=20normeddddd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/game/dda.h | 2 +- includes/game/game.h | 8 ++-- includes/game/{math.h => render.h} | 19 ++++++-- src/cub3d.c | 46 ++++++++++++------- src/raycasting/renderer.c | 74 +++++++----------------------- src/raycasting/utils_render.c | 72 +++++++++++++++++++++++++++++ src/raycasting/vectwo.c | 17 +------ src/utils/convert_parsing.c | 14 ++++-- 8 files changed, 145 insertions(+), 107 deletions(-) rename includes/game/{math.h => render.h} (63%) create mode 100644 src/raycasting/utils_render.c diff --git a/includes/game/dda.h b/includes/game/dda.h index 25e48cc..24e1dff 100644 --- a/includes/game/dda.h +++ b/includes/game/dda.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/28 13:04:36 by adjoly #+# #+# */ -/* Updated: 2024/11/06 12:30:52 by adjoly ### ########.fr */ +/* Updated: 2024/11/10 16:48:23 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/includes/game/game.h b/includes/game/game.h index 207af14..a0bfe46 100644 --- a/includes/game/game.h +++ b/includes/game/game.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/11 16:38:40 by adjoly #+# #+# */ -/* Updated: 2024/11/09 16:03:52 by madumerg ### ########.fr */ +/* Updated: 2024/11/10 16:41:35 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -62,10 +62,8 @@ typedef struct s_render * * @return Minilibx go brrrr(useless always 0) */ -int key_hook(int key, void *param); -int key_down(int key, void *param); -int key_down(int key, void *param); -int key_up(int key, void *param); +int key_down(int key, void *param); +int key_up(int key, void *param); /** * @brief This function is here to change the direction of the player diff --git a/includes/game/math.h b/includes/game/render.h similarity index 63% rename from includes/game/math.h rename to includes/game/render.h index e7956f9..b4fae4d 100644 --- a/includes/game/math.h +++ b/includes/game/render.h @@ -1,14 +1,23 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* math.h :+: :+: :+: */ +/* render.h :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2024/10/29 10:07:24 by adjoly #+# #+# */ -/* Updated: 2024/10/29 10:08:53 by adjoly ### ########.fr */ +/* Created: 2024/11/10 16:47:43 by adjoly #+# #+# */ +/* Updated: 2024/11/10 16:50:37 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ -#ifndef -void fix_ang(float *ang); +#ifndef RENDER_H +# define RENDER_H + +# include "game.h" +# include "dda.h" + +void *get_texture(bool hor, t_render *render, t_ray *ray); +void draw_celling(t_render *render); +void draw_floor(t_render *render); + +#endif diff --git a/src/cub3d.c b/src/cub3d.c index c78ddda..20db872 100644 --- a/src/cub3d.c +++ b/src/cub3d.c @@ -6,7 +6,7 @@ /* By: madumerg +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/04 16:58:27 by madumerg #+# #+# */ -/* Updated: 2024/11/07 12:21:41 by adjoly ### ########.fr */ +/* Updated: 2024/11/10 16:57:46 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,27 +20,34 @@ #include #include "utils.h" -int loop(void *param) +void move_for_back(t_render *render, bool forward) { - t_render *render; - - render = (t_render *)param; - mlx_destroy_image(render->mlx, render->img); - - if (render->player->key[0]) + if (forward) { render->player->coord.x += PLAYER_SPEED * \ cos(render->player->direction); render->player->coord.y += PLAYER_SPEED * \ -sin(render->player->direction); } - if (render->player->key[2]) + else { render->player->coord.x -= PLAYER_SPEED * \ cos(render->player->direction); render->player->coord.y -= PLAYER_SPEED * \ -sin(render->player->direction); } +} + +int loop(void *param) +{ + t_render *render; + + render = (t_render *)param; + mlx_destroy_image(render->mlx, render->img); + if (render->player->key[0]) + move_for_back(render, true); + if (render->player->key[2]) + move_for_back(render, false); if (render->player->key[3]) change_direction(PLAYER_ROT_SPEED, false, render->player); if (render->player->key[1]) @@ -51,6 +58,18 @@ int loop(void *param) return (0); } +void delete_everything(t_pars *parsing, t_render *render) +{ + 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); + free_pars(parsing); +} + int main(int ac, char **av) { t_render render; @@ -76,13 +95,6 @@ int main(int ac, char **av) mlx_on_event(render.mlx, render.win, MLX_KEYUP, key_up, &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); - free_pars(&parsing); + delete_everything(&parsing, &render); return (EXIT_SUCCESS); } diff --git a/src/raycasting/renderer.c b/src/raycasting/renderer.c index 72914f5..0c2075d 100644 --- a/src/raycasting/renderer.c +++ b/src/raycasting/renderer.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/28 15:48:39 by adjoly #+# #+# */ -/* Updated: 2024/11/10 15:44:00 by adjoly ### ########.fr */ +/* Updated: 2024/11/10 16:49:53 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,75 +15,32 @@ #include #include #include +#include -void draw_floor(t_render *render) +int get_color(t_ray *ray, t_dda *dda, t_render *render, \ + int y) { - size_t x; - size_t y; - - y = WINDOW_H / 2; - while (y < WINDOW_H) - { - x = 0; - while (x < WINDOW_W) - { - mlx_set_image_pixel(render->mlx, render->img, x, y, \ - render->world->floor); - x++; - } - y++; - } -} - -void draw_celling(t_render *render) -{ - size_t x; - size_t y; - - y = 0; - while (y < WINDOW_H / 2) - { - x = 0; - while (x < WINDOW_W) - { - mlx_set_image_pixel(render->mlx, render->img, x, y, \ - render->world->celling); - x++; - } - y++; - } -} - -int get_color(t_ray *ray, t_dda *dda, t_render *render, int line_start, int line_stop, int line_size) -{ - int x; - int h; - int color; + int x; + int color; void **texture; + int line_stop; + int line_size; - (void)ray; + line_size = (CHUNK_SIZE * WINDOW_H) / ray->distance; line_stop = line_size / 2 + WINDOW_H / 2; + y = abs((line_stop - y) * TEXTURE_SIZE / line_size - 63); if (dda->distance.y < dda->distance.x) { x = (int)dda->hori.x % CHUNK_SIZE; - h = abs((line_stop - line_start) * TEXTURE_SIZE / line_size - 63); - if (ray->angle < M_PI) - texture = &render->texture[0]; - else - texture = &render->texture[2]; - color = mlx_get_image_pixel(render->mlx, *texture, x, h); + texture = get_texture(true, render, ray); } else { x = (int)dda->vert.y % CHUNK_SIZE; - h = abs((line_stop - line_start) * TEXTURE_SIZE / line_size - 63); - if (ray->angle <= 3 * M_PI / 2 && ray->angle >= M_PI / 2) - texture = &render->texture[1]; - else - texture = &render->texture[3]; - color = mlx_get_image_pixel(render->mlx, *texture, x, h); + texture = get_texture(false, render, ray); } - return (color); + color = mlx_get_image_pixel(render->mlx, *texture, x, y); + return (color); } void print_line(t_render *render, t_ray *ray, int x, t_dda *dda) @@ -102,7 +59,8 @@ void print_line(t_render *render, t_ray *ray, int x, t_dda *dda) while (line_start < line_stop) { if (x < WINDOW_W && x >= 0) - mlx_set_image_pixel(render->mlx, render->img, x, line_start, get_color(ray, dda, render, line_start, line_stop, line_size)); + mlx_set_image_pixel(render->mlx, render->img, x, line_start, \ + get_color(ray, dda, render, line_start)); line_start++; } } diff --git a/src/raycasting/utils_render.c b/src/raycasting/utils_render.c new file mode 100644 index 0000000..2ad5929 --- /dev/null +++ b/src/raycasting/utils_render.c @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* utils_render.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/10 16:46:57 by adjoly #+# #+# */ +/* Updated: 2024/11/10 16:49:17 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "game/game.h" +#include "game/dda.h" +#include "game/render.h" +#include + +void draw_floor(t_render *render) +{ + size_t x; + size_t y; + + y = WINDOW_H / 2; + while (y < WINDOW_H) + { + x = 0; + while (x < WINDOW_W) + { + mlx_set_image_pixel(render->mlx, render->img, x, y, \ + render->world->floor); + x++; + } + y++; + } +} + +void draw_celling(t_render *render) +{ + size_t x; + size_t y; + + y = 0; + while (y < WINDOW_H / 2) + { + x = 0; + while (x < WINDOW_W) + { + mlx_set_image_pixel(render->mlx, render->img, x, y, \ + render->world->celling); + x++; + } + y++; + } +} + +void *get_texture(bool hor, t_render *render, t_ray *ray) +{ + if (hor) + { + if (ray->angle < M_PI) + return (&render->texture[0]); + else + return (&render->texture[2]); + } + else + { + if (ray->angle <= 3 * M_PI / 2 && ray->angle >= M_PI / 2) + return (&render->texture[1]); + else + return (&render->texture[3]); + } +} diff --git a/src/raycasting/vectwo.c b/src/raycasting/vectwo.c index c41dfce..e5752b8 100644 --- a/src/raycasting/vectwo.c +++ b/src/raycasting/vectwo.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/26 15:47:29 by adjoly #+# #+# */ -/* Updated: 2024/11/02 15:42:28 by adjoly ### ########.fr */ +/* Updated: 2024/11/10 16:33:54 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,19 +23,4 @@ void vec2_add(t_vec2 *first, t_vec2 second) { first->x += second.x; first->y += second.y; -} - // to be removed -void vec2_sub(t_vec2 *first, t_vec2 second) -{ - first->x -= second.x; - first->y -= second.y; -} - -t_vec2 vec2_mul_ret(t_vec2 vec, float n) -{ - t_vec2 ret; - - ret.x = vec.x * n; - ret.y = vec.y * n; - return (ret); } diff --git a/src/utils/convert_parsing.c b/src/utils/convert_parsing.c index d761722..d321ac2 100644 --- a/src/utils/convert_parsing.c +++ b/src/utils/convert_parsing.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/06 13:01:03 by adjoly #+# #+# */ -/* Updated: 2024/11/09 15:49:41 by madumerg ### ########.fr */ +/* Updated: 2024/11/10 16:32:18 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -50,8 +50,12 @@ 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); + 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); }