added animation stuff to sprite
This commit is contained in:
parent
2e97d908d8
commit
4c980d8690
2 changed files with 36 additions and 0 deletions
|
|
@ -35,6 +35,9 @@ typedef struct ARC_Sprite {
|
||||||
float opacity;
|
float opacity;
|
||||||
|
|
||||||
ARC_SpriteAxix axis;
|
ARC_SpriteAxix axis;
|
||||||
|
|
||||||
|
float animationCurrentTime;
|
||||||
|
float animationTime;
|
||||||
} ARC_Sprite;
|
} 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);
|
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
|
* @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);
|
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
|
* @brief gets ARC_Sprite's current frame
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@ void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Ar
|
||||||
ARC_Sprite_SetOpacity(*sprite, 1.0f);
|
ARC_Sprite_SetOpacity(*sprite, 1.0f);
|
||||||
|
|
||||||
(*sprite)->axis = ARC_SPRITE_AXIS_NONE;
|
(*sprite)->axis = ARC_SPRITE_AXIS_NONE;
|
||||||
|
|
||||||
|
(*sprite)->animationCurrentTime = 0.0f;
|
||||||
|
(*sprite)->animationTime = 1.0f / 24.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARC_Sprite_Destroy(ARC_Sprite *sprite){
|
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){
|
void ARC_Sprite_SetFrameIndex(ARC_Sprite *sprite, uint32_t index){
|
||||||
if(sprite->frames.size <= index){
|
if(sprite->frames.size <= index){
|
||||||
arc_errno = ARC_ERRNO_DATA;
|
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){
|
uint32_t ARC_Sprite_GetFrameIndex(ARC_Sprite *sprite){
|
||||||
return sprite->frameIndex;
|
return sprite->frameIndex;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue