43 lines
966 B
C++
43 lines
966 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,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));
|
|
} |