From b0ac26a7f65b0335f23b5deda0b909f0cc95dbd1 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 11 Sep 2025 23:41:00 +0200 Subject: [PATCH] wip: Adding weapon class and usage --- Makefile | 2 +- src/cub3d_data.h | 5 ++--- src/hud/hud.c | 4 ++-- src/hud/load_texture.c | 3 +-- src/main.c | 12 +++++++++++- src/player/init_player.h | 20 +++++++++++++++++++ src/player/player.c | 7 +++++-- src/player/player.h | 41 ++++++++++++++++++++++++--------------- src/utils/destroy_utils.c | 12 ++---------- src/utils/hooks.c | 6 +++++- src/utils/inits.c | 7 ++++--- src/utils/inits.h | 3 ++- src/utils/keypresses.h | 3 ++- 13 files changed, 82 insertions(+), 43 deletions(-) create mode 100644 src/player/init_player.h diff --git a/Makefile b/Makefile index 59a0922..f625170 100644 --- a/Makefile +++ b/Makefile @@ -11,11 +11,11 @@ IFLAGS = -I./mlx -I./libft SOURCEFILES = \ src/hud/load_texture.c \ src/hud/hud.c \ - src/utils/inits.c \ src/utils/time.c \ src/utils/destroy_utils.c \ src/draw/draw_map.c \ src/draw/drawutils.c \ + src/utils/inits.c \ src/main.c \ src/map/checkers.c \ src/map/collision.c \ diff --git a/src/cub3d_data.h b/src/cub3d_data.h index 0450ea5..19848d9 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */ -/* Updated: 2025/09/10 14:56:37 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:58:56 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,9 +16,9 @@ # include "map/mapdata.h" # include "draw/img_data.h" # include "sprites/sprite.h" -# include "player/player.h" # include "utils/keypresses.h" # include "consts.h" +# include "player/player.h" // the 4 static sprites are some of the perks and the mystery box typedef struct s_cub3d_data @@ -35,7 +35,6 @@ typedef struct s_cub3d_data t_img_data *perk_logos[3]; t_img_data *tally_marks[5]; t_img_data *round_figures[10]; - t_img_data *gun; t_mapdata *map; t_player player; t_keypresses keypresses; diff --git a/src/hud/hud.c b/src/hud/hud.c index 1153c54..6c9fbe4 100644 --- a/src/hud/hud.c +++ b/src/hud/hud.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/09/08 17:27:12 by tchampio #+# #+# */ -/* Updated: 2025/09/08 17:32:39 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:59:15 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -84,5 +84,5 @@ void create_hud(t_cub3d_data *data) draw_points(data); draw_perks(data); draw_round(data); - matrix_image_put(data, data->gun, WIDTH / 2, HEIGHT - 175); + matrix_image_put(data, data->player.weapon.texture, WIDTH / 2, HEIGHT - 175); } diff --git a/src/hud/load_texture.c b/src/hud/load_texture.c index 222fdae..7ee1f4f 100644 --- a/src/hud/load_texture.c +++ b/src/hud/load_texture.c @@ -6,7 +6,7 @@ /* By: tchampio +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/09/03 17:02:08 by tchampio #+# #+# */ -/* Updated: 2025/09/10 14:56:33 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:59:34 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -114,5 +114,4 @@ void load_textures(t_cub3d_data *data) load_points_textures(data); load_perk_logos(data); load_round_indicators(data); - data->gun = load_hud_texture(data, "ressources/weapon.xpm"); } diff --git a/src/main.c b/src/main.c index 232a174..473f269 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:14:30 by kcolin #+# #+# */ -/* Updated: 2025/09/08 17:30:24 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:34:15 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -34,6 +34,16 @@ #include "sprites/move_sprites.h" #include "hud/hud.h" +void handle_shooting(t_cub3d_data *data) +{ + if (!data->keypresses.is_space_pressed) + return ; + else + { + + } +} + int game_loop(t_cub3d_data *data) { t_ray ray; diff --git a/src/player/init_player.h b/src/player/init_player.h new file mode 100644 index 0000000..394c285 --- /dev/null +++ b/src/player/init_player.h @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* init_player.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tchampio +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/09/10 15:55:37 by tchampio #+# #+# */ +/* Updated: 2025/09/10 15:56:23 by tchampio ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef INIT_PLAYER_H +# define INIT_PLAYER_H + +# include "../cub3d_data.h" + +void init_player(t_cub3d_data *data, t_player *player, t_mapdata *map); + +#endif // INIT_PLAYER_H diff --git a/src/player/player.c b/src/player/player.c index 7a1a33a..a5d379b 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/06 11:29:14 by kcolin #+# #+# */ -/* Updated: 2025/09/03 16:37:56 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:58:32 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,7 @@ #include "../../libft/includes/libft.h" #include "../map/mapdata.h" #include "../consts.h" +#include "../hud/load_texture.h" // east west void init_lon(t_player *player, char dir) @@ -53,7 +54,7 @@ void init_lat(t_player *player, char dir) } } -void init_player(t_player *player, t_mapdata *map) +void init_player(t_cub3d_data *data, t_player *player, t_mapdata *map) { char dir; @@ -63,6 +64,8 @@ void init_player(t_player *player, t_mapdata *map) player->health = 100; player->points = 500; ft_bzero(player->perk_order, 3); + ft_bzero(&player->weapon, sizeof(t_weapon)); + player->weapon.texture = load_hud_texture(data, "ressources/weapon.xpm"); if (dir == 'N' || dir == 'S') init_lon(player, dir); else diff --git a/src/player/player.h b/src/player/player.h index b82ba3a..15208ef 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 15:51:29 by kcolin #+# #+# */ -/* Updated: 2025/09/03 16:27:17 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:51:55 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,7 @@ # define PLAYER_H # include "../map/mapdata.h" +# include "../draw/img_data.h" typedef struct s_vec2 { @@ -29,23 +30,31 @@ typedef enum e_perks DOUBLETAP } t_perks; +typedef struct s_weapon +{ + t_img_data *texture; + t_img_data *shoot_texture; + bool is_auto; + int clip; + int remaining_ammos; +} t_weapon; + typedef struct s_player { - double x; - double y; - double dir_x; - double dir_y; - double plane_x; - double plane_y; - int health; - int points; - bool has_revive; - bool has_juggernog; - bool has_doubletap; - t_perks perk_order[3]; - t_vec2 movement; + double x; + double y; + double dir_x; + double dir_y; + double plane_x; + double plane_y; + int health; + int points; + bool has_revive; + bool has_juggernog; + bool has_doubletap; + t_perks perk_order[3]; + t_vec2 movement; + t_weapon weapon; } t_player; -void init_player(t_player *player, t_mapdata *map); - #endif // PLAYER_H diff --git a/src/utils/destroy_utils.c b/src/utils/destroy_utils.c index 7d2298a..6b2369a 100644 --- a/src/utils/destroy_utils.c +++ b/src/utils/destroy_utils.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/08/18 13:05:31 by kcolin #+# #+# */ -/* Updated: 2025/09/10 15:18:58 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 16:00:47 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,23 +65,15 @@ void destroy_hud_textures(t_cub3d_data *data) i = 0; while (i < 10) - { destroy_texture(data, data->point_figures[i++]); - } i = 0; while (i < 10) - { destroy_texture(data, data->round_figures[i++]); - } i = 0; while (i < 5) - { destroy_texture(data, data->tally_marks[i++]); - } i = 0; while (i < 3) - { destroy_texture(data, data->perk_logos[i++]); - } - destroy_texture(data, data->gun); + destroy_texture(data, data->player.weapon.texture); } diff --git a/src/utils/hooks.c b/src/utils/hooks.c index 6b775c5..7877b4d 100644 --- a/src/utils/hooks.c +++ b/src/utils/hooks.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:22:57 by kcolin #+# #+# */ -/* Updated: 2025/09/03 17:54:36 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:33:38 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,6 +37,8 @@ int keypress_handler(int keycode, t_cub3d_data *data) data->keypresses.is_left_pressed = true; if (keycode == XK_Right) data->keypresses.is_right_pressed = true; + if (keycode == XK_space) + data->keypresses.is_space_pressed = true; if (keycode == XK_p) data->player.points += 500; if (keycode == XK_u) @@ -60,5 +62,7 @@ int keyrelease_handler(int keycode, t_cub3d_data *data) data->keypresses.is_left_pressed = false; if (keycode == XK_Right) data->keypresses.is_right_pressed = false; + if (keycode == XK_space) + data->keypresses.is_space_pressed = false; return (0); } diff --git a/src/utils/inits.c b/src/utils/inits.c index bb298be..2b8b486 100644 --- a/src/utils/inits.c +++ b/src/utils/inits.c @@ -6,12 +6,13 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/31 13:43:05 by kcolin #+# #+# */ -/* Updated: 2025/09/08 17:26:11 by tchampio ### ########.fr */ +/* Updated: 2025/09/10 15:56:38 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ +#include "inits.h" #include "../cub3d_data.h" -#include "time.h" +#include "../player/init_player.h" #include "../../libft/includes/libft.h" #include "../../mlx/mlx.h" #include "../map/map_checker.h" @@ -90,7 +91,7 @@ void init_cub3d_data(t_cub3d_data *data, char **argv) data->img_data->addr = mlx_get_data_addr(data->img_data->img, &data->img_data->bits_per_pixel, &data->img_data->line_length, &data->img_data->endian); - init_player(&data->player, data->map); + init_player(data, &data->player, data->map); data->screen_matrix = ft_calloc(sizeof(int), WIDTH * HEIGHT); load_textures(data); data->sprite_list = ft_calloc(sizeof(t_sprite *), MAX_SPRITES); diff --git a/src/utils/inits.h b/src/utils/inits.h index 55268bd..203d2e9 100644 --- a/src/utils/inits.h +++ b/src/utils/inits.h @@ -6,7 +6,7 @@ /* By: tchampio