diff --git a/assets/broken_mirror.png b/assets/broken_mirror.png new file mode 100644 index 0000000..651053b Binary files /dev/null and b/assets/broken_mirror.png differ diff --git a/assets/lamp.png b/assets/lamp.png new file mode 100644 index 0000000..bd536b1 Binary files /dev/null and b/assets/lamp.png differ diff --git a/src/player.c b/src/player.c index 97652ff..6ab0300 100644 --- a/src/player.c +++ b/src/player.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ -/* Updated: 2025/05/08 15:51:06 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:07:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -70,10 +70,10 @@ static void strave(t_map *map, t_player *player, int dir, double delta) } } -static void rotate(t_player *player, double rot_speed) +static void rotate(t_player *player, double rot_speed, double delta) { - player->dir = rot(player->dir, rot_speed); - player->camera = rot(player->camera, rot_speed); + player->dir = rot(player->dir, rot_speed * delta); + player->camera = rot(player->camera, rot_speed * delta); } void player_update(t_game *game, double delta_time) @@ -88,9 +88,9 @@ void player_update(t_game *game, double delta_time) else if (get_key(game, MLX_KEY_D)) strave(game->map, game->player, 1, delta_time); if (get_key(game, MLX_KEY_LEFT)) - rotate(game->player, -.05f); + rotate(game->player, -2.5, delta_time); else if (get_key(game, MLX_KEY_RIGHT)) - rotate(game->player, .05f); + rotate(game->player, 2.5, delta_time); } void player_render(t_screen *screen, t_player *player) diff --git a/src/render/DDAscratch.c b/src/render/DDAscratch.c index 6d16a94..87a9a70 100644 --- a/src/render/DDAscratch.c +++ b/src/render/DDAscratch.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */ -/* Updated: 2025/05/08 14:51:32 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 16:56:17 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/render/render_sprite.c b/src/render/render_sprite.c index 227c5e9..7ada600 100644 --- a/src/render/render_sprite.c +++ b/src/render/render_sprite.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ -/* Updated: 2025/05/08 16:02:06 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:02:10 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,7 @@ static void sort_sprites(t_game *game) { i = 1; new_n = 0; - while (i < n - 1) + while (i <= n - 1) { if (game->map->sprites[i - 1].dist < game->map->sprites[i].dist) { @@ -84,6 +84,8 @@ unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double d int index; int alpha; + dist = (dist == 0) * 1e30 + (dist > 1) * dist + (dist <= 1) * 1; + alpha = 1.0 / dist * 255; index = (x + y * texture->width) * texture->bytes_per_pixel; if (texture->pixels[index + 3] == 0) @@ -93,7 +95,7 @@ unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double d return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | alpha; } -void draw_sprite(t_game *game, t_sprite *sprite) +void draw_sprite(t_game *game, t_sprite *sprite, t_render *render) { double sprite_scale; int x_start; @@ -106,36 +108,36 @@ void draw_sprite(t_game *game, t_sprite *sprite) double tex_y; unsigned int color; - if (isnan(sprite->cam_frac) || sprite->dist < 1) + if (isnan(sprite->cam_frac) || sprite->dist <= 0) return; - sprite_scale = (1 / sprite->dist) * 16; + sprite_scale = (1.0 / sprite->dist) * 16.0; x_start = (game->screen->width / 2) * (1 + sprite->cam_frac) - ((sprite->texture->width * sprite_scale) / 2); y_start = (game->screen->height / 2) - (sprite->texture->height * sprite_scale) / 2 ; x_end = (game->screen->width / 2) * (1 + sprite->cam_frac) + ((sprite->texture->width * sprite_scale) / 2); y_end = (game->screen->height / 2) + (sprite->texture->height * sprite_scale) / 2 ; x = x_start; - y = y_start; - while (y < y_end) + while (x < x_end) { - if (y < 0 || y >= game->screen->height) - break; - x = (int)x_start; - while (x < x_end) + y = y_start; + if (x < 0 || x >= game->screen->width || sprite->dist > render[x].perp_dist) + { + x++; + continue; + } + while (y < y_end) { tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width; tex_y = ((double)((y- y_start) / (double)(y_end - y_start))) * sprite->texture->height; - // printf("\e[1;1H\e[2J"); - // printf("x: %d, y: %d, tex_x: %d, tex_y: %d\n", x, y, (int) tex_x, (int) tex_y); color = sample_texture_color(sprite->texture, (int)(tex_x), (int)(tex_y), sprite->dist); if (x < 0 || x >= game->screen->width || y < 0 || y >= game->screen->height || (color & 0xFF) == 0) { - x++; + y++; continue; } mlx_put_pixel(game->screen->img, x, y, color); - x++; + y++; } - y++; + x++; } } @@ -149,7 +151,7 @@ void render_sprites(t_render *render, t_game *game) while (i < game->map->n_sprites) { cam_fraction(game, &game->map->sprites[i]); - draw_sprite(game, &game->map->sprites[i]); + draw_sprite(game, &game->map->sprites[i], render); i++; } } \ No newline at end of file diff --git a/src/screen.c b/src/screen.c index 7f0040e..f9578c7 100644 --- a/src/screen.c +++ b/src/screen.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */ -/* Updated: 2025/05/08 16:08:08 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:10:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,8 @@ int screen_create(t_game **game) return (FAILURE); screen->width = WIDTH; screen->height = HEIGHT; - mlx = mlx_init(WIDTH, HEIGHT, TITLE, false); + mlx_set_setting(MLX_FULLSCREEN, 1); + mlx = mlx_init(WIDTH, HEIGHT, TITLE, true); if (!mlx) return (FAILURE); screen->mlx = mlx; diff --git a/src/util/initialize.c b/src/util/initialize.c index 72f289c..431f943 100644 --- a/src/util/initialize.c +++ b/src/util/initialize.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ -/* Updated: 2025/05/08 14:52:45 by qmennen ### ########.fr */ +/* Updated: 2025/05/08 17:28:50 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ static int init_temp(t_game **game) { - (*game)->map->sprites = malloc(sizeof(t_sprite)); + (*game)->map->sprites = malloc(sizeof(t_sprite) * 5); if (!(*game)->map->sprites) return (FAILURE); (*game)->map->sprites[0].n_frames = 1; @@ -22,7 +22,27 @@ static int init_temp(t_game **game) (*game)->map->sprites[0].pos.y = 3.5; (*game)->map->sprites[0].dist = 0; (*game)->map->sprites[0].texture = mlx_load_png("./assets/battery.png"); - (*game)->map->n_sprites = 1; + (*game)->map->sprites[1].n_frames = 1; + (*game)->map->sprites[1].pos.x = 2.5; + (*game)->map->sprites[1].pos.y = 3.5; + (*game)->map->sprites[1].dist = 0; + (*game)->map->sprites[1].texture = mlx_load_png("./assets/battery.png"); + (*game)->map->sprites[2].n_frames = 1; + (*game)->map->sprites[2].pos.x = 1.5; + (*game)->map->sprites[2].pos.y = 3.5; + (*game)->map->sprites[2].dist = 0; + (*game)->map->sprites[2].texture = mlx_load_png("./assets/battery.png"); + (*game)->map->sprites[3].n_frames = 1; + (*game)->map->sprites[3].pos.x = 3.5; + (*game)->map->sprites[3].pos.y = 4.5; + (*game)->map->sprites[3].dist = 0; + (*game)->map->sprites[3].texture = mlx_load_png("./assets/broken_mirror.png"); + (*game)->map->sprites[4].n_frames = 1; + (*game)->map->sprites[4].pos.x = 2.5; + (*game)->map->sprites[4].pos.y = 5.5; + (*game)->map->sprites[4].dist = 0; + (*game)->map->sprites[4].texture = mlx_load_png("./assets/lamp.png"); + (*game)->map->n_sprites = 5; (*game)->screen->hud = mlx_texture_to_image((*game)->screen->mlx, mlx_load_png("./assets/overlay.png")); return (SUCCESS); }