wrote documentation for spritesheet, and worked on adding spritesheet to graphics config
This commit is contained in:
parent
bbffbe1cb3
commit
83b87c6d63
9 changed files with 136 additions and 126 deletions
|
|
@ -3,29 +3,45 @@
|
|||
#include "spritesheet.h"
|
||||
#include "renderer.h"
|
||||
#include "arc/math/point.h"
|
||||
#include "arc/std/errno.h"
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//TODO: Temp function
|
||||
void ARC_Spritesheet_CreateFromFile(ARC_Spritesheet **spritesheet, ARC_Renderer *renderer, ARC_String *path){
|
||||
*spritesheet = (ARC_Spritesheet *)malloc(sizeof(ARC_Spritesheet));
|
||||
|
||||
//TODO: allow other types of images
|
||||
//init image as a png
|
||||
IMG_Init(IMG_INIT_PNG);
|
||||
|
||||
//get and check the SDL surface
|
||||
SDL_Surface *surface = IMG_Load(path->data);
|
||||
if(!surface){
|
||||
printf("Error: reading png '%s'\nSDL_Image Error: %s", path->data, IMG_GetError());
|
||||
arc_errno = ARC_ERRNO_DATA;
|
||||
ARC_DEBUG_LOG_ERROR_WITH_VARIABLES("ARC_Spritesheet_CreateFromFile(spritesheet, renderer, path), could not read path \"%s\", SDL2_Image Error: %s", path->data, IMG_GetError());
|
||||
|
||||
//cleanup
|
||||
IMG_Quit();
|
||||
|
||||
//set the spritesheet to null and throw an error
|
||||
*spritesheet = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
//create the place to store the spritesheet
|
||||
*spritesheet = (ARC_Spritesheet *)malloc(sizeof(ARC_Spritesheet));
|
||||
|
||||
//set the texture
|
||||
SDL_BlendMode tempMode;
|
||||
SDL_GetSurfaceBlendMode(surface, &tempMode);
|
||||
(*spritesheet)->texture = SDL_CreateTextureFromSurface((SDL_Renderer *)renderer, surface);
|
||||
SDL_GetTextureBlendMode((*spritesheet)->texture, &tempMode);
|
||||
SDL_SetTextureBlendMode((*spritesheet)->texture, tempMode);
|
||||
|
||||
//set the tile size to empty
|
||||
(*spritesheet)->size = 0;
|
||||
|
||||
//cleanup
|
||||
SDL_FreeSurface(surface);
|
||||
IMG_Quit();
|
||||
|
||||
ARC_Spritesheet_GetSize(*spritesheet);
|
||||
}
|
||||
|
||||
void ARC_Spritesheet_Destroy(ARC_Spritesheet *spritesheet){
|
||||
|
|
@ -33,8 +49,28 @@ void ARC_Spritesheet_Destroy(ARC_Spritesheet *spritesheet){
|
|||
free(spritesheet);
|
||||
}
|
||||
|
||||
void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect *sheetBounds, ARC_Renderer *renderer, ARC_Rect *renderBounds){
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)sheetBounds, (SDL_Rect *)renderBounds);
|
||||
void ARC_Spritesheet_RenderArea(ARC_Spritesheet *spritesheet, ARC_Rect sheetBounds, ARC_Renderer *renderer, ARC_Rect renderBounds){
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)&sheetBounds, (SDL_Rect *)&renderBounds);
|
||||
}
|
||||
|
||||
void ARC_Spritesheet_RenderTile(ARC_Spritesheet *spritesheet, ARC_Point tilePosition, ARC_Renderer *renderer, ARC_Rect renderBounds){
|
||||
//error when size is 0
|
||||
if(spritesheet->size == 0){
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
ARC_DEBUG_LOG_ERROR("ARC_Spritesheet_RenderTile(spritesheet, tilePosition, renderer, renderBounds), could not render a tile of size 0");
|
||||
return;
|
||||
}
|
||||
|
||||
//get bounds based on the sheet size
|
||||
ARC_Rect sheetBounds = {
|
||||
spritesheet->size * tilePosition.x,
|
||||
spritesheet->size * tilePosition.y,
|
||||
spritesheet->size,
|
||||
spritesheet->size
|
||||
};
|
||||
|
||||
//render the bounds
|
||||
SDL_RenderCopy((SDL_Renderer *)renderer, spritesheet->texture, (SDL_Rect *)&sheetBounds, (SDL_Rect *)&renderBounds);
|
||||
}
|
||||
|
||||
ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){
|
||||
|
|
@ -43,6 +79,6 @@ ARC_Point ARC_Spritesheet_GetSize(ARC_Spritesheet *spritesheet){
|
|||
return size;
|
||||
}
|
||||
|
||||
uint32_t *ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){
|
||||
uint32_t ARC_Spritesheet_GetTileSize(ARC_Spritesheet *spritesheet){
|
||||
return spritesheet->size;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue