/// Author: Guy Spronck /// Date: 05-06-2015 /// <summary> /// Reads the file from using xml reader /// </summary> /// <returns>spawn, lvl, mapVariables</returns> /// <param name="stream">Stream.</param> private static Tuple<Spawn, Tile[, ], MapVariables> ReadFileXml(Stream stream) { // Initialize variables string[,] stringLvl = null, stringGraphicLvl = null; MapVariables mapVariables = new MapVariables (); // Setup xmlreader, throw error if problem with file. XmlReader xmlDoc; try{ xmlDoc = XmlReader.Create(stream); }catch(ArgumentException){ throw new MapParseException ("No file."); }catch(DirectoryNotFoundException){ throw new MapParseException ("Directory not found"); } // Decode the file and get the required values try{ while (xmlDoc.Read ()) { if (xmlDoc.NodeType == XmlNodeType.Element) { if (xmlDoc.Name == "map") { mapVariables.width = Convert.ToInt32 (xmlDoc.GetAttribute ("width")); mapVariables.height = Convert.ToInt32 (xmlDoc.GetAttribute ("height")); } else if (xmlDoc.Name == "tileset") { if (xmlDoc.GetAttribute ("name").ToLower() == "roadmap") { mapVariables.firstGidRoadmap = Convert.ToInt32 (xmlDoc.GetAttribute ("firstgid")); } else if (xmlDoc.GetAttribute ("name").ToLower() == "tilesroad") { mapVariables.firstGidGraphic = Convert.ToInt32 (xmlDoc.GetAttribute ("firstgid")); } }else if(xmlDoc.Name == "property"){ if (xmlDoc.GetAttribute ("name") == "minMoves") { mapVariables.minMoves = Convert.ToInt32(xmlDoc.GetAttribute ("value")); }else if (xmlDoc.GetAttribute ("name") == "minLines"){ mapVariables.minLines = Convert.ToInt32(xmlDoc.GetAttribute ("value")); }else if (xmlDoc.GetAttribute ("name") == "CabbagesToRetreive"){ mapVariables.cabbagesToRetreive = Convert.ToInt32(xmlDoc.GetAttribute ("value")); }else if (xmlDoc.GetAttribute ("name") == "SausagesToRetreive"){ mapVariables.sausagesToRetreive = Convert.ToInt32(xmlDoc.GetAttribute ("value")); }else if (xmlDoc.GetAttribute ("name") == "Sausage" || xmlDoc.GetAttribute ("name") == "Cabbage" || xmlDoc.GetAttribute ("name") == "Ham"){ // Populate shop AddItemToShops(mapVariables.mapInventory, xmlDoc.GetAttribute ("name"), Convert.ToInt32(xmlDoc.GetAttribute ("value"))); } } else if (xmlDoc.Name == "layer") { if (xmlDoc.GetAttribute ("name") == "Graphic") { xmlDoc.ReadToDescendant ("data"); mapVariables.graphic = xmlDoc.ReadElementContentAsString (); } else if (xmlDoc.GetAttribute ("name") == "Roadmap") { xmlDoc.ReadToDescendant ("data"); mapVariables.roadmap = xmlDoc.ReadElementContentAsString (); } } } } }catch(FormatException){ throw new MapParseException("Invalid map format. (Contains string where int was expected.)"); }finally{ xmlDoc.Dispose (); stream.Close (); } stringLvl = ConvertStringMapToArray (mapVariables.roadmap, mapVariables.width, mapVariables.height); stringGraphicLvl = ConvertStringMapToArray (mapVariables.graphic, mapVariables.width, mapVariables.height); var tupleTileMap = GenerateTileMap (stringLvl, stringGraphicLvl, mapVariables); return Tuple.Create(tupleTileMap.Item1, tupleTileMap.Item2, mapVariables); }
/// Author: Guy Spronck /// Date: 04-06-2015 /// <summary> /// Generates the map with the Tile object. /// </summary> /// <returns>Tuple containing Spawn, Tilemap</returns> /// <param name="stringLvl">String array for roadmap</param> /// <param name="stringGraphicLvl">String array for graphic layer</param> /// <param name="mapVariables">Variables of the map.</param> private static Tuple<Spawn, Tile[, ]> GenerateTileMap(string[,] stringLvl, string[,] stringGraphicLvl, MapVariables mapVariables) { int spawnX = 0, spawnY = 0; var lvl = new Tile[mapVariables.height, mapVariables.width]; for (int iX = 0; iX < mapVariables.height; iX++) { for (int iY = 0; iY < mapVariables.width; iY++) { if (stringLvl [iX, iY].Contains ((mapVariables.firstGidRoadmap+5).ToString())) { spawnX = iY; spawnY = iX; } lvl [iX, iY] = new Tile (checkNorthTile(iX,iY,stringLvl), checkEastTile(iX,iY,stringLvl,mapVariables.width), checkSouthTile(iX,iY,stringLvl,mapVariables.height), checkWestTile(iX,iY,stringLvl), checkShop(iX,iY,stringLvl,mapVariables.firstGidRoadmap), Convert.ToInt32(stringGraphicLvl[iX,iY]) - mapVariables.firstGidGraphic); } } return Tuple.Create (new Spawn(spawnX,spawnY), lvl); }