From c252a9bed1b99963024a0ad863e203c11e686982 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Wed, 28 May 2025 17:01:09 +0200 Subject: [PATCH] added an enemy --- assets/flying_eye.png | Bin 0 -> 3508 bytes assets/mushroom.png | Bin 0 -> 6803 bytes inc/types.h | 5 +++-- src/game/game.c | 27 +++++++++++---------------- src/game/game_hud.c | 4 ++-- src/parser/parse_config_line.c | 2 +- src/render/render_sprite.c | 4 ++-- src/util/initialize.c | 3 ++- test.cub | 3 ++- 9 files changed, 23 insertions(+), 25 deletions(-) create mode 100644 assets/flying_eye.png create mode 100644 assets/mushroom.png diff --git a/assets/flying_eye.png b/assets/flying_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6d5de12b083ea15567adb42c94e0a6b4b0d0ad GIT binary patch literal 3508 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 literal 0 HcmV?d00001 diff --git a/assets/mushroom.png b/assets/mushroom.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d40b0c36c4b9bb82654994a9ff081b4646c02d GIT binary patch literal 6803 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 literal 0 HcmV?d00001 diff --git a/inc/types.h b/inc/types.h index 71c661a..067d9ec 100644 --- a/inc/types.h +++ b/inc/types.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */ -/* Updated: 2025/05/28 14:40:50 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:44:33 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,6 +61,7 @@ typedef struct s_player typedef struct s_sprite { int n_frames; + int animation_speed; double dist; double cam_frac; int alpha; @@ -145,7 +146,7 @@ typedef struct s_game t_player *player; t_screen *screen; t_keyboard *keyboard; - int framecount; + double elapsed_time; int fps; } t_game; typedef struct s_game_manager diff --git a/src/game/game.c b/src/game/game.c index 0803437..5922e7d 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/05/28 14:28:16 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:40:12 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ // #include "glad.h" // #include "MLX42_Int.h" -int game_create(t_game **game) +int game_create(t_game **game) { *game = malloc(sizeof(t_game)); if (!game) @@ -24,7 +24,7 @@ int game_create(t_game **game) return (SUCCESS); } -void free_game(t_game **game) +void free_game(t_game **game) { if (game && *game) { @@ -38,32 +38,27 @@ void free_game(t_game **game) } } -void game_run(t_game *game) +void game_run(t_game *game) { - static int fps = 0; + static int fps = 0; - game->framecount++; + game->elapsed_time += game->screen->mlx->delta_time; fps += (int)(1.f / game->screen->mlx->delta_time); set_uniforms(game); - if (game->framecount % 20 == 0) - { - game->fps = (int)(fps / 20); - fprintf(stderr, "FPS: %d\n", fps / 20); - fps = 0; - } + player_update(game, game->screen->mlx->delta_time); cast_rays(game); render_map(game); if (game->player->is_moving) { - game->screen->img->instances[0].x = sin(game->framecount / 6.0) * 20; - game->screen->img->instances[0].y = cos(game->framecount / 3.0) * 10; + game->screen->img->instances[0].x = sin(game->elapsed_time * 10) * 20; + game->screen->img->instances[0].y = cos(game->elapsed_time * 18) * 10; } handle_battery(game); handle_record(game); } -void game_free(t_game *game) +void game_free(t_game *game) { if (game->screen) { @@ -86,7 +81,7 @@ void game_free(t_game *game) free(game); } -void game_terminate(t_game *game) +void game_terminate(t_game *game) { print_scores(game); game_free(game); diff --git a/src/game/game_hud.c b/src/game/game_hud.c index 010e56f..394d53d 100644 --- a/src/game/game_hud.c +++ b/src/game/game_hud.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */ -/* Updated: 2025/05/28 14:28:40 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:03:03 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,7 +78,7 @@ void handle_record(t_game *game) int x; int y; - flash = (game->framecount / 30) % 2; + flash = ((int) game->elapsed_time) % 2; y = -15; while (y <= 15) { diff --git a/src/parser/parse_config_line.c b/src/parser/parse_config_line.c index 6ca5b3f..e1bba70 100644 --- a/src/parser/parse_config_line.c +++ b/src/parser/parse_config_line.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 13:10:06 by whaffman #+# #+# */ -/* Updated: 2025/05/28 14:32:43 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:42:59 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/render/render_sprite.c b/src/render/render_sprite.c index d72a4b4..2a1549a 100644 --- a/src/render/render_sprite.c +++ b/src/render/render_sprite.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ -/* Updated: 2025/05/28 15:05:38 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:45:20 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -60,7 +60,7 @@ static void draw_sprite_column( tex.y = (y - column.start.y) * sprite->texture->height; tex.y *= inv_range.y; color = sample_texture_color(sprite, tex, - (int)(game->framecount / 20) % sprite->n_frames); + (int)(game->elapsed_time * sprite->animation_speed) % sprite->n_frames); if (y > 0 && y < game->screen->height && (color & 0xFF) != 0) mlx_put_pixel(game->screen->img, column.x, y, color); y++; diff --git a/src/util/initialize.c b/src/util/initialize.c index 9b554ae..d526ee9 100644 --- a/src/util/initialize.c +++ b/src/util/initialize.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ -/* Updated: 2025/05/28 15:05:21 by qmennen ### ########.fr */ +/* Updated: 2025/05/28 16:44:40 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,6 +30,7 @@ t_sprite make_sprite(mlx_texture_t *texture, double x, double y, // exit(EXIT_FAILURE); // } sprite.n_frames = sprite.texture->width / sprite.texture->height; + sprite.animation_speed = 10; sprite.pos.x = x; sprite.pos.y = y; sprite.visible = 1; diff --git a/test.cub b/test.cub index d56d505..e1fec73 100644 --- a/test.cub +++ b/test.cub @@ -18,12 +18,13 @@ CT ./assets/ceiling64x64.png -s a ./assets/lamp.png -c b ./assets/accu.png -s p ./assets/plant.png +-s g ./assets/mushroom.png -s m ./assets/broken_mirror.png -s t ./assets/test.png 1111111 111 1111 111111 1111111111 111111 1000001110111001 100001 1000000001 10001 -10010000000b0001 100001 100000110111100011 +1001000g000b0001 100001 100000110111100011 10b0001110000001110011111111 1100b0001000000001 1000001 1000100a000010000001 10000000100b000001 100m00111000100000b00000b00111110p00000100p00m001