From ba2f5a05d8ce156bce1ad8d3a81b16db46a797f4 Mon Sep 17 00:00:00 2001 From: whaffman Date: Fri, 16 May 2025 15:02:43 +0200 Subject: [PATCH] animations! --- .normignore | 1 + .vscode/settings.json | 3 ++- Makefile | 4 ++-- assets/plant.png | Bin 0 -> 9389 bytes inc/cub3d.h | 6 +++++- inc/player.h | 3 +-- inc/render.h | 7 +++---- inc/types.h | 6 ++++-- src/game.c | 18 ++++++++---------- src/render/render_minimap.c | 2 +- src/render/render_sprite.c | 17 ++++++++++------- src/render/render_sprite_utils.c | 23 ++++++++++++++++------- src/util/initialize.c | 8 ++++---- 13 files changed, 57 insertions(+), 41 deletions(-) create mode 100644 .normignore create mode 100644 assets/plant.png diff --git a/.normignore b/.normignore new file mode 100644 index 0000000..c0310b8 --- /dev/null +++ b/.normignore @@ -0,0 +1 @@ +lib/MLX42/ diff --git a/.vscode/settings.json b/.vscode/settings.json index 660b980..fd65915 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,8 @@ "vec_math.h": "c", "texture.h": "c", "libft.h": "c", - "render.h": "c" + "render.h": "c", + "math.h": "c" }, "cmake.ignoreCMakeListsMissing": true } \ No newline at end of file diff --git a/Makefile b/Makefile index 3f80ddf..c26e434 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: whaffman +#+ # # +#+ # # Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/05/14 16:06:31 by whaffman ######## odam.nl # +# Updated: 2025/05/15 17:44:48 by whaffman ######## odam.nl # # # # **************************************************************************** # @@ -45,7 +45,7 @@ SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) # Build configurations BUILD_CONFIGS = release debug asan tsan -release_CFLAGS = -Wall -Werror -Werror -flto -Ofast -march=native -mtune=native -ffast-math +release_CFLAGS = -Wall -Werror -Werror -flto -Ofast -march=native -mtune=native -ffast-math debug_CFLAGS = -Wall -Werror -Werror -g3 -DDEBUG -DDBG='fprintf(stderr, RED "DEBUG: " RESET "%s:%d (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);' asan_CFLAGS = -Wall -Werror -Werror -fsanitize=address,leak,undefined -g3 tsan_CFLAGS = -Wall -Werror -Werror -fsanitize=thread -g3 diff --git a/assets/plant.png b/assets/plant.png new file mode 100644 index 0000000000000000000000000000000000000000..7762cee3c466ea7e07975d6ca3472be1c8d6a1cc GIT binary patch literal 9389 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 +#+ */ /* +#+ */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/05/14 12:42:27 by whaffman ######## odam.nl */ +/* Updated: 2025/05/16 15:01:40 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -20,6 +20,10 @@ # define HEIGHT 1080 # define TITLE "Cub3D" +# ifndef M_PI +# define M_PI 3.14159265358979323846 +# endif + # define RESET "\033[0m" # define BLACK "\033[0;30m" # define RED "\033[0;31m" diff --git a/inc/player.h b/inc/player.h index 1717a80..5c7da6b 100644 --- a/inc/player.h +++ b/inc/player.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/15 18:53:27 by qmennen #+# #+# */ -/* Updated: 2025/05/14 20:08:48 by whaffman ######## odam.nl */ +/* Updated: 2025/05/15 13:28:11 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -19,5 +19,4 @@ int player_create(t_game **game); void player_render(t_screen *screen, t_player *player); void player_update(t_game *game, double delta_time); - #endif diff --git a/inc/render.h b/inc/render.h index 17ad5e2..6a30483 100644 --- a/inc/render.h +++ b/inc/render.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/15 16:28:16 by qmennen #+# #+# */ -/* Updated: 2025/05/14 21:24:48 by whaffman ######## odam.nl */ +/* Updated: 2025/05/15 14:25:46 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -36,8 +36,7 @@ void sort_sprites(t_game *game); void calculate_sprite_dist(t_game *game); void cam_fraction(t_game *game, t_sprite *sprite); unsigned int calculate_alpha(int x, int y, double dist); -unsigned int sample_texture_color(mlx_texture_t *texture, - t_vec2_int tex, int alpha); - +unsigned int sample_texture_color(t_sprite *sprite, + t_vec2_int tex, int n); #endif diff --git a/inc/types.h b/inc/types.h index 121b644..bbcf2ad 100644 --- a/inc/types.h +++ b/inc/types.h @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */ -/* Updated: 2025/05/15 13:14:53 by whaffman ######## odam.nl */ +/* Updated: 2025/05/16 14:59:09 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -62,7 +62,7 @@ typedef struct s_sprite int n_frames; double dist; double cam_frac; - double alpha; + int alpha; mlx_texture_t *texture; t_vec2 pos; } t_sprite; @@ -130,6 +130,8 @@ typedef struct s_game t_player *player; t_screen *screen; t_keyboard *keyboard; + int framecount; + int fps; } t_game; #endif diff --git a/src/game.c b/src/game.c index 377606e..12795c6 100644 --- a/src/game.c +++ b/src/game.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */ -/* Updated: 2025/05/14 19:59:05 by whaffman ######## odam.nl */ +/* Updated: 2025/05/16 15:01:28 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -17,10 +17,8 @@ int game_create(t_game **game) *game = malloc(sizeof(t_game)); if (!game) return (FAILURE); - (*game)->player = NULL; - (*game)->map = NULL; - (*game)->screen = NULL; - (*game)->keyboard = NULL; + memset(*game, 0, sizeof(t_game)); + (*game)->fps = 20; return (SUCCESS); } @@ -42,15 +40,15 @@ void game_loop(void *param) { t_game *game; double delta_time; - static int framecount = 0; static int fps = 0; - framecount++; game = (t_game *)param; + game->framecount++; delta_time = game->screen->mlx->delta_time; fps += (int)(1.f / delta_time); - if (framecount % 20 == 0) + if (game->framecount % 20 == 0) { + game->fps = (int)(fps / 20); fprintf(stderr, "FPS: %d\n", fps / 20); fps = 0; } @@ -61,8 +59,8 @@ void game_loop(void *param) keyboard_update(game); if (game->player->is_moving) { - game->screen->img->instances[0].x = sin((double)framecount / 4.0) * 20; - game->screen->img->instances[0].y = cos((double)framecount / 2.0) * 10; + game->screen->img->instances[0].x = sin(game->framecount / 4.0) * 20; + game->screen->img->instances[0].y = cos(game->framecount / 2.0) * 10; } } diff --git a/src/render/render_minimap.c b/src/render/render_minimap.c index 01d28f2..29ea441 100644 --- a/src/render/render_minimap.c +++ b/src/render/render_minimap.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/05/12 11:31:34 by whaffman #+# #+# */ -/* Updated: 2025/05/12 11:31:43 by whaffman ######## odam.nl */ +/* Updated: 2025/05/16 13:35:05 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/src/render/render_sprite.c b/src/render/render_sprite.c index 7f341d7..bc81da2 100644 --- a/src/render/render_sprite.c +++ b/src/render/render_sprite.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ -/* Updated: 2025/05/14 21:21:55 by whaffman ######## odam.nl */ +/* Updated: 2025/05/15 17:51:57 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -19,10 +19,11 @@ static void get_start_end(t_game *game, sprite_scale = 16.0 / sprite->dist; start->x = 0.5 * (game->screen->width * (1.0 + sprite->cam_frac) - - sprite->texture->width * sprite_scale); + - sprite->texture->width / sprite->n_frames * sprite_scale); start->y = 0.5 * (game->screen->height - sprite->texture->height * sprite_scale); - end->x = start->x + (sprite->texture->width * sprite_scale); + end->x = start->x; + end->x += (sprite->texture->width / sprite->n_frames * sprite_scale); end->y = start->y + (sprite->texture->height * sprite_scale); } @@ -42,21 +43,23 @@ static void draw_sprite_column( { t_vec2_int tex; t_vec2 inv_range; - int alpha; int y; unsigned int color; inv_range.y = 1.0 / (column.end.y - column.start.y); inv_range.x = 1.0 / (column.end.x - column.start.x); - alpha = calculate_alpha(column.start.x, column.start.y, sprite->dist); - tex.x = (column.x - column.start.x) * sprite->texture->width; + sprite->alpha = calculate_alpha(column.start.x, + column.start.y, sprite->dist); + tex.x = (column.x - column.start.x); + tex.x *= sprite->texture->width / sprite->n_frames; tex.x *= inv_range.x; y = column.start.y; while (y < column.end.y) { tex.y = (y - column.start.y) * sprite->texture->height; tex.y *= inv_range.y; - color = sample_texture_color(sprite->texture, tex, alpha); + color = sample_texture_color(sprite, tex, + (int)(game->framecount / 20) % 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/render/render_sprite_utils.c b/src/render/render_sprite_utils.c index bf76153..9364485 100644 --- a/src/render/render_sprite_utils.c +++ b/src/render/render_sprite_utils.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/05/14 21:21:57 by whaffman #+# #+# */ -/* Updated: 2025/05/14 21:25:24 by whaffman ######## odam.nl */ +/* Updated: 2025/05/15 15:10:39 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -79,16 +79,25 @@ unsigned int calculate_alpha(int x, int y, double dist) return (alpha); } -unsigned int sample_texture_color( - mlx_texture_t *texture, - t_vec2_int tex, int alpha +unsigned int + sample_texture_color( + t_sprite *sprite, + t_vec2_int tex, + int n ) { - int index; + mlx_texture_t *texture; + int index; + int width; + int n_frames; - index = (tex.x + tex.y * texture->width) * texture->bytes_per_pixel; + n_frames = sprite->n_frames; + width = sprite->texture->width / n_frames; + texture = sprite->texture; + index = (tex.x + n * width + tex.y * width * n_frames); + index *= texture->bytes_per_pixel; return (texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 - | (texture->pixels[index + 3] != 0) * alpha); + | (texture->pixels[index + 3] != 0) * sprite->alpha); } diff --git a/src/util/initialize.c b/src/util/initialize.c index 4683d14..e6c5259 100644 --- a/src/util/initialize.c +++ b/src/util/initialize.c @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */ -/* Updated: 2025/05/14 20:33:11 by whaffman ######## odam.nl */ +/* Updated: 2025/05/15 17:09:38 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -35,12 +35,12 @@ static int init_temp(t_game **game) return (FAILURE); sprites = (*game)->map->sprites; sprites[0] = make_sprite("./assets/battery.png", 3.5, 3.5, 1); - sprites[1] = make_sprite("./assets/battery.png", 2.5, 3.5, 1); - sprites[2] = make_sprite("./assets/battery.png", 1.5, 3.5, 1); + sprites[1] = make_sprite("./assets/plant.png", 2.5, 3.5, 4); + sprites[2] = make_sprite("./assets/plant.png", 1.5, 3.5, 4); sprites[3] = make_sprite("./assets/broken_mirror.png", 3.5, 4.5, 1); sprites[4] = make_sprite("./assets/lamp.png", 2.5, 5.5, 1); sprites[5] = make_sprite("./assets/battery.png", 10.5, 6.5, 1); - sprites[6] = make_sprite("./assets/battery.png", 14.5, 3.5, 1); + sprites[6] = make_sprite("./assets/plant.png", 14.5, 3.5, 4); sprites[7] = make_sprite("./assets/battery.png", 36.5, 3.5, 1); sprites[8] = make_sprite("./assets/broken_mirror.png", 42.5, 4.5, 1); sprites[9] = make_sprite("./assets/lamp.png", 9.5, 10.5, 1);