mirror of
https://codeberg.org/ACME-Corporation/cub3d.git
synced 2025-12-06 01:48:08 +01:00
Compare commits
2 commits
b9b164e32d
...
fcb08f6447
| Author | SHA1 | Date | |
|---|---|---|---|
| fcb08f6447 | |||
| 98e0119c91 |
10 changed files with 217 additions and 63 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -4,3 +4,4 @@ cub3d
|
|||
libft.a
|
||||
vgcore.*
|
||||
cscope.*
|
||||
callgrind.out.*
|
||||
|
|
|
|||
1
Makefile
1
Makefile
|
|
@ -25,6 +25,7 @@ SOURCEFILES = \
|
|||
src/player/angle.c \
|
||||
src/player/player.c \
|
||||
src/player/move.c \
|
||||
src/player/move_step.c \
|
||||
src/raycast/ray.c \
|
||||
src/raycast/walls.c \
|
||||
src/renderer/render.c \
|
||||
|
|
|
|||
|
|
@ -6,21 +6,22 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/08 12:08:23 by tchampio ### ########.fr */
|
||||
/* Updated: 2025/08/12 14:32:47 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef CONSTS_H
|
||||
# define CONSTS_H
|
||||
|
||||
# define HEIGHT 800
|
||||
# define WIDTH 800
|
||||
# define HEIGHT 600
|
||||
|
||||
# define SIZE 64
|
||||
# define MAP_SIZE 10
|
||||
# define PLAYER_SIZE 6
|
||||
# define RESSOURCE_DIR "ressources"
|
||||
# define MOVEMENT_SPEED 0.000005
|
||||
# define MOVEMENT_STEP 0.1
|
||||
# define ROTATION_SPEED 0.000002
|
||||
# define PLANE_VALUE 0.6
|
||||
# define TEXTURE_SIZE 64
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/07/17 14:28:56 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/06 14:02:08 by tchampio ### ########.fr */
|
||||
/* Updated: 2025/08/12 14:30:49 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ void my_mlx_pixel_put(t_img_data *data, int x, int y, int color)
|
|||
{
|
||||
char *dst;
|
||||
|
||||
if (x < 0 || y < 0 || x >= HEIGHT || y >= WIDTH)
|
||||
if (x < 0 || y < 0 || x >= WIDTH || y >= HEIGHT)
|
||||
return ;
|
||||
dst = data->addr + (y * data->line_length + x * (data->bits_per_pixel / 8));
|
||||
*(unsigned int *)dst = color;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/07/17 14:14:30 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/11 11:03:22 by tchampio ### ########.fr */
|
||||
/* Updated: 2025/08/12 14:23:27 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -39,11 +39,9 @@ int game_loop(t_cub3d_data *data)
|
|||
char *fps_string;
|
||||
|
||||
data->last_tick = get_milliseconds();
|
||||
mlx_destroy_image(data->mlx, data->img_data->img);
|
||||
data->img_data->img = mlx_new_image(data->mlx, WIDTH, HEIGHT);
|
||||
reset_matrix(data);
|
||||
raycaster(data, &ray);
|
||||
move_player(data);
|
||||
raycaster(data, &ray);
|
||||
sprite_caster(data);
|
||||
matrix_to_image(data);
|
||||
draw_map(data->map, &data->player, data->img_data);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/05 12:53:06 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/06 11:46:04 by kcolin ### ########.fr */
|
||||
/* Updated: 2025/08/12 12:16:51 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -14,73 +14,71 @@
|
|||
#include "angle.h"
|
||||
#include "../consts.h"
|
||||
#include "../map/collision.h"
|
||||
#include <math.h>
|
||||
#include "move_step.h"
|
||||
|
||||
void move_player_forward(t_cub3d_data *data)
|
||||
{
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float movspeed;
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
|
||||
movspeed = MOVEMENT_SPEED * data->delta;
|
||||
map = data->map;
|
||||
next_x = data->player.x + data->player.dir_x * movspeed;
|
||||
next_y = data->player.y + data->player.dir_y * movspeed;
|
||||
if (!blocks_movement(map, (int)data->player.y, (int)next_x))
|
||||
data->player.x += data->player.dir_x * movspeed;
|
||||
if (!blocks_movement(map, (int)next_y, (int)data->player.x))
|
||||
data->player.y += data->player.dir_y * movspeed;
|
||||
mov_x = data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
||||
mov_y = data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
||||
while (move_forward_step(data, mov_x, mov_y))
|
||||
{
|
||||
mov_x -= calc_step(mov_x);
|
||||
mov_y -= calc_step(mov_y);
|
||||
if (fabs(mov_x) < MOVEMENT_SPEED && fabs(mov_y) < MOVEMENT_SPEED)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
void move_player_backward(t_cub3d_data *data)
|
||||
{
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float movspeed;
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
|
||||
movspeed = MOVEMENT_SPEED * data->delta;
|
||||
map = data->map;
|
||||
next_x = data->player.x - data->player.dir_x * movspeed;
|
||||
next_y = data->player.y - data->player.dir_y * movspeed;
|
||||
if (!blocks_movement(map, (int)data->player.y, (int)next_x))
|
||||
data->player.x -= data->player.dir_x * movspeed;
|
||||
if (!blocks_movement(map, (int)next_y, (int)data->player.x))
|
||||
data->player.y -= data->player.dir_y * movspeed;
|
||||
mov_x = data->player.dir_x * MOVEMENT_SPEED * data->delta;
|
||||
mov_y = data->player.dir_y * MOVEMENT_SPEED * data->delta;
|
||||
while (move_backward_step(data, mov_x, mov_y))
|
||||
{
|
||||
mov_x -= calc_step(mov_x);
|
||||
mov_y -= calc_step(mov_y);
|
||||
if (fabs(mov_x) < MOVEMENT_SPEED && fabs(mov_y) < MOVEMENT_SPEED)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
void move_player_strafe_left(t_cub3d_data *data)
|
||||
{
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float movspeed;
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
|
||||
movspeed = MOVEMENT_SPEED * data->delta;
|
||||
map = data->map;
|
||||
next_x = data->player.x - data->player.plane_x * movspeed;
|
||||
next_y = data->player.y - data->player.plane_y * movspeed;
|
||||
if (!blocks_movement(map, (int)data->player.y, (int)next_x))
|
||||
data->player.x -= data->player.plane_x * movspeed;
|
||||
if (!blocks_movement(map, (int)next_y, (int)data->player.x))
|
||||
data->player.y -= data->player.plane_y * movspeed;
|
||||
mov_x = data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
||||
mov_y = data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
||||
while (move_strafe_left_step(data, mov_x, mov_y))
|
||||
{
|
||||
mov_x -= calc_step(mov_x);
|
||||
mov_y -= calc_step(mov_y);
|
||||
if (fabs(mov_x) < MOVEMENT_SPEED && fabs(mov_y) < MOVEMENT_SPEED)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
void move_player_strafe_right(t_cub3d_data *data)
|
||||
{
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float movspeed;
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
|
||||
movspeed = MOVEMENT_SPEED * data->delta;
|
||||
map = data->map;
|
||||
next_x = data->player.x + data->player.plane_x * movspeed;
|
||||
next_y = data->player.y + data->player.plane_y * movspeed;
|
||||
if (!blocks_movement(map, (int)data->player.y, (int)next_x))
|
||||
data->player.x += data->player.plane_x * movspeed;
|
||||
if (!blocks_movement(map, (int)next_y, (int)data->player.x))
|
||||
data->player.y += data->player.plane_y * movspeed;
|
||||
mov_x = data->player.plane_x * MOVEMENT_SPEED * data->delta;
|
||||
mov_y = data->player.plane_y * MOVEMENT_SPEED * data->delta;
|
||||
while (move_strafe_right_step(data, mov_x, mov_y))
|
||||
{
|
||||
mov_x -= calc_step(mov_x);
|
||||
mov_y -= calc_step(mov_y);
|
||||
if (fabs(mov_x) < MOVEMENT_SPEED && fabs(mov_y) < MOVEMENT_SPEED)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
void move_player(t_cub3d_data *data)
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* move.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: tchampio <tchampio@student.42lehavre. +#+ +:+ +#+ */
|
||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/07/29 13:58:49 by tchampio #+# #+# */
|
||||
/* Updated: 2025/07/29 20:13:08 by tchampio ### ########.fr */
|
||||
/* Created: 2025/08/08 14:06:56 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/08 14:08:28 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
130
src/player/move_step.c
Normal file
130
src/player/move_step.c
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* move_step.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/08 14:06:37 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/12 12:16:17 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "move_step.h"
|
||||
#include <math.h>
|
||||
#include "../map/collision.h"
|
||||
|
||||
double calc_step(double a)
|
||||
{
|
||||
double ret;
|
||||
|
||||
if (fabs(a) > MOVEMENT_STEP)
|
||||
{
|
||||
if (a > 0)
|
||||
ret = MOVEMENT_STEP;
|
||||
else
|
||||
ret = -MOVEMENT_STEP;
|
||||
}
|
||||
else
|
||||
ret = a;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
// return value:
|
||||
// true: keep moving
|
||||
// false: hit wall
|
||||
bool move_forward_step(t_cub3d_data *data, double mov_x, double mov_y)
|
||||
{
|
||||
int blocks;
|
||||
double x_step;
|
||||
double y_step;
|
||||
|
||||
blocks = 2;
|
||||
x_step = calc_step(mov_x);
|
||||
y_step = calc_step(mov_y);
|
||||
if (!blocks_movement(data->map, (int)data->player.y,
|
||||
(int)(data->player.x + x_step)))
|
||||
{
|
||||
data->player.x += x_step;
|
||||
blocks--;
|
||||
}
|
||||
if (!blocks_movement(data->map,
|
||||
(int)(data->player.y + y_step), (int)data->player.x))
|
||||
{
|
||||
data->player.y += y_step;
|
||||
blocks--;
|
||||
}
|
||||
return (blocks < 2);
|
||||
}
|
||||
|
||||
bool move_backward_step(t_cub3d_data *data, double mov_x, double mov_y)
|
||||
{
|
||||
int blocks;
|
||||
double x_step;
|
||||
double y_step;
|
||||
|
||||
blocks = 2;
|
||||
x_step = calc_step(mov_x);
|
||||
y_step = calc_step(mov_y);
|
||||
if (!blocks_movement(data->map, (int)data->player.y,
|
||||
(int)(data->player.x - x_step)))
|
||||
{
|
||||
data->player.x -= x_step;
|
||||
blocks--;
|
||||
}
|
||||
if (!blocks_movement(data->map,
|
||||
(int)(data->player.y - y_step), (int)data->player.x))
|
||||
{
|
||||
data->player.y -= y_step;
|
||||
blocks--;
|
||||
}
|
||||
return (blocks < 2);
|
||||
}
|
||||
|
||||
bool move_strafe_left_step(t_cub3d_data *data, double mov_x, double mov_y)
|
||||
{
|
||||
int blocks;
|
||||
double x_step;
|
||||
double y_step;
|
||||
|
||||
blocks = 2;
|
||||
x_step = calc_step(mov_x);
|
||||
y_step = calc_step(mov_y);
|
||||
if (!blocks_movement(data->map, (int)data->player.y,
|
||||
(int)(data->player.x - x_step)))
|
||||
{
|
||||
data->player.x -= x_step;
|
||||
blocks--;
|
||||
}
|
||||
if (!blocks_movement(data->map,
|
||||
(int)(data->player.y - y_step), (int)data->player.x))
|
||||
{
|
||||
data->player.y -= y_step;
|
||||
blocks--;
|
||||
}
|
||||
return (blocks < 2);
|
||||
}
|
||||
|
||||
bool move_strafe_right_step(t_cub3d_data *data, double mov_x, double mov_y)
|
||||
{
|
||||
int blocks;
|
||||
double x_step;
|
||||
double y_step;
|
||||
|
||||
blocks = 2;
|
||||
x_step = calc_step(mov_x);
|
||||
y_step = calc_step(mov_y);
|
||||
if (!blocks_movement(data->map, (int)data->player.y,
|
||||
(int)(data->player.x + x_step)))
|
||||
{
|
||||
data->player.x += x_step;
|
||||
blocks--;
|
||||
}
|
||||
if (!blocks_movement(data->map,
|
||||
(int)(data->player.y + y_step), (int)data->player.x))
|
||||
{
|
||||
data->player.y += y_step;
|
||||
blocks--;
|
||||
}
|
||||
return (blocks < 2);
|
||||
}
|
||||
25
src/player/move_step.h
Normal file
25
src/player/move_step.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* move_step.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/08 14:06:22 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/12 12:16:20 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef MOVE_STEP_H
|
||||
# define MOVE_STEP_H
|
||||
|
||||
# include "../cub3d_data.h"
|
||||
|
||||
double calc_step(double a);
|
||||
|
||||
bool move_forward_step(t_cub3d_data *data, double mov_x, double mov_y);
|
||||
bool move_backward_step(t_cub3d_data *data, double mov_x, double mov_y);
|
||||
bool move_strafe_left_step(t_cub3d_data *data, double mov_x, double mov_y);
|
||||
bool move_strafe_right_step(t_cub3d_data *data, double mov_x, double mov_y);
|
||||
|
||||
#endif // MOVE_STEP_H
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/07/31 13:18:17 by kcolin #+# #+# */
|
||||
/* Updated: 2025/07/31 13:38:49 by kcolin ### ########.fr */
|
||||
/* Updated: 2025/08/12 14:31:04 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -23,12 +23,12 @@ void reset_matrix(t_cub3d_data *data)
|
|||
|
||||
int matrix_get(t_cub3d_data *data, int x, int y)
|
||||
{
|
||||
return (data->screen_matrix[y + x * WIDTH]);
|
||||
return (data->screen_matrix[y + x * HEIGHT]);
|
||||
}
|
||||
|
||||
void matrix_set(t_cub3d_data *data, int x, int y, int color)
|
||||
{
|
||||
data->screen_matrix[y + x * WIDTH] = color;
|
||||
data->screen_matrix[y + x * HEIGHT] = color;
|
||||
}
|
||||
|
||||
void matrix_to_image(t_cub3d_data *data)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue