/// <summary> /// Crea un paseo virtual a partir de un archivo XML. /// </summary> /// <param name="pvfile">Archivo XML con la configuracion del PaseoVirtual.</param> /// <returns>El paseo virtual editado</returns> public void CreatePaseoVirtual(string pvfile) { System.Diagnostics.Debug.WriteLine("Leyendo paseo virtual..."); _lastPaseoVirtual = new PaseoVirtual(); Task task = new Task(() => CreatePaseo(pvfile)); task.ContinueWith((t) => CreatePaseoFinished()); task.Start(); System.Diagnostics.Debug.WriteLine("Paseo virtual leyendose..."); }
/// <summary> /// Metodo auxiliar. Se encarga de procesar un muro del HotSpace. /// </summary> /// <param name="reader">Reader XML con el archivo asociado.</param> /// <param name="paseo">PaseoVirtual que se esta modificando.</param> /// <param name="wall">Identificador del wall que se esta editando.</param> /// <param name="hotSpaceIndex">Indice dentro de paseo que indica el HotSpace que se esta editando.</param> /// <returns>El paseo virtual editado</returns> private static PaseoVirtual procesarMuro(XmlReader reader, PaseoVirtual paseo, HotSpace.WALL wall, int hotSpaceIndex) { reader.MoveToNextAttribute(); if (reader.Name == "img") { paseo.addTextureToHotSpace(hotSpaceIndex, @reader.Value, wall); } while (reader.Read()) { if (reader.NodeType == XmlNodeType.EndElement && reader.Name == mapWallString[wall]) { break; } if (reader.NodeType == XmlNodeType.Element && reader.IsStartElement()) { switch (reader.Name) { case "GoTo": int x = 0, y = 0; String where = null; for (int j = 0; j < 3; ++j) { reader.MoveToNextAttribute(); switch (reader.Name) { case "coordX": x = Convert.ToInt32(reader.Value); break; case "coordY": y = Convert.ToInt32(reader.Value); break; case "where": where = reader.Value; break; default: break; } } paseo.addGoToToSpace(hotSpaceIndex, x, y, wall, where); reader.Read(); break; case "HotSpot": reader.Read(); break; default: break; } } } return paseo; }
private void CreatePaseo(String pvfile) { using (FileStream fileStream = File.OpenRead(pvfile)) { XmlReaderSettings settings; settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Document; using (XmlReader reader = XmlReader.Create(fileStream, settings)) { //Nombre del paseo reader.Read(); reader.MoveToNextAttribute(); _lastPaseoVirtual.Name = reader.Value; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "HotSpace") { if (reader.IsStartElement()) { //<HotSpace> _lastPaseoVirtual = procesarHotSpace(reader, _lastPaseoVirtual); } } } } _lastPaseoVirtual.LoadContentCurrentHotSpace(); } System.Diagnostics.Debug.WriteLine("Create Paseo Finished v1"); }
/// <summary> /// Metodo auxiliar. Se encarga de procesar un HotSpace. /// </summary> /// <param name="reader">Reader XML con el archivo asociado.</param> /// <param name="paseo">PaseoVirtual que se esta modificando.</param> /// <returns>El paseo virtual editado</returns> private static PaseoVirtual procesarHotSpace(XmlReader reader, PaseoVirtual paseo) { reader.MoveToNextAttribute(); int thisHotSpaceIndex = paseo.addHotSpace(reader.Value); //Leer norte, sur, este y oeste while (reader.Read()) { if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "HotSpace") { break; } if (reader.NodeType == XmlNodeType.Element) { if (reader.IsStartElement()) { switch (reader.Name) { case "North": paseo = procesarMuro(reader,paseo, HotSpace.WALL.NORTH, thisHotSpaceIndex); break; case "West": paseo = procesarMuro(reader,paseo, HotSpace.WALL.WEST, thisHotSpaceIndex); break; case "South": paseo = procesarMuro(reader,paseo, HotSpace.WALL.SOUTH, thisHotSpaceIndex); break; case "East": paseo = procesarMuro(reader,paseo, HotSpace.WALL.EAST, thisHotSpaceIndex); break; default: break; } } } } return paseo; }