From 0760d1809dd6da0f30fc7729bb8088610b2c24b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Thu, 2 Feb 2023 12:38:45 +0100 Subject: [PATCH] sprite animation finished --- code/foundation/src/utils/raylib_helpers.h | 5 +++-- code/games/survival/src/renderer.c | 10 +++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/code/foundation/src/utils/raylib_helpers.h b/code/foundation/src/utils/raylib_helpers.h index d85d3c7..00ab4cd 100644 --- a/code/foundation/src/utils/raylib_helpers.h +++ b/code/foundation/src/utils/raylib_helpers.h @@ -289,11 +289,12 @@ void DrawSpriteEco(SpriteSheet* sprite, int frame, float x, float y, float ang, static inline int TickSpriteAnimation(SpriteAnimation *anim) { - if (anim->nextTickTime < platform_frametime()) { - anim->nextTickTime = platform_frametime() + anim->tickDelay; + if (anim->nextTickTime < 0.0f) { + anim->nextTickTime = anim->tickDelay; anim->frame = anim->start + (anim->frame + 1) % anim->numFrames; } + anim->nextTickTime -= platform_frametime(); return anim->frame; } diff --git a/code/games/survival/src/renderer.c b/code/games/survival/src/renderer.c index 49fbe1b..3182403 100644 --- a/code/games/survival/src/renderer.c +++ b/code/games/survival/src/renderer.c @@ -3,6 +3,9 @@ static float zoom_overlay_tran = 0.0f; static SpriteSheet main_sprite_sheet = { 0 }; static struct nk_image main_sprite_sheet_nk = { 0 }; +static SpriteAnimation test_player_anim = { 0 }; + +#define SURVIVAL_ANIM_DELAY (0.5f) #define CAM_OVERLAY_ZOOM_LEVEL 0.15f #define ALPHA(x) ColorAlpha(x, data->tran_time) @@ -94,7 +97,7 @@ void renderer_draw_entry(uint64_t key, entity_view *data, game_world_render_entr DrawNametag("Player", key, data, x, y-16); //DrawTextureRec(GetSpriteTexture2D(assets_find(ASSET_PLAYER)), ASSET_SRC_RECT(), (Vector2){data->x-(WORLD_BLOCK_SIZE/2), data->y-(WORLD_BLOCK_SIZE/2)}, ColorAlpha(WHITE, data->tran_time)); //DrawCircleEco(x, y, size, ColorAlpha(YELLOW, data->tran_time)); - DrawSpriteEco(&main_sprite_sheet, 129, x, y, 0.0f, 2.0f, WHITE); + DrawSpriteEco(test_player_anim.spritesheet, TickSpriteAnimation(&test_player_anim), x, y, 0.0f, 2.0f, WHITE); //if (data->has_items && !data->inside_vehicle) { // float ix = data->x; @@ -170,6 +173,11 @@ void renderer_init(void) { main_sprite_sheet.origin = (Vector2){ 16, 16 }; main_sprite_sheet_nk = TextureToNuklear(main_sprite_sheet.texture); + + test_player_anim.spritesheet = &main_sprite_sheet; + test_player_anim.start = 135; + test_player_anim.numFrames = 5; + test_player_anim.tickDelay = SURVIVAL_ANIM_DELAY; } void renderer_shutdown(void) {