mirror of
https://codeberg.org/ACME-Corporation/cub3d.git
synced 2025-12-06 09:58:09 +01:00
Compare commits
1 commit
98e0119c91
...
f9218303d4
| Author | SHA1 | Date | |
|---|---|---|---|
| f9218303d4 |
9 changed files with 89 additions and 1652 deletions
3
Makefile
3
Makefile
|
|
@ -4,7 +4,7 @@ CC = cc
|
|||
# https://github.com/google/sanitizers/wiki/AddressSanitizer
|
||||
SANITIZERS = -fsanitize=address,undefined -fno-omit-frame-pointer
|
||||
ifeq ($(CFLAGS),)
|
||||
CFLAGS = -Wall -Wextra -Werror -g -O3 -ffast-math
|
||||
CFLAGS = -Wall -Wextra -Werror -g
|
||||
endif
|
||||
IFLAGS = -I./mlx -I./libft
|
||||
|
||||
|
|
@ -25,7 +25,6 @@ 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 \
|
||||
|
|
|
|||
|
|
@ -1,70 +0,0 @@
|
|||
/* XPM */
|
||||
static char * north_2_xpm[] = {
|
||||
"64 64 3 1",
|
||||
" c #897451",
|
||||
". c #534530",
|
||||
"+ c #000000",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" .. . ",
|
||||
" .. . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" .. . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . . . ",
|
||||
" . ... ",
|
||||
" . .. ",
|
||||
" . .. ",
|
||||
" . . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" . ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" +++ +++ ",
|
||||
" +++ +++ ",
|
||||
" +++ +++ ",
|
||||
" ",
|
||||
" +++ +++ ",
|
||||
" +++++++++ ",
|
||||
" +++++++++ ",
|
||||
" +++ ",
|
||||
" ",
|
||||
" ",
|
||||
" "};
|
||||
File diff suppressed because it is too large
Load diff
19
src/main.c
19
src/main.c
|
|
@ -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/07 12:27:47 by tchampio ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -35,8 +35,6 @@
|
|||
int game_loop(t_cub3d_data *data)
|
||||
{
|
||||
t_ray ray;
|
||||
int fps;
|
||||
char *fps_string;
|
||||
|
||||
data->last_tick = get_milliseconds();
|
||||
mlx_destroy_image(data->mlx, data->img_data->img);
|
||||
|
|
@ -51,11 +49,7 @@ int game_loop(t_cub3d_data *data)
|
|||
data->img_data->img, 0, 0);
|
||||
mlx_string_put(data->mlx, data->mlx_win, 10, 10, 0x00FFFFFF, COMPILED_TEXT);
|
||||
data->delta = (get_milliseconds() - data->last_tick);
|
||||
fps = 1000000.0 / data->delta;
|
||||
fps_string = ft_itoa(fps);
|
||||
mlx_string_put(data->mlx, data->mlx_win, WIDTH - 20, 15, 0xFF0000,
|
||||
fps_string);
|
||||
free(fps_string);
|
||||
ft_printf("%d,%d\n", data->last_tick, data->delta);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -66,19 +60,16 @@ int main(int argc, char **argv)
|
|||
if (argc < 2)
|
||||
return (ft_printf("Error: Missing cub3d file\n"), 1);
|
||||
init_cub3d_data(&data, argv);
|
||||
// FIXME: Delete this whole piece of code when we will init sprites from
|
||||
// map
|
||||
// placing a sprite next to player to ease debugging
|
||||
data.sprite_list = ft_calloc(sizeof(t_sprite *), 3);
|
||||
data.sprite_list[0] = ft_calloc(sizeof(t_sprite), 1);
|
||||
data.sprite_list[1] = ft_calloc(sizeof(t_sprite), 1);
|
||||
data.sprite_list[0]->x = data.map->startx + 1;
|
||||
data.sprite_list[0]->y = data.map->starty;
|
||||
data.sprite_list[0]->image = load_single_texture(&data,
|
||||
"ressources/box.xpm");
|
||||
data.sprite_list[0]->image = load_single_texture(&data, "ressources/box.xpm");
|
||||
data.sprite_list[1]->x = data.map->startx;
|
||||
data.sprite_list[1]->y = data.map->starty - 2;
|
||||
data.sprite_list[1]->image = load_single_texture(&data,
|
||||
"ressources/test_holed.xpm");
|
||||
data.sprite_list[1]->image = load_single_texture(&data, "ressources/test.xpm");
|
||||
mlx_hook(data.mlx_win, KeyPress, KeyPressMask, keypress_handler, &data);
|
||||
mlx_hook(data.mlx_win, KeyRelease, KeyReleaseMask,
|
||||
keyrelease_handler, &data);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/05 12:53:06 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/12 12:16:51 by kcolin ### ########.fr */
|
||||
/* Updated: 2025/08/07 14:12:42 by kcolin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -15,70 +15,105 @@
|
|||
#include "../consts.h"
|
||||
#include "../map/collision.h"
|
||||
#include <math.h>
|
||||
#include "move_step.h"
|
||||
|
||||
static double ft_special_min(double a, double b)
|
||||
{
|
||||
double ret;
|
||||
|
||||
if (fabs(a) > fabs(b))
|
||||
{
|
||||
if (a > 0)
|
||||
ret = b;
|
||||
else
|
||||
ret = -b;
|
||||
}
|
||||
else
|
||||
ret = a;
|
||||
return (ret);
|
||||
}
|
||||
|
||||
void move_player_forward(t_cub3d_data *data)
|
||||
{
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float movspeed;
|
||||
int blocks;
|
||||
|
||||
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))
|
||||
movspeed = MOVEMENT_SPEED * data->delta;
|
||||
map = data->map;
|
||||
double mov_x = data->player.dir_x * movspeed;
|
||||
double mov_y = data->player.dir_y * movspeed;
|
||||
blocks = 0;
|
||||
while ((fabs(mov_x) > MOVEMENT_SPEED || fabs(mov_y) > MOVEMENT_SPEED) && blocks < 2)
|
||||
{
|
||||
mov_x -= calc_step(mov_x);
|
||||
mov_y -= calc_step(mov_y);
|
||||
if (fabs(mov_x) < MOVEMENT_SPEED && fabs(mov_y) < MOVEMENT_SPEED)
|
||||
break ;
|
||||
blocks = 2;
|
||||
next_x = data->player.x + ft_special_min(mov_x, MOVEMENT_STEP);
|
||||
next_y = data->player.y + ft_special_min(mov_y, MOVEMENT_STEP);
|
||||
if (!blocks_movement(map, (int)data->player.y, (int)next_x))
|
||||
{
|
||||
data->player.x = next_x;
|
||||
blocks--;
|
||||
}
|
||||
if (!blocks_movement(map, (int)next_y, (int)data->player.x))
|
||||
{
|
||||
data->player.y = next_y;
|
||||
blocks--;
|
||||
}
|
||||
mov_x -= ft_special_min(mov_x, MOVEMENT_STEP);
|
||||
mov_y -= ft_special_min(mov_y, MOVEMENT_STEP);
|
||||
}
|
||||
}
|
||||
|
||||
void move_player_backward(t_cub3d_data *data)
|
||||
{
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float 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 ;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
void move_player_strafe_left(t_cub3d_data *data)
|
||||
{
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float 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 ;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
void move_player_strafe_right(t_cub3d_data *data)
|
||||
{
|
||||
double mov_x;
|
||||
double mov_y;
|
||||
t_mapdata *map;
|
||||
double next_x;
|
||||
double next_y;
|
||||
float 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 ;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
void move_player(t_cub3d_data *data)
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
/* ::: :::::::: */
|
||||
/* move.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: kcolin <kcolin@42.fr> +#+ +:+ +#+ */
|
||||
/* By: tchampio <tchampio@student.42lehavre. +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/08 14:06:56 by kcolin #+# #+# */
|
||||
/* Updated: 2025/08/08 14:08:28 by kcolin ### ########.fr */
|
||||
/* Created: 2025/07/29 13:58:49 by tchampio #+# #+# */
|
||||
/* Updated: 2025/07/29 20:13:08 by tchampio ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -1,130 +0,0 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* 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);
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* 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: tchampio <tchampio@student.42lehavre.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/08/05 15:51:01 by tchampio #+# #+# */
|
||||
/* Updated: 2025/08/07 16:57:29 by tchampio ### ########.fr */
|
||||
/* Updated: 2025/08/07 13:28:07 by tchampio ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -106,8 +106,6 @@ void sprite_caster(t_cub3d_data *data)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (!data->sprite_list)
|
||||
return ;
|
||||
sort_sprites(data->sprite_order, data->sprite_distances, data);
|
||||
i = 0;
|
||||
while (data->sprite_list[i] && i < MAX_SPRITES)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue