From 09b923792700259441af08ed60430df4995c0d93 Mon Sep 17 00:00:00 2001 From: Quinten Mennen Date: Thu, 5 Jun 2025 17:13:40 +0200 Subject: [PATCH] play time stat --- inc/types.h | 5 ++++- src/game/game.c | 15 ++++++++------- src/menu/end_screen.c | 35 ++++++++++++++++++----------------- src/menu/main_menu.c | 3 ++- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/inc/types.h b/inc/types.h index 75f3816..c752d4d 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/06/04 18:14:36 by qmennen ### ########.fr */ +/* Updated: 2025/06/05 17:08:34 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -168,10 +168,13 @@ typedef struct s_scoreboard int total_tiles; int collectibles; 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; } t_scoreboard; typedef struct s_game diff --git a/src/game/game.c b/src/game/game.c index d1aa90b..31d3a71 100644 --- a/src/game/game.c +++ b/src/game/game.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* game.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/06/04 16:43:14 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* game.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ +/* Updated: 2025/06/05 17:09:48 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,7 @@ void game_over(t_game_manager *manager) 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); diff --git a/src/menu/end_screen.c b/src/menu/end_screen.c index f3c4580..5403e12 100644 --- a/src/menu/end_screen.c +++ b/src/menu/end_screen.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/06/03 16:20:35 by qmennen #+# #+# */ -/* Updated: 2025/06/04 19:53:34 by qmennen ### ########.fr */ +/* Updated: 2025/06/05 17:12:02 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,15 +49,12 @@ char *get_score_text(char *prefix, char *suffix, int score) return (score_complete); } -static mlx_image_t *draw_score_line(mlx_t *mlx, char *text, int x, int y) +static void draw_score_line(mlx_t *mlx, mlx_image_t **img, char *text, t_vec2_int pos) { - mlx_image_t *image; - - if (!text) - return (NULL); - image = mlx_put_string(mlx, text, x, y); + if (!text || *img != NULL) + return ; + *img = mlx_put_string(mlx, text, pos.x, pos.y); free(text); - return (image); } void draw_end_screen(t_game_manager *manager, t_menu *menu) @@ -66,6 +63,7 @@ void draw_end_screen(t_game_manager *manager, t_menu *menu) char *battery_percentage; char *collectibles_score; char *enemies_score; + char *time_text; t_game *game; if (!manager || !manager->game) @@ -81,21 +79,24 @@ void draw_end_screen(t_game_manager *manager, t_menu *menu) + menu->selected_option * 50; tiles_score = get_score_text("Discovered area: ", "%", (double) game->scoreboard->tiles_visited / game->scoreboard->total_tiles * 100); - if (! game->scoreboard->tiles_text) - game->scoreboard->tiles_text = draw_score_line(game->screen->mlx, - tiles_score, 100, game->screen->height / 2 - 50); + 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); - game->scoreboard->battery_text = draw_score_line(game->screen->mlx, - battery_percentage, 100, game->screen->height / 2); + 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); - game->scoreboard->collectibles_text = draw_score_line(game->screen->mlx, - collectibles_score, 100, game->screen->height / 2 + 50); + 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); - game->scoreboard->enemies_text = draw_score_line(game->screen->mlx, - enemies_score, 100, game->screen->height / 2 + 100); + 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}); } static void game_exit(struct s_menu_item *item, t_game_manager *manager) diff --git a/src/menu/main_menu.c b/src/menu/main_menu.c index ff9b2fc..ddaa975 100644 --- a/src/menu/main_menu.c +++ b/src/menu/main_menu.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/28 14:14:11 by qmennen #+# #+# */ -/* Updated: 2025/06/04 19:53:06 by qmennen ### ########.fr */ +/* Updated: 2025/06/05 17:09:25 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,7 @@ static void game_start(struct s_menu_item *item, t_game_manager *manager) screen = game->screen; game->screen->minimap->instances[0].enabled = true; game->screen->hud->instances[0].enabled = true; + game->scoreboard->start_time = mlx_get_time(); menu_toggle(*(manager->active_menu), screen); manager->state = GAME_STATE_PLAYING; }