SchrodingersChess/sprites.cpp

43 lines
901 B
C++

#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;
}
SDL_Rect dest_rect{0,0,45,45};
SDL_Rect src_rect{type*45,team*45+vis*90,45,45};
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));
}