archeus/include/arc/graphics/spritesheet.h

87 lines
2.8 KiB
C
Raw Normal View History

#ifndef ARC_GRAPHICS_SPRITESHEET_H_
#define ARC_GRAPHICS_SPRITESHEET_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#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_FRect 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_FRect 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_FRect 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_