public static void ValidateMembers(ResourceAssets resourceAssets) { Validate.IsFalse(resourceAssets == null); Validate.IsTrue(resourceAssets.WorldEntitiesByClassId.Count > 0); Validate.IsTrue(resourceAssets.LootDistributionsJson != ""); Validate.IsTrue(resourceAssets.PrefabPlaceholderGroupsByGroupClassId.Count > 0); }
public static bool TryParseAllAssetsFiles(string basePath, out ResourceAssets resourceAssets) { resourceAssets = new ResourceAssets(); foreach (string fileName in Directory.GetFiles(basePath, "*.assets")) { ParseAssetManifest(basePath, fileName, resourceAssets); } return(true); }
public static ResourceAssets Parse() { if (resourceAssets != null) { return(resourceAssets); } TryParseAllAssetsFiles(FindDirectoryContainingResourceAssets(), out resourceAssets); prefabPlaceholderExtractor.LoadInto(resourceAssets); ResourceAssets.ValidateMembers(resourceAssets); return(resourceAssets); }
private static void ParseAssetManifest(string basePath, string fileName, ResourceAssets resourceAssets) { string path = Path.Combine(basePath, fileName).Replace("resources/", "Resources/"); if (parsedManifests.Contains(path)) { return; } Dictionary <int, string> relativeFileIdToPath = new Dictionary <int, string>(); using (FileStream resStream = new FileStream(path, FileMode.Open, FileAccess.Read)) using (AssetsFileReader reader = new AssetsFileReader(resStream)) { AssetsFile file = new AssetsFile(reader); AssetsFileTable resourcesFileTable = new AssetsFileTable(file); parsedManifests.Add(path); relativeFileIdToPath.Add(0, path); int fileId = 1; foreach (AssetsFileDependency dependency in file.dependencies.dependencies) { relativeFileIdToPath.Add(fileId++, Path.Combine(basePath, dependency.assetPath)); } foreach (AssetsFileDependency dependency in file.dependencies.dependencies) { ParseAssetManifest(basePath, dependency.assetPath, resourceAssets); } foreach (AssetFileInfoEx assetFileInfo in resourcesFileTable.assetFileInfo) { reader.Position = assetFileInfo.absoluteFilePos; AssetIdentifier identifier = new AssetIdentifier(path, assetFileInfo.index); AssetParser assetParser; if (assetParsersByClassId.TryGetValue(assetFileInfo.curFileType, out assetParser)) { assetParser.Parse(identifier, reader, resourceAssets, relativeFileIdToPath); } assetIdentifierToClassId.Add(identifier, assetFileInfo.curFileType); } } }
public static ResourceAssets Parse() { ResourceAssets resourceAssets = new ResourceAssets(); string basePath = FindDirectoryContainingResourceAssets(); CalculateDependencyFileIds(basePath, "resources.assets"); int rootAssetId = 0; // resources.assets is always considered to be the top level '0' ParseAssetManifest(basePath, "resources.assets", rootAssetId, resourceAssets); prefabPlaceholderExtractor.LoadInto(resourceAssets); resourceAssets.ValidateMembers(); return(resourceAssets); }
private static void ParseAssetManifest(string basePath, string fileName, int fileId, ResourceAssets resourceAssets) { if (parsedManifests.Contains(fileName)) { return; } parsedManifests.Add(fileName); string path = Path.Combine(basePath, fileName); using (FileStream resStream = new FileStream(path, FileMode.Open, FileAccess.Read)) using (AssetsFileReader reader = new AssetsFileReader(resStream)) { AssetsFile file = new AssetsFile(reader); AssetsFileTable resourcesFileTable = new AssetsFileTable(file); foreach (AssetsFileDependency dependency in file.dependencies.dependencies) { int dependencyFileId = fileIdByResourcePath[dependency.assetPath]; ParseAssetManifest(basePath, dependency.assetPath, dependencyFileId, resourceAssets); } foreach (AssetFileInfoEx assetFileInfo in resourcesFileTable.assetFileInfo) { reader.Position = assetFileInfo.absoluteFilePos; AssetIdentifier identifier = new AssetIdentifier(fileId, assetFileInfo.index); AssetParser assetParser; if (assetParsersByClassId.TryGetValue(assetFileInfo.curFileType, out assetParser)) { assetParser.Parse(identifier, reader, resourceAssets); } assetIdentifierToClassId.Add(identifier, assetFileInfo.curFileType); } } }