private static void AddFromNode_Level(TyMod tymod, XmlNode node) { string directory = null, name = null; TyLevel level; try { directory = node.Attributes.GetNamedItem("directory").Value; } catch (Exception e) { Program.Log(tymod.ToString(), "Invalid directory attribute for level import \"" + node.OuterXml + "\"", e); return; } try { name = node.Attributes.GetNamedItem("name").Value; } catch (Exception e) { Program.Log(tymod.ToString(), "Invalid name attribute for level import \"" + node.OuterXml + "\"", e); return; } level = new TyLevel(Path.Combine(Program.ModDirectory, directory), name, tymod.ModVersion, tymod.Authors); foreach (XmlNode child in node.ChildNodes) { if (child.Name == "translation") { foreach (XmlNode grandchild in child.ChildNodes) { try { level.LanguageNames[grandchild.Name.ToLower()] = grandchild.GetFirstTextChild(); if (level.LanguageNames[grandchild.Name.ToLower()] == null) { Program.Log(tymod.ToString(), "Invalid " + grandchild.Name + " translation for level import \"" + node.OuterXml + "\""); } } catch (Exception e) { Program.Log(tymod.ToString(), "Invalid " + grandchild.Name ?? String.Empty + " translation for level import \"" + node.OuterXml + "\"", e); } } } else if (child.Name == "portal") { foreach (XmlNode grandchild in child.ChildNodes) { try { switch (grandchild.Name.ToLower()) { case "x": level.X = float.Parse(grandchild.GetFirstTextChild()); break; case "y": level.Y = float.Parse(grandchild.GetFirstTextChild()); break; case "z": level.Z = float.Parse(grandchild.GetFirstTextChild()); break; } } catch (Exception e) { Program.Log(tymod.ToString(), "Invalid directory attribute for level import \"" + node.OuterXml + "\"", e); return; } } } } // Add to list of levels tymod.Levels.Add(level); }
public static void ApplyLevel(string levelID, TyLevel level) { string inFile; // Copy necessary file to output dir if (File.Exists(inFile = Path.Combine(level.InputPath, "%l_Icon.dds"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, levelID + "_Icon.dds")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "fe_000_map_%l_00.dds"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "fe_000_map_" + levelID + "_00.dds")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "fe_005_loadingscrn_%l.dds"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "fe_005_loadingscrn_" + levelID + ".dds")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "%l.lv2"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, levelID + ".lv2")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "SFX_%l.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "SFX_" + levelID + ".ini")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "VOX_%l_EN.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "VOX_" + levelID + "_EN.ini")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "VOX_%l_DE.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "VOX_" + levelID + "_DE.ini")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "VOX_%l_ES.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "VOX_" + levelID + "_ES.ini")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "VOX_%l_IT.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "VOX_" + levelID + "_IT.ini")); } if (File.Exists(inFile = Path.Combine(level.InputPath, "VOX_%l_FR.ini"))) { File.Copy(inFile, Path.Combine(Program.OutDirectory, "VOX_" + levelID + "_FR.ini")); } //ApplyLevel_Directory(levelID, level, level.InputPath, Program.OutDirectory); }
private static void ApplyLevel_Directory(string levelID, TyLevel level, string directory, string outputDir) { DirectoryInfo di; FileInfo fi; string outfile; if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } foreach (string path in Directory.EnumerateDirectories(directory, "*", SearchOption.TopDirectoryOnly)) { di = new DirectoryInfo(path); ApplyLevel_Directory(levelID, level, path, Path.Combine(outputDir, di.Name)); } foreach (string file in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)) { fi = new FileInfo(file); outfile = Path.Combine(outputDir, fi.Name.Replace("%l", levelID)); switch (fi.Extension.ToLower()) { case ".lv2": case ".ini": // For these file types, we support replacing %s with the level ID File.WriteAllText(outfile, File.ReadAllText(file).Replace("%l", levelID)); break; default: File.Copy(file, outfile); break; } } }