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:
Quinten 2025-06-10 15:48:59 +02:00
parent 62f20996d0
commit 3c4b3803c9
20 changed files with 274 additions and 226 deletions

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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 */
/* */
/* ************************************************************************** */

View File

@ -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)

View 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);
}

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View 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);
}

View File

@ -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;

View File

@ -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));
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}