sprite documentation added as well as copy function
This commit is contained in:
parent
f337113932
commit
8d5190e405
4 changed files with 58 additions and 18 deletions
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
struct ARC_Sprite {
|
struct ARC_Sprite {
|
||||||
ARC_Spritesheet *spritesheet;
|
ARC_Spritesheet *spritesheet;
|
||||||
ARC_Rect *frames;
|
ARC_Array *frames;
|
||||||
uint32_t *frameSize;
|
|
||||||
uint32_t *frameIndex;
|
uint32_t *frameIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,58 @@ extern "C" {
|
||||||
#include "arc/math/rectangle.h"
|
#include "arc/math/rectangle.h"
|
||||||
#include "arc/std/array.h"
|
#include "arc/std/array.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief a sprite type
|
||||||
|
*
|
||||||
|
* @note the actual type should be define by overriding for a graphics api
|
||||||
|
*/
|
||||||
typedef struct ARC_Sprite ARC_Sprite;
|
typedef struct ARC_Sprite ARC_Sprite;
|
||||||
|
|
||||||
void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Rect *bounds);
|
/**
|
||||||
|
* @brief creates ARC_Sprite type
|
||||||
|
*
|
||||||
|
* @param sprite ARC_Sprite that is being created
|
||||||
|
* @param spritesheet ARC_Spritesheet that ARC_Sprite will be pulled from
|
||||||
|
* @param bounds ARC_Array of bounds of sprite on spritesheet
|
||||||
|
*/
|
||||||
|
void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Array *bounds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief destroys ARC_Sprite type
|
||||||
|
*
|
||||||
|
* @param sprite ARC_Sprite to destroy
|
||||||
|
*/
|
||||||
void ARC_Sprite_Destroy(ARC_Sprite *sprite);
|
void ARC_Sprite_Destroy(ARC_Sprite *sprite);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief copies ARC_Sprite to a new ARC_Sprite
|
||||||
|
*
|
||||||
|
* @param newSprite ARC_Sprite that is being copied to and created
|
||||||
|
* @param oldSprite ARC_Sprite contents that are being copied
|
||||||
|
*/
|
||||||
|
void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief renders ARC_Sprite type
|
||||||
|
*
|
||||||
|
* @param sprite ARC_Sprite that will be rendered
|
||||||
|
* @param renderer ARC_Renderer that is handling rendering
|
||||||
|
* @param renderBounds area of renderer that ARC_Sprite will be rendered to
|
||||||
|
*/
|
||||||
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds);
|
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief switches ARC_Sprite's frames to next for animation
|
||||||
|
*
|
||||||
|
* @param sprite ARC_Sprite that is having its frame updated
|
||||||
|
*/
|
||||||
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite);
|
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite);
|
||||||
|
|
||||||
void ARC_Sprite_SetFrames(ARC_Sprite *sprite, ARC_Array *frames);
|
/**
|
||||||
|
* @brief returns the current bounds based on the ARC_Sprite's frames
|
||||||
|
*
|
||||||
|
* @param sprite ARC_Sprite to get bounds from
|
||||||
|
*/
|
||||||
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite);
|
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
||||||
|
|
@ -332,8 +332,7 @@ int32_t ARC_Sprite_Read(ARC_Config* config, const char *data, ARC_StringSubstr *
|
||||||
((ARC_Sprite *) *value)->frameIndex = malloc(sizeof(uint32_t));
|
((ARC_Sprite *) *value)->frameIndex = malloc(sizeof(uint32_t));
|
||||||
|
|
||||||
((ARC_Sprite *) *value)->spritesheet = spritesheet;
|
((ARC_Sprite *) *value)->spritesheet = spritesheet;
|
||||||
((ARC_Sprite *) *value)->frames = bounds->data;
|
((ARC_Sprite *) *value)->frames = bounds;
|
||||||
((ARC_Sprite *) *value)->frameSize = bounds->size;
|
|
||||||
*((ARC_Sprite *) *value)->frameIndex = 0;
|
*((ARC_Sprite *) *value)->frameIndex = 0;
|
||||||
|
|
||||||
ARC_Rect *ttt = (ARC_Rect *)bounds->data;
|
ARC_Rect *ttt = (ARC_Rect *)bounds->data;
|
||||||
|
|
@ -436,7 +435,6 @@ int32_t ARC_Sprite_Delete(ARC_Config* config, const char* data, ARC_StringSubstr
|
||||||
|
|
||||||
if(!bounds){
|
if(!bounds){
|
||||||
free(sprite->frames);
|
free(sprite->frames);
|
||||||
free(sprite->frameSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(sprite->frameIndex);
|
free(sprite->frameIndex);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
#include "arc/math/rectangle.h"
|
#include "arc/math/rectangle.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Rect *frames){
|
void ARC_Sprite_Create(ARC_Sprite **sprite, ARC_Spritesheet *spritesheet, ARC_Array *frames){
|
||||||
*sprite = (ARC_Sprite *)malloc(sizeof(ARC_Sprite));
|
*sprite = (ARC_Sprite *)malloc(sizeof(ARC_Sprite));
|
||||||
(*sprite)->spritesheet = spritesheet;
|
(*sprite)->spritesheet = spritesheet;
|
||||||
(*sprite)->frames = frames;
|
(*sprite)->frames = frames;
|
||||||
|
|
@ -18,26 +18,29 @@ void ARC_Sprite_Destroy(ARC_Sprite *sprite){
|
||||||
free(sprite);
|
free(sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ARC_Sprite_Copy(ARC_Sprite **newSprite, ARC_Sprite *oldSprite){
|
||||||
|
*newSprite = (ARC_Sprite *)malloc(sizeof(ARC_Sprite));
|
||||||
|
(*newSprite)->spritesheet = oldSprite->spritesheet;
|
||||||
|
(*newSprite)->frames = oldSprite->frames;
|
||||||
|
(*newSprite)->frameIndex = (uint32_t *)malloc(sizeof(uint32_t));
|
||||||
|
*(*newSprite)->frameIndex = *oldSprite->frameIndex;
|
||||||
|
}
|
||||||
|
|
||||||
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
void ARC_Sprite_Render(ARC_Sprite *sprite, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||||
ARC_Rect *temp = &sprite->frames[*sprite->frameIndex];
|
ARC_Rect *temp = (ARC_Rect *)sprite->frames->data + *sprite->frameIndex;
|
||||||
SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)&sprite->frames[*sprite->frameIndex], (SDL_Rect *)renderBounds);
|
SDL_RenderCopy(renderer->renderer, sprite->spritesheet->texture, (SDL_Rect *)sprite->frames->data + *sprite->frameIndex, (SDL_Rect *)renderBounds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
|
void ARC_Sprite_IterateFrame(ARC_Sprite *sprite){
|
||||||
++*sprite->frameIndex;
|
++*sprite->frameIndex;
|
||||||
|
|
||||||
if(*sprite->frameIndex == *sprite->frameSize){
|
if(*sprite->frameIndex == *sprite->frames->size){
|
||||||
*sprite->frameIndex = 0;
|
*sprite->frameIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARC_Sprite_SetFrames(ARC_Sprite *sprite, ARC_Array *frames){
|
|
||||||
sprite->frames = frames->data;
|
|
||||||
*sprite->frameIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite){
|
ARC_Rect *ARC_Sprite_GetBounds(ARC_Sprite *sprite){
|
||||||
return sprite->frames + *sprite->frameIndex;
|
return (ARC_Rect *)sprite->frames->data + *sprite->frameIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ARC_SDL
|
#endif // ARC_SDL
|
||||||
Loading…
Add table
Add a link
Reference in a new issue