From 27b8ca961a3a2e76d04b41c1506ec86ad88c0802 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Fri, 18 Aug 2023 23:06:41 -0600 Subject: [PATCH] added frame index selection --- include/arc/graphics/sprite.h | 8 ++++++++ src/graphics/sdl/sprite.c | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/arc/graphics/sprite.h b/include/arc/graphics/sprite.h index a0ca565..556ee90 100644 --- a/include/arc/graphics/sprite.h +++ b/include/arc/graphics/sprite.h @@ -62,6 +62,14 @@ void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *ren */ void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds, ARC_Point *center, double angle); +/** + * @brief switches ARC_Sprite's frame to specified index + * + * @param sprite ARC_Sprite that is having its frame set + * @param index uint32_t to set ARC_Sprite's frame index to + */ +void ARC_Sprite_SetFrameIndex(ARC_Sprite *sprite, uint32_t index); + /** * @brief switches ARC_Sprite's frames to next for animation * diff --git a/src/graphics/sdl/sprite.c b/src/graphics/sdl/sprite.c index a28aeaa..216866d 100644 --- a/src/graphics/sdl/sprite.c +++ b/src/graphics/sdl/sprite.c @@ -5,6 +5,7 @@ #include "arc/graphics/sdl/renderer.h" #include "arc/math/point.h" #include "arc/math/rectangle.h" +#include "arc/std/errno.h" #include void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Array *frames){ @@ -35,6 +36,15 @@ void ARC_Sprite_RenderRotated(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Re SDL_RenderCopyEx((SDL_Renderer *)renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds, angle, (SDL_Point *)center, SDL_FLIP_NONE); } +void ARC_Sprite_SetFrameIndex(ARC_Sprite *sprite, uint32_t index){ + if(sprite->frames->size <= index){ + arc_errno = ARC_ERRNO_DATA; + ARC_DEBUG_LOG(arc_errno, "in ARC_Sprite_SetFrameIndex(sprite, %d); index out of bounds", index); + return; + } + *sprite->frameIndex = index; +} + void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){ ++*sprite->frameIndex;