From 750047ab86ff25f0c7adbbe670411a45d1b3d1db Mon Sep 17 00:00:00 2001 From: Joppe Boeve Date: Thu, 18 Jan 2024 17:34:22 +0100 Subject: [PATCH] Solution not really working nicely with wide angles --- Makefile | 4 ++-- include/meta.h | 10 +++++----- include/test_utils.h | 20 ++++++++++---------- src/game/keys.c | 5 ++--- src/game/player.c | 40 +++++++++++++++++++++++++++++++++++++-- src/game/render_minimap.c | 4 ++-- src/test_utils.c | 16 ++++++++++++++-- test_maps/valid_tex.cub | 6 +++--- 8 files changed, 76 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index ff55b90..fb11456 100644 --- a/Makefile +++ b/Makefile @@ -15,8 +15,8 @@ RUN_CMD := ./$(NAME) test_maps/valid_tex.cub # RUN_CMD := ./$(NAME) test_maps/small.cub # CFLAGS += -Wall -Wextra -Werror -CFLAGS += -Wall -Wextra -# CFLAGS += -g -fsanitize=address +# CFLAGS += -Wall -Wextra +CFLAGS += -g -fsanitize=address # CFLAGS += -g # CFLAGS += -Ofast -flto -march=native diff --git a/include/meta.h b/include/meta.h index d0fb002..d3ee9a7 100644 --- a/include/meta.h +++ b/include/meta.h @@ -6,7 +6,7 @@ /* By: jboeve +#+ */ /* +#+ */ /* Created: 2023/11/01 20:07:37 by jboeve#+##+# */ -/* Updated: 2024/01/18 11:56:06 by jboeve ######## odam.nl */ +/* Updated: 2024/01/18 14:09:20 by jboeve ######## odam.nl */ /**/ /* ************************************************************************** */ @@ -126,10 +126,10 @@ typedef union s_rgba typedef enum e_side { - SIDE_N, - SIDE_S, - SIDE_E, - SIDE_W, + SIDE_N = 0, + SIDE_S = 1, + SIDE_E = 2, + SIDE_W = 3, } t_side; typedef struct s_ray { diff --git a/include/test_utils.h b/include/test_utils.h index 528b3b6..9a4fbc7 100644 --- a/include/test_utils.h +++ b/include/test_utils.h @@ -1,13 +1,13 @@ /* ************************************************************************** */ -/**/ -/* :::::::: */ -/* test_utils.h :+::+: */ -/*+:+ */ -/* By: joppe +#+ */ -/* +#+ */ -/* Created: 2024/01/02 19:56:05 by joppe #+##+# */ -/* Updated: 2024/01/02 23:20:17 by joppe ######## odam.nl */ -/**/ +/* */ +/* :::::::: */ +/* test_utils.h :+: :+: */ +/* +:+ */ +/* By: jboeve +#+ */ +/* +#+ */ +/* Created: 2024/01/18 13:59:19 by jboeve #+# #+# */ +/* Updated: 2024/01/18 14:10:07 by jboeve ######## odam.nl */ +/* */ /* ************************************************************************** */ @@ -23,5 +23,5 @@ void print_cell(t_cell_type cell); void print_map(char *map, uint32_t w, uint32_t h); void print_map_cell(t_cell_type *level, uint32_t w, uint32_t h); void print_ray(const char *s, const t_ray *r); - +void print_direction(t_side dir); #endif // !TEST_UTILS_H diff --git a/src/game/keys.c b/src/game/keys.c index 2cbd08a..96d6916 100644 --- a/src/game/keys.c +++ b/src/game/keys.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* keys.c :+: :+: :+: */ +/* keys.c :+: :+: */ /* +:+ +:+ +:+ */ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:27:07 by yzaim #+# #+# */ -/* Updated: 2024/01/08 15:27:11 by yzaim ### ########.fr */ +/* Updated: 2024/01/18 12:50:58 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -49,7 +49,6 @@ static void keys_handle_move(t_meta *meta, double delta_time) pressed = true; trans = vec2d_add(trans, (t_vec2d) {(vec2d_rotate(p->direction, PI / 2).x) * speed, (vec2d_rotate(p->direction, PI / 2).y) * speed}); } - if (pressed) player_move(p, trans); } diff --git a/src/game/player.c b/src/game/player.c index fc524c4..22cca78 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -6,7 +6,7 @@ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:27:23 by yzaim #+# #+# */ -/* Updated: 2024/01/17 15:55:18 by jboeve ######## odam.nl */ +/* Updated: 2024/01/18 17:10:32 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -43,10 +43,46 @@ void player_move(t_player *p, t_vec2d transform) t_ray r = raycaster_cast(p->position, vec2d_normalize(transform), bound_check, p->meta); // print_ray("bound_ray", &r); + const double margin = 0.005; + + float angle = (atan2(p->direction.x, p->direction.y) / PI * 180 + 180); + printf("angle [%f]\n", angle); if (r.length > .5) { - p->position.x += transform.x; p->position.y += transform.y; + p->position.x += transform.x; + } + else if (r.length > .1) + { + printf("angle [%f]\n", angle); + + double res = 0.0; + + // Colission with a wall the y-axis + if ((angle > 0 && angle < 45) || (angle > 315)) + { + printf("Gliding N\n"); + res = transform.x * -p->direction.y; + r = raycaster_cast(p->position, (t_vec2d) {res, 0.0}, bound_check, p->meta); + if (r.length > .1) + p->position.x += res; + } + else if (angle > 90 && angle < 270) + { + printf("Gliding S\n"); + res = transform.x * p->direction.y; + r = raycaster_cast(p->position, (t_vec2d) {res, 0.0}, bound_check, p->meta); + if (r.length > .1) + p->position.x += res; + } + + + // if (angle == 1 || angle == 2) + // { + // double res = transform.y * -p->direction.x; + // r = raycaster_cast(p->position, (t_vec2d) {0.0, res}, bound_check, p->meta); + // p->position.y += res; + // } } player_raycast(p); } diff --git a/src/game/render_minimap.c b/src/game/render_minimap.c index 0a07de1..c5199a5 100644 --- a/src/game/render_minimap.c +++ b/src/game/render_minimap.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* render_minimap.c :+: :+: :+: */ +/* render_minimap.c :+: :+: */ /* +:+ +:+ +:+ */ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:27:53 by yzaim #+# #+# */ -/* Updated: 2024/01/08 15:27:58 by yzaim ### ########.fr */ +/* Updated: 2024/01/18 12:43:48 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/src/test_utils.c b/src/test_utils.c index 8c23404..1156ac0 100644 --- a/src/test_utils.c +++ b/src/test_utils.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* test_utils.c :+: :+: :+: */ +/* test_utils.c :+: :+: */ /* +:+ +:+ +:+ */ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:25:38 by yzaim #+# #+# */ -/* Updated: 2024/01/08 15:25:49 by yzaim ### ########.fr */ +/* Updated: 2024/01/18 14:10:17 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -31,6 +31,18 @@ void print_ray(const char *s, const t_ray *r) printf("[%s] | ray_direction [%lf][%lf] | length [%lf] | ray_end [%lf][%lf] | hit_side [%s]\n", s, r->direction.x, r->direction.y, r->length, r->end.x, r->end.y, side_text); } +void print_direction(t_side dir) +{ + const char *text[4] = { + [SIDE_N] = "N", + [SIDE_E] = "E", + [SIDE_S] = "S", + [SIDE_W] = "W", + }; + + printf("[%s]\n", text[dir]); +} + void print_cell(t_cell_type cell) { printf("cell [%s]\n", CELL_NAMES[cell]); diff --git a/test_maps/valid_tex.cub b/test_maps/valid_tex.cub index 1b23e53..e1ae7f1 100644 --- a/test_maps/valid_tex.cub +++ b/test_maps/valid_tex.cub @@ -1,7 +1,7 @@ -NO texture_examples/purplestone2.png +NO texture_examples/purplestone1.png WE texture_examples/redbrick.png EA texture_examples/redbrick.png -SO texture_examples/purplestone2.png +SO texture_examples/purplestone1.png F 255,255,255 C 12, 12, 12 @@ -13,5 +13,5 @@ C 12, 12, 12 1000100001 100000000111 100000000001 -1000000E011 +1000000N011 1111111111