diff --git a/MLX42/include/MLX42/MLX42_Int.h b/MLX42/include/MLX42/MLX42_Int.h index 5fa5558..f59c8ef 100644 --- a/MLX42/include/MLX42/MLX42_Int.h +++ b/MLX42/include/MLX42/MLX42_Int.h @@ -6,7 +6,7 @@ /* By: W2Wizard +#+ */ /* +#+ */ /* Created: 2021/12/27 23:55:34 by W2Wizard #+# #+# */ -/* Updated: 2024/01/17 12:49:14 by jboeve ######## odam.nl */ +/* Updated: 2024/01/20 00:49:21 by joppe ######## odam.nl */ /* */ /* ************************************************************************** */ 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..9a3b0b1 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/20 01:14:53 by joppe ######## odam.nl */ /**/ /* ************************************************************************** */ @@ -56,16 +56,16 @@ #define WINDOW_WIDTH 1280 #define WINDOW_HEIGHT 720 +#define BPP 4 // Game #define TICK_RATE (1.0 / 60.0) -#define PLAYER_MOVE_SPEED 5.0 +#define PLAYER_MOVE_SPEED 3.5 #define PLAYER_RUN_MODIFIER 2.5 -#define PLAYER_ROTATE_SPEED 5.0 +#define PLAYER_ROTATE_SPEED 3.0 #define PLAYER_ROTATE_MODIFIER 2.5 -#define PLAYER_MOV_SPEED 0.08 #define MINIMAP_WIDTH 350 #define MINIMAP_HEIGHT 230 @@ -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/include/vector.h b/include/vector.h index d7e9269..a1cbd08 100644 --- a/include/vector.h +++ b/include/vector.h @@ -1,12 +1,12 @@ /* ************************************************************************** */ /**/ /* :::::::: */ -/* vector.h :+::+: */ +/* vector.h :+: :+: */ /*+:+ */ /* By: joppe +#+ */ /* +#+ */ /* Created: 2024/01/02 19:07:15 by joppe #+##+# */ -/* Updated: 2024/01/03 18:35:23 by joppe ######## odam.nl */ +/* Updated: 2024/01/19 23:36:47 by joppe ######## odam.nl */ /**/ /* ************************************************************************** */ @@ -35,6 +35,7 @@ typedef struct s_vec2u { t_vec2d vec2d_add(t_vec2d v1, t_vec2d v2); t_vec2d vec2d_sub(t_vec2d v1, t_vec2d v2); t_vec2d vec2d_scalar_product(t_vec2d vec, double scalar); +double vec2d_dot_product(t_vec2d v1, t_vec2d v2); t_vec2d vec2d_mul(t_vec2d v1, t_vec2d v2); t_vec2d vec2d_rotate(t_vec2d old, double radiant); t_vec2d vec2d_normalize(t_vec2d vec); diff --git a/src/game/game.c b/src/game/game.c index e506713..ec96f83 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -6,7 +6,7 @@ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:26:51 by yzaim #+# #+# */ -/* Updated: 2024/01/17 13:04:46 by jboeve ######## odam.nl */ +/* Updated: 2024/01/25 13:22:31 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -14,7 +14,9 @@ #include "meta.h" #include "timer.h" #include "vector.h" +#include #include +#include #include #include "test_utils.h" @@ -54,6 +56,24 @@ void set_player_start_position(t_player *p, char dir) p->position.y += 0.5; } + + + +void swap_tex(mlx_texture_t *tex) +{ + assert(tex->width == tex->height); + + for (size_t x = 0; x < tex->width; x++) + { + for (size_t y = 0; y < x; y++) + { + uint32_t pixel = tex->pixels[(tex->width * y + x) * BPP]; + tex->pixels[(tex->width * y + x) * BPP] = tex->pixels[(tex->width * x + y) * BPP]; + tex->pixels[(tex->width * x + y) * BPP] = pixel; + } + } +} + void game_init(t_meta *meta) { t_player* const p = &meta->player; 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..c5af66e 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/25 13:21:42 by jboeve ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ #include #include -bool bound_check(void *param, uint32_t x, uint32_t y) +bool bound_check(const void *param, uint32_t x, uint32_t y) { t_meta *const meta = (t_meta *) param; if (x < meta->map.width && y < meta->map.height) @@ -32,21 +32,51 @@ bool bound_check(void *param, uint32_t x, uint32_t y) } } -void player_move(t_player *p, t_vec2d transform) +void print_angle(t_player *p) { - t_vec2d new_position; - - new_position.x = (p->position.x + (transform.x)); - new_position.y = (p->position.y + (transform.y)); + // NORTH = 0 + const float angle = (atan2(p->direction.x, p->direction.y) / PI * 180 + 180); + if (angle > 45.0 && angle < 135.0) + { + printf("N\n"); + } + else if (angle > 135.0 && angle < 225.0) + { + printf("E\n"); + } + else if (angle > 225.0 && angle < 315.0) + { + printf("S\n"); + } + else if (angle > 315.0 || angle < 45.0) + { + printf("W\n"); + } +} - // TODO Fix. +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); - if (r.length > .5) + if (r.length > 0.4) + p->position = vec2d_add(p->position, transform); + else { - p->position.x += transform.x; - p->position.y += transform.y; + const int comp = (r.hit_side == SIDE_N || r.hit_side == SIDE_S); + const t_vec2d normal = {comp, !comp}; // 1, 0 // 0, 1 + const double dot_product = vec2d_dot_product(transform, normal); + + + t_vec2d delta_pos; + delta_pos.x = transform.x - normal.x * dot_product; + delta_pos.y = transform.y - normal.y * dot_product; + r = raycaster_cast(p->position, vec2d_normalize(transform), bound_check, p->meta); + + if (r.length > 0.35) + { + p->position.x += delta_pos.x; + p->position.y += delta_pos.y; + } } player_raycast(p); } @@ -61,16 +91,15 @@ void player_turn(t_player *p, float radiant) void player_raycast(t_player *p) { - uint32_t w = p->meta->image->width; - uint32_t col; - t_vec2d ray_start; - double camera_x; + uint32_t col; + double camera_x; + t_vec2d ray_start; // TODO Just create the player.plane here instead of saving it. col = 0; - while(col < w) + while (col < p->meta->image->width) { - camera_x = (2 * col / ((double) w) - 1); + camera_x = (2 * col / ((double) p->meta->image->width) - 1); ray_start = vec2d_add(p->direction, vec2d_scalar_product(p->cam_plane, camera_x)); p->rays[col] = raycaster_cast(p->position, ray_start, bound_check, p->meta); // printf("wall x: %f\n", p->rays[col].wall_x); 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/game/render_viewport.c b/src/game/render_viewport.c index a1ec418..7a5bdf8 100644 --- a/src/game/render_viewport.c +++ b/src/game/render_viewport.c @@ -6,7 +6,7 @@ /* By: yzaim +#+ */ /* +#+ */ /* Created: 2024/01/08 15:28:08 by yzaim #+# #+# */ -/* Updated: 2024/01/18 12:27:01 by jboeve ######## odam.nl */ +/* Updated: 2024/01/20 01:18:16 by joppe ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/src/renderer/pixel_picker.c b/src/renderer/pixel_picker.c index 50d1a47..9fe2150 100644 --- a/src/renderer/pixel_picker.c +++ b/src/renderer/pixel_picker.c @@ -6,7 +6,7 @@ /* By: yzaim +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/08 15:26:51 by yzaim #+# #+# */ -/* Updated: 2024/01/17 15:42:56 by jboeve ######## odam.nl */ +/* Updated: 2024/01/20 01:16:30 by joppe ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -50,7 +50,7 @@ uint32_t pixel_picker(mlx_texture_t *texture, int32_t x, int32_t y) int32_t index; // printf("x: %u | y: %u\n", x, y); - index = y * texture->width * 4 + x * 4; + index = x * texture->width * BPP + y * BPP; // printf("index: %d\n", index); r = (uint32_t)texture->pixels[index]; g = (uint32_t)texture->pixels[index + 1]; 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/src/vector/vec2d.c b/src/vector/vec2d.c index a3c90aa..46e2c44 100644 --- a/src/vector/vec2d.c +++ b/src/vector/vec2d.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* :::::::: */ -/* vec2d.c :+: :+: */ +/* vec2d.c :+: :+: */ /* +:+ */ /* By: yzaim +#+ */ /* +#+ */ /* Created: 2024/01/08 16:09:26 by yzaim #+# #+# */ -/* Updated: 2024/01/08 16:09:27 by yzaim ######## odam.nl */ +/* Updated: 2024/01/19 23:37:30 by joppe ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -31,6 +31,12 @@ t_vec2d vec2d_scalar_product(t_vec2d vec, double scalar) return ((t_vec2d){vec.x * scalar, vec.y * scalar}); } +double vec2d_dot_product(t_vec2d v1, t_vec2d v2) +{ + return ((v1.x * v2.x) + (v1.y * v2.y)); +} + + t_vec2d vec2d_mul(t_vec2d v1, t_vec2d v2) { return ((t_vec2d){v1.x * v2.x, v1.y * v2.y}); diff --git a/test_maps/valid_tex.cub b/test_maps/valid_tex.cub index 1b23e53..113ecd3 100644 --- a/test_maps/valid_tex.cub +++ b/test_maps/valid_tex.cub @@ -1,17 +1,17 @@ -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 11111111111111 1000010001 +1000N10001 1000010001 -1000110001 -1000100001 -1000100001 -100000000111 -100000000001 -1000000E011 +1000000001 +1000000001 +111000000111 +100000100001 +10000000011 1111111111