viernes, 5 de septiembre de 2014

C++ y SFML, manejador de texturas (parte 2)

Una complementación sencilla.

#include "TextureManager.h"

TextureManager* TextureManager::instance = NULL;

TextureManager::TextureManager()
{
 //nada
}

TextureManager* TextureManager::GetInstance ()
{
 if (instance == NULL)  // ¿Es la primera llamada?
 {
  instance = new TextureManager; // Creamos la instancia
 }
 return instance; // Retornamos la dirección de la instancia
}


const sf::Texture &TextureManager::GetTexture(string filename){
 // buscamos la textura pedida
 map<string, sf::Texture>::iterator p;
 p=textures.find(filename);
 // si no la encontramos
 if(p==textures.end()){
  // la cargamos desde el archivo
  sf::Texture textureTemp;
  textureTemp.loadFromFile(filename);
  // y la insertamos en el mapa
  pair< map<string, sf::Texture>::iterator, bool > q;
  q=textures.insert(pair<string, sf::Texture>(filename, textureTemp));
  // hacemos que p apunte a la imagen insertada
  p=q.first;
 }
 // devolvemos la imagen
 return p->second;
}

unsigned TextureManager::Size(){
 // ¿Cuantas texturas tengo?
 return textures.size();
}


Así se usa
TextureManager * tm = TextureManager::GetInstance();
sf::Sprite box1; 
box1.setTexture( tm->GetTexture("box_sprites.png") );