added animation stuff to sprite

This commit is contained in:
herbglitch 2025-03-26 18:26:02 -06:00
parent 2e97d908d8
commit 4c980d8690
2 changed files with 36 additions and 0 deletions

View file

@ -35,6 +35,9 @@ typedef struct ARC_Sprite {
float opacity;
ARC_SpriteAxix axis;
float animationCurrentTime;
float animationTime;
} ARC_Sprite;
/**
@ -87,6 +90,14 @@ void ARC_Sprite_RenderAt(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_FPoint
*/
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite);
/**
* @brief switches ARC_Sprite's frames to next for animation
*
* @param sprite ARC_Sprite that is being animated (having its frame updated based on delta time)
* @param deltatime the ammount of time elapsed in seconds (stored as a float where 1.0 is a second) since last animated
*/
void ARC_Sprite_AnimateFrame(ARC_Sprite *sprite, float deltatime);
/**
* @brief switches ARC_Sprite's frame to specified index
*
@ -121,6 +132,14 @@ void ARC_Sprite_SetOrigin(ARC_Sprite *sprite, ARC_FPoint origin);
*/
void ARC_Sprite_SetOpacity(ARC_Sprite *sprite, float opacity);
/**
* @brief sets ARC_Sprite's framerate for
*
* @param sprite ARC_Sprite to change its frame rate
* @param rate the new framerate as a float in seconds (1.0 is one second)
*/
void ARC_Sprite_SetFrameRate(ARC_Sprite *sprite, float rate);
/**
* @brief gets ARC_Sprite's current frame
*

View file

@ -21,6 +21,9 @@ void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Ar
ARC_Sprite_SetOpacity(*sprite, 1.0f);
(*sprite)->axis = ARC_SPRITE_AXIS_NONE;
(*sprite)->animationCurrentTime = 0.0f;
(*sprite)->animationTime = 1.0f / 24.0f;
}
void ARC_Sprite_Destroy(ARC_Sprite *sprite){
@ -72,6 +75,15 @@ void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
}
}
void ARC_Sprite_AnimateFrame(ARC_Sprite *sprite, float deltatime){
sprite->animationCurrentTime += deltatime;
if(sprite->animationCurrentTime >= sprite->animationTime){
sprite->animationCurrentTime -= sprite->animationTime;
ARC_Sprite_IterateFrame(sprite);
}
}
void ARC_Sprite_SetFrameIndex(ARC_Sprite *sprite, uint32_t index){
if(sprite->frames.size <= index){
arc_errno = ARC_ERRNO_DATA;
@ -96,6 +108,11 @@ void ARC_Sprite_SetOpacity(ARC_Sprite *sprite, float opacity){
}
}
void ARC_Sprite_SetFrameRate(ARC_Sprite *sprite, float rate){
sprite->animationCurrentTime = 0;
sprite->animationTime = rate;
}
uint32_t ARC_Sprite_GetFrameIndex(ARC_Sprite *sprite){
return sprite->frameIndex;
}