#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)); }