brokkenmirrorenstufff

This commit is contained in:
Quinten Mennen 2025-05-08 17:29:41 +02:00
parent 7ed804f3ee
commit 03ceeb1da5
7 changed files with 52 additions and 29 deletions

BIN
assets/broken_mirror.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
assets/lamp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 18:53:19 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->dir = rot(player->dir, rot_speed * delta);
player->camera = rot(player->camera, rot_speed); player->camera = rot(player->camera, rot_speed * delta);
} }
void player_update(t_game *game, double delta_time) 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)) else if (get_key(game, MLX_KEY_D))
strave(game->map, game->player, 1, delta_time); strave(game->map, game->player, 1, delta_time);
if (get_key(game, MLX_KEY_LEFT)) 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)) 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) void player_render(t_screen *screen, t_player *player)

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */ /* 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/08 12:23:17 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; i = 1;
new_n = 0; new_n = 0;
while (i < n - 1) while (i <= n - 1)
{ {
if (game->map->sprites[i - 1].dist < game->map->sprites[i].dist) 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 index;
int alpha; int alpha;
dist = (dist == 0) * 1e30 + (dist > 1) * dist + (dist <= 1) * 1;
alpha = 1.0 / dist * 255; alpha = 1.0 / dist * 255;
index = (x + y * texture->width) * texture->bytes_per_pixel; index = (x + y * texture->width) * texture->bytes_per_pixel;
if (texture->pixels[index + 3] == 0) 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; 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; double sprite_scale;
int x_start; int x_start;
@ -106,36 +108,36 @@ void draw_sprite(t_game *game, t_sprite *sprite)
double tex_y; double tex_y;
unsigned int color; unsigned int color;
if (isnan(sprite->cam_frac) || sprite->dist < 1) if (isnan(sprite->cam_frac) || sprite->dist <= 0)
return; 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); 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 ; 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); 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 ; y_end = (game->screen->height / 2) + (sprite->texture->height * sprite_scale) / 2 ;
x = x_start; x = x_start;
y = y_start;
while (y < y_end)
{
if (y < 0 || y >= game->screen->height)
break;
x = (int)x_start;
while (x < x_end) while (x < x_end)
{ {
tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width; y = y_start;
tex_y = ((double)((y- y_start) / (double)(y_end - y_start))) * sprite->texture->height; if (x < 0 || x >= game->screen->width || sprite->dist > render[x].perp_dist)
// 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++; x++;
continue; continue;
} }
mlx_put_pixel(game->screen->img, x, y, color); while (y < y_end)
x++; {
} 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;
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)
{
y++; y++;
continue;
}
mlx_put_pixel(game->screen->img, x, y, color);
y++;
}
x++;
} }
} }
@ -149,7 +151,7 @@ void render_sprites(t_render *render, t_game *game)
while (i < game->map->n_sprites) while (i < game->map->n_sprites)
{ {
cam_fraction(game, &game->map->sprites[i]); cam_fraction(game, &game->map->sprites[i]);
draw_sprite(game, &game->map->sprites[i]); draw_sprite(game, &game->map->sprites[i], render);
i++; i++;
} }
} }

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 15:30:27 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); return (FAILURE);
screen->width = WIDTH; screen->width = WIDTH;
screen->height = HEIGHT; 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) if (!mlx)
return (FAILURE); return (FAILURE);
screen->mlx = mlx; screen->mlx = mlx;

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/22 17:08:26 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) 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) if (!(*game)->map->sprites)
return (FAILURE); return (FAILURE);
(*game)->map->sprites[0].n_frames = 1; (*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].pos.y = 3.5;
(*game)->map->sprites[0].dist = 0; (*game)->map->sprites[0].dist = 0;
(*game)->map->sprites[0].texture = mlx_load_png("./assets/battery.png"); (*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")); (*game)->screen->hud = mlx_texture_to_image((*game)->screen->mlx, mlx_load_png("./assets/overlay.png"));
return (SUCCESS); return (SUCCESS);
} }