Organizational purposes
This commit is contained in:
parent
7dbf9657ad
commit
84a3dd8d36
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -15,7 +15,10 @@
|
||||
"game_menu.h": "c",
|
||||
"game_manager.h": "c",
|
||||
"collision.h": "c",
|
||||
"monster.h": "c"
|
||||
"monster.h": "c",
|
||||
"shaders.h": "c",
|
||||
"hooks.h": "c",
|
||||
"player.h": "c"
|
||||
},
|
||||
"cmake.ignoreCMakeListsMissing": true
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 20:32:00 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 13:29:23 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -77,11 +77,9 @@
|
||||
# include "game_manager.h"
|
||||
# include "game_menu.h"
|
||||
# include "monster.h"
|
||||
# include "shaders.h"
|
||||
|
||||
int initialize_cub3d(t_game **game, const char *mapfile);
|
||||
int shader_init(void);
|
||||
void set_uniforms(t_game *game);
|
||||
int load_uniforms(t_game **game);
|
||||
void count_scores(t_game *game);
|
||||
int count_tiles(t_map *map, t_tile tile_type);
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:46:16 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/03 15:54:12 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:01:38 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -22,8 +22,9 @@ void game_terminate(t_game *game);
|
||||
void free_game(t_game **game);
|
||||
void print_scores(t_game *game);
|
||||
void game_run(t_game *game);
|
||||
void handle_battery(t_game *game);
|
||||
void handle_record(t_game *game);
|
||||
void hud_update_battery(t_game *game);
|
||||
void hud_draw_record(t_game *game);
|
||||
void handle_flash(t_sprite *sprite, t_game *game);
|
||||
void hud_draw_battery(mlx_image_t *img, float battery);
|
||||
|
||||
#endif
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 13:40:20 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 15:00:14 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:08:47 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,8 +18,7 @@
|
||||
t_game_manager *game_manager_create(t_game *game, int state);
|
||||
void game_manager_display(t_game_manager *manager);
|
||||
void game_manager_update(void *param);
|
||||
void game_manager_select(t_game_manager *manager);
|
||||
void game_manager_handle_input(t_game_manager *manager);
|
||||
void game_manager_destroy(void *param);
|
||||
void game_manager_handle_input(t_game_manager *manager);
|
||||
|
||||
#endif
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* game_menu.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/05/27 15:07:48 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 19:30:12 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* game_menu.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 15:07:48 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:13:33 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,9 +17,8 @@
|
||||
|
||||
void menu_display(t_menu *menu, t_screen *screen);
|
||||
void draw_end_screen(t_game_manager *manager, t_menu *menu);
|
||||
t_menu *create_end_screen(t_game_manager *manager);
|
||||
mlx_image_t *menu_load_background(mlx_t *mlx, char *background_path);
|
||||
void menu_set_background(t_menu *menu, mlx_t *mlx, char *b_path);
|
||||
t_menu *create_end_screen(t_game_manager *manager);
|
||||
t_menu *create_main_menu(t_game_manager *manager);
|
||||
t_menu *menu_create(t_game_manager *manager, char *b_path,
|
||||
const t_menu_item *options[]);
|
||||
|
||||
16
inc/hooks.h
16
inc/hooks.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* hooks.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 17:51:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/04 16:42:43 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* hooks.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 17:51:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:45:28 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
|
||||
# include "cub3d.h"
|
||||
|
||||
void keyhandle(mlx_key_data_t keydata, void *param);
|
||||
void hook_keyboard(mlx_key_data_t keydata, void *param);
|
||||
void handle_mouse(t_game *game);
|
||||
|
||||
#endif
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/28 17:16:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/28 17:16:43 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:14:52 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,6 +15,6 @@
|
||||
|
||||
# include "cub3d.h"
|
||||
|
||||
void update_monsters(t_game *game);
|
||||
void monster_update(t_game *game);
|
||||
|
||||
#endif
|
||||
19
inc/player.h
19
inc/player.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* player.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 18:53:27 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 19:29:24 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* player.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 18:53:27 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:01:23 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,8 +17,9 @@
|
||||
|
||||
int player_create(t_game **game);
|
||||
void player_update(t_game *game, double delta_time);
|
||||
void visit_area(t_game *game);
|
||||
void rotate(t_player *player, double rot_speed, double delta);
|
||||
void player_move(t_map *map, t_player *player, int dir, double delta);
|
||||
void player_rotate(t_player *player, double rot_speed, double delta);
|
||||
void player_strafe(t_map *map, t_player *player, int dir, double delta);
|
||||
void interact_door(t_game *game);
|
||||
|
||||
#endif
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:30:34 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/03 19:44:17 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 13:24:29 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -18,5 +18,6 @@
|
||||
int screen_create(t_game **game);
|
||||
int screen_display(t_screen *screen);
|
||||
void fill_background(mlx_image_t *image, int color);
|
||||
int screen_center(t_screen *screen);
|
||||
|
||||
#endif
|
||||
|
||||
25
inc/shaders.h
Normal file
25
inc/shaders.h
Normal file
@ -0,0 +1,25 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* shaders.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:28:42 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:40:35 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef SHADERS_H
|
||||
# define SHADERS_H
|
||||
|
||||
# include "cub3d.h"
|
||||
# include "glad.h"
|
||||
# include "MLX42_Int.h"
|
||||
|
||||
int shader_init(void);
|
||||
int shader_load_uniforms(t_game **game);
|
||||
void shader_set_uniforms(t_game *game);
|
||||
const char *shader_read_glsl(const char *target);
|
||||
|
||||
#endif
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/06 15:46:20 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/06 15:59:52 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 13:43:38 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
# include "cub3d.h"
|
||||
|
||||
int texture_load(t_game *game);
|
||||
int texture_load(t_game *game);
|
||||
void texture_delete(t_game *game);
|
||||
|
||||
#endif
|
||||
22
src/engine/hooks/hook_keyboard.c
Normal file
22
src/engine/hooks/hook_keyboard.c
Normal file
@ -0,0 +1,22 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* hook_keyboard.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:44:48 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:46:46 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "hooks.h"
|
||||
|
||||
void hook_keyboard(mlx_key_data_t keydata, void *param)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = (t_game_manager *)param;
|
||||
if (keydata.key == MLX_KEY_ESCAPE)
|
||||
game_manager_destroy(manager);
|
||||
}
|
||||
@ -1,26 +1,17 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* hooks.c :+: :+: :+: */
|
||||
/* hook_mouse.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 */
|
||||
/* Created: 2025/06/12 13:45:46 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 16:06:12 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "hooks.h"
|
||||
|
||||
void keyhandle(mlx_key_data_t keydata, void *param)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = (t_game_manager *)param;
|
||||
if (keydata.key == MLX_KEY_ESCAPE)
|
||||
game_manager_destroy(manager);
|
||||
}
|
||||
|
||||
void handle_mouse(t_game *game)
|
||||
{
|
||||
t_vec2_int mouse_pos;
|
||||
@ -29,6 +20,7 @@ void handle_mouse(t_game *game)
|
||||
mlx = game->screen->mlx;
|
||||
mlx_set_cursor_mode(mlx, MLX_MOUSE_HIDDEN);
|
||||
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);
|
||||
player_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);
|
||||
}
|
||||
28
src/engine/screen/screen_center.c
Normal file
28
src/engine/screen/screen_center.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* screen_center.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:23:39 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:32:59 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "screen.h"
|
||||
|
||||
int screen_center(t_screen *screen)
|
||||
{
|
||||
int m_width;
|
||||
int m_height;
|
||||
|
||||
m_width = 0;
|
||||
m_height = 0;
|
||||
mlx_get_monitor_size(0, &m_width, &m_height);
|
||||
if (m_width == 0 || m_height == 0)
|
||||
return (FAILURE);
|
||||
mlx_set_window_pos(screen->mlx, (m_width - screen->width) / 2,
|
||||
(m_height - screen->height) / 2);
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:30:27 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:41:07 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 13:27:08 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -40,60 +40,3 @@ int screen_create(t_game **game)
|
||||
(*game)->screen = screen;
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
void fill_background(mlx_image_t *image, int color)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
|
||||
i = 0;
|
||||
while (i < image->width)
|
||||
{
|
||||
j = 0;
|
||||
while (j < image->height)
|
||||
{
|
||||
mlx_put_pixel(image, i, j, color);
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int center_window(t_screen *screen)
|
||||
{
|
||||
int m_width;
|
||||
int m_height;
|
||||
|
||||
m_width = 0;
|
||||
m_height = 0;
|
||||
mlx_get_monitor_size(0, &m_width, &m_height);
|
||||
if (m_width == 0 || m_height == 0)
|
||||
return (FAILURE);
|
||||
mlx_set_window_pos(screen->mlx, (m_width - screen->width) / 2,
|
||||
(m_height - screen->height) / 2);
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
int screen_display(t_screen *screen)
|
||||
{
|
||||
int display_error;
|
||||
|
||||
fill_background(screen->background, 0x000000FF);
|
||||
display_error = 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->background, 0, 0) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->img, 0, 0) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->minimap, 175, 575) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->hud, 0, 0) < 0;
|
||||
if (display_error || !center_window(screen))
|
||||
{
|
||||
printf(RED "Display failed to initialize\n" RESET);
|
||||
return (FAILURE);
|
||||
}
|
||||
screen->hud->instances[0].enabled = false;
|
||||
screen->minimap->instances[0].enabled = false;
|
||||
return (SUCCESS);
|
||||
}
|
||||
37
src/engine/screen/screen_display.c
Normal file
37
src/engine/screen/screen_display.c
Normal file
@ -0,0 +1,37 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* screen_display.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:25:50 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:33:46 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "screen.h"
|
||||
|
||||
int screen_display(t_screen *screen)
|
||||
{
|
||||
int display_error;
|
||||
|
||||
fill_background(screen->background, 0x000000FF);
|
||||
display_error = 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->background, 0, 0) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->img, 0, 0) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->minimap, 175, 575) < 0;
|
||||
display_error |= mlx_image_to_window(screen->mlx,
|
||||
screen->hud, 0, 0) < 0;
|
||||
if (display_error || !screen_center(screen))
|
||||
{
|
||||
printf(RED "Display failed to initialize\n" RESET);
|
||||
return (FAILURE);
|
||||
}
|
||||
screen->hud->instances[0].enabled = false;
|
||||
screen->minimap->instances[0].enabled = false;
|
||||
return (SUCCESS);
|
||||
}
|
||||
31
src/engine/screen/screen_fill_background.c
Normal file
31
src/engine/screen/screen_fill_background.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* screen_fill_background.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:26:49 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:33:58 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "screen.h"
|
||||
|
||||
void fill_background(mlx_image_t *image, int color)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int j;
|
||||
|
||||
i = 0;
|
||||
while (i < image->width)
|
||||
{
|
||||
j = 0;
|
||||
while (j < image->height)
|
||||
{
|
||||
mlx_put_pixel(image, i, j, color);
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
24
src/engine/shader/shader_init.c
Normal file
24
src/engine/shader/shader_init.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* shader_init.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/08 18:27:59 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:42:50 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cub3d.h"
|
||||
|
||||
int shader_init(void)
|
||||
{
|
||||
vert_shader = shader_read_glsl("./assets/shaders/vert.glsl");
|
||||
if (!vert_shader)
|
||||
return (FAILURE);
|
||||
frag_shader = shader_read_glsl("./assets/shaders/frag.glsl");
|
||||
if (!frag_shader)
|
||||
return (FAILURE);
|
||||
return (SUCCESS);
|
||||
}
|
||||
40
src/engine/shader/shader_load_uniforms.c
Normal file
40
src/engine/shader/shader_load_uniforms.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* shader_load_uniforms.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:36:40 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:37:13 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "shaders.h"
|
||||
|
||||
int shader_load_uniforms(t_game **game)
|
||||
{
|
||||
mlx_ctx_t *ctx;
|
||||
|
||||
ctx = (mlx_ctx_t *)(*game)->screen->mlx->context;
|
||||
(*game)->screen->u_time_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_time");
|
||||
(*game)->screen->u_battery_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_battery");
|
||||
(*game)->screen->u_hit_timer_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_hit_timer");
|
||||
(*game)->screen->u_enabled_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_enabled");
|
||||
(*game)->screen->u_resolution_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_resolution");
|
||||
(*game)->screen->u_ismoving_location = glGetUniformLocation(
|
||||
ctx->shaderprogram, "u_ismoving");
|
||||
if ((*game)->screen->u_time_location < 0
|
||||
|| (*game)->screen->u_battery_location < 0
|
||||
|| (*game)->screen->u_hit_timer_location < 0
|
||||
|| (*game)->screen->u_enabled_location < 0
|
||||
|| (*game)->screen->u_resolution_location < 0
|
||||
|| (*game)->screen->u_ismoving_location < 0)
|
||||
return (FAILURE);
|
||||
return (SUCCESS);
|
||||
}
|
||||
41
src/engine/shader/shader_read_glsl.c
Normal file
41
src/engine/shader/shader_read_glsl.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* shader_read_glsl.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:38:37 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:42:43 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "shaders.h"
|
||||
|
||||
const char *shader_read_glsl(const char *target)
|
||||
{
|
||||
char *shader;
|
||||
int fd;
|
||||
int file_size;
|
||||
ssize_t bytes_read;
|
||||
|
||||
if (!target)
|
||||
return (NULL);
|
||||
file_size = get_file_size(target);
|
||||
fd = open(target, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return (perror("Error opening shader file"), NULL);
|
||||
shader = malloc(file_size * sizeof(char) + 1);
|
||||
if (!shader)
|
||||
{
|
||||
return (perror("Error allocating memory for shader"), close(fd), NULL);
|
||||
}
|
||||
bytes_read = read(fd, shader, file_size);
|
||||
if (bytes_read < 0)
|
||||
{
|
||||
return (perror("Error reading shader file"),
|
||||
free(shader), close(fd), NULL);
|
||||
}
|
||||
shader[bytes_read] = '\0';
|
||||
return (close(fd), shader);
|
||||
}
|
||||
26
src/engine/shader/shader_set_uniforms.c
Normal file
26
src/engine/shader/shader_set_uniforms.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* shader_set_uniforms.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:30:25 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:31:57 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "shaders.h"
|
||||
|
||||
void shader_set_uniforms(t_game *game)
|
||||
{
|
||||
glUniform1f(game->screen->u_time_location, (float)mlx_get_time());
|
||||
glUniform1i(game->screen->u_ismoving_location,
|
||||
game->player->is_moving);
|
||||
glUniform1f(game->screen->u_battery_location, game->player->battery);
|
||||
glUniform2f(game->screen->u_resolution_location,
|
||||
(float)game->screen->width, (float)game->screen->height);
|
||||
glUniform1f(game->screen->u_hit_timer_location, game->player->hit_timer);
|
||||
glUniform1i(game->screen->u_enabled_location,
|
||||
game->manager->state == GAME_STATE_PLAYING);
|
||||
}
|
||||
36
src/engine/texture/texture_delete.c
Normal file
36
src/engine/texture/texture_delete.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* texture_delete.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:43:20 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:43:52 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "texture.h"
|
||||
|
||||
void texture_delete(t_game *game)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i < 4)
|
||||
{
|
||||
if (game->map->textures[i])
|
||||
mlx_delete_texture(game->map->textures[i]);
|
||||
i++;
|
||||
}
|
||||
if (game->map->texture_floor)
|
||||
{
|
||||
mlx_delete_texture(game->map->texture_floor);
|
||||
game->map->texture_floor = NULL;
|
||||
}
|
||||
if (game->map->texture_ceiling)
|
||||
{
|
||||
mlx_delete_texture(game->map->texture_ceiling);
|
||||
game->map->texture_ceiling = NULL;
|
||||
}
|
||||
}
|
||||
24
src/engine/texture/texutre_load.c
Normal file
24
src/engine/texture/texutre_load.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* texutre_load.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/06 15:45:58 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:43:15 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "texture.h"
|
||||
|
||||
int texture_load(t_game *game)
|
||||
{
|
||||
if (!game->map->textures[SIDE_NORTH] || !game->map->textures[SIDE_EAST]
|
||||
|| !game->map->textures[SIDE_SOUTH] || !game->map->textures[SIDE_WEST])
|
||||
{
|
||||
texture_delete(game);
|
||||
return (FAILURE);
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/10 14:42:24 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 16:06:38 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
|
||||
t_sprite make_sprite(t_sprite_lib *def, double x, double y)
|
||||
{
|
||||
t_sprite sprite;
|
||||
t_sprite sprite;
|
||||
|
||||
ft_memset(&sprite, 0, sizeof(t_sprite));
|
||||
sprite.texture = def->texture;
|
||||
@ -28,11 +28,11 @@ t_sprite make_sprite(t_sprite_lib *def, double x, double y)
|
||||
|
||||
static int init_temp(t_game **game)
|
||||
{
|
||||
mlx_texture_t *hud_texture;
|
||||
mlx_texture_t *hud_texture;
|
||||
|
||||
hud_texture = mlx_load_png("./assets/hud/cam_overlay.png");
|
||||
(*game)->screen->hud = mlx_texture_to_image((*game)->screen->mlx,
|
||||
hud_texture);
|
||||
hud_texture);
|
||||
mlx_delete_texture(hud_texture);
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -51,7 +51,7 @@ int initialize_cub3d(t_game **game, const char *mapfile)
|
||||
return (FAILURE);
|
||||
if (!screen_create(game))
|
||||
return (FAILURE);
|
||||
if (!load_uniforms(game))
|
||||
if (!shader_load_uniforms(game))
|
||||
return (FAILURE);
|
||||
if (!keyboard_create(game))
|
||||
return (FAILURE);
|
||||
29
src/game/collision/collision_axis.c
Normal file
29
src/game/collision/collision_axis.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* collision_axis.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:47:35 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:47:51 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "collision.h"
|
||||
|
||||
int collision_horizontal(t_map *map, t_player *player, double xa)
|
||||
{
|
||||
t_tile tile;
|
||||
|
||||
tile = get_tile(map, (int)((player->pos.x + xa)), (int)((player->pos.y)));
|
||||
return (tile != TILE_WALL && tile != TILE_VOID && tile != TILE_DOOR);
|
||||
}
|
||||
|
||||
int collision_vertical(t_map *map, t_player *player, double ya)
|
||||
{
|
||||
t_tile tile;
|
||||
|
||||
tile = get_tile(map, (int)((player->pos.x)), (int)((player->pos.y + ya)));
|
||||
return (tile != TILE_WALL && tile != TILE_VOID && tile != TILE_DOOR);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* collision.c :+: :+: :+: */
|
||||
/* collision_sprite.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 20:17:16 by qmennen ### ########.fr */
|
||||
/* Created: 2025/06/12 13:48:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:48:55 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -58,19 +58,3 @@ int collision_sprite(t_game *game, double xa, double ya)
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int collision_horizontal(t_map *map, t_player *player, double xa)
|
||||
{
|
||||
t_tile tile;
|
||||
|
||||
tile = get_tile(map, (int)((player->pos.x + xa)), (int)((player->pos.y)));
|
||||
return (tile != TILE_WALL && tile != TILE_VOID && tile != TILE_DOOR);
|
||||
}
|
||||
|
||||
int collision_vertical(t_map *map, t_player *player, double ya)
|
||||
{
|
||||
t_tile tile;
|
||||
|
||||
tile = get_tile(map, (int)((player->pos.x)), (int)((player->pos.y + ya)));
|
||||
return (tile != TILE_WALL && tile != TILE_VOID && tile != TILE_DOOR);
|
||||
}
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 17:44:59 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 16:05:45 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -27,51 +27,3 @@ int game_create(t_game **game)
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
|
||||
void game_over(t_game_manager *manager)
|
||||
{
|
||||
t_game *game;
|
||||
|
||||
game = manager->game;
|
||||
game->screen->hud->instances[0].enabled = false;
|
||||
game->screen->minimap->instances[0].enabled = false;
|
||||
game->screen->img->instances[0].enabled = false;
|
||||
game->scoreboard->end_time = mlx_get_time();
|
||||
manager->state = GAME_STATE_END_SCREEN;
|
||||
manager->active_menu = &manager->end_screen;
|
||||
set_uniforms(game);
|
||||
}
|
||||
|
||||
void game_run(t_game *game)
|
||||
{
|
||||
static int fps = 0;
|
||||
|
||||
fps += (int)(1.f / game->screen->mlx->delta_time);
|
||||
set_uniforms(game);
|
||||
player_update(game, game->screen->mlx->delta_time);
|
||||
cast_rays(game);
|
||||
update_monsters(game);
|
||||
render_map(game);
|
||||
handle_battery(game);
|
||||
handle_record(game);
|
||||
handle_mouse(game);
|
||||
collision_sprite(game, 0, 0);
|
||||
if (game->player->battery <= 0 || count_tiles(game->map, TILE_EMPTY) == 0)
|
||||
game_over(game->manager);
|
||||
}
|
||||
|
||||
void game_free(t_game *game)
|
||||
{
|
||||
if (game->scoreboard)
|
||||
free(game->scoreboard);
|
||||
if (game->screen)
|
||||
free(game->screen);
|
||||
if (game->player)
|
||||
free(game->player);
|
||||
if (game->map)
|
||||
map_free(game->map);
|
||||
if (game->keyboard)
|
||||
free(game->keyboard);
|
||||
game->scoreboard = NULL;
|
||||
free(game);
|
||||
}
|
||||
29
src/game/core/game_free.c
Normal file
29
src/game/core/game_free.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_free.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 16:03:18 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void game_free(t_game *game)
|
||||
{
|
||||
if (game->scoreboard)
|
||||
free(game->scoreboard);
|
||||
if (game->screen)
|
||||
free(game->screen);
|
||||
if (game->player)
|
||||
free(game->player);
|
||||
if (game->map)
|
||||
map_free(game->map);
|
||||
if (game->keyboard)
|
||||
free(game->keyboard);
|
||||
game->scoreboard = NULL;
|
||||
free(game);
|
||||
}
|
||||
27
src/game/core/game_over.c
Normal file
27
src/game/core/game_over.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_over.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 16:05:39 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 16:05:48 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void game_over(t_game_manager *manager)
|
||||
{
|
||||
t_game *game;
|
||||
|
||||
game = manager->game;
|
||||
game->screen->hud->instances[0].enabled = false;
|
||||
game->screen->minimap->instances[0].enabled = false;
|
||||
game->screen->img->instances[0].enabled = false;
|
||||
game->scoreboard->end_time = mlx_get_time();
|
||||
manager->state = GAME_STATE_END_SCREEN;
|
||||
manager->active_menu = &manager->end_screen;
|
||||
shader_set_uniforms(game);
|
||||
}
|
||||
31
src/game/core/game_run.c
Normal file
31
src/game/core/game_run.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_run.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 16:05:15 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 16:05:29 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void game_run(t_game *game)
|
||||
{
|
||||
static int fps = 0;
|
||||
|
||||
fps += (int)(1.f / game->screen->mlx->delta_time);
|
||||
shader_set_uniforms(game);
|
||||
player_update(game, game->screen->mlx->delta_time);
|
||||
cast_rays(game);
|
||||
monster_update(game);
|
||||
render_map(game);
|
||||
hud_update_battery(game);
|
||||
hud_draw_record(game);
|
||||
handle_mouse(game);
|
||||
collision_sprite(game, 0, 0);
|
||||
if (game->player->battery <= 0 || count_tiles(game->map, TILE_EMPTY) == 0)
|
||||
game_over(game->manager);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_hud.c :+: :+: :+: */
|
||||
/* hud_draw_battery.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 20:19:25 by qmennen ### ########.fr */
|
||||
/* Created: 2025/06/12 13:58:31 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:02:13 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -22,7 +22,7 @@ static int battery_color(float battery)
|
||||
return (0xFF000066);
|
||||
}
|
||||
|
||||
static void draw_battery(mlx_image_t *img, float battery)
|
||||
void hud_draw_battery(mlx_image_t *img, float battery)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
@ -50,51 +50,3 @@ static void draw_battery(mlx_image_t *img, float battery)
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
void handle_battery(t_game *game)
|
||||
{
|
||||
if (game->player->battery_charger > 0)
|
||||
{
|
||||
game->player->battery += (BATTERY_CHARGE / CHARGE_FRAMES);
|
||||
game->player->battery_charger--;
|
||||
}
|
||||
if (game->player->battery > 1.0f)
|
||||
{
|
||||
game->player->battery = 1.0f;
|
||||
}
|
||||
game->player->battery -= game->screen->mlx->delta_time * BATTERY_RATE;
|
||||
if (game->player->battery < 0)
|
||||
{
|
||||
game->player->battery = 0;
|
||||
game->manager->state = GAME_STATE_MENU;
|
||||
}
|
||||
draw_battery(game->screen->minimap, game->player->battery);
|
||||
}
|
||||
|
||||
void handle_record(t_game *game)
|
||||
{
|
||||
static int flash = 0;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
flash = (int) mlx_get_time() % 2;
|
||||
y = -15;
|
||||
while (y <= 15)
|
||||
{
|
||||
x = -15;
|
||||
while (x <= 15)
|
||||
{
|
||||
if (x * x + y * y <= 225)
|
||||
{
|
||||
if (flash)
|
||||
mlx_put_pixel(
|
||||
game->screen->hud, 1530 + x, 212 + y, 0xFF000055);
|
||||
else
|
||||
mlx_put_pixel(
|
||||
game->screen->hud, 1530 + x, 212 + y, 0x00000066);
|
||||
}
|
||||
x++;
|
||||
}
|
||||
y++;
|
||||
}
|
||||
}
|
||||
41
src/game/hud/hud_draw_record.c
Normal file
41
src/game/hud/hud_draw_record.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* hud_draw_record.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:01:54 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void hud_draw_record(t_game *game)
|
||||
{
|
||||
static int flash = 0;
|
||||
int x;
|
||||
int y;
|
||||
|
||||
flash = (int)mlx_get_time() % 2;
|
||||
y = -15;
|
||||
while (y <= 15)
|
||||
{
|
||||
x = -15;
|
||||
while (x <= 15)
|
||||
{
|
||||
if (x * x + y * y <= 225)
|
||||
{
|
||||
if (flash)
|
||||
mlx_put_pixel(
|
||||
game->screen->hud, 1530 + x, 212 + y, 0xFF000055);
|
||||
else
|
||||
mlx_put_pixel(
|
||||
game->screen->hud, 1530 + x, 212 + y, 0x00000066);
|
||||
}
|
||||
x++;
|
||||
}
|
||||
y++;
|
||||
}
|
||||
}
|
||||
33
src/game/hud/hud_update_battery.c
Normal file
33
src/game/hud/hud_update_battery.c
Normal file
@ -0,0 +1,33 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* hud_update_battery.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:59:52 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:02:08 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game.h"
|
||||
|
||||
void hud_update_battery(t_game *game)
|
||||
{
|
||||
if (game->player->battery_charger > 0)
|
||||
{
|
||||
game->player->battery += (BATTERY_CHARGE / CHARGE_FRAMES);
|
||||
game->player->battery_charger--;
|
||||
}
|
||||
if (game->player->battery > 1.0f)
|
||||
{
|
||||
game->player->battery = 1.0f;
|
||||
}
|
||||
game->player->battery -= game->screen->mlx->delta_time * BATTERY_RATE;
|
||||
if (game->player->battery < 0)
|
||||
{
|
||||
game->player->battery = 0;
|
||||
game->manager->state = GAME_STATE_MENU;
|
||||
}
|
||||
hud_draw_battery(game->screen->minimap, game->player->battery);
|
||||
}
|
||||
25
src/game/interact_door.c
Normal file
25
src/game/interact_door.c
Normal file
@ -0,0 +1,25 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* interact_door.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 13:50:14 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 13:54:23 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "player.h"
|
||||
|
||||
void interact_door(t_game *game)
|
||||
{
|
||||
t_vec2_int pos;
|
||||
|
||||
pos = vec2_to_int(add(game->player->pos, game->player->dir));
|
||||
if (game->map->grid[pos.y][pos.x] == TILE_DOOR)
|
||||
{
|
||||
game->map->grid[pos.y][pos.x] = TILE_EMPTY;
|
||||
game->scoreboard->tiles_visited++;
|
||||
}
|
||||
}
|
||||
27
src/game/manager/game_manager_create.c
Normal file
27
src/game/manager/game_manager_create.c
Normal file
@ -0,0 +1,27 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_manager_create.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:04:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:05:10 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_manager.h"
|
||||
|
||||
t_game_manager *game_manager_create(t_game *game, int state)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = malloc(sizeof(t_game_manager));
|
||||
if (!manager)
|
||||
return (NULL);
|
||||
manager->game = game;
|
||||
manager->menu = NULL;
|
||||
manager->state = state;
|
||||
game->manager = manager;
|
||||
return (manager);
|
||||
}
|
||||
@ -6,51 +6,12 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 13:48:18 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 15:00:38 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:05:24 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_manager.h"
|
||||
|
||||
t_game_manager *game_manager_create(t_game *game, int state)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = malloc(sizeof(t_game_manager));
|
||||
if (!manager)
|
||||
return (NULL);
|
||||
manager->game = game;
|
||||
manager->menu = NULL;
|
||||
manager->state = state;
|
||||
game->manager = manager;
|
||||
return (manager);
|
||||
}
|
||||
|
||||
void game_manager_display(t_game_manager *manager)
|
||||
{
|
||||
t_game *game;
|
||||
|
||||
if (!manager || !manager->game)
|
||||
return ;
|
||||
game = manager->game;
|
||||
if (manager->state == GAME_STATE_MENU)
|
||||
menu_display(*(manager->active_menu), game->screen);
|
||||
else if (manager->state == GAME_STATE_PLAYING)
|
||||
game_run(game);
|
||||
else if (manager->state == GAME_STATE_END_SCREEN)
|
||||
draw_end_screen(manager, manager->end_screen);
|
||||
}
|
||||
|
||||
void game_manager_update(void *param)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = (t_game_manager *)param;
|
||||
game_manager_handle_input(manager);
|
||||
game_manager_display(manager);
|
||||
keyboard_update(manager->game);
|
||||
}
|
||||
|
||||
void game_manager_destroy(void *param)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
28
src/game/manager/game_manager_display.c
Normal file
28
src/game/manager/game_manager_display.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_manager_display.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:05:03 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:05:08 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_manager.h"
|
||||
|
||||
void game_manager_display(t_game_manager *manager)
|
||||
{
|
||||
t_game *game;
|
||||
|
||||
if (!manager || !manager->game)
|
||||
return ;
|
||||
game = manager->game;
|
||||
if (manager->state == GAME_STATE_MENU)
|
||||
menu_display(*(manager->active_menu), game->screen);
|
||||
else if (manager->state == GAME_STATE_PLAYING)
|
||||
game_run(game);
|
||||
else if (manager->state == GAME_STATE_END_SCREEN)
|
||||
draw_end_screen(manager, manager->end_screen);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_manager_utils.c :+: :+: :+: */
|
||||
/* game_manager_input.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 15:22:15 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/05 18:44:32 by qmennen ### ########.fr */
|
||||
/* Created: 2025/06/12 14:07:08 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:09:24 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -23,6 +23,8 @@ void game_manager_select(t_game_manager *manager)
|
||||
|
||||
void game_manager_handle_input(t_game_manager *manager)
|
||||
{
|
||||
if (manager->state == GAME_STATE_PLAYING)
|
||||
return ;
|
||||
if (get_key_down(manager->game, MLX_KEY_ENTER))
|
||||
{
|
||||
game_manager_select(manager);
|
||||
23
src/game/manager/game_manager_update.c
Normal file
23
src/game/manager/game_manager_update.c
Normal file
@ -0,0 +1,23 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* game_manager_update.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:05:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:08:51 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_manager.h"
|
||||
|
||||
void game_manager_update(void *param)
|
||||
{
|
||||
t_game_manager *manager;
|
||||
|
||||
manager = (t_game_manager *)param;
|
||||
game_manager_handle_input(manager);
|
||||
game_manager_display(manager);
|
||||
keyboard_update(manager->game);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* menu.c :+: :+: :+: */
|
||||
/* menu_create.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/27 14:31:53 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 15:02:35 by qmennen ### ########.fr */
|
||||
/* Created: 2025/06/12 14:10:04 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:10:14 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -32,57 +32,3 @@ t_menu *menu_create(t_game_manager *manager, char *b_path,
|
||||
menu->num_options = i;
|
||||
return (menu);
|
||||
}
|
||||
|
||||
void menu_display(t_menu *menu, t_screen *screen)
|
||||
{
|
||||
int i;
|
||||
int half_h;
|
||||
|
||||
half_h = screen->height / 2;
|
||||
if (menu->hidden)
|
||||
menu_toggle(menu);
|
||||
menu->selector->instances[0].x = 150;
|
||||
menu->selector->instances[0].y = half_h + menu->selected_option * 50;
|
||||
i = 0;
|
||||
while (i < menu->num_options)
|
||||
{
|
||||
menu->items[i]->image->instances[0].x = 200;
|
||||
menu->items[i]->image->instances[0].y = half_h + i * 50;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void menu_toggle(t_menu *menu)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!menu)
|
||||
return ;
|
||||
menu->hidden = !menu->hidden;
|
||||
if (menu->selector)
|
||||
menu->selector->instances[0].enabled = !menu->hidden;
|
||||
if (menu->background)
|
||||
menu->background->instances[0].enabled = !menu->hidden;
|
||||
i = -1;
|
||||
while (++i < menu->num_options)
|
||||
{
|
||||
menu->items[i]->image->instances[0].enabled = !menu->hidden;
|
||||
mlx_set_instance_depth(menu->items[i]->image->instances, 7);
|
||||
}
|
||||
}
|
||||
|
||||
void menu_free(t_menu *menu, t_screen *screen)
|
||||
{
|
||||
int i;
|
||||
|
||||
(void)screen;
|
||||
i = 0;
|
||||
if (!menu)
|
||||
return ;
|
||||
while (i < menu->num_options)
|
||||
{
|
||||
free(menu->items[i]);
|
||||
i++;
|
||||
}
|
||||
free(menu);
|
||||
}
|
||||
32
src/game/menu/menu_display.c
Normal file
32
src/game/menu/menu_display.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* menu_display.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:10:43 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:12:55 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_menu.h"
|
||||
|
||||
void menu_display(t_menu *menu, t_screen *screen)
|
||||
{
|
||||
int i;
|
||||
int half_h;
|
||||
|
||||
half_h = screen->height / 2;
|
||||
if (menu->hidden)
|
||||
menu_toggle(menu);
|
||||
menu->selector->instances[0].x = 150;
|
||||
menu->selector->instances[0].y = half_h + menu->selected_option * 50;
|
||||
i = 0;
|
||||
while (i < menu->num_options)
|
||||
{
|
||||
menu->items[i]->image->instances[0].x = 200;
|
||||
menu->items[i]->image->instances[0].y = half_h + i * 50;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
29
src/game/menu/menu_free.c
Normal file
29
src/game/menu/menu_free.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* menu_free.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:11:01 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:11:11 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_menu.h"
|
||||
|
||||
void menu_free(t_menu *menu, t_screen *screen)
|
||||
{
|
||||
int i;
|
||||
|
||||
(void)screen;
|
||||
i = 0;
|
||||
if (!menu)
|
||||
return ;
|
||||
while (i < menu->num_options)
|
||||
{
|
||||
free(menu->items[i]);
|
||||
i++;
|
||||
}
|
||||
free(menu);
|
||||
}
|
||||
@ -1,18 +1,18 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* menu_util.c :+: :+: :+: */
|
||||
/* menu_set_background.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/28 14:45:59 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/05 18:47:58 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:12:43 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_menu.h"
|
||||
|
||||
mlx_image_t *menu_load_background(mlx_t *mlx, char *background_path)
|
||||
static mlx_image_t *menu_load_background(mlx_t *mlx, char *background_path)
|
||||
{
|
||||
mlx_texture_t *background_texture;
|
||||
mlx_image_t *background_image;
|
||||
32
src/game/menu/menu_toggle.c
Normal file
32
src/game/menu/menu_toggle.c
Normal file
@ -0,0 +1,32 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* menu_toggle.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/06/12 14:10:25 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/12 14:10:36 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "game_menu.h"
|
||||
|
||||
void menu_toggle(t_menu *menu)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!menu)
|
||||
return ;
|
||||
menu->hidden = !menu->hidden;
|
||||
if (menu->selector)
|
||||
menu->selector->instances[0].enabled = !menu->hidden;
|
||||
if (menu->background)
|
||||
menu->background->instances[0].enabled = !menu->hidden;
|
||||
i = -1;
|
||||
while (++i < menu->num_options)
|
||||
{
|
||||
menu->items[i]->image->instances[0].enabled = !menu->hidden;
|
||||
mlx_set_instance_depth(menu->items[i]->image->instances, 7);
|
||||
}
|
||||
}
|
||||
@ -1,18 +1,18 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* monster.c :+: :+: :+: */
|
||||
/* monster_update.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/28 17:15:52 by qmennen #+# #+# */
|
||||
/* Updated: 2025/06/11 16:22:09 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/06/12 14:15:00 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cub3d.h"
|
||||
#include "monster.h"
|
||||
|
||||
void update_monsters(t_game *game)
|
||||
void monster_update(t_game *game)
|
||||
{
|
||||
unsigned int i;
|
||||
t_vec2 d;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user