minimap first
This commit is contained in:
parent
93e7932084
commit
d4319f0789
16
inc/cub3d.h
16
inc/cub3d.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* cub3d.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/06 19:10:44 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* cub3d.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 15:05:36 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
# define WHITE "\033[0;37m"
|
||||
|
||||
# define NUM_KEYS 256
|
||||
# define TILE_SIZE 16
|
||||
# define TILE_SIZE 8
|
||||
|
||||
# include "MLX42.h"
|
||||
# include "allowed.h"
|
||||
|
||||
16
inc/render.h
16
inc/render.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* render.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 16:28:16 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 14:50:38 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* render.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 16:28:16 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 14:34:27 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -20,7 +20,7 @@ void render_line(t_screen *screen, t_vec2 start, t_vec2 end, unsigned int color)
|
||||
void render_circle(t_screen *screen, t_vec2 point, int radius, unsigned int color);
|
||||
void render_clear(t_screen *screen);
|
||||
void render_entities(t_game *game);
|
||||
void render_map(t_screen *screen, t_map *map);
|
||||
void render_map(t_game *game);
|
||||
void cast_rays(t_game *game);
|
||||
void render_sprites(t_render* render, t_game *game);
|
||||
|
||||
|
||||
15
inc/types.h
15
inc/types.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* types.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 14:51:17 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* types.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 12:39:56 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -57,6 +57,7 @@ typedef struct s_sprite
|
||||
int n_frames;
|
||||
double dist;
|
||||
double cam_frac;
|
||||
double alpha;
|
||||
mlx_texture_t *texture;
|
||||
t_vec2 pos;
|
||||
} t_sprite;
|
||||
|
||||
18
src/game.c
18
src/game.c
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 16:35:41 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* game.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 14:51:14 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -57,8 +57,8 @@ void game_loop(void *param)
|
||||
render_clear(game->screen);
|
||||
player_update(game, delta_time);
|
||||
cast_rays(game);
|
||||
render_map(game->screen, game->map);
|
||||
render_entities(game);
|
||||
render_map(game);
|
||||
//render_entities(game);
|
||||
keyboard_update(game);
|
||||
if (game->player->is_moving)
|
||||
{
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* DDAscratch.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */
|
||||
/* Updated: 2025/05/08 16:56:17 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* DDAscratch.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */
|
||||
/* Updated: 2025/05/09 15:20:04 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/07 11:38:34 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/05/09 15:20:24 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -43,7 +43,7 @@ void render_tile(t_screen *screen, int x, int y, t_tile tile)
|
||||
}
|
||||
}
|
||||
|
||||
void render_map(t_screen *screen, t_map *map)
|
||||
void render_map2(t_screen *screen, t_map *map)
|
||||
{
|
||||
int i;
|
||||
int x;
|
||||
|
||||
49
src/render/render_minimap.c
Normal file
49
src/render/render_minimap.c
Normal file
@ -0,0 +1,49 @@
|
||||
#include "cub3d.h"
|
||||
|
||||
|
||||
#define MINIMAP_SIZE 200
|
||||
void render_map(t_game *game)
|
||||
{
|
||||
t_vec2_int disp;
|
||||
t_vec2 map;
|
||||
|
||||
disp.x = 0;
|
||||
while (disp.x < MINIMAP_SIZE)
|
||||
{
|
||||
disp.y = 0;
|
||||
while (disp.y < MINIMAP_SIZE)
|
||||
{
|
||||
if (disp.x == 0.5 * MINIMAP_SIZE || disp.y == 0.5 * MINIMAP_SIZE)
|
||||
{
|
||||
mlx_put_pixel(game->screen->minimap, disp.x, disp.y, 0x00ff00dd);
|
||||
disp.y++;
|
||||
continue ;
|
||||
}
|
||||
if ((disp.x - 0.5 * MINIMAP_SIZE) *(disp.x - 0.5 * MINIMAP_SIZE) + (disp.y - 0.5 * MINIMAP_SIZE) * (disp.y - 0.5 * MINIMAP_SIZE) > 0.25* MINIMAP_SIZE * MINIMAP_SIZE)
|
||||
{
|
||||
disp.y++;
|
||||
continue ;
|
||||
}
|
||||
map.x = ((double)disp.x/TILE_SIZE) + game->player->pos.x - (0.5 * MINIMAP_SIZE/TILE_SIZE);
|
||||
map.y = ((double)disp.y/TILE_SIZE) + game->player->pos.y - (0.5 * MINIMAP_SIZE/TILE_SIZE);
|
||||
if (map.x < 0 || map.x >= game->map->width
|
||||
|| map.y < 0 || map.y >= game->map->height)
|
||||
{
|
||||
mlx_put_pixel(game->screen->minimap, disp.x, disp.y, 0x00ff0044);
|
||||
|
||||
disp.y++;
|
||||
continue ;
|
||||
}
|
||||
if (game->map->grid[(int)map.y][(int)map.x] == TILE_WALL)
|
||||
mlx_put_pixel(game->screen->minimap, disp.x, disp.y, 0x00ff00ff);
|
||||
else if (game->map->grid[(int)map.y][(int)map.x] == TILE_EMPTY
|
||||
|| game->map->grid[(int)map.y][(int)map.x] == TILE_PLAYER)
|
||||
mlx_put_pixel(game->screen->minimap, disp.x, disp.y, 0x00ff0077);
|
||||
else
|
||||
mlx_put_pixel(game->screen->minimap, disp.x, disp.y, 0x00ff0044);
|
||||
disp.y++;
|
||||
}
|
||||
disp.x++;
|
||||
|
||||
}
|
||||
}
|
||||
@ -6,39 +6,60 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 23:18:06 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/05/09 15:13:05 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "render.h"
|
||||
|
||||
static void sort_sprites(t_game *game)
|
||||
static void sort_sprites(t_game *game)
|
||||
{
|
||||
t_sprite sprite_temp;
|
||||
int n;
|
||||
int i;
|
||||
int new_n;
|
||||
int i;
|
||||
int j;
|
||||
t_sprite key;
|
||||
|
||||
n = game->map->n_sprites;
|
||||
while (n > 1)
|
||||
i = 1;
|
||||
while (i < game->map->n_sprites)
|
||||
{
|
||||
i = 1;
|
||||
new_n = 0;
|
||||
while (i <= n - 1)
|
||||
key = game->map->sprites[i];
|
||||
j = i - 1;
|
||||
while (j >= 0 && game->map->sprites[j].dist < key.dist)
|
||||
{
|
||||
if (game->map->sprites[i - 1].dist < game->map->sprites[i].dist)
|
||||
{
|
||||
sprite_temp = game->map->sprites[i - 1];
|
||||
game->map->sprites[i - 1] = game->map->sprites[i];
|
||||
game->map->sprites[i] = sprite_temp;
|
||||
new_n = i;
|
||||
}
|
||||
i++;
|
||||
game->map->sprites[j + 1] = game->map->sprites[j];
|
||||
j--;
|
||||
}
|
||||
n = new_n;
|
||||
game->map->sprites[j + 1] = key;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
// static void sort_sprites(t_game *game)
|
||||
// {
|
||||
// t_sprite sprite_temp;
|
||||
// int n;
|
||||
// int i;
|
||||
// int new_n;
|
||||
|
||||
// n = game->map->n_sprites;
|
||||
// while (n > 1)
|
||||
// {
|
||||
// i = 1;
|
||||
// new_n = 0;
|
||||
// while (i <= n - 1)
|
||||
// {
|
||||
// if (game->map->sprites[i - 1].dist < game->map->sprites[i].dist)
|
||||
// {
|
||||
// sprite_temp = game->map->sprites[i - 1];
|
||||
// game->map->sprites[i - 1] = game->map->sprites[i];
|
||||
// game->map->sprites[i] = sprite_temp;
|
||||
// new_n = i;
|
||||
// }
|
||||
// i++;
|
||||
// }
|
||||
// n = new_n;
|
||||
// }
|
||||
// }
|
||||
|
||||
static void calculate_sprite_dist(t_game *game)
|
||||
{
|
||||
int i;
|
||||
@ -78,27 +99,41 @@ static void cam_fraction(t_game *game, t_sprite *sprite)
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double dist)
|
||||
unsigned int calculate_alpha(mlx_texture_t *texture, int x, int y, double dist)
|
||||
{
|
||||
int index;
|
||||
int alpha;
|
||||
int index;
|
||||
int alpha;
|
||||
|
||||
index = (x + y * texture->width) * texture->bytes_per_pixel;
|
||||
dist = (dist > 1) * dist + (dist <= 1) * 1;
|
||||
alpha = (texture->pixels[index + 3] != 0) * (255.0 / dist);
|
||||
return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | alpha;
|
||||
alpha = (255.0 / dist);
|
||||
return (alpha);
|
||||
}
|
||||
|
||||
unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, int alpha)
|
||||
{
|
||||
int index;
|
||||
|
||||
index = (x + y * texture->width) * texture->bytes_per_pixel;
|
||||
return (texture->pixels[index] << 24
|
||||
| texture->pixels[index + 1] << 16
|
||||
| texture->pixels[index + 2] << 8
|
||||
| (texture->pixels[index + 3] != 0) * alpha);
|
||||
}
|
||||
|
||||
void draw_sprite(t_game *game, t_sprite *sprite, t_render *render)
|
||||
{
|
||||
double sprite_scale;
|
||||
double x_invrange;
|
||||
double y_invrange;
|
||||
int x_start;
|
||||
int y_start;
|
||||
int x_end;
|
||||
int y_end;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
int alpha;
|
||||
double tex_x;
|
||||
double tex_y;
|
||||
unsigned int color;
|
||||
@ -110,17 +145,20 @@ void draw_sprite(t_game *game, t_sprite *sprite, t_render *render)
|
||||
y_start = (game->screen->height - sprite->texture->height * sprite_scale )* 0.5;
|
||||
x_end = x_start + (sprite->texture->width * sprite_scale);
|
||||
y_end = y_start + (sprite->texture->height * sprite_scale);
|
||||
y_invrange = 1.0 / (y_end - y_start);
|
||||
x_invrange = 1.0 / (x_end - x_start);
|
||||
x = x_start;
|
||||
alpha = calculate_alpha(sprite->texture, x_start, y_start, sprite->dist);
|
||||
while (x < x_end)
|
||||
{
|
||||
if (x > 0 && x < game->screen->width && sprite->dist <= render[x].perp_dist)
|
||||
{
|
||||
y = y_start;
|
||||
tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width;
|
||||
tex_x = (x - x_start) * x_invrange * sprite->texture->width;
|
||||
while (y < y_end)
|
||||
{
|
||||
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);
|
||||
tex_y = (y- y_start) * y_invrange * sprite->texture->height;
|
||||
color = sample_texture_color(sprite->texture, (int)(tex_x), (int)(tex_y), alpha);
|
||||
if (y > 0 && y < game->screen->height && (color & 0xFF) != 0)
|
||||
{
|
||||
mlx_put_pixel(game->screen->img, x, y, color);
|
||||
|
||||
18
src/screen.c
18
src/screen.c
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* screen.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 17:10:50 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* screen.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 15:27:37 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -22,7 +22,7 @@ int screen_create(t_game **game)
|
||||
return (FAILURE);
|
||||
screen->width = WIDTH;
|
||||
screen->height = HEIGHT;
|
||||
mlx_set_setting(MLX_FULLSCREEN, 1);
|
||||
mlx_set_setting(MLX_FULLSCREEN, 0);
|
||||
mlx = mlx_init(WIDTH, HEIGHT, TITLE, true);
|
||||
if (!mlx)
|
||||
return (FAILURE);
|
||||
@ -78,7 +78,7 @@ int screen_display(t_screen *screen)
|
||||
printf(RED"Failed to display buffer image\n"RESET);
|
||||
return (FAILURE);
|
||||
}
|
||||
if (mlx_image_to_window(screen->mlx, screen->minimap, 0, 0) < 0)
|
||||
if (mlx_image_to_window(screen->mlx, screen->minimap, 200, 200) < 0)
|
||||
{
|
||||
printf(RED"Failed to display buffer image\n"RESET);
|
||||
return (FAILURE);
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* initialize.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 17:28:50 by qmennen ### ########.fr */
|
||||
/* :::::::: */
|
||||
/* initialize.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/09 13:07:25 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -42,7 +42,32 @@ static int init_temp(t_game **game)
|
||||
(*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)->map->sprites[5].n_frames = 1;
|
||||
(*game)->map->sprites[5].pos.x = 10.5;
|
||||
(*game)->map->sprites[5].pos.y = 6.5;
|
||||
(*game)->map->sprites[5].dist = 0;
|
||||
(*game)->map->sprites[5].texture = mlx_load_png("./assets/battery.png");
|
||||
(*game)->map->sprites[6].n_frames = 1;
|
||||
(*game)->map->sprites[6].pos.x = 14.5;
|
||||
(*game)->map->sprites[6].pos.y = 3.5;
|
||||
(*game)->map->sprites[6].dist = 0;
|
||||
(*game)->map->sprites[6].texture = mlx_load_png("./assets/battery.png");
|
||||
(*game)->map->sprites[7].n_frames = 1;
|
||||
(*game)->map->sprites[7].pos.x = 36.5;
|
||||
(*game)->map->sprites[7].pos.y = 3.5;
|
||||
(*game)->map->sprites[7].dist = 0;
|
||||
(*game)->map->sprites[7].texture = mlx_load_png("./assets/battery.png");
|
||||
(*game)->map->sprites[8].n_frames = 1;
|
||||
(*game)->map->sprites[8].pos.x = 42.5;
|
||||
(*game)->map->sprites[8].pos.y = 4.5;
|
||||
(*game)->map->sprites[8].dist = 0;
|
||||
(*game)->map->sprites[8].texture = mlx_load_png("./assets/broken_mirror.png");
|
||||
(*game)->map->sprites[9].n_frames = 1;
|
||||
(*game)->map->sprites[9].pos.x = 9.5;
|
||||
(*game)->map->sprites[9].pos.y = 10.5;
|
||||
(*game)->map->sprites[9].dist = 0;
|
||||
(*game)->map->sprites[9].texture = mlx_load_png("./assets/lamp.png");
|
||||
(*game)->map->n_sprites = 10;
|
||||
(*game)->screen->hud = mlx_texture_to_image((*game)->screen->mlx, mlx_load_png("./assets/overlay.png"));
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
2
test.cub
2
test.cub
@ -14,7 +14,7 @@ C 100,100,200
|
||||
|
||||
|
||||
1111111 111 1111 111111 1111111111 111111
|
||||
1000001110111001 100001 1000001001 10001
|
||||
1000001110111001 100001 1000000001 10001
|
||||
1001000000000001 100001 100000110111100011
|
||||
1000001110000001110011111111 110000001000000001
|
||||
1000001 10001000000010000001 100000001000000001
|
||||
|
||||
Loading…
Reference in New Issue
Block a user