refactoring player pos etc

This commit is contained in:
whaffman 2025-04-25 15:24:02 +02:00
parent 31e735d141
commit 1b307d24e2
9 changed files with 113 additions and 79 deletions

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* :::::::: */
/* cub3d.h :+: :+: :+: */ /* cub3d.h :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+ */
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
/* Updated: 2025/04/22 17:15:32 by qmennen ### ########.fr */ /* Updated: 2025/04/25 13:53:48 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -38,6 +38,7 @@
# include <allowed.h> # include <allowed.h>
# include "types.h" # include "types.h"
# include "errors.h" # include "errors.h"
# include "vec_math.h"
# include "map.h" # include "map.h"
# include "game.h" # include "game.h"
# include "screen.h" # include "screen.h"

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */ /* Created: 2025/04/17 19:19:19 by qmennen #+# #+# */
/* Updated: 2025/04/23 12:26:56 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:37:55 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -22,7 +22,7 @@ t_tile get_tile(t_map * map, int x, int y);
int enclosed_map(t_map *map); int enclosed_map(t_map *map);
void grid_free(t_tile **grid, int height); void grid_free(t_tile **grid, int height);
t_tile **copy_map(t_tile **grid, int width, int height); t_tile **copy_map(t_tile **grid, int width, int height);
int parse_args(const char *mapfile, t_map *map); int parse_args(const char *mapfile, t_game *game);
t_tile **create_grid(int width, int height); t_tile **create_grid(int width, int height);
int find_player_or_empty(t_map *map, int *x, int *y); int find_player_or_empty(t_map *map, int *x, int *y);

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */ /* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */
/* Updated: 2025/04/24 11:38:31 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:43:55 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -23,9 +23,10 @@ unsigned int parse_color(const char *color_str);
int parse_config_line(const char *line, t_map *map); int parse_config_line(const char *line, t_map *map);
int map_width(char **lines); int map_width(char **lines);
int parse_tile(char c); int parse_tile(char c);
int parse_map(char **lines, t_map *map); int parse_map(char **lines, t_game *game);
int parse_file(char *buffer, t_map *map); int parse_file(char *buffer, t_game *game);
void print_config(t_map *map); void print_config(t_map *map);
int parse_map_line(char **lines, t_game *game, int i);
t_tile **copy_map(t_tile **grid, int width, int height); t_tile **copy_map(t_tile **grid, int width, int height);
char **pointer_lines(char *buffer, char c); char **pointer_lines(char *buffer, char c);
int valid_arguments(int argc, char **argv); int valid_arguments(int argc, char **argv);

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/23 12:21:13 by whaffman #+# #+# */ /* Created: 2025/04/23 12:21:13 by whaffman #+# #+# */
/* Updated: 2025/04/24 11:45:24 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:36:18 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,36 +16,34 @@
int map_create(t_game **game, const char *mapfile) int map_create(t_game **game, const char *mapfile)
{ {
t_map *map;
t_tile **grid; t_tile **grid;
if (!game || !*game) if (!(*game))
return (FAILURE); return (FAILURE);
map = malloc(sizeof(t_map)); (*game)->map = malloc(sizeof(t_map));
if (!map) if (!(*game)->map)
{ {
perror("Error allocating memory for map"); perror("Error allocating memory for (*game)->map");
return (FAILURE); return (FAILURE);
} }
parse_args(mapfile, map); parse_args(mapfile, (*game));
grid = copy_map(map->grid, map->width, map->height); grid = copy_map((*game)->map->grid, (*game)->map->width, (*game)->map->height);
if (!grid) if (!grid)
{ {
perror("Error copying map"); perror("Error copying (*game)->map");
free(map); free((*game)->map);
return (FAILURE); return (FAILURE);
} }
if (!enclosed_map(map)) if (!enclosed_map((*game)->map))
{ {
ft_putendl_fd("Map is not enclosed", STDERR_FILENO); ft_putendl_fd("Map is not enclosed", STDERR_FILENO);
grid_free(grid, map->height); grid_free(grid, (*game)->map->height);
map_free(map); map_free((*game)->map);
return (FAILURE); return (FAILURE);
} }
grid_free(map->grid, map->height); grid_free((*game)->map->grid, (*game)->map->height);
map->grid = grid; (*game)->map->grid = grid;
print_config(map); print_config((*game)->map);
(*game)->map = map;
return (SUCCESS); return (SUCCESS);
} }

View File

@ -6,13 +6,13 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/23 12:17:49 by whaffman #+# #+# */ /* Created: 2025/04/23 12:17:49 by whaffman #+# #+# */
/* Updated: 2025/04/23 12:26:24 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:36:47 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "cub3d.h" #include "cub3d.h"
int parse_args(const char *mapfile, t_map *map) int parse_args(const char *mapfile, t_game *game)
{ {
char *buffer; char *buffer;
@ -22,7 +22,7 @@ int parse_args(const char *mapfile, t_map *map)
perror("Error reading map file"); perror("Error reading map file");
return (FAILURE); return (FAILURE);
} }
if (!parse_file(buffer, map)) if (!parse_file(buffer, game))
{ {
ft_putstr_fd("Error parsing map file\n", 2); ft_putstr_fd("Error parsing map file\n", 2);
free(buffer); free(buffer);

View File

@ -6,13 +6,13 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/22 13:11:37 by whaffman #+# #+# */ /* Created: 2025/04/22 13:11:37 by whaffman #+# #+# */
/* Updated: 2025/04/24 11:45:52 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:38:44 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "cub3d.h" #include "cub3d.h"
int parse_file(char *buffer, t_map *map) int parse_file(char *buffer, t_game *game)
{ {
char **lines; char **lines;
int i; int i;
@ -23,11 +23,11 @@ int parse_file(char *buffer, t_map *map)
i = 0; i = 0;
while (lines[i] && !is_map_line(lines[i])) while (lines[i] && !is_map_line(lines[i]))
{ {
if (*lines[i] && !parse_config_line(lines[i], map)) if (*lines[i] && !parse_config_line(lines[i], game->map))
return (free(lines), FAILURE); return (free(lines), FAILURE);
i++; i++;
} }
if (!parse_map(&lines[i], map)) if (!parse_map(&lines[i], game))
return (free(lines), FAILURE); return (free(lines), FAILURE);
free(lines); free(lines);
return (SUCCESS); return (SUCCESS);

View File

@ -6,55 +6,88 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */ /* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */
/* Updated: 2025/04/22 13:19:21 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 11:55:27 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "cub3d.h" #include "cub3d.h"
int parse_map_line(char **lines, t_map *map, int i) t_vec2 parse_dir(int x, int y)
{ {
int j; t_vec2 dir;
map->grid[i] = malloc(sizeof(t_tile) * (map->width + 1)); dir.x = (float)x;
if (!map->grid[i]) dir.y = (float)y;
return (FAILURE); return (dir);
j = 0; }
while (j < map->width)
int parse_player(t_game *game, int y, int x, char c)
{ {
if (j >= ft_strlen(lines[i])) t_player *player;
map->grid[i][j] = TILE_VOID;
else player = game->player;
map->grid[i][j] = parse_tile(lines[i][j]); player->pos.x = ((float)x + 0.5f) * TILE_SIZE;
if (map->grid[i][j] == -2) player->pos.y = ((float)y + 0.5f) * TILE_SIZE;
if (c == 'N')
player->dir = parse_dir(0, 1);
else if (c == 'E')
player->dir = parse_dir(1, 0);
else if (c == 'S')
player->dir = parse_dir(0, -1);
else if (c == 'W')
player->dir = parse_dir(-1, 0);
return (SUCCESS);
}
int parse_map_line(char **lines, t_game *game, int y)
{
int x;
t_map *map;
map = game->map;
map->grid[y] = malloc(sizeof(t_tile) * (map->width + 1));
if (!map->grid[y])
return (FAILURE); return (FAILURE);
j++; x = 0;
while (x < map->width)
{
if (x >= ft_strlen(lines[y]))
map->grid[y][x] = TILE_VOID;
else
map->grid[y][x] = parse_tile(lines[y][x]);
if (map->grid[y][x] == TILE_PLAYER)
parse_player(game, y, x, lines[y][x]);
else if (map->grid[y][x] == -2)
return (FAILURE);
if (map->grid[y][x] == -2)
return (FAILURE);
x++;
} }
return (SUCCESS); return (SUCCESS);
} }
int parse_map(char **lines, t_map *map) int parse_map(char **lines, t_game *game)
{ {
int i; int y;
t_map *map;
i = 0; y = 0;
while (lines[i]) while (lines[y])
i++; y++;
map->height = i; map = game->map;
map->height = y;
map->width = map_width(lines); map->width = map_width(lines);
map->grid = malloc(sizeof(t_tile *) * (map->height + 1)); map->grid = malloc(sizeof(t_tile *) * (map->height + 1));
if (!map->grid) if (!map->grid)
return (FAILURE); return (FAILURE);
i = 0; y = 0;
while (i < map->height) while (y < map->height)
{ {
if (parse_map_line(lines, map, i) == FAILURE) if (!parse_map_line(lines, game, y))
{ return (map_free(map), FAILURE);
map_free(map); y++;
return (FAILURE);
} }
i++; map->grid[y] = NULL;
}
map->grid[i] = NULL;
return (SUCCESS); return (SUCCESS);
} }

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */
/* Updated: 2025/04/18 12:15:31 by whaffman ######## odam.nl */ /* Updated: 2025/04/25 13:54:11 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -47,11 +47,12 @@ static void move(t_map *map, t_player *player, int dir, float delta)
static void rotate(t_player *player, float rot_speed) static void rotate(t_player *player, float rot_speed)
{ {
double old_x; // double old_x;
old_x = player->dir.x; // // old_x = player->dir.x;
player->dir.x = player->dir.x * cos(rot_speed) - player->dir.y * sin(rot_speed); // // player->dir.x = player->dir.x * cos(rot_speed) - player->dir.y * sin(rot_speed);
player->dir.y = old_x * sin(rot_speed) + player->dir.y * cos(rot_speed); // // player->dir.y = old_x * sin(rot_speed) + player->dir.y * cos(rot_speed);
player->dir = rot(player->dir, rot_speed);
} }
void player_update(t_game *game, float delta_time) void player_update(t_game *game, float delta_time)

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* :::::::: */
/* initialize.c :+: :+: :+: */ /* initialize.c :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+ */
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ /* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
/* Updated: 2025/04/22 17:21:37 by qmennen ### ########.fr */ /* Updated: 2025/04/25 11:20:49 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,12 +16,12 @@ int initialize_cub3d(t_game **game, const char *mapfile)
{ {
if (!game_create(game)) if (!game_create(game))
return (FAILURE); return (FAILURE);
if (!player_create(game))
return (FAILURE);
if (!map_create(game, mapfile)) if (!map_create(game, mapfile))
return (FAILURE); return (FAILURE);
if (!screen_create(game)) if (!screen_create(game))
return (FAILURE); return (FAILURE);
if (!player_create(game))
return (FAILURE);
if (!keyboard_create(game)) if (!keyboard_create(game))
return (FAILURE); return (FAILURE);
if (!screen_display((*game)->screen)) if (!screen_display((*game)->screen))