diff --git a/MacroLibX b/MacroLibX index 4d640ed..fc6aeab 160000 --- a/MacroLibX +++ b/MacroLibX @@ -1 +1 @@ -Subproject commit 4d640ed70cd392f3e3311fe2779905876b7f1b6f +Subproject commit fc6aeab67867219a6976b5e6a3eceb04c6ce2d0f diff --git a/includes/game/settings.h b/includes/game/settings.h index 5573d4c..d4709a3 100644 --- a/includes/game/settings.h +++ b/includes/game/settings.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/04 14:06:39 by adjoly #+# #+# */ -/* Updated: 2024/11/01 18:15:03 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 14:15:03 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,10 +22,10 @@ # define WHITE 0xFFFFFFFF -# define WINDOW_H 900 # define WINDOW_W 1600 +# define WINDOW_H 900 # define PLAYER_ROT_SPEED (2 * M_PI) / 128 -# define PLAYER_SPEED 0.01 +# define PLAYER_SPEED 0.5 # define FOV 70 # define CHUNK_SIZE 64 diff --git a/src/cub3d.c b/src/cub3d.c index a5e1d35..9bc8e64 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/01 18:09:53 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 14:21:07 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,18 @@ #include "mlx.h" #include +int loop(void *param) +{ + t_render *render; + + render = (t_render *)param; + mlx_destroy_image(render->mlx, render->img); + render->img = mlx_new_image(render->mlx, WINDOW_W, WINDOW_H); + render_frame(render); + mlx_put_image_to_window(render->mlx, render->win, render->img, 0, 0); + return (0); +} + int main(int ac, char **av) { t_render render; @@ -41,6 +53,7 @@ int main(int ac, char **av) (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_window(render.mlx, render.win); diff --git a/src/raycasting/dda.c b/src/raycasting/dda.c index 04bf9c6..b46508b 100644 --- a/src/raycasting/dda.c +++ b/src/raycasting/dda.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/07 16:55:09 by adjoly #+# #+# */ -/* Updated: 2024/11/01 18:33:52 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 13:59:41 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -74,16 +74,11 @@ 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) { - uint16_t w; - uint16_t h; - - w = map->size.x; - h = map->size.y; while (dda->s && dda->i) { dda->map.x = (int)((int)ray->pos.x / 64); dda->map.y = (int)((int)ray->pos.y / 64); - if (dda->map.x >= 0 && dda->map.x < w && dda->map.y >= 0 && dda->map.y < h && \ + if (dda->map.x >= 0 && dda->map.x < map->size.x && dda->map.y >= 0 && dda->map.y < map->size.y && \ map->arr[(int)dda->map.y][(int)dda->map.x] == '1') { dda->i = 0; @@ -104,28 +99,28 @@ void dda_algo(t_render *render, t_dda *dda, t_ray *ray) { setup_dda_hor(render->player, ray, dda); dda->i = render->world->size.y; - printf("caca pos = %f, %f\n", ray->pos.x, ray->pos.y); + //printf("caca pos = %f, %f\n", ray->pos.x, ray->pos.y); dda_loop(dda, ray, render->world, render->player); - printf("pipi pos = %f, %f\n", ray->pos.x, ray->pos.y); + //printf("pipi pos = %f, %f\n", ray->pos.x, ray->pos.y); dda->hori.x = ray->pos.x; dda->hori.y = ray->pos.y; setup_dda_ver(render->player, ray, dda); dda->i = render->world->size.x; - printf("caca pos = %f, %f\n", ray->pos.x, ray->pos.y); + //printf("caca pos = %f, %f\n", ray->pos.x, ray->pos.y); dda_loop(dda, ray, render->world, render->player); - printf("pipi pos = %f, %f\n", ray->pos.x, ray->pos.y); + //printf("pipi pos = %f, %f\n", ray->pos.x, ray->pos.y); dda->vert.x = ray->pos.x; dda->vert.y = ray->pos.y; if (dda->distance.y < dda->distance.x) { ray->pos.x = fabsf(dda->hori.x); ray->pos.y = fabsf(dda->hori.y); - ray->distance = dda->distance.x; + ray->distance = dda->distance.y; } else { ray->pos.x = fabsf(dda->vert.x); ray->pos.y = fabsf(dda->vert.y); - ray->distance = dda->distance.y; + ray->distance = dda->distance.x; } } diff --git a/src/raycasting/key_hook.c b/src/raycasting/key_hook.c index fecdc03..f64ffe7 100644 --- a/src/raycasting/key_hook.c +++ b/src/raycasting/key_hook.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/11 16:37:56 by adjoly #+# #+# */ -/* Updated: 2024/11/01 16:05:37 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 14:21:14 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -45,10 +45,5 @@ int key_hook(int key, void *param) change_direction(PLAYER_ROT_SPEED, false, render->player); else if (key == A_KEY) change_direction(PLAYER_ROT_SPEED, true, render->player); - printf("player coord x = %f, y = %f\n", render->player->coord.x, render->player->coord.y); - mlx_destroy_image(render->mlx, render->img); - render->img = mlx_new_image(render->mlx, WINDOW_W, WINDOW_H); - render_frame(render); - mlx_put_image_to_window(render->mlx, render->win, render->img, 0, 0); return (0); } diff --git a/src/raycasting/renderer.c b/src/raycasting/renderer.c index 746617c..19a42c3 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/01 18:32:01 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 14:14:45 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,26 +54,29 @@ void draw_celling(t_render *render) void print_line(t_render *render, t_ray *ray, int x) { - int line; + int line_size; + int line_stop; int line_start; - int y; - line = (CHUNK_SIZE * WINDOW_H) / ray->distance; - line_start = -line / 2 + WINDOW_H / 2; - y = 0; - while (y < line) + line_size = (CHUNK_SIZE * WINDOW_H) / ray->distance; + line_start = -line_size / 2 + WINDOW_H / 2; + line_stop = line_size / 2 + WINDOW_H / 2; + if (line_start < 0) + line_start = 0; + if (line_stop > WINDOW_H) + line_stop = WINDOW_H - 1; + while (line_start < line_stop) { - mlx_set_image_pixel(render->mlx, render->img, x, line_start + y, WHITE); - y++; + mlx_set_image_pixel(render->mlx, render->img, x, line_start, WHITE); + line_start++; } } void render_frame(t_render *render) { - int i; + int i; t_dda dda; t_ray ray; - float ang; i = WINDOW_W; ray.angle = render->player->direction - (M_PI / 180) / ((float)FOV / 2); @@ -83,9 +86,6 @@ void render_frame(t_render *render) while(i > -1) { dda_algo(render, &dda, &ray); - ang = render->player->direction - ray.angle; - fix_ang(&ang); - ray.distance *= cos(ang); print_line(render, &ray, i); ray.angle += (M_PI / 180) / ((float)WINDOW_W / FOV); fix_ang(&ray.angle); diff --git a/src/raycasting/vectwo.c b/src/raycasting/vectwo.c index 1e942f7..a993ad1 100644 --- a/src/raycasting/vectwo.c +++ b/src/raycasting/vectwo.c @@ -6,12 +6,13 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/26 15:47:29 by adjoly #+# #+# */ -/* Updated: 2024/11/01 16:07:33 by madumerg ### ########.fr */ +/* Updated: 2024/11/02 14:25:24 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "game/vectwo.h" #include +#include float vec2_dist(t_vec2 first, t_vec2 second) { @@ -29,3 +30,12 @@ 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, uint16_t n) +{ + t_vec2 ret; + + ret.x = vec.x * n; + ret.y = vec.y * n; + return (ret); +}