1
0

🏗️」 wip: Started printing raycasting (not working)

This commit is contained in:
2024-10-14 15:26:34 +02:00
parent da17af41b1
commit 4b6365fd04
9 changed files with 100 additions and 27 deletions

View File

@ -6,7 +6,7 @@
# By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ # # By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2024/10/07 16:02:18 by adjoly #+# #+# # # Created: 2024/10/07 16:02:18 by adjoly #+# #+# #
# Updated: 2024/10/08 22:06:26 by adjoly ### ########.fr # # Updated: 2024/10/13 21:23:17 by adjoly ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/04 14:04:10 by adjoly #+# #+# */ /* Created: 2024/10/04 14:04:10 by adjoly #+# #+# */
/* Updated: 2024/10/13 17:44:12 by adjoly ### ########.fr */ /* Updated: 2024/10/13 21:28:23 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,6 +14,8 @@
# define DDA_H # define DDA_H
# include "typedef.h" # include "typedef.h"
# include "settings.h"
# include <stdint.h>
/** /**
* @brief Function used to get all the ray angle * @brief Function used to get all the ray angle
@ -57,4 +59,5 @@ float *dist_dda(t_dda dda[WINDOW_X / RAY_SIZE]);
*/ */
uint16_t *line_dda(float *wall_dist); uint16_t *line_dda(float *wall_dist);
uint16_t *dda(t_player *player, char **map);
#endif #endif

View File

@ -6,7 +6,7 @@
/* By: madumerg <madumerg@42angouleme.fr> +#+ +:+ +#+ */ /* By: madumerg <madumerg@42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/04 16:58:27 by madumerg #+# #+# */ /* Created: 2024/09/04 16:58:27 by madumerg #+# #+# */
/* Updated: 2024/10/06 17:58:41 by adjoly ### ########.fr */ /* Updated: 2024/10/14 12:32:14 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,6 +14,8 @@
#include "game/game.h" #include "game/game.h"
#include "mlx.h" #include "mlx.h"
void *print_frame(t_cub *cub);
int main(int ac, char **av) int main(int ac, char **av)
{ {
t_cub cub; t_cub cub;
@ -32,8 +34,9 @@ int main(int ac, char **av)
cub.win = mlx_new_window(cub.mlx, WINDOW_X, WINDOW_Y, "WTF"); cub.win = mlx_new_window(cub.mlx, WINDOW_X, WINDOW_Y, "WTF");
cub.player.coords.x = 100; cub.player.coords.x = 100;
cub.player.coords.y = 100; cub.player.coords.y = 100;
cub.img = mlx_new_image(cub.mlx, WINDOW_X, WINDOW_Y); cub.player.direction = 0;
get_player_image(&cub, 0); cub.img = print_frame(&cub);
//get_player_image(&cub, 0);
mlx_put_image_to_window(cub.mlx, cub.win, cub.img, 0, 0); mlx_put_image_to_window(cub.mlx, cub.win, cub.img, 0, 0);
mlx_on_event(cub.mlx, cub.win, MLX_KEYDOWN, key_hook, &cub); mlx_on_event(cub.mlx, cub.win, MLX_KEYDOWN, key_hook, &cub);
mlx_loop(cub.mlx); mlx_loop(cub.mlx);

View File

@ -6,26 +6,27 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/07 16:55:09 by adjoly #+# #+# */ /* Created: 2024/10/07 16:55:09 by adjoly #+# #+# */
/* Updated: 2024/10/13 17:27:17 by adjoly ### ########.fr */ /* Updated: 2024/10/13 21:27:59 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "game/dda.h" #include "game/dda.h"
#include "game/settings.h" #include "game/settings.h"
void dda(t_player *player, char **map) uint16_t *dda(t_player *player, char **map)
{ {
t_dda dda[WINDOW_X / RAY_SIZE]; t_dda dda[WINDOW_X / RAY_SIZE];
t_coord map_coord; t_coord map_coord;
float *wall_dist; float *wall_dist;
float *line_size; uint16_t *line_size;
setup_dda(&dda, player); setup_dda(&dda, player);
map_coord.x = player->coords.x - player->coords.x % MAP_CHUNK_SIZE; map_coord.x = player->coords.x - player->coords.x % MAP_CHUNK_SIZE;
map_coord.y = player->coords.y - player->coords.y % MAP_CHUNK_SIZE; map_coord.y = player->coords.y - player->coords.y % MAP_CHUNK_SIZE;
while_dda(&dda, map, map_coord); while_dda(&dda, map, map_coord);
wall_dist = dist_dda(dda); wall_dist = dist_dda(dda);
line_size = line_dda(wall_dist);
return (line_size);
} }
/** /**

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/08 13:26:19 by adjoly #+# #+# */ /* Created: 2024/10/08 13:26:19 by adjoly #+# #+# */
/* Updated: 2024/10/08 21:40:08 by adjoly ### ########.fr */ /* Updated: 2024/10/13 21:30:15 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,22 +14,25 @@
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include "game/settings.h" #include "game/settings.h"
#include "libft.h"
float *dist_dda(t_dda dda[WINDOW_X / RAY_SIZE]) float *dist_dda(t_dda dda[WINDOW_X / RAY_SIZE])
{ {
size_t i; size_t i;
float wall_dist; float *wall_dist;
i = 0;
wall_dist = ft_calloc(WINDOW_X / RAY_SIZE, sizeof(float)); wall_dist = ft_calloc(WINDOW_X / RAY_SIZE, sizeof(float));
if (!wall_dist) if (!wall_dist)
return (NULL); return (NULL);
while (dda[i]) while (dda)
{ {
if (dda[i].wall_side == HORIZONTAL) if (dda[i].wall_side == HORIZONTAL)
wall_dist[i] = dda[i].side_dist.x - dda[i].delta_dist.x; wall_dist[i] = dda[i].side_dist.x - dda[i].delta_dist.x;
else else
wall_dist[i] = dda[i].side_dist.y - dda[i].delta_dist.y; wall_dist[i] = dda[i].side_dist.y - dda[i].delta_dist.y;
i++; i++;
dda++;
} }
return (wall_dist); return (wall_dist);
} }

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/29 15:26:29 by adjoly #+# #+# */ /* Created: 2024/09/29 15:26:29 by adjoly #+# #+# */
/* Updated: 2024/10/07 19:06:47 by adjoly ### ########.fr */ /* Updated: 2024/10/14 12:35:17 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,6 +14,7 @@
#include "game/settings.h" #include "game/settings.h"
#include <math.h> #include <math.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h>
void get_ray_angle(t_player *player, t_dda (*dda)[800]) void get_ray_angle(t_player *player, t_dda (*dda)[800])
{ {
@ -21,6 +22,7 @@ void get_ray_angle(t_player *player, t_dda (*dda)[800])
float ray_angle; float ray_angle;
x = 0; x = 0;
printf("plyaer dir = %f", player->direction);
while (x < WINDOW_X) while (x < WINDOW_X)
{ {
ray_angle = player->direction - (FOV / 2) + (x / WINDOW_X) * FOV; ray_angle = player->direction - (FOV / 2) + (x / WINDOW_X) * FOV;

View File

@ -6,18 +6,20 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/13 17:27:44 by adjoly #+# #+# */ /* Created: 2024/10/13 17:27:44 by adjoly #+# #+# */
/* Updated: 2024/10/13 17:36:05 by adjoly ### ########.fr */ /* Updated: 2024/10/13 21:28:12 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "game/settings.h" #include "game/settings.h"
#include "game/dda.h"
#include <stdlib.h>
uint16_t *line_dda(t_dda (*dda)[WINDOW_X / RAY_SIZE], float *wall_dist) #include <stdint.h>
uint16_t *line_dda(float *wall_dist)
{ {
uint16_t i; uint16_t i;
uint16_t *line_size; uint16_t *line_size;
(void)dda;
i = 0; i = 0;
line_size = malloc(WINDOW_X / RAY_SIZE * sizeof(uint16_t)); line_size = malloc(WINDOW_X / RAY_SIZE * sizeof(uint16_t));
while (wall_dist[i]) while (wall_dist[i])

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/06 18:46:56 by adjoly #+# #+# */ /* Created: 2024/10/06 18:46:56 by adjoly #+# #+# */
/* Updated: 2024/10/08 13:28:33 by adjoly ### ########.fr */ /* Updated: 2024/10/13 21:34:01 by adjoly ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,22 +14,22 @@
void while_dda(t_dda (*dda)[WINDOW_X / RAY_SIZE], char **map, t_coord map_coord) void while_dda(t_dda (*dda)[WINDOW_X / RAY_SIZE], char **map, t_coord map_coord)
{ {
dda->wall_hit = false; (*dda)->wall_hit = false;
while (!dda->wall_hit) while (!(*dda)->wall_hit)
{ {
if (dda->side_dist.x < dda->side_dist.y) if (( *dda )->side_dist.x < (*dda)->side_dist.y)
{ {
dda->side_dist.x += dda->delta_dist.x; (*dda)->side_dist.x += (*dda)->delta_dist.x;
map_coord.x += dda->step.x; map_coord.x += (*dda)->step.x;
dda->wall_side = HORIZONTAL; (*dda)->wall_side = HORIZONTAL;
} }
else else
{ {
dda->side_dist.y += dda->delta_dist.y; (*dda)->side_dist.y += (*dda)->delta_dist.y;
map_coord.y += dda->step.y; map_coord.y += (*dda)->step.y;
dda->wall_side = VERTICAL; (*dda)->wall_side = VERTICAL;
} }
if (map[map_coord.x][map_coord.y] == '1') if (map[map_coord.x][map_coord.y] == '1')
dda->wall_hit = true; (*dda)->wall_hit = true;
} }
} }

View File

@ -0,0 +1,59 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* print_frame.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/13 21:01:53 by adjoly #+# #+# */
/* Updated: 2024/10/13 21:37:17 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#include "game/dda.h"
#include "mlx.h"
#include <stdlib.h>
#include "game/settings.h"
void draw_rectangle(t_cub *cub, void *img, t_coord start, t_coord end)
{
int x;
int y;
x = start.x;
y = start.y;
while (x < end.x)
{
while (y < end.y)
{
mlx_set_image_pixel(cub->mlx, img, x, y, WHITE);
y++;
}
x++;
}
}
void *print_frame(t_cub *cub)
{
uint16_t *lines;
int start;
int stop;
size_t i;
void *img;
lines = dda(&cub->player, cub->map);
img = mlx_new_image(cub->mlx, WINDOW_X, WINDOW_Y);
i = 0;
while (i < WINDOW_X / RAY_SIZE)
{
start = -lines[i] / 2 + WINDOW_Y / 2;
if (start < 0)
start = 0;
stop = lines[i] / 2 + WINDOW_Y / 2;
if (stop >= WINDOW_Y)
stop = WINDOW_Y - 1;
draw_rectangle(cub, img, (t_coord){i * RAY_SIZE, start}, (t_coord){i * RAY_SIZE + RAY_SIZE - 1, stop});
i++;
}
return (img);
}