TileMap::TileMap(string sourceFile, ImageManager &ImageManager_)
{
	//Load the XML source file.
	string str = "Data/Arenas/";
	str = str + sourceFile;
	TiXmlDocument ArenaDocument(str.c_str());
	if(!ArenaDocument.LoadFile())
	{
		cerr<<"Error while loading "<<sourceFile<<endl;
		cerr<<ArenaDocument.ErrorDesc()<<endl;
	}
	
	TiXmlHandle ArenaHandle(&ArenaDocument);
	
	//Load the tile set.
	TiXmlNode* TileSetNode = ArenaHandle.FirstChild("Arena").FirstChild("TileSet").ToNode();
	TiXmlElement* TileElement = NULL;
	while(TileSetNode->IterateChildren("Tile", TileElement) != NULL)
	{
		TileElement = TileSetNode->IterateChildren("Tile", TileElement)->ToElement();
		str = "Data/Tiles/";
		str = str + TileElement->Attribute("file");
		TileSet.push_back(Tile(ImageManager_.Get(str)));
		TileSet.back().sourceFile = str;
		if(strcmp(TileElement->Attribute("isBlockingCharacters"),"true") == 0)
		{
			TileSet.back().blocksCharacters = true;
		}
		else
			TileSet.back().blocksCharacters = false;
		if(strcmp(TileElement->Attribute("isBlockingSpells"), "true") == 0)
			TileSet.back().blocksSpells = true;
		else
			TileSet.back().blocksSpells = false;
	}
	
	//Load the tile map.
	TiXmlNode* MapNode = ArenaHandle.FirstChildElement("Arena").FirstChild("Map").ToNode();
	TiXmlElement* Line = NULL;
	string tileLine;
	int temp;
	while(MapNode->IterateChildren("Line", Line) != NULL)
	{
		Line = MapNode->IterateChildren("Line", Line)->ToElement();
		tileLine = Line->Attribute("TileLine");
		Tiles.push_back(vector<int>(tileLine.size()));
		for(int i=0; i<tileLine.size(); i++)
		{
			temp = tileLine.c_str()[i] - '0';
			Tiles.back()[i] = temp;
		}
	}
}
Teleportation::Teleportation(Vector2f Position, ImageManager& ImageManager_)
{
	this->SetImage(*ImageManager_.Get("Data/Spells/SpeedBuff.png"));
	this->SetPosition(Position);
	timeLeft = 50;
}