#ifndef ARC_GRAPHICS_SPRITESHEET_H_ #define ARC_GRAPHICS_SPRITESHEET_H_ #ifdef __cplusplus extern "C" { #endif #include #include "arc/math/point.h" #include "arc/math/rectangle.h" #include "arc/graphics/renderer.h" #include "arc/std/string.h" /** * @brief the spritesheet type, it will be defined within the backend (most likely in the backend's spritesheet header) */ typedef struct ARC_Spritesheet ARC_Spritesheet; /** * @brief creates a spritesheet from a given filepath and renderer * * @note this function only reads in pngs currently, will be updated later to support more file extensions * * @param[out] spritesheet ARC_Spritesheet to create * @param[in] renderer the renderer used to create the spritesheet * @param[in] path the path of the spritesheet to read in */ void ARC_Spritesheet_CreateFromFile(ARC_Spritesheet **spritesheet, ARC_Renderer *renderer, ARC_String *path); /** * @brief destroys a given spritehseet * * @param[in] spritesheet ARC_Spritesheet to free */ void ARC_Spritesheet_Destroy(ARC_Spritesheet *spritesheet); /** * @brief renders the texture of a spritesheet * * @param[in] spritesheet ARC_Spritesheet to render * @param[in] renderer the renderer to draw to * @param[in] renderBounds the area of the renderer to copy the spritesheet to */ void ARC_Spritesheet_Render(ARC_Spritesheet *spritesheet, ARC_Renderer *renderer, ARC_Rect renderBounds); /** * @brief renders a section of a spritesheet * * @param[in] spritesheet ARC_Spritesheet to render part of * @param[in] sheetBounds the area of the spritesheet to render * @param[in] renderer the renderer to draw to * @param[in] renderBounds the area of the renderer to copy the spritesheet area to */ void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect sheetBounds, ARC_Renderer *renderer, ARC_Rect renderBounds); /** * @brief renders a tile of a spritesheet * * @note if the tile size is zero this function will error * * @param[in] spritesheet ARC_Spritesheet to render tile from * @param[in] tilePosition the coordinate of a tile to render (will be multiplied by tile size) * @param[in] renderer the renderer to draw to * @param[in] renderBounds the area of the renderer to copy the tile to */ void ARC_Spritesheet_RenderTile(ARC_Spritesheet *spritesheet, ARC_Point tilePosition, ARC_Renderer *renderer, ARC_Rect renderBounds); /** * @brief gets the x and y size of a given spritesheet in pixels * * @param[in] spritesheet ARC_Spritesheet to get the size of */ ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet); /** * @brief gets the length of a tile (square) in pixels of a spritesheet * * @param[in] spritesheet gets the tilesize of a spritesheet */ uint32_t ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet); #ifdef __cplusplus } #endif #endif // !ARC_GRAPHICS_SPRITESHEET_H_