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 :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* :::::::: */
/* cub3d.h :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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 "types.h"
# include "errors.h"
# include "vec_math.h"
# include "map.h"
# include "game.h"
# include "screen.h"

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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);
void grid_free(t_tile **grid, 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);
int find_player_or_empty(t_map *map, int *x, int *y);

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* 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 map_width(char **lines);
int parse_tile(char c);
int parse_map(char **lines, t_map *map);
int parse_file(char *buffer, t_map *map);
int parse_map(char **lines, t_game *game);
int parse_file(char *buffer, t_game *game);
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);
char **pointer_lines(char *buffer, char c);
int valid_arguments(int argc, char **argv);

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* 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)
{
t_map *map;
t_tile **grid;
if (!game || !*game)
if (!(*game))
return (FAILURE);
map = malloc(sizeof(t_map));
if (!map)
(*game)->map = malloc(sizeof(t_map));
if (!(*game)->map)
{
perror("Error allocating memory for map");
perror("Error allocating memory for (*game)->map");
return (FAILURE);
}
parse_args(mapfile, map);
grid = copy_map(map->grid, map->width, map->height);
parse_args(mapfile, (*game));
grid = copy_map((*game)->map->grid, (*game)->map->width, (*game)->map->height);
if (!grid)
{
perror("Error copying map");
free(map);
perror("Error copying (*game)->map");
free((*game)->map);
return (FAILURE);
}
if (!enclosed_map(map))
if (!enclosed_map((*game)->map))
{
ft_putendl_fd("Map is not enclosed", STDERR_FILENO);
grid_free(grid, map->height);
map_free(map);
grid_free(grid, (*game)->map->height);
map_free((*game)->map);
return (FAILURE);
}
grid_free(map->grid, map->height);
map->grid = grid;
print_config(map);
grid_free((*game)->map->grid, (*game)->map->height);
(*game)->map->grid = grid;
print_config((*game)->map);
(*game)->map = map;
return (SUCCESS);
}

View File

@ -6,13 +6,13 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* 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"
int parse_args(const char *mapfile, t_map *map)
int parse_args(const char *mapfile, t_game *game)
{
char *buffer;
@ -22,7 +22,7 @@ int parse_args(const char *mapfile, t_map *map)
perror("Error reading map file");
return (FAILURE);
}
if (!parse_file(buffer, map))
if (!parse_file(buffer, game))
{
ft_putstr_fd("Error parsing map file\n", 2);
free(buffer);

View File

@ -6,13 +6,13 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* 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"
int parse_file(char *buffer, t_map *map)
int parse_file(char *buffer, t_game *game)
{
char **lines;
int i;
@ -23,11 +23,11 @@ int parse_file(char *buffer, t_map *map)
i = 0;
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);
i++;
}
if (!parse_map(&lines[i], map))
if (!parse_map(&lines[i], game))
return (free(lines), FAILURE);
free(lines);
return (SUCCESS);

View File

@ -6,55 +6,88 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* 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"
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));
if (!map->grid[i])
return (FAILURE);
j = 0;
while (j < map->width)
dir.x = (float)x;
dir.y = (float)y;
return (dir);
}
int parse_player(t_game *game, int y, int x, char c)
{
if (j >= ft_strlen(lines[i]))
map->grid[i][j] = TILE_VOID;
else
map->grid[i][j] = parse_tile(lines[i][j]);
if (map->grid[i][j] == -2)
t_player *player;
player = game->player;
player->pos.x = ((float)x + 0.5f) * TILE_SIZE;
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);
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);
}
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;
while (lines[i])
i++;
map->height = i;
y = 0;
while (lines[y])
y++;
map = game->map;
map->height = y;
map->width = map_width(lines);
map->grid = malloc(sizeof(t_tile *) * (map->height + 1));
if (!map->grid)
return (FAILURE);
i = 0;
while (i < map->height)
y = 0;
while (y < map->height)
{
if (parse_map_line(lines, map, i) == FAILURE)
{
map_free(map);
return (FAILURE);
if (!parse_map_line(lines, game, y))
return (map_free(map), FAILURE);
y++;
}
i++;
}
map->grid[i] = NULL;
map->grid[y] = NULL;
return (SUCCESS);
}

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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)
{
double old_x;
// double old_x;
old_x = player->dir.x;
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);
// // old_x = player->dir.x;
// // 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 = rot(player->dir, rot_speed);
}
void player_update(t_game *game, float delta_time)

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* initialize.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* :::::::: */
/* initialize.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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))
return (FAILURE);
if (!player_create(game))
return (FAILURE);
if (!map_create(game, mapfile))
return (FAILURE);
if (!screen_create(game))
return (FAILURE);
if (!player_create(game))
return (FAILURE);
if (!keyboard_create(game))
return (FAILURE);
if (!screen_display((*game)->screen))