SchrodingersChess/sprites.cpp

44 lines
1.0 KiB
C++
Raw Normal View History

#include "sprites.hpp"
SDL_Surface* Sprite::sheet = nullptr;
int Sprite::get(Piece piece, SDL_Surface* dest_surface)
{
return get(piece.get_team(), piece.get_type(), piece.get_vis(), dest_surface);
}
int Sprite::get(Team team, Type type, Visibility vis, SDL_Surface* dest_surface)
{
if (nullptr == sheet)
{
load();
}
if (NO_TYPE == type || NO_TEAM == team || VIS_NONE == vis)
{
return -1;
}
2022-04-19 19:14:24 +00:00
//Offsetting magic to get the right image of the piece
2022-04-15 02:40:00 +00:00
SDL_Rect dest_rect{0,0,SPRITE_SIZE,SPRITE_SIZE};
SDL_Rect src_rect{type*SPRITE_SIZE,team*SPRITE_SIZE+vis*2*SPRITE_SIZE,SPRITE_SIZE,SPRITE_SIZE};
SDL_BlitSurface(sheet, &src_rect, dest_surface, &dest_rect);
return 0;
}
void Sprite::close()
{
if (nullptr != sheet)
{
SDL_FreeSurface(sheet);
sheet = nullptr;
}
}
void Sprite::load()
{
close();
sheet = SDL_LoadBMP("Chess_Pieces_Sprite.bmp");
SDL_SetColorKey(sheet, SDL_TRUE, SDL_MapRGB(sheet->format, 0xFF, 0, 0xFF));
}