/// <summary> /// Wczytuje plik tiles.xml i na jego podstawie tworzy /// slownik z obiektami potrzebny przy wczytywaniu plikow level-x.xml. /// </summary> /// <param name="reader"></param> private void ReadTile(XmlReader reader, NumberFormatInfo format) { //jesli element ma atrybuty. TilesNode node = null; bool containsCollisionRects = !reader.IsEmptyElement; if (reader.HasAttributes) { node = new TilesNode(); ReadAttributes(node, reader, format); } //collision rectangle if (node != null && !String.IsNullOrEmpty(node.ID) && containsCollisionRects) { while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { string name = reader.Name; if (reader.NodeType == XmlNodeType.Element) { if (reader.HasAttributes) { if (name == "collision-rect") { reader.MoveToAttribute(0); node.CollisionRectangle.Add(StringToQuadrangle(reader.Value, format)); } else if (name == "hit-bound") { reader.MoveToAttribute(0); node.HitRectangle = StringToQuadrangle(reader.Value, format); } } } } } //Dodaje do slownika if (node != null && node.IsValidName) { if (!dictionary.ContainsKey(node.ID)) { dictionary.Add(node.ID, node); } } reader.MoveToElement(); }
/* * private bool IsVariantionTiles(String name, int variant) * { * if (String.IsNullOrEmpty(name)) * return false; * * //szczegol dla pliku 6.12.2007 * if (name.Contains(Nodes.Terrain) && variant == 0) * return false; * * if (name.Contains(Nodes.WoodenBunker)) * return true; * else if (name.Contains(Nodes.ConcreteBunker)) * return true; * else if (name.Contains(Nodes.Barrack)) * return true; * else if (name.Contains(Nodes.Terrain)) * return true; * else if (name.Contains(Nodes.Barrels)) * return true; * else if (name.Contains(Nodes.Ship)) * return true; * else if (name.Contains(Nodes.FortressBunker)) * return true; * else if (name.Contains(Nodes.Ocean) && (variant == 1 || variant == 3)) * return true; * * return false; * }*/ private void ReadAttributes(TilesNode node, XmlReader reader, NumberFormatInfo format) { for (int i = 0; i < reader.AttributeCount; i++) { //przechodze do i-tego atrybutu reader.MoveToAttribute(i); if (reader.Name.Equals(Attributes.Name)) { node.BaseName = reader.Value; if (reader.Value.Equals(Nodes.Terrain)) { terrainCount++; } else if (reader.Value.Equals(Nodes.ShipDeck)) { shipDeckCount++; } else if (reader.Value.Equals(Nodes.WoodenBunker)) { woodenbunkerCount++; } else if (reader.Value.Equals(Nodes.ShipWoodenBunker)) { shipwoodenbunkerCount++; } else if (reader.Value.Equals(Nodes.ConcreteBunker)) { concretebunkerCount++; } else if (reader.Value.Equals(Nodes.ShipConcreteBunker)) { shipconcretebunkerCount++; } else if (reader.Value.Equals(Nodes.Barrack)) { barrackCount++; } else if (reader.Value.Equals(Nodes.Barrels)) { barrelCount++; } /* else if (reader.Value.Equals(Nodes.Ocean)) * { * // wyj¹tek dla oceanu * node.ID = node.BaseName; * * }*/ } else if (reader.Name.Equals(Attributes.YStart)) { node.YStart = float.Parse(reader.Value, format); } else if (reader.Name.Equals(Attributes.ViewXShift)) { node.ViewXShift = float.Parse(reader.Value, format); } else if (reader.Name.Equals(Attributes.YEnd)) { node.YEnd = float.Parse(reader.Value, format); } else if (reader.Name.Equals(Attributes.Variation)) { node.Variation = int.Parse(reader.Value); } } if (node.ID.Length == 0) { node.GenerateID(); } }