private void LoadTileSheet(XmlHelper xmlHelper, Map map) { string id = xmlHelper.GetAttribute("Id"); xmlHelper.AdvanceStartElement("Description"); string description = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); xmlHelper.AdvanceStartElement("ImageSource"); string imageSource = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("ImageSource"); xmlHelper.AdvanceStartElement("Alignment"); Size sheetSize = Size.FromString(xmlHelper.GetAttribute("SheetSize")); Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize")); Size margin = Size.FromString(xmlHelper.GetAttribute("Margin")); Size spacing = Size.FromString(xmlHelper.GetAttribute("Spacing")); xmlHelper.AdvanceEndElement("Alignment"); TileSheet tileSheet = new TileSheet(id, map, imageSource, sheetSize, tileSize); tileSheet.Margin = margin; tileSheet.Spacing = spacing; LoadProperties(xmlHelper, tileSheet); xmlHelper.AdvanceEndElement("TileSheet"); map.AddTileSheet(tileSheet); }
/// <summary> /// Loads a map in tIDE format from the given stream /// </summary> /// <param name="stream">Input stream</param> /// <returns>Map instance loaded from stream</returns> public Map Load(Stream stream) { XmlTextReader xmlReader = new XmlTextReader(stream); xmlReader.WhitespaceHandling = WhitespaceHandling.None; XmlHelper xmlHelper = new XmlHelper(xmlReader); xmlHelper.AdvanceDeclaration(); xmlHelper.AdvanceStartElement("Map"); string mapId = xmlHelper.GetAttribute("Id"); Map map = new Map(mapId); xmlHelper.AdvanceStartElement("Description"); string mapDescription = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); map.Description = mapDescription; LoadTileSheets(xmlHelper, map); LoadLayers(xmlHelper, map); LoadProperties(xmlHelper, map); return(map); }
private void LoadProperties(XmlHelper xmlHelper, Component component, bool consumeStartElement) { if (consumeStartElement) { xmlHelper.AdvanceStartElement("Properties"); } while (xmlHelper.AdvanceStartRepeatedElement("Property", "Properties")) { string propertyKey = xmlHelper.GetAttribute("Key"); string propertyType = xmlHelper.GetAttribute("Type"); string propertyValue = xmlHelper.GetCData(); if (propertyType == typeof(bool).Name) { component.Properties[propertyKey] = bool.Parse(propertyValue); } else if (propertyType == typeof(int).Name) { component.Properties[propertyKey] = int.Parse(propertyValue); } else if (propertyType == typeof(float).Name) { component.Properties[propertyKey] = float.Parse(propertyValue); } else { component.Properties[propertyKey] = propertyValue; } xmlHelper.AdvanceEndElement("Property"); } }
private void LoadLayer(XmlHelper xmlHelper, Map map) { string id = xmlHelper.GetAttribute("Id"); bool visible = bool.Parse(xmlHelper.GetAttribute("Visible")); xmlHelper.AdvanceStartElement("Description"); string description = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); xmlHelper.AdvanceStartElement("Dimensions"); Size layerSize = Size.FromString(xmlHelper.GetAttribute("LayerSize")); Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize")); xmlHelper.AdvanceEndElement("Dimensions"); Layer layer = new Layer(id, map, layerSize, tileSize); layer.Description = description; layer.Visible = visible; xmlHelper.AdvanceStartElement("TileArray"); Location tileLocation = Location.Origin; TileSheet tileSheet = null; XmlReader xmlReader = xmlHelper.XmlReader; while (xmlHelper.AdvanceStartRepeatedElement("Row", "TileArray")) { tileLocation.X = 0; while (xmlHelper.AdvanceNode() != XmlNodeType.EndElement) { if (xmlReader.Name == "Null") { int nullCount = xmlHelper.GetIntAttribute("Count"); tileLocation.X += nullCount % layerSize.Width; } else if (xmlReader.Name == "TileSheet") { string tileSheetRef = xmlHelper.GetAttribute("Ref"); tileSheet = map.GetTileSheet(tileSheetRef); } else if (xmlReader.Name == "Static") { layer.Tiles[tileLocation] = LoadStaticTile(xmlHelper, layer, tileSheet); ++tileLocation.X; } else if (xmlReader.Name == "Animated") { layer.Tiles[tileLocation] = LoadAnimatedTile(xmlHelper, layer, tileSheet); ++tileLocation.X; } } ++tileLocation.Y; } LoadProperties(xmlHelper, layer); xmlHelper.AdvanceEndElement("Layer"); map.AddLayer(layer); }
private void LoadTileSheet(XmlHelper xmlHelper, Map map) { string id = xmlHelper.GetAttribute("Id"); xmlHelper.AdvanceStartElement("Description"); string description = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); xmlHelper.AdvanceStartElement("ImageSource"); string imageSource = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("ImageSource"); xmlHelper.AdvanceStartElement("Alignment"); Size sheetSize = Size.FromString(xmlHelper.GetAttribute("SheetSize")); Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize")); Size margin = Size.FromString(xmlHelper.GetAttribute("Margin")); Size spacing = Size.FromString(xmlHelper.GetAttribute("Spacing")); xmlHelper.AdvanceEndElement("Alignment"); TileSheet tileSheet = new TileSheet(id, map, imageSource, sheetSize, tileSize); tileSheet.Margin = margin; tileSheet.Spacing = spacing; LoadProperties(xmlHelper, tileSheet); xmlHelper.AdvanceEndElement("TileSheet"); map.AddTileSheet(tileSheet); }
private void LoadProperties(XmlHelper xmlHelper, Component component) { xmlHelper.AdvanceStartElement("Properties"); while (xmlHelper.AdvanceStartRepeatedElement("Property", "Properties")) { string propertyKey = xmlHelper.GetAttribute("Key"); string propertyType = xmlHelper.GetAttribute("Type"); string propertyValue = xmlHelper.GetCData(); if (propertyType == typeof(bool).Name) component.Properties[propertyKey] = bool.Parse(propertyValue); else if (propertyType == typeof(int).Name) component.Properties[propertyKey] = int.Parse(propertyValue); else if (propertyType == typeof(float).Name) component.Properties[propertyKey] = float.Parse(propertyValue); else component.Properties[propertyKey] = propertyValue; xmlHelper.AdvanceEndElement("Property"); } }
private void LoadLayer(XmlHelper xmlHelper, Map map) { string id = xmlHelper.GetAttribute("Id"); bool visible = bool.Parse(xmlHelper.GetAttribute("Visible")); xmlHelper.AdvanceStartElement("Description"); string description = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); xmlHelper.AdvanceStartElement("Dimensions"); Size layerSize = Size.FromString(xmlHelper.GetAttribute("LayerSize")); Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize")); xmlHelper.AdvanceEndElement("Dimensions"); Layer layer = new Layer(id, map, layerSize, tileSize); layer.Description = description; layer.Visible = visible; xmlHelper.AdvanceStartElement("TileArray"); Location tileLocation = Location.Origin; TileSheet tileSheet = null; XmlReader xmlReader = xmlHelper.XmlReader; while (xmlHelper.AdvanceStartRepeatedElement("Row", "TileArray")) { tileLocation.X = 0; while (xmlHelper.AdvanceNode() != XmlNodeType.EndElement) { if (xmlReader.Name == "Null") { int nullCount = xmlHelper.GetIntAttribute("Count"); tileLocation.X += nullCount % layerSize.Width; } else if (xmlReader.Name == "TileSheet") { string tileSheetRef = xmlHelper.GetAttribute("Ref"); tileSheet = map.GetTileSheet(tileSheetRef); } else if (xmlReader.Name == "Static") { layer.Tiles[tileLocation] = LoadStaticTile(xmlHelper, layer, tileSheet); ++tileLocation.X; } else if (xmlReader.Name == "Animated") { layer.Tiles[tileLocation] = LoadAnimatedTile(xmlHelper, layer, tileSheet); ++tileLocation.X; } } ++tileLocation.Y; } LoadProperties(xmlHelper, layer); xmlHelper.AdvanceEndElement("Layer"); map.AddLayer(layer); }
/// <summary> /// Loads a map in tIDE format from the given stream /// </summary> /// <param name="stream">Input stream</param> /// <returns>Map instance loaded from stream</returns> public Map Load(Stream stream) { #if WINDOWS XmlTextReader xmlReader = new XmlTextReader(stream); xmlReader.WhitespaceHandling = WhitespaceHandling.None; XmlHelper xmlHelper = new XmlHelper(xmlReader); xmlHelper.AdvanceDeclaration(); xmlHelper.AdvanceStartElement("Map"); string mapId = xmlHelper.GetAttribute("Id"); Map map = new Map(mapId); xmlHelper.AdvanceStartElement("Description"); string mapDescription = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); map.Description = mapDescription; LoadTileSheets(xmlHelper, map); LoadLayers(xmlHelper, map); LoadProperties(xmlHelper, map); return map; #else throw new NotSupportedException(); #endif }
private void LoadLayer(XmlHelper xmlHelper, Map map) { string id = xmlHelper.GetAttribute("Id"); bool visible = bool.Parse(xmlHelper.GetAttribute("Visible")); xmlHelper.AdvanceStartElement("Description"); string description = xmlHelper.GetCData(); xmlHelper.AdvanceEndElement("Description"); xmlHelper.AdvanceStartElement("Dimensions"); Size layerSize = Size.FromString(xmlHelper.GetAttribute("LayerSize")); Size tileSize = Size.FromString(xmlHelper.GetAttribute("TileSize")); xmlHelper.AdvanceEndElement("Dimensions"); Layer layer = new Layer(id, map, layerSize, tileSize); layer.Description = description; layer.Visible = visible; xmlHelper.AdvanceStartElement("TileData"); string tileSheetId = xmlHelper.GetAttribute("TileSheet"); string layerFilename = xmlHelper.GetAttribute("Filename"); xmlHelper.AdvanceEndElement("TileData"); TileSheet tileSheet = map.GetTileSheet(tileSheetId); if (tileSheet == null) throw new Exception("Invalid tile sheet reference: " + tileSheetId); TextReader layerTextReader = new StreamReader(layerFilename); int tileY = 0; char[] commas = new char[]{','}; while (tileY < layer.LayerHeight) { string layerLine = layerTextReader.ReadLine(); if (layerLine == null) break; string[] tokens = layerLine.Split(commas); int tileX = 0; foreach (string token in tokens) { if (tileX >= layer.LayerWidth) break; int tileIndex = int.Parse(token.Trim()); layer.Tiles[tileX++, tileY] = new StaticTile(layer, tileSheet, BlendMode.Alpha, tileIndex); } ++tileY; } layerTextReader.Close(); LoadProperties(xmlHelper, layer); xmlHelper.AdvanceEndElement("Layer"); map.AddLayer(layer); }