mirror of
https://codeberg.org/ACME-Corporation/cub3d.git
synced 2025-12-06 09:58:09 +01:00
Compare commits
9 commits
184ecc7eb3
...
1d6d97ef25
| Author | SHA1 | Date | |
|---|---|---|---|
| 1d6d97ef25 | |||
| a46fdff49a | |||
| a4d85c3cbb | |||
| c4bb3efe3e | |||
| c242df5b72 | |||
| c09ba88d90 | |||
| 121db8bd3c | |||
| f21e1e56fb | |||
| c4a867b054 |
16 changed files with 302 additions and 103 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -3,3 +3,4 @@ cub3d
|
||||||
*.d
|
*.d
|
||||||
libft.a
|
libft.a
|
||||||
vgcore.*
|
vgcore.*
|
||||||
|
cscope.*
|
||||||
|
|
|
||||||
22
ressources/bad_maps/wrongmap_bad_texture_size.cub
Normal file
22
ressources/bad_maps/wrongmap_bad_texture_size.cub
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
NO ressources/north.xpm
|
||||||
|
SO ressources/south.xpm
|
||||||
|
WE ressources/west.xpm
|
||||||
|
EA ressources/bad_size.xpm
|
||||||
|
|
||||||
|
F 220,100,100
|
||||||
|
C 20,30,0
|
||||||
|
|
||||||
|
1111111111111111111111111
|
||||||
|
1000000000110000000000001
|
||||||
|
1011000001110000000000001
|
||||||
|
1001000000000000000000001
|
||||||
|
111111111011000001110000000000001
|
||||||
|
100000000011000001110111110111111
|
||||||
|
11110111111111011100000010001
|
||||||
|
11110111111111011101010010001
|
||||||
|
11000000110101011100000010001
|
||||||
|
10000000000000001100000010001
|
||||||
|
10000000000000001101010010001
|
||||||
|
11000001110101011111011110N0111
|
||||||
|
11110111 1110101 101111010001
|
||||||
|
11111111 1111111 111111111111
|
||||||
70
ressources/bad_size.xpm
Normal file
70
ressources/bad_size.xpm
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
/* XPM */
|
||||||
|
static char *dummy[]={
|
||||||
|
"65 64 3 1",
|
||||||
|
"# c #67502e",
|
||||||
|
"a c #833e4b",
|
||||||
|
". c #d6a459",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
"............................####.................................",
|
||||||
|
".........................###....##...............................",
|
||||||
|
"......................###........................................",
|
||||||
|
".....................#...........................................",
|
||||||
|
"....................#............................................",
|
||||||
|
"...................#.............................................",
|
||||||
|
"..................#..............................................",
|
||||||
|
"..................#..............................................",
|
||||||
|
"..................#..............................................",
|
||||||
|
"..................#..............................................",
|
||||||
|
"...................##............................................",
|
||||||
|
".....................##..........................................",
|
||||||
|
".......................#.........................................",
|
||||||
|
"........................##.......................................",
|
||||||
|
"..........................##.....................................",
|
||||||
|
"............................##...................................",
|
||||||
|
"..............................###................................",
|
||||||
|
".................................#...............................",
|
||||||
|
"..................................#..............................",
|
||||||
|
"..................................#..............................",
|
||||||
|
"..................................#..............................",
|
||||||
|
"..................................#..............................",
|
||||||
|
"..................................#..............................",
|
||||||
|
".................................#...............................",
|
||||||
|
"................................#................................",
|
||||||
|
"..............................##.................................",
|
||||||
|
"............................##...................................",
|
||||||
|
"....................########.....................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
"........aa.......................................................",
|
||||||
|
"........aaa......................................................",
|
||||||
|
"........a.a......................................................",
|
||||||
|
".......a..a......................................................",
|
||||||
|
".......a..a.......aa.....................aaa.....................",
|
||||||
|
".......a..a.......aa....................a.......a................",
|
||||||
|
".......aaaa......a.a......aaaa..........a.......a.a..............",
|
||||||
|
".......aa........aaaa......a..a.........aaa.....a..aaa...........",
|
||||||
|
".......aa.......a...a......a..aa..........a.....a....a....aaa....",
|
||||||
|
".......a.a.....a....a......a....a........aa....a...aaa...aa......",
|
||||||
|
".......a.a.....a....a......a....a................aa......a.......",
|
||||||
|
".......a.a.....a....a......a....a................aaa.....aaa.....",
|
||||||
|
".......a.aa................a..aa....................aaa..aa......",
|
||||||
|
".......aaa.................a..a.......................a..a.......",
|
||||||
|
".......a...................aaa...........................aaa.....",
|
||||||
|
"...........................aa....................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
".................................................................",
|
||||||
|
"................................................................."};
|
||||||
|
|
@ -3,8 +3,8 @@ SO ressources/south.xpm
|
||||||
WE ressources/west.xpm
|
WE ressources/west.xpm
|
||||||
EA ressources/east.xpm
|
EA ressources/east.xpm
|
||||||
|
|
||||||
F 220,100,0
|
F 220,100,100
|
||||||
C 225,30,0
|
C 20,30,0
|
||||||
|
|
||||||
1111111111111111111111111
|
1111111111111111111111111
|
||||||
1000000000110000000000001
|
1000000000110000000000001
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */
|
/* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 15:02:18 by kcolin ### ########.fr */
|
/* Updated: 2025/08/05 15:22:09 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -17,7 +17,8 @@
|
||||||
# define WIDTH 800
|
# define WIDTH 800
|
||||||
|
|
||||||
# define SIZE 64
|
# define SIZE 64
|
||||||
# define MAP_SIZE 20
|
# define MAP_SIZE 10
|
||||||
|
# define PLAYER_SIZE 6
|
||||||
# define RESSOURCE_DIR "ressources"
|
# define RESSOURCE_DIR "ressources"
|
||||||
# define MOVEMENT_SPEED 0.000005
|
# define MOVEMENT_SPEED 0.000005
|
||||||
# define ROTATION_SPEED 0.000002
|
# define ROTATION_SPEED 0.000002
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */
|
/* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 13:55:08 by tchampio ### ########.fr */
|
/* Updated: 2025/08/05 13:09:22 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -23,6 +23,10 @@ typedef struct s_cub3d_data
|
||||||
{
|
{
|
||||||
void *mlx;
|
void *mlx;
|
||||||
void *mlx_win;
|
void *mlx_win;
|
||||||
|
t_img_data *no_texture;
|
||||||
|
t_img_data *so_texture;
|
||||||
|
t_img_data *we_texture;
|
||||||
|
t_img_data *ea_texture;
|
||||||
t_img_data *img_data;
|
t_img_data *img_data;
|
||||||
t_mapdata *map;
|
t_mapdata *map;
|
||||||
t_player player;
|
t_player player;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/17 14:20:00 by kcolin #+# #+# */
|
/* Created: 2025/07/17 14:20:00 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/29 14:16:07 by tchampio ### ########.fr */
|
/* Updated: 2025/08/05 15:20:47 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
#include "../player/player.h"
|
#include "../player/player.h"
|
||||||
#include "drawutils.h"
|
#include "drawutils.h"
|
||||||
#include "../consts.h"
|
#include "../consts.h"
|
||||||
|
#include "img_data.h"
|
||||||
|
|
||||||
void draw_2d_wall(unsigned int color, t_img_data *data,
|
void draw_2d_wall(unsigned int color, t_img_data *data,
|
||||||
int x, int y)
|
int x, int y)
|
||||||
|
|
@ -34,6 +35,35 @@ void draw_2d_wall(unsigned int color, t_img_data *data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw_player(unsigned int color, t_img_data *data,
|
||||||
|
int x, int y)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = -(PLAYER_SIZE / 2);
|
||||||
|
while (i < (PLAYER_SIZE / 2))
|
||||||
|
{
|
||||||
|
j = -(PLAYER_SIZE / 2);
|
||||||
|
while (j < (PLAYER_SIZE / 2))
|
||||||
|
{
|
||||||
|
my_mlx_pixel_put(data, x + i, y + j, color);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_heading(unsigned int color, t_img_data *data, t_player *player)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
|
||||||
|
x = player->x * MAP_SIZE + player->dir_x * PLAYER_SIZE;
|
||||||
|
y = player->y * MAP_SIZE + player->dir_y * PLAYER_SIZE;
|
||||||
|
my_mlx_pixel_put(data, x, y, color);
|
||||||
|
}
|
||||||
|
|
||||||
void draw_map(t_mapdata *map, t_player *player, t_img_data *data)
|
void draw_map(t_mapdata *map, t_player *player, t_img_data *data)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
@ -59,5 +89,6 @@ void draw_map(t_mapdata *map, t_player *player, t_img_data *data)
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
draw_2d_wall(0x00FF0000, data, MAP_SIZE * player->x, MAP_SIZE * player->y);
|
draw_player(0x00FF0000, data, MAP_SIZE * player->x, MAP_SIZE * player->y);
|
||||||
|
draw_heading(0x00FFFFFF, data, player);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/06/21 19:35:43 by tchampio #+# #+# */
|
/* Created: 2025/06/21 19:35:43 by tchampio #+# #+# */
|
||||||
/* Updated: 2025/07/23 12:20:51 by tchampio ### ########.fr */
|
/* Updated: 2025/07/31 14:08:27 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -81,6 +81,7 @@ int try_set_texture(t_mapdata *map, char **texture, char *texture_name)
|
||||||
return (2);
|
return (2);
|
||||||
}
|
}
|
||||||
*texture = ft_strdup(texture_name);
|
*texture = ft_strdup(texture_name);
|
||||||
|
(*texture)[ft_strlen(*texture) - 1] = '\0';
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* move.c :+: :+: :+: */
|
/* move.c :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: tchampio <tchampio@student.42lehavre. +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/29 13:58:00 by tchampio #+# #+# */
|
/* Created: 2025/08/05 12:53:06 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 14:43:57 by tchampio ### ########.fr */
|
/* Updated: 2025/08/05 12:53:06 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -19,14 +19,16 @@ void move_player_forward(t_cub3d_data *data)
|
||||||
char **map;
|
char **map;
|
||||||
double next_x;
|
double next_x;
|
||||||
double next_y;
|
double next_y;
|
||||||
|
float movspeed;
|
||||||
|
|
||||||
|
movspeed = MOVEMENT_SPEED * data->delta;
|
||||||
map = data->map->map;
|
map = data->map->map;
|
||||||
next_x = data->player.x + data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
next_x = data->player.x + data->player.dir_x * movspeed;
|
||||||
next_y = data->player.y + data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
next_y = data->player.y + data->player.dir_y * movspeed;
|
||||||
if (map[(int)data->player.y][(int)next_x] == '0')
|
if (map[(int)data->player.y][(int)next_x] == '0')
|
||||||
data->player.x += data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
data->player.x += data->player.dir_x * movspeed;
|
||||||
if (map[(int)next_y][(int)data->player.x] == '0')
|
if (map[(int)next_y][(int)data->player.x] == '0')
|
||||||
data->player.y += data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
data->player.y += data->player.dir_y * movspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_player_backward(t_cub3d_data *data)
|
void move_player_backward(t_cub3d_data *data)
|
||||||
|
|
@ -34,14 +36,16 @@ void move_player_backward(t_cub3d_data *data)
|
||||||
char **map;
|
char **map;
|
||||||
double next_x;
|
double next_x;
|
||||||
double next_y;
|
double next_y;
|
||||||
|
float movspeed;
|
||||||
|
|
||||||
|
movspeed = MOVEMENT_SPEED * data->delta;
|
||||||
map = data->map->map;
|
map = data->map->map;
|
||||||
next_x = data->player.x - data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
next_x = data->player.x - data->player.dir_x * movspeed;
|
||||||
next_y = data->player.y - data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
next_y = data->player.y - data->player.dir_y * movspeed;
|
||||||
if (map[(int)data->player.y][(int)next_x] == '0')
|
if (map[(int)data->player.y][(int)next_x] == '0')
|
||||||
data->player.x -= data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
data->player.x -= data->player.dir_x * movspeed;
|
||||||
if (map[(int)next_y][(int)data->player.x] == '0')
|
if (map[(int)next_y][(int)data->player.x] == '0')
|
||||||
data->player.y -= data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
data->player.y -= data->player.dir_y * movspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_player_strafe_left(t_cub3d_data *data)
|
void move_player_strafe_left(t_cub3d_data *data)
|
||||||
|
|
@ -49,14 +53,16 @@ void move_player_strafe_left(t_cub3d_data *data)
|
||||||
char **map;
|
char **map;
|
||||||
double next_x;
|
double next_x;
|
||||||
double next_y;
|
double next_y;
|
||||||
|
float movspeed;
|
||||||
|
|
||||||
|
movspeed = MOVEMENT_SPEED * data->delta;
|
||||||
map = data->map->map;
|
map = data->map->map;
|
||||||
next_x = data->player.x - data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
next_x = data->player.x - data->player.plane_x * movspeed;
|
||||||
next_y = data->player.y - data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
next_y = data->player.y - data->player.plane_y * movspeed;
|
||||||
if (map[(int)data->player.y][(int)next_x] == '0')
|
if (map[(int)data->player.y][(int)next_x] == '0')
|
||||||
data->player.x -= data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
data->player.x -= data->player.plane_x * movspeed;
|
||||||
if (map[(int)next_y][(int)data->player.x] == '0')
|
if (map[(int)next_y][(int)data->player.x] == '0')
|
||||||
data->player.y -= data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
data->player.y -= data->player.plane_y * movspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_player_strafe_right(t_cub3d_data *data)
|
void move_player_strafe_right(t_cub3d_data *data)
|
||||||
|
|
@ -64,14 +70,16 @@ void move_player_strafe_right(t_cub3d_data *data)
|
||||||
char **map;
|
char **map;
|
||||||
double next_x;
|
double next_x;
|
||||||
double next_y;
|
double next_y;
|
||||||
|
float movspeed;
|
||||||
|
|
||||||
|
movspeed = MOVEMENT_SPEED * data->delta;
|
||||||
map = data->map->map;
|
map = data->map->map;
|
||||||
next_x = data->player.x + data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
next_x = data->player.x + data->player.plane_x * movspeed;
|
||||||
next_y = data->player.y + data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
next_y = data->player.y + data->player.plane_y * movspeed;
|
||||||
if (map[(int)data->player.y][(int)next_x] == '0')
|
if (map[(int)data->player.y][(int)next_x] == '0')
|
||||||
data->player.x += data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
data->player.x += data->player.plane_x * movspeed;
|
||||||
if (map[(int)next_y][(int)data->player.x] == '0')
|
if (map[(int)next_y][(int)data->player.x] == '0')
|
||||||
data->player.y += data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
data->player.y += data->player.plane_y * movspeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_player(t_cub3d_data *data)
|
void move_player(t_cub3d_data *data)
|
||||||
|
|
|
||||||
|
|
@ -61,18 +61,18 @@ void calculate_wall_dist(t_ray *ray, char **map)
|
||||||
{
|
{
|
||||||
ray->side_dist_x += ray->delta_dist_x;
|
ray->side_dist_x += ray->delta_dist_x;
|
||||||
ray->map_x += ray->step_x;
|
ray->map_x += ray->step_x;
|
||||||
ray->side = 0;
|
ray->side = NORTH;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ray->side_dist_y += ray->delta_dist_y;
|
ray->side_dist_y += ray->delta_dist_y;
|
||||||
ray->map_y += ray->step_y;
|
ray->map_y += ray->step_y;
|
||||||
ray->side = 1;
|
ray->side = SOUTH;
|
||||||
}
|
}
|
||||||
if (map[ray->map_y][ray->map_x] != '0')
|
if (map[ray->map_y][ray->map_x] != '0')
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
if (ray->side == 0)
|
if (ray->side == NORTH)
|
||||||
ray->wall_dist = ray->side_dist_x - ray->delta_dist_x;
|
ray->wall_dist = ray->side_dist_x - ray->delta_dist_x;
|
||||||
else
|
else
|
||||||
ray->wall_dist = ray->side_dist_y - ray->delta_dist_y;
|
ray->wall_dist = ray->side_dist_y - ray->delta_dist_y;
|
||||||
|
|
@ -89,7 +89,7 @@ void calculate_wall_height(t_ray *ray, t_player *player)
|
||||||
ray->draw_end = ray->wall_height / 2 + HEIGHT / 2;
|
ray->draw_end = ray->wall_height / 2 + HEIGHT / 2;
|
||||||
if (ray->draw_end >= HEIGHT)
|
if (ray->draw_end >= HEIGHT)
|
||||||
ray->draw_end = HEIGHT - 1;
|
ray->draw_end = HEIGHT - 1;
|
||||||
if (ray->side == 0)
|
if (ray->side == NORTH)
|
||||||
ray->wall_x = player->y + ray->wall_dist * ray->dir_y;
|
ray->wall_x = player->y + ray->wall_dist * ray->dir_y;
|
||||||
else
|
else
|
||||||
ray->wall_x = player->x + ray->wall_dist * ray->dir_x;
|
ray->wall_x = player->x + ray->wall_dist * ray->dir_x;
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,18 @@
|
||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* ray.h :+: :+: :+: */
|
/* ray.h :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: tchampio <tchampio@student.42lehavre. +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/29 11:32:20 by tchampio #+# #+# */
|
/* Created: 2025/08/05 12:49:49 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/30 16:46:05 by tchampio ### ########.fr */
|
/* Updated: 2025/08/05 12:49:49 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#ifndef RAY_H
|
#ifndef RAY_H
|
||||||
# define RAY_H
|
# define RAY_H
|
||||||
|
|
||||||
|
# include "../map/mapdata.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* plane - plan de camera (vectoriel)
|
* plane - plan de camera (vectoriel)
|
||||||
* dir_x - Direction (pour X)
|
* dir_x - Direction (pour X)
|
||||||
|
|
@ -31,23 +33,23 @@
|
||||||
*/
|
*/
|
||||||
typedef struct s_ray
|
typedef struct s_ray
|
||||||
{
|
{
|
||||||
double plane;
|
double plane;
|
||||||
double dir_x;
|
double dir_x;
|
||||||
double dir_y;
|
double dir_y;
|
||||||
int map_x;
|
int map_x;
|
||||||
int map_y;
|
int map_y;
|
||||||
int step_x;
|
int step_x;
|
||||||
int step_y;
|
int step_y;
|
||||||
double side_dist_x;
|
double side_dist_x;
|
||||||
double side_dist_y;
|
double side_dist_y;
|
||||||
double delta_dist_x;
|
double delta_dist_x;
|
||||||
double delta_dist_y;
|
double delta_dist_y;
|
||||||
double wall_dist;
|
double wall_dist;
|
||||||
int side;
|
t_cardinal_dir side;
|
||||||
int wall_height;
|
int wall_height;
|
||||||
int draw_start;
|
int draw_start;
|
||||||
int draw_end;
|
int draw_end;
|
||||||
double wall_x;
|
double wall_x;
|
||||||
} t_ray;
|
} t_ray;
|
||||||
|
|
||||||
#endif // RAY_H
|
#endif // RAY_H
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* render.c :+: :+: :+: */
|
/* walls.c :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */
|
/* Created: 2025/07/31 13:17:39 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 13:38:07 by kcolin ### ########.fr */
|
/* Updated: 2025/08/05 14:59:24 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -15,69 +15,81 @@
|
||||||
#include "ray.h"
|
#include "ray.h"
|
||||||
#include "../renderer/render.h"
|
#include "../renderer/render.h"
|
||||||
|
|
||||||
int get_cardinal(t_ray *ray)
|
t_cardinal_dir get_cardinal(t_ray *ray)
|
||||||
{
|
{
|
||||||
if (ray->side == 0)
|
if (ray->side == NORTH)
|
||||||
{
|
{
|
||||||
if (ray->dir_x < 0)
|
if (ray->dir_x < 0)
|
||||||
return (2);
|
return (WEST);
|
||||||
else
|
else
|
||||||
return (3);
|
return (EAST);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ray->dir_y > 0)
|
if (ray->dir_y > 0)
|
||||||
return (1);
|
return (SOUTH);
|
||||||
else
|
else
|
||||||
return (0);
|
return (NORTH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_color(int dir)
|
static int my_mlx_pixel_get(t_img_data *img, int x, int y)
|
||||||
{
|
{
|
||||||
int color;
|
char *dst;
|
||||||
|
|
||||||
if (dir == 0)
|
dst = img->addr + (y * img->line_length + x * (img->bits_per_pixel / 8));
|
||||||
color = 0x0000ff;
|
return (*(int *)dst);
|
||||||
else if (dir == 1)
|
}
|
||||||
color = 0x00ff00;
|
|
||||||
else if (dir == 2)
|
static int get_color(t_cub3d_data *data, t_ray *ray, int tex_y)
|
||||||
color = 0xff0000;
|
{
|
||||||
else if (dir == 3)
|
t_cardinal_dir dir;
|
||||||
color = 0xffeb3b;
|
int tex_x;
|
||||||
else
|
t_img_data *texture;
|
||||||
color = 0xff53ff;
|
|
||||||
return (color);
|
tex_x = (int)(ray->wall_x * TEXTURE_SIZE);
|
||||||
|
if ((ray->side == NORTH && ray->dir_x < 0)
|
||||||
|
|| (ray->side == SOUTH && ray->dir_y > 0))
|
||||||
|
tex_x = TEXTURE_SIZE - tex_x - 1;
|
||||||
|
dir = get_cardinal(ray);
|
||||||
|
if (dir == NORTH)
|
||||||
|
texture = data->no_texture;
|
||||||
|
else if (dir == SOUTH)
|
||||||
|
texture = data->so_texture;
|
||||||
|
else if (dir == WEST)
|
||||||
|
texture = data->we_texture;
|
||||||
|
else if (dir == EAST)
|
||||||
|
texture = data->ea_texture;
|
||||||
|
else
|
||||||
|
return (0xff53ff);
|
||||||
|
return (my_mlx_pixel_get(texture, tex_x, tex_y));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Dir values are:
|
|
||||||
* 0: North
|
|
||||||
* 1: South
|
|
||||||
* 2: West
|
|
||||||
* 3: East
|
|
||||||
*/
|
|
||||||
void render_walls(t_cub3d_data *data, t_ray *ray, int x)
|
void render_walls(t_cub3d_data *data, t_ray *ray, int x)
|
||||||
{
|
{
|
||||||
int dir;
|
|
||||||
int tex_x;
|
|
||||||
unsigned int color;
|
unsigned int color;
|
||||||
double step;
|
double step;
|
||||||
double pos;
|
double tex_y;
|
||||||
|
int y;
|
||||||
|
|
||||||
dir = get_cardinal(ray);
|
|
||||||
tex_x = (int)(ray->wall_x * TEXTURE_SIZE);
|
|
||||||
if ((ray->side == 0 && ray->dir_x < 0)
|
|
||||||
|| (ray->side == 1 && ray->dir_y > 0))
|
|
||||||
tex_x = TEXTURE_SIZE - tex_x - 1;
|
|
||||||
step = 1.0 * TEXTURE_SIZE / ray->wall_height;
|
step = 1.0 * TEXTURE_SIZE / ray->wall_height;
|
||||||
pos = (ray->draw_start - HEIGHT / 2 + ray->wall_height / 2) * step;
|
tex_y = (ray->draw_start - HEIGHT / 2 + ray->wall_height / 2) * step;
|
||||||
while (ray->draw_start < ray->draw_end)
|
y = 0;
|
||||||
|
while (y < ray->draw_start)
|
||||||
{
|
{
|
||||||
pos += step;
|
matrix_set(data, x, y, data->map->c_color);
|
||||||
color = get_color(dir);
|
y++;
|
||||||
(void)pos;
|
}
|
||||||
matrix_set(data, x, ray->draw_start, color);
|
while (y < ray->draw_end - 1)
|
||||||
ray->draw_start++;
|
{
|
||||||
|
tex_y += step;
|
||||||
|
color = get_color(data, ray, (int)tex_y);
|
||||||
|
matrix_set(data, x, y, color);
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
while (y < HEIGHT)
|
||||||
|
{
|
||||||
|
matrix_set(data, x, y, data->map->f_color);
|
||||||
|
y++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/17 13:59:27 by kcolin #+# #+# */
|
/* Created: 2025/07/17 13:59:27 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 13:26:06 by kcolin ### ########.fr */
|
/* Updated: 2025/07/31 14:25:10 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -58,7 +58,7 @@ void free_map(t_mapdata *map)
|
||||||
free(map);
|
free(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
int destroy(t_cub3d_data *data)
|
int destroy(t_cub3d_data *data, int exit_code)
|
||||||
{
|
{
|
||||||
free_map(data->map);
|
free_map(data->map);
|
||||||
if (data->mlx_win)
|
if (data->mlx_win)
|
||||||
|
|
@ -66,11 +66,23 @@ int destroy(t_cub3d_data *data)
|
||||||
if (data->img_data)
|
if (data->img_data)
|
||||||
mlx_destroy_image(data->mlx, data->img_data->img);
|
mlx_destroy_image(data->mlx, data->img_data->img);
|
||||||
free(data->img_data);
|
free(data->img_data);
|
||||||
|
if (data->no_texture)
|
||||||
|
mlx_destroy_image(data->mlx, data->no_texture->img);
|
||||||
|
free(data->no_texture);
|
||||||
|
if (data->so_texture)
|
||||||
|
mlx_destroy_image(data->mlx, data->so_texture->img);
|
||||||
|
free(data->so_texture);
|
||||||
|
if (data->ea_texture)
|
||||||
|
mlx_destroy_image(data->mlx, data->ea_texture->img);
|
||||||
|
free(data->ea_texture);
|
||||||
|
if (data->we_texture)
|
||||||
|
mlx_destroy_image(data->mlx, data->we_texture->img);
|
||||||
|
free(data->we_texture);
|
||||||
if (data->mlx)
|
if (data->mlx)
|
||||||
mlx_destroy_display(data->mlx);
|
mlx_destroy_display(data->mlx);
|
||||||
free(data->mlx);
|
free(data->mlx);
|
||||||
free(data->screen_matrix);
|
free(data->screen_matrix);
|
||||||
exit(0);
|
exit(exit_code);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
# include "../cub3d_data.h"
|
# include "../cub3d_data.h"
|
||||||
|
|
||||||
void gnl_exhaust(int fd);
|
void gnl_exhaust(int fd);
|
||||||
int destroy(t_cub3d_data *data);
|
int destroy(t_cub3d_data *data, int exit_code);
|
||||||
void free_tab(char **tab);
|
void free_tab(char **tab);
|
||||||
void free_tab_length(char **tab, int length);
|
void free_tab_length(char **tab, int length);
|
||||||
void free_map(t_mapdata *map);
|
void free_map(t_mapdata *map);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
int keypress_handler(int keycode, t_cub3d_data *data)
|
int keypress_handler(int keycode, t_cub3d_data *data)
|
||||||
{
|
{
|
||||||
if (keycode == XK_Escape)
|
if (keycode == XK_Escape)
|
||||||
destroy(data);
|
destroy(data, 0);
|
||||||
if (keycode == XK_w)
|
if (keycode == XK_w)
|
||||||
data->keypresses.is_w_pressed = true;
|
data->keypresses.is_w_pressed = true;
|
||||||
if (keycode == XK_a)
|
if (keycode == XK_a)
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
/* ::: :::::::: */
|
/* ::: :::::::: */
|
||||||
/* inits.c :+: :+: :+: */
|
/* inits.c :+: :+: :+: */
|
||||||
/* +:+ +:+ +:+ */
|
/* +:+ +:+ +:+ */
|
||||||
/* By: tchampio <tchampio@student.42lehavre. +#+ +:+ +#+ */
|
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/07/31 13:26:53 by tchampio #+# #+# */
|
/* Created: 2025/07/31 13:43:05 by kcolin #+# #+# */
|
||||||
/* Updated: 2025/07/31 14:01:39 by tchampio ### ########.fr */
|
/* Updated: 2025/08/05 13:19:40 by kcolin ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -17,6 +17,41 @@
|
||||||
#include "../map/map_checker.h"
|
#include "../map/map_checker.h"
|
||||||
#include "frees.h"
|
#include "frees.h"
|
||||||
|
|
||||||
|
t_img_data *load_single_texture(t_cub3d_data *data, char *path)
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
void *img;
|
||||||
|
t_img_data *img_data;
|
||||||
|
|
||||||
|
img = mlx_xpm_file_to_image(data->mlx, path, &width, &height);
|
||||||
|
if (img == NULL)
|
||||||
|
{
|
||||||
|
ft_printf("Error: failed to open image at %s\n", path);
|
||||||
|
destroy(data, 1);
|
||||||
|
}
|
||||||
|
if (width != height || width != TEXTURE_SIZE)
|
||||||
|
{
|
||||||
|
ft_printf("Error: textures are not the right size\n");
|
||||||
|
destroy(data, 1);
|
||||||
|
}
|
||||||
|
ft_printf("image: %p\n", img);
|
||||||
|
img_data = ft_calloc(sizeof(t_img_data), 1);
|
||||||
|
img_data->img = img;
|
||||||
|
img_data->addr = mlx_get_data_addr(img_data->img,
|
||||||
|
&img_data->bits_per_pixel, &img_data->line_length,
|
||||||
|
&img_data->endian);
|
||||||
|
return (img_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_textures(t_cub3d_data *data)
|
||||||
|
{
|
||||||
|
data->no_texture = load_single_texture(data, data->map->no_texture);
|
||||||
|
data->so_texture = load_single_texture(data, data->map->so_texture);
|
||||||
|
data->we_texture = load_single_texture(data, data->map->we_texture);
|
||||||
|
data->ea_texture = load_single_texture(data, data->map->ea_texture);
|
||||||
|
}
|
||||||
|
|
||||||
void init_cub3d_data(t_cub3d_data *data, char **argv)
|
void init_cub3d_data(t_cub3d_data *data, char **argv)
|
||||||
{
|
{
|
||||||
ft_bzero(data, sizeof(*data));
|
ft_bzero(data, sizeof(*data));
|
||||||
|
|
@ -36,5 +71,5 @@ void init_cub3d_data(t_cub3d_data *data, char **argv)
|
||||||
&data->img_data->endian);
|
&data->img_data->endian);
|
||||||
init_player(&data->player, data->map);
|
init_player(&data->player, data->map);
|
||||||
data->screen_matrix = ft_calloc(sizeof(int), WIDTH * HEIGHT);
|
data->screen_matrix = ft_calloc(sizeof(int), WIDTH * HEIGHT);
|
||||||
data->delta = get_milliseconds();
|
load_textures(data);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue