private static void AddResource(TmodFile modFile, string relPath, string filePath) { if (relPath.EndsWith(".png") && relPath != "icon.png") { using (var fs = File.OpenRead(filePath)) { var rawimg = ImageIO.ToRawBytes(fs); if (rawimg != null) { //some pngs can't be converted to rawimg modFile.AddFile(Path.ChangeExtension(relPath, "rawimg"), rawimg); return; } } } modFile.AddFile(relPath, File.ReadAllBytes(filePath)); }
private static void AddResource(TmodFile modFile, string relPath, string filePath) { using (var src = File.OpenRead(filePath)) using (var dst = new MemoryStream()) { if (!ContentConverters.Convert(ref relPath, src, dst)) { src.CopyTo(dst); } modFile.AddFile(relPath, dst.ToArray()); } }
private void ApplyBuildProperties() { if (!File.Exists(GetPath(DefaultConfigurations.LocalizerFiles.InfoConfigurationFile))) { return; } var info = JsonConvert.DeserializeObject <BuildProperties>(File.ReadAllText(GetPath("Info.json"))); var data = info.ToBytes(); _mod.AddFile(TmodFile.InfoFileName, data); }
internal static bool do_BuildMod(object threadContext) { Interface.buildMod.SetReading(); BuildProperties properties = BuildProperties.ReadBuildFile(modToBuild); if (!CreateModReferenceDlls(properties)) { if (!buildAll) { Main.menuMode = Interface.errorMessageID; } return(false); } LoadReferences(); Interface.buildMod.SetCompiling(); byte[] windowsData; byte[] otherData; if (properties.noCompile) { string modDir = modToBuild + Path.DirectorySeparatorChar; if (File.Exists(modDir + "All.dll")) { windowsData = File.ReadAllBytes(modDir + "All.dll"); otherData = File.ReadAllBytes(modDir + "All.dll"); } else if (File.Exists(modDir + "Windows.dll") && File.Exists(modDir + "Other.dll")) { windowsData = File.ReadAllBytes(modDir + "Windows.dll"); otherData = File.ReadAllBytes(modDir + "Other.dll"); } else { ErrorLogger.LogDllBuildError(modToBuild); if (!buildAll) { Main.menuMode = Interface.errorMessageID; } return(false); } } else { windowsData = CompileMod(modToBuild, properties, true); otherData = CompileMod(modToBuild, properties, false); if (windowsData == null || otherData == null) { if (!buildAll) { Main.menuMode = Interface.errorMessageID; } return(false); } } Interface.buildMod.SetBuildText(); string file = ModPath + Path.DirectorySeparatorChar + Path.GetFileName(modToBuild) + ".tmod"; byte[] propertiesData = properties.ToBytes(); TmodFile modFile = new TmodFile(file); using (MemoryStream memoryStream = new MemoryStream()) { using (BinaryWriter writer = new BinaryWriter(memoryStream)) { writer.Write(propertiesData.Length); writer.Write(propertiesData); writer.Write(Path.GetFileName(modToBuild)); string[] resources = Directory.GetFiles(modToBuild, "*", SearchOption.AllDirectories); foreach (string resource in resources) { if (Path.GetExtension(resource) == ".cs") { continue; } if (resource.Substring(modToBuild.Length + 1) == "build.txt") { continue; } string resourcePath = resource.Replace(ModSourcePath + Path.DirectorySeparatorChar, null); resourcePath = resourcePath.Replace(Path.DirectorySeparatorChar, '/'); byte[] buffer = File.ReadAllBytes(resource); writer.Write(resourcePath); writer.Write(buffer.Length); writer.Write(buffer); } writer.Write("end"); writer.Flush(); modFile.AddFile("Resources", memoryStream.ToArray()); } } bool same = windowsData.Length == otherData.Length; if (same) { for (int k = 0; k < windowsData.Length; k++) { if (windowsData[k] != otherData[k]) { same = false; break; } } } if (same) { modFile.AddFile("All", windowsData); } else { modFile.AddFile("Windows", windowsData); modFile.AddFile("Other", otherData); } modFile.Save(); EnableMod(file); if (!buildAll) { Main.menuMode = reloadAfterBuild ? Interface.reloadModsID : 0; } return(true); }