#include "TextureManager.h"
#include <fstream>

TextureManager::TextureManager()
{
}

TextureManager::~TextureManager()
{
	// Release the textures
	LPDIRECT3DTEXTURE9 aTexture;

	for ( TextureMapIterator iter = textures.begin(); 
		  iter != textures.end(); 
		  ++iter ) {
		aTexture = iter->second;
		if ( aTexture ) {
			aTexture->Release();
			aTexture = 0;
		}
	}
}

HRESULT TextureManager::loadTexturesFromFile( char* fileName ) 
{
	HRESULT r = S_OK;

	fstream textureFile( fileName );

	int textureId;
	int walkable;
	char buffer[ 256 ];
	while ( textureFile.peek() != -1 ) {
		textureFile >> textureId >> walkable >> buffer;
		LPDIRECT3DTEXTURE9 aTexture = loadTexture( buffer );
		if ( aTexture != NULL ) {
			textures[ textureId ] = aTexture;
		} else {
			GameError( "Could not load texture file: " );
			GameError( buffer );
			return E_FAIL;
		}
	}

	textureFile.close();

	return r;
}

LPDIRECT3DTEXTURE9 TextureManager::getTexture( int textureId ) {
	return textures[ textureId ];
}

void TextureManager::setD3DDevice( LPDIRECT3DDEVICE9 newd3dDevice ) {
	pd3dDevice = newd3dDevice;
}

LPDIRECT3DTEXTURE9 TextureManager::loadTexture( char* fileName ) {
	LPDIRECT3DTEXTURE9 aTexture;
	
	HRESULT r = D3DXCreateTextureFromFile(
		pd3dDevice, //LPDIRECT3DDEVICE9 pDevice,
		fileName, //LPCTSTR pSrcFile,
		&aTexture //LPDIRECT3DTEXTURE9 *ppTexture
	);

	if ( FAILED( r ) ) {
		return NULL;
	}

	return aTexture;
}
