Пример #1
0
 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);
 }
Пример #2
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);
        }
Пример #3
0
        public static ResourceAssets Parse()
        {
            if (resourceAssets != null)
            {
                return(resourceAssets);
            }

            TryParseAllAssetsFiles(FindDirectoryContainingResourceAssets(), out resourceAssets);

            prefabPlaceholderExtractor.LoadInto(resourceAssets);

            ResourceAssets.ValidateMembers(resourceAssets);

            return(resourceAssets);
        }
Пример #4
0
        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);
                    }
                }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
                    }
                }
        }