private UnityFile[,] GroupChildFiles(List <UnityFile> files) { //This method groups files by rows of 3. You can edit this //to change visuals. int size = files.Count; int rows = (size / 3) + 1; UnityFile[,] groupedFiles = new UnityFile[rows, 3]; int index = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < 3; j++) { if (i * 3 + j <= size - 1) { groupedFiles[i, j] = files[index++]; } } } return(groupedFiles); }
static void Decompile(CommandLineArguments arguments) { if (arguments.PlainArguments.Count < 1) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Expected Magicite game directory."); Console.WriteLine("Correct Usage: modicite --decompile [--targetVersion=<version>] <gameDir> <outputDir>"); Console.ResetColor(); return; } if (arguments.PlainArguments.Count < 2) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Expected output directory."); Console.WriteLine("Correct Usage: modicite --decompile <gameDir> <outputDir>"); Console.ResetColor(); return; } #region Get Target Version string targetVersion = ModiciteInfo.NewestSupportedMagiciteVersion; if (arguments.OptionalArguments.Contains(OptionalArgument.Version)) { if (arguments.OptionalArgumentParameters.ContainsKey(OptionalArgument.Version)) { targetVersion = arguments.OptionalArgumentParameters[OptionalArgument.Version]; } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Expected version name."); Console.WriteLine("Correct Usage: modicite --decompile --version=<ver> <gameDir> <outputDir>"); Console.ResetColor(); return; } } if (!Directory.Exists("./versions")) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Directory './versions' does not exist. You need to re-install Modicite."); Console.ResetColor(); return; } if (!File.Exists("./versions/" + targetVersion + ".json")) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("No configuration file found for target version '" + targetVersion + "'."); Console.WriteLine("If the target version is 'default', then you need to re-install Modicite."); Console.WriteLine("If the target version is newer than '" + ModiciteInfo.NewestSupportedMagiciteVersion + "', then you need to update to a newer version of Modicite."); Console.ResetColor(); return; } TargetFile targetFile = null; try { targetFile = SimpleJson.SimpleJson.DeserializeObject <TargetFile>(File.ReadAllText("./versions/" + targetVersion + ".json")); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Failed to load configuration file for target version due to " + ex.GetType().Name + ": " + ex.Message); Console.ResetColor(); return; } Console.WriteLine("Decompiling with target version '" + targetVersion + "'."); #endregion #region Create Output Directory if (Directory.Exists(arguments.PlainArguments[1]) && Directory.GetFiles(arguments.PlainArguments[1]).Length > 0 && Directory.GetDirectories(arguments.PlainArguments[1]).Length > 0) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("The output directory is not empty!"); Console.ResetColor(); return; } if (!Directory.Exists(arguments.PlainArguments[1])) { try { Directory.CreateDirectory(arguments.PlainArguments[1]); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("The output directory could not be created due to " + ex.GetType().Name + ": " + ex.Message); Console.ResetColor(); return; } } string outputDir = arguments.PlainArguments[1].TrimEnd(new char[] { '/', '\\' }); #endregion ClassIDDatabase.Load("./classes.txt"); RTTIDatabase.Load("./types.dat"); #region Unity Binaries Directory.CreateDirectory(outputDir + "/unity-data"); foreach (TargetFileEntry dataFileEntry in targetFile.unityDataFiles) { string entryPath = arguments.PlainArguments[0].TrimEnd(new char[] { '/', '\\' }) + dataFileEntry.path; if (!File.Exists(entryPath)) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Missing Unity data file '" + dataFileEntry.name + "'!"); Console.ResetColor(); continue; } Console.Write("Loading Unity data file '" + dataFileEntry.name + "'... "); UnityFile uf; try { uf = UnityFile.Load(entryPath); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Done."); Console.ResetColor(); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Failed due to " + ex.GetType().Name + ": " + ex.Message); Console.ResetColor(); continue; } Directory.CreateDirectory(outputDir + "./unity-data/" + dataFileEntry.name); Console.Write("Exporting file header from '" + dataFileEntry.name + "'... "); try { //uf.ExportHeaderToFile(outputDir + "./unity-data/" + dataFileEntry.name + "/header.json"); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Done."); Console.ResetColor(); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Failed due to " + ex.GetType().Name + ": " + ex.Message); Console.ResetColor(); continue; } List <string> exportFailures = new List <string>(); int count = 1; /*foreach (ObjectInfo oi in uf.Metadata.ObjectInfoList) { * Console.CursorLeft = 0; * Console.Write("Exporting object data from '" + dataFileEntry.name + "'... " + count.ToString() + "/" + uf.Metadata.NumberOfObjectInfoListMembers.ToString()); * * string objectClassName = oi.ClassID == 114 ? "114" : ClassIDDatabase.Classes[oi.ClassID]; * * if (!Directory.Exists(outputDir + "./unity-data/" + dataFileEntry.name + "/" + objectClassName)) { * Directory.CreateDirectory(outputDir + "./unity-data/" + dataFileEntry.name + "/" + objectClassName); * } * * if (oi.ClassID != 198) { * try { * uf.ExportObjectToFile(oi, outputDir + "./unity-data/" + dataFileEntry.name + "/" + objectClassName + "/" + oi.ObjectID.ToString() + ".json", outputDir + "./unity-data/" + dataFileEntry.name + "/" + objectClassName + "/raw-" + oi.ObjectID.ToString() + ".json"); * } catch (Exception ex) { * exportFailures.Add("Object " + oi.ObjectID.ToString() + " failed to export due to " + ex.GetType().Name + ": " + ex.Message); * } * } else { * try { * uf.ExportRawObjectToFile(oi, outputDir + "./unity-data/" + dataFileEntry.name + "/" + objectClassName + "/raw-" + oi.ObjectID.ToString() + ".json"); * } catch (Exception ex) { * exportFailures.Add("Object " + oi.ObjectID.ToString() + " failed to export due to " + ex.GetType().Name + ": " + ex.Message); * } * } * * count++; * }*/ Console.Write(" - "); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Done."); Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow; foreach (string exportFailure in exportFailures) { Console.WriteLine(exportFailure); } Console.ResetColor(); } #endregion }
protected override async Task <string> InternalLoadAsync(string path) { return(await UnityFile.ReadAllTextAsync(path, Encoding)); }
protected override string InternalLoad(string path) { return(UnityFile.ReadAllText(path, Encoding)); }
// Protected //protected JSONObject _GameDataObject; //protected GameDataStructure _GameDataStructure; //protected Game _Game; #endregion #region Gets //public JSONObject GameDataObject { get { return _GameDataObject; } } #endregion #region Public /// <summary> /// Check if the .dat file that store gameplay custom data exists. /// </summary> /// <returns>True or False</returns> public bool HasGameData() { return(UnityFile.Exists("GameData.dat", FolderPaths.Persistent)); }
protected override async Task <string> InternalLoadAsync(string path) { var result = await UnityFile.ReadAllTextAsync(path, Encoding).ConfigureAwait(false); return(result); }
public void Process(ProjectInfo projectInfo) { CreateCachePath(projectInfo); UnityFilePaths = new List <string>(); MergedCppFileNames = new List <string>(); IList <string> cppFileNames = projectInfo.MergableCppFileNames; if (_settings.GlobalSettings.RandomizeOrderOfUnityMergedFiles) { cppFileNames.Shuffle(); } _unityFiles = new Dictionary <string, UnityFile>(); int currentUnityFileIndex = 1; int currentSourceFileIndex = 1; foreach (string cppFileName in cppFileNames) { string expandedCppFileName = ProjectInfo.ExpandEnvironmentVariables(cppFileName); string cppFilePath = Path.IsPathRooted(expandedCppFileName) ? expandedCppFileName : Path.GetFullPath(Path.Combine(Path.GetDirectoryName(projectInfo.FileName), cppFileName)); FileInfo fileInfo = null; if (File.Exists(cppFilePath)) { fileInfo = new FileInfo(cppFilePath); if (_settings.GlobalSettings.ExcludeWritableFilesFromUnityMerge && !fileInfo.IsReadOnly) { continue; } } if (_settings.SolutionSettings.IsExcludedCppFileNameForProject(projectInfo, cppFileName)) { continue; } // Get the Unity file for the file extension. We separate .c and .cpp files because this is what makes // Visual Studio choose if it should do a C-only or a C++ compile. There are subtle compiler differences. string fileExtension = Path.GetExtension(cppFileName).ToLower(); UnityFile unityFile; if (!_unityFiles.TryGetValue(fileExtension, out unityFile)) { unityFile = new UnityFile(); _unityFiles.Add(fileExtension, unityFile); WritePrefix(projectInfo, unityFile.Contents); } if (unityFile.TotalMergedSizeInBytes > _settings.GlobalSettings.MaxUnityFileSizeInBytes) { WriteUnityFile(projectInfo, unityFile.Contents, currentUnityFileIndex, fileExtension); ++currentUnityFileIndex; unityFile = new UnityFile(); _unityFiles[fileExtension] = unityFile; WritePrefix(projectInfo, unityFile.Contents); } unityFile.TotalMergedSizeInBytes += fileInfo?.Length ?? 0; unityFile.Contents.AppendLine("#ifdef RUDE_BUILD_SUPPORTS_PRAGMA_MESSAGE"); unityFile.Contents.AppendLine("#pragma message(\"" + Path.GetFileName(cppFileName) + "\")"); unityFile.Contents.AppendLine("#endif"); unityFile.Contents.AppendLine("#define RUDE_BUILD_FILEID (" + currentSourceFileIndex + ")"); unityFile.Contents.AppendLine("#include \"" + cppFilePath + "\""); unityFile.Contents.AppendLine("#undef RUDE_BUILD_FILEID"); ++currentSourceFileIndex; MergedCppFileNames.Add(cppFileName); } foreach (var keyValue in _unityFiles) { string fileExtension = keyValue.Key; UnityFile unityFile = keyValue.Value; if (unityFile.Contents.Length > 0) { WriteUnityFile(projectInfo, unityFile.Contents, currentUnityFileIndex, fileExtension); ++currentUnityFileIndex; } } WriteEmptyPrecompiledHeader(projectInfo); }