Norm work:
Refactor code for improved readability and maintainability, including function signature updates, new utility functions for score handling, and removal of unused error handling code.
This commit is contained in:
parent
62f20996d0
commit
3c4b3803c9
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:42:13 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:48:20 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
# include "monster.h"
|
||||
|
||||
int initialize_cub3d(t_game **game, const char *mapfile);
|
||||
int shader_init();
|
||||
int shader_init(void);
|
||||
void set_uniforms(t_game *game);
|
||||
int load_uniforms(t_game **game);
|
||||
void count_scores(t_game *game);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 15:07:48 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:28:20 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:20:30 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,5 +27,11 @@ t_menu_item *menu_item_create(t_screen *screen, const char *text,
|
||||
void (*act)(struct s_menu_item *item, t_game_manager *manager));
|
||||
void menu_free(t_menu *menu, t_screen *screen);
|
||||
void menu_toggle(t_menu *menu);
|
||||
char *get_score_prefix(int index);
|
||||
char *get_score_suffix(int index);
|
||||
void draw_score_line(
|
||||
mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos
|
||||
);
|
||||
char *get_score_text(char *prefix, char *suffix, int score);
|
||||
|
||||
#endif
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/19 14:41:55 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/03 15:49:59 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:46:42 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -48,5 +48,6 @@ t_tile **create_grid(int width, int height);
|
||||
int find_player_or_empty(t_map *map, int *x, int *y);
|
||||
int floodfill(t_map *map, int x, int y);
|
||||
t_sprite make_sprite(t_sprite_lib *def, double x, double y);
|
||||
int parse_map_line_sprites(char *line, t_game *game, int y);
|
||||
|
||||
#endif
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/05 17:08:34 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:06:16 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -170,11 +170,7 @@ typedef struct s_scoreboard
|
||||
int enemies;
|
||||
int start_time;
|
||||
int end_time;
|
||||
mlx_image_t *tiles_text;
|
||||
mlx_image_t *collectibles_text;
|
||||
mlx_image_t *battery_text;
|
||||
mlx_image_t *enemies_text;
|
||||
mlx_image_t *time_text;
|
||||
mlx_image_t *texts[5];
|
||||
} t_scoreboard;
|
||||
|
||||
typedef struct s_game
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/05 18:43:54 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:25:17 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -64,16 +64,22 @@ void game_run(t_game *game)
|
||||
game_over(game->manager);
|
||||
}
|
||||
|
||||
static void scoreboard_free(mlx_t *mlx, t_scoreboard *scoreboard)
|
||||
static void free_scoreboard(mlx_t *mlx, t_scoreboard *scoreboard)
|
||||
{
|
||||
if (scoreboard->tiles_text)
|
||||
mlx_delete_image(mlx, scoreboard->tiles_text);
|
||||
if (scoreboard->collectibles_text)
|
||||
mlx_delete_image(mlx, scoreboard->collectibles_text);
|
||||
if (scoreboard->battery_text)
|
||||
mlx_delete_image(mlx, scoreboard->battery_text);
|
||||
if (scoreboard->enemies_text)
|
||||
mlx_delete_image(mlx, scoreboard->enemies_text);
|
||||
int i;
|
||||
|
||||
if (!scoreboard)
|
||||
return ;
|
||||
i = 0;
|
||||
while (i < 5)
|
||||
{
|
||||
if (scoreboard->texts[i])
|
||||
{
|
||||
mlx_delete_image(mlx, scoreboard->texts[i]);
|
||||
scoreboard->texts[i] = NULL;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
free(scoreboard);
|
||||
}
|
||||
|
||||
@ -95,6 +101,6 @@ void game_free(t_game *game)
|
||||
if (game->keyboard)
|
||||
free(game->keyboard);
|
||||
if (game->scoreboard)
|
||||
scoreboard_free(game->screen->mlx, game->scoreboard);
|
||||
free_scoreboard(game->screen->mlx, game->scoreboard);
|
||||
game->scoreboard = NULL;
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/04 18:52:53 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:19:59 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/03 16:20:35 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:29:07 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:30:05 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -21,49 +21,47 @@ static void slideshow(t_game *game)
|
||||
game->screenshots[frame_idx]->instances[0].enabled = true;
|
||||
if (last_frame_time == 0)
|
||||
last_frame_time = mlx_get_time();
|
||||
if (mlx_get_time() - last_frame_time > 5 && frame_idx < game->screenshot_idx && frame_idx < MAX_SCREENSHOTS) {
|
||||
if (mlx_get_time() - last_frame_time > 5 && frame_idx < game->screenshot_idx
|
||||
&& frame_idx < MAX_SCREENSHOTS)
|
||||
{
|
||||
game->screenshots[frame_idx++]->instances[0].enabled = true;
|
||||
game->screenshots[frame_idx - 1]->instances[0].enabled = false;
|
||||
last_frame_time = mlx_get_time();
|
||||
frame_idx %= (MAX_SCREENSHOTS < game->screenshot_idx) * MAX_SCREENSHOTS + (MAX_SCREENSHOTS >= game->screenshot_idx) * game->screenshot_idx;
|
||||
frame_idx %= (MAX_SCREENSHOTS < game->screenshot_idx) * MAX_SCREENSHOTS
|
||||
+ (MAX_SCREENSHOTS >= game->screenshot_idx) * game->screenshot_idx;
|
||||
}
|
||||
}
|
||||
|
||||
char *get_score_text(char *prefix, char *suffix, int score)
|
||||
static void draw_scoreboard(t_game_manager *manager)
|
||||
{
|
||||
char *score_text;
|
||||
char *score_complete;
|
||||
char *score_value;
|
||||
const int s_val[] = {
|
||||
(int)(manager->game->scoreboard->tiles_visited
|
||||
/ (double)manager->game->scoreboard->total_tiles * 100),
|
||||
(int)(manager->game->player->battery * 100),
|
||||
manager->game->scoreboard->collectibles,
|
||||
manager->game->scoreboard->enemies,
|
||||
manager->game->scoreboard->end_time
|
||||
- manager->game->scoreboard->start_time
|
||||
};
|
||||
t_game *game;
|
||||
int i;
|
||||
char *s_text;
|
||||
|
||||
score_text = ft_itoa(score);
|
||||
if (!score_text)
|
||||
return (NULL);
|
||||
score_value = ft_strjoin(prefix, score_text);
|
||||
free(score_text);
|
||||
if (!score_value)
|
||||
return (NULL);
|
||||
if (!suffix)
|
||||
return (score_value);
|
||||
score_complete = ft_strjoin(score_value, suffix);
|
||||
free(score_value);
|
||||
return (score_complete);
|
||||
}
|
||||
|
||||
static void draw_score_line(mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos)
|
||||
{
|
||||
if (!text || *img != NULL)
|
||||
return ;
|
||||
*img = mlx_put_string(mlx, text, pos.x, pos.y);
|
||||
free(text);
|
||||
i = -1;
|
||||
game = manager->game;
|
||||
while (++i < 5)
|
||||
{
|
||||
s_text = get_score_text(get_score_prefix(i), get_score_suffix(i),
|
||||
s_val[i]);
|
||||
if (s_text)
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->texts[i],
|
||||
s_text, (t_vec2_int){350,
|
||||
game->screen->height / 2 - 150 + i * 50});
|
||||
}
|
||||
}
|
||||
|
||||
void draw_end_screen(t_game_manager *manager, t_menu *menu)
|
||||
{
|
||||
char *tiles_score;
|
||||
char *battery_percentage;
|
||||
char *collectibles_score;
|
||||
char *enemies_score;
|
||||
char *time_text;
|
||||
t_game *game;
|
||||
|
||||
if (!manager || !manager->game)
|
||||
@ -75,28 +73,8 @@ void draw_end_screen(t_game_manager *manager, t_menu *menu)
|
||||
menu_toggle(menu);
|
||||
count_scores(game);
|
||||
}
|
||||
menu->selector->instances[0].y = manager->game->screen->height / 2
|
||||
+ menu->selected_option * 50;
|
||||
tiles_score = get_score_text("Discovered area: ", "%",
|
||||
(double) game->scoreboard->tiles_visited / game->scoreboard->total_tiles * 100);
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->tiles_text,
|
||||
tiles_score, (t_vec2_int){350, game->screen->height / 2 - 150});
|
||||
battery_percentage = get_score_text("Battery percentage: ",
|
||||
"%", (double) game->player->battery * 100);
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->battery_text,
|
||||
battery_percentage, (t_vec2_int){350, game->screen->height / 2 - 100});
|
||||
collectibles_score = get_score_text("Batteries found: ", NULL,
|
||||
game->scoreboard->collectibles);
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->collectibles_text,
|
||||
collectibles_score, (t_vec2_int){350, game->screen->height / 2 - 50});
|
||||
enemies_score = get_score_text("Enemies defeated: ", NULL,
|
||||
game->scoreboard->enemies);
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->enemies_text,
|
||||
enemies_score, (t_vec2_int){350, game->screen->height / 2});
|
||||
time_text = get_score_text("Play time: ", " seconds",
|
||||
game->scoreboard->end_time - game->scoreboard->start_time);
|
||||
draw_score_line(game->screen->mlx, &game->scoreboard->time_text,
|
||||
time_text, (t_vec2_int){350, game->screen->height / 2 + 50});
|
||||
menu->selector->instances[0].enabled = false;
|
||||
draw_scoreboard(manager);
|
||||
}
|
||||
|
||||
static void game_exit(struct s_menu_item *item, t_game_manager *manager)
|
||||
|
||||
79
src/menu/end_screen_utils.c
Normal file
79
src/menu/end_screen_utils.c
Normal file
@ -0,0 +1,79 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* end_screen_utils.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/10 14:54:49 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 15:30:18 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_menu.h"
|
||||
|
||||
char *get_score_prefix(int index)
|
||||
{
|
||||
const char *score_prefix[] = {
|
||||
"Discovered area: ",
|
||||
"Battery percentage: ",
|
||||
"Batteries found: ",
|
||||
"Enemies defeated: ",
|
||||
"Play time: "
|
||||
};
|
||||
|
||||
if (index < 0 || index >= 5)
|
||||
return (NULL);
|
||||
return ((char *)score_prefix[index]);
|
||||
}
|
||||
|
||||
char *get_score_suffix(int index)
|
||||
{
|
||||
const char *score_suffix[] = {
|
||||
"%",
|
||||
"%",
|
||||
NULL,
|
||||
NULL,
|
||||
" seconds"
|
||||
};
|
||||
|
||||
if (index < 0 || index >= 5)
|
||||
return (NULL);
|
||||
return ((char *)score_suffix[index]);
|
||||
}
|
||||
|
||||
void draw_score_line(
|
||||
mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos
|
||||
)
|
||||
{
|
||||
if (!text)
|
||||
return ;
|
||||
if (*img != NULL)
|
||||
{
|
||||
free(text);
|
||||
return ;
|
||||
}
|
||||
printf("Drawing score line: %s at (%d, %d)\n", text, pos.x, pos.y);
|
||||
*img = mlx_put_string(mlx, text, pos.x, pos.y);
|
||||
free(text);
|
||||
}
|
||||
|
||||
char *get_score_text(char *prefix, char *suffix, int score)
|
||||
{
|
||||
char *score_text;
|
||||
char *score_complete;
|
||||
char *score_value;
|
||||
|
||||
score_text = ft_itoa(score);
|
||||
if (!score_text)
|
||||
return (NULL);
|
||||
score_value = ft_strjoin(prefix, score_text);
|
||||
free(score_text);
|
||||
if (!score_value)
|
||||
return (NULL);
|
||||
if (!suffix)
|
||||
return (score_value);
|
||||
score_complete = ft_strjoin(score_value, suffix);
|
||||
free(score_value);
|
||||
return (score_complete);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/23 12:14:58 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:38:14 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:42:03 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -14,7 +14,8 @@
|
||||
|
||||
int floodfill(t_map *map, int x, int y)
|
||||
{
|
||||
if (!map || x < 0 || y < 0 || x >= (int) map->width || y >= (int) map->height)
|
||||
if (!map || x < 0 || y < 0
|
||||
|| x >= (int) map->width || y >= (int) map->height)
|
||||
return (FAILURE);
|
||||
if (map->grid[y][x] == TILE_VOID)
|
||||
return (FAILURE);
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 13:10:06 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:39:39 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:47:23 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,7 +27,6 @@ mlx_texture_t *load_texture(const char *path)
|
||||
|
||||
t_token_handler handle_config_token(const char *token, t_map *map)
|
||||
{
|
||||
(void)map;
|
||||
const char *config_tokens[] = {
|
||||
"NO", "SO", "WE", "EA", "D", "F", "C", "FT", "CT", "-c", "-s", "-e",
|
||||
NULL
|
||||
@ -39,6 +38,7 @@ t_token_handler handle_config_token(const char *token, t_map *map)
|
||||
};
|
||||
int i;
|
||||
|
||||
(void)map;
|
||||
i = 0;
|
||||
while (config_tokens[i] != NULL)
|
||||
{
|
||||
|
||||
@ -6,22 +6,13 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 13:12:04 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:39:03 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:45:35 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cub3d.h"
|
||||
#include <math.h>
|
||||
|
||||
t_vec2 parse_dir(int x, int y)
|
||||
{
|
||||
t_vec2 dir;
|
||||
|
||||
dir.x = (double)x;
|
||||
dir.y = (double)y;
|
||||
return (dir);
|
||||
}
|
||||
|
||||
int parse_player(t_game *game, int y, int x, char c)
|
||||
{
|
||||
t_player *player;
|
||||
@ -35,13 +26,13 @@ int parse_player(t_game *game, int y, int x, char c)
|
||||
player->pos.x = ((double)x + 0.5f);
|
||||
player->pos.y = ((double)y + 0.5f);
|
||||
if (c == 'N')
|
||||
player->dir = parse_dir(0, -1);
|
||||
player->dir = (t_vec2){0.0, -1.0};
|
||||
else if (c == 'E')
|
||||
player->dir = parse_dir(1, 0);
|
||||
player->dir = (t_vec2){1.0, 0.0};
|
||||
else if (c == 'S')
|
||||
player->dir = parse_dir(0, 1);
|
||||
player->dir = (t_vec2){0.0, 1.0};
|
||||
else if (c == 'W')
|
||||
player->dir = parse_dir(-1, 0);
|
||||
player->dir = (t_vec2){-1.0, 0.0};
|
||||
player->camera = rot(player->dir, 0.5f * M_PI);
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -74,22 +65,6 @@ int parse_map_line(char **lines, t_game *game, int y)
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
int count_sprites(char *line)
|
||||
{
|
||||
int count;
|
||||
int i;
|
||||
|
||||
count = 0;
|
||||
i = 0;
|
||||
while (line[i])
|
||||
{
|
||||
if (line[i] >= 'a' && line[i] <= 'z')
|
||||
count++;
|
||||
i++;
|
||||
}
|
||||
return (count);
|
||||
}
|
||||
|
||||
int prepare_map(char **lines, t_game *game)
|
||||
{
|
||||
int y;
|
||||
@ -118,34 +93,6 @@ int prepare_map(char **lines, t_game *game)
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
int parse_map_line_sprites(char *line, t_game *game, int y)
|
||||
{
|
||||
int x;
|
||||
t_map *map;
|
||||
t_sprite_lib *sprite_lib;
|
||||
|
||||
map = game->map;
|
||||
sprite_lib = map->sprite_lib;
|
||||
x = 0;
|
||||
while (line[x])
|
||||
{
|
||||
if (line[x] >= 'a' && line[x] <= 'z')
|
||||
{
|
||||
if (sprite_lib[line[x] - 'a'].texture == NULL)
|
||||
{
|
||||
ft_putstr_fd("Error: Undefined sprite symbol\n", 2);
|
||||
return (FAILURE);
|
||||
}
|
||||
map->sprites[map->n_sprites] = make_sprite(
|
||||
&sprite_lib[line[x] - 'a'],
|
||||
(double)x + 0.5f, (double)y + 0.5f);
|
||||
map->n_sprites++;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
int parse_map(char **lines, t_game *game)
|
||||
{
|
||||
unsigned int y;
|
||||
|
||||
57
src/parser/parse_map_sprites.c
Normal file
57
src/parser/parse_map_sprites.c
Normal file
@ -0,0 +1,57 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_map_sprites.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/10 15:45:12 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 15:47:07 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cub3d.h"
|
||||
|
||||
int count_sprites(char *line)
|
||||
{
|
||||
int count;
|
||||
int i;
|
||||
|
||||
count = 0;
|
||||
i = 0;
|
||||
while (line[i])
|
||||
{
|
||||
if (line[i] >= 'a' && line[i] <= 'z')
|
||||
count++;
|
||||
i++;
|
||||
}
|
||||
return (count);
|
||||
}
|
||||
|
||||
int parse_map_line_sprites(char *line, t_game *game, int y)
|
||||
{
|
||||
int x;
|
||||
t_map *map;
|
||||
t_sprite_lib *sprite_lib;
|
||||
|
||||
map = game->map;
|
||||
sprite_lib = map->sprite_lib;
|
||||
x = 0;
|
||||
while (line[x])
|
||||
{
|
||||
if (line[x] >= 'a' && line[x] <= 'z')
|
||||
{
|
||||
if (sprite_lib[line[x] - 'a'].texture == NULL)
|
||||
{
|
||||
ft_putstr_fd("Error: Undefined sprite symbol\n", 2);
|
||||
return (FAILURE);
|
||||
}
|
||||
map->sprites[map->n_sprites] = make_sprite(
|
||||
&sprite_lib[line[x] - 'a'],
|
||||
(double)x + 0.5f, (double)y + 0.5f);
|
||||
map->n_sprites++;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/23 12:11:12 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:40:11 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:47:33 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
void print_map(t_map *map)
|
||||
{
|
||||
const int chars[] = {'X', ' ', '.', '#', 'P'};
|
||||
const int chars[] = {'X', ' ', '.', '#', 'P'};
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:35:17 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:40:24 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -67,14 +67,13 @@ int dda_main(t_vec2 ray_dir, t_vec2_int map_pos, t_vec2 *side_dist, t_map *map)
|
||||
side_dist->y += delta_dist.y * side;
|
||||
map_pos.x += step.x * (1 - side);
|
||||
map_pos.y += step.y * side;
|
||||
if (map_pos.x < 0
|
||||
|| map_pos.x >= (int) map->width
|
||||
|| map_pos.y < 0
|
||||
|| map_pos.y >= (int) map->height)
|
||||
printf("Out of bounds: %d %d\n", map_pos.x, map_pos.y);
|
||||
if (map_pos.x < 0 || map_pos.x >= (int) map->width
|
||||
|| map_pos.y < 0 || map_pos.y >= (int) map->height)
|
||||
break ;
|
||||
if (map->grid[map_pos.y][map_pos.x] == TILE_EMPTY)
|
||||
map->grid[map_pos.y][map_pos.x] = TILE_VISITED;
|
||||
hit = (map->grid[map_pos.y][map_pos.x] == TILE_WALL) - (map->grid[map_pos.y][map_pos.x] == TILE_DOOR);
|
||||
hit = (map->grid[map_pos.y][map_pos.x] == TILE_WALL)
|
||||
- (map->grid[map_pos.y][map_pos.x] == TILE_DOOR);
|
||||
}
|
||||
side = -1 * (1 - side) + side;
|
||||
if (hit == -1)
|
||||
@ -99,9 +98,9 @@ double dda(t_render *render, t_vec2 ray_dir, t_vec2 pos, t_map *map)
|
||||
if (abs(side) == 2)
|
||||
{
|
||||
render->door = 1;
|
||||
side /= 2;
|
||||
side /= 2;
|
||||
}
|
||||
side = (side + 1)/2;
|
||||
side = (side + 1) / 2;
|
||||
return ((1 - side) * (side_dist.x - delta_dist.x)
|
||||
- side * (side_dist.y - delta_dist.y));
|
||||
}
|
||||
|
||||
@ -6,50 +6,59 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:34:55 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:36:55 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cub3d.h"
|
||||
|
||||
void create_screenshot(t_game *game)
|
||||
static void cut_image(t_screen *screen, mlx_image_t **canvas)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
int idx1;
|
||||
int idx2;
|
||||
mlx_image_t *screenshot;
|
||||
|
||||
if (!game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS])
|
||||
{
|
||||
game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS] = mlx_new_image(game->screen->mlx, game->screen->width / 3, game->screen->height / 3);
|
||||
mlx_image_to_window(game->screen->mlx, game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS], 1000, 250);
|
||||
game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]->instances[0].enabled = false;
|
||||
}
|
||||
screenshot = game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS];
|
||||
if (!screenshot)
|
||||
return ;
|
||||
unsigned int idx1;
|
||||
unsigned int idx2;
|
||||
|
||||
i = 0;
|
||||
while (i < game->screen->height / 3)
|
||||
while (i < screen->height / 3)
|
||||
{
|
||||
j = 0;
|
||||
while (j < game->screen->width / 3)
|
||||
while (j < screen->width / 3)
|
||||
{
|
||||
idx1 = (i * game->screen->width / 3 + j) * 4;
|
||||
idx2 = (i * game->screen->img->width + j) * 12;
|
||||
screenshot->pixels[idx1] = game->screen->img->pixels[idx2];
|
||||
screenshot->pixels[idx1 + 1] = game->screen->img->pixels[idx2 + 1];
|
||||
screenshot->pixels[idx1 + 2] = game->screen->img->pixels[idx2 + 2];
|
||||
screenshot->pixels[idx1 + 3] = game->screen->img->pixels[idx2 + 3];
|
||||
idx1 = (i * screen->width / 3 + j) * 4;
|
||||
idx2 = (i * screen->img->width + j) * 12;
|
||||
(*canvas)->pixels[idx1] = screen->img->pixels[idx2];
|
||||
(*canvas)->pixels[idx1 + 1] = screen->img->pixels[idx2 + 1];
|
||||
(*canvas)->pixels[idx1 + 2] = screen->img->pixels[idx2 + 2];
|
||||
(*canvas)->pixels[idx1 + 3] = screen->img->pixels[idx2 + 3];
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
printf("Screenshot %d taken\n", game->screenshot_idx);
|
||||
}
|
||||
|
||||
void create_screenshot(t_game *game)
|
||||
{
|
||||
mlx_image_t *screenshot;
|
||||
|
||||
if (!game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS])
|
||||
{
|
||||
game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]
|
||||
= mlx_new_image(game->screen->mlx, game->screen->width / 3,
|
||||
game->screen->height / 3);
|
||||
mlx_image_to_window(game->screen->mlx, game->screenshots[
|
||||
game->screenshot_idx % MAX_SCREENSHOTS], 1000, 250);
|
||||
game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS]
|
||||
->instances[0].enabled = false;
|
||||
}
|
||||
screenshot = game->screenshots[game->screenshot_idx % MAX_SCREENSHOTS];
|
||||
if (!screenshot)
|
||||
return ;
|
||||
cut_image(game->screen, &screenshot);
|
||||
game->screenshot_idx++;
|
||||
return ;
|
||||
}
|
||||
|
||||
void flash(t_game *game)
|
||||
{
|
||||
mlx_image_t *img;
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/14 13:06:39 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:45:54 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:41:41 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -26,21 +26,24 @@ static t_vec2 calc_floor_step(t_game *game,
|
||||
static void draw_floor_ceiling_pixel(t_game *game,
|
||||
t_vec2_int coord, double row_dist, t_vec2 floor_pos)
|
||||
{
|
||||
const t_vec2_int tex = vec2_to_int(mul(get_fraction(floor_pos), game->map->texture_floor->width));
|
||||
const t_vec2_int tex = vec2_to_int(
|
||||
mul(get_fraction(floor_pos), game->map->texture_floor->width));
|
||||
int color;
|
||||
|
||||
if (game->map->texture_floor == NULL)
|
||||
color = game->map->floor_color << 8 | (int)(1.0 / row_dist * 255);
|
||||
else
|
||||
color = get_texture_color(game->map->texture_floor,
|
||||
(t_render){.perp_dist = row_dist, .sign = 0, .door = 0, .side = SIDE_DOOR, .wall_x = 0}, tex);
|
||||
(t_render){.perp_dist = row_dist, .sign = 0, .door = 0,
|
||||
.side = SIDE_DOOR, .wall_x = 0}, tex);
|
||||
mlx_put_pixel(game->screen->img,
|
||||
coord.x, coord.y, color);
|
||||
if (game->map->texture_ceiling == NULL)
|
||||
color = game->map->ceiling_color << 8 | (int)(1.0 / row_dist * 255);
|
||||
else
|
||||
color = get_texture_color(game->map->texture_ceiling,
|
||||
(t_render){.perp_dist = row_dist, .sign = 0, .door = 0, .side = SIDE_DOOR, .wall_x = 0}, tex);
|
||||
(t_render){.perp_dist = row_dist, .sign = 0, .door = 0,
|
||||
.side = SIDE_DOOR, .wall_x = 0}, tex);
|
||||
mlx_put_pixel(game->screen->img,
|
||||
coord.x, game->screen->height - coord.y - 1, color);
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/08 18:27:59 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:42:39 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:48:16 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -105,7 +105,7 @@ static const char *read_fragment_shader(void)
|
||||
return (close(fd), shader);
|
||||
}
|
||||
|
||||
int shader_init()
|
||||
int shader_init(void)
|
||||
{
|
||||
vert_shader = read_vertex_shader();
|
||||
if (!vert_shader)
|
||||
|
||||
@ -1,35 +0,0 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* errors.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 15:40:14 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/07 11:34:57 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "MLX42.h"
|
||||
#include "cub3d.h"
|
||||
|
||||
const char *last_error(void)
|
||||
{
|
||||
if (mlx_errno > 0)
|
||||
return (mlx_strerror(mlx_errno));
|
||||
else if (errno > 0)
|
||||
return (strerror(errno));
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
void game_error(t_game *game, const char *msg)
|
||||
{
|
||||
const char *last_err = last_error();
|
||||
|
||||
if (msg == NULL && last_err)
|
||||
printf(RED"%s\n"RESET, last_err);
|
||||
else
|
||||
printf(RED"%s\n"RESET, msg);
|
||||
game_terminate(game);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* hooks.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 17:51:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/04 16:48:57 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* hooks.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 17:51:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 15:48:10 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -21,7 +21,7 @@ void keyhandle(mlx_key_data_t keydata, void *param)
|
||||
game_manager_destroy(manager);
|
||||
}
|
||||
|
||||
void handle_mouse(t_game *game)
|
||||
void handle_mouse(t_game *game)
|
||||
{
|
||||
t_vec2_int mouse_pos;
|
||||
mlx_t *mlx;
|
||||
@ -31,4 +31,4 @@ void handle_mouse(t_game *game)
|
||||
mlx_get_mouse_pos(mlx, &mouse_pos.x, &mouse_pos.y);
|
||||
rotate(game->player, 0.1 * (mouse_pos.x - mlx->width / 2), mlx->delta_time);
|
||||
mlx_set_mouse_pos(mlx, mlx->width / 2, mlx->height / 2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/25 20:54:23 by whaffman #+# #+# */
|
||||
/* Updated: 2025/06/10 14:40:40 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/10 15:47:55 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -67,9 +67,10 @@ void print_scores(t_game *game)
|
||||
void count_scores(t_game *game)
|
||||
{
|
||||
t_scoreboard *scoreboard;
|
||||
|
||||
|
||||
scoreboard = game->scoreboard;
|
||||
scoreboard->tiles_visited = count_tiles(game->map, TILE_VISITED);
|
||||
scoreboard->total_tiles = count_tiles(game->map, TILE_EMPTY) + scoreboard->tiles_visited;
|
||||
scoreboard->total_tiles = count_tiles(game->map, TILE_EMPTY)
|
||||
+ scoreboard->tiles_visited;
|
||||
scoreboard->collectibles = count_collected(game);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user