Ejemplo n.º 1
0
        public IModelDirectory <CmbModelFileBundle>?GatherModelFileBundles(
            bool assert)
        {
            var ocarinaOfTime3dRom =
                DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile(
                    "ocarina_of_time_3d.cia");

            if (ocarinaOfTime3dRom == null)
            {
                return(null);
            }

            var fileHierarchy =
                new ThreeDsFileHierarchyExtractor()
                .ExtractFromRom(ocarinaOfTime3dRom);

            return(new FileHierarchyBundler <CmbModelFileBundle>(
                       subdir => {
                if (!separator_.Contains(subdir))
                {
                    return null;
                }

                var cmbFiles =
                    subdir.FilesWithExtensionsRecursive(".cmb").ToArray();
                if (cmbFiles.Length == 0)
                {
                    return null;
                }

                var csabFiles =
                    subdir.FilesWithExtensionsRecursive(".csab").ToArray();
                var ctxbFiles =
                    subdir.FilesWithExtensionsRecursive(".ctxb").ToArray();

                try {
                    var bundles =
                        this.separator_.Separate(subdir, cmbFiles, csabFiles);

                    return bundles.Select(bundle => new CmbModelFileBundle(
                                              bundle.ModelFile,
                                              bundle.AnimationFiles.ToArray(),
                                              ctxbFiles,
                                              null
                                              ));
                } catch {
                    return null;
                }
            }
                       ).GatherBundles(fileHierarchy));
        }
        public IModelDirectory <CmbModelFileBundle>?GatherModelFileBundles(
            bool assert)
        {
            var greatAceAttorneyRom =
                DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile(
                    "great_ace_attorney.cia");

            if (greatAceAttorneyRom == null)
            {
                return(null);
            }

            var fileHierarchy =
                new ThreeDsFileHierarchyExtractor().ExtractFromRom(
                    greatAceAttorneyRom);

            return(null);
        }
        public IModelDirectory <CmbModelFileBundle>?GatherModelFileBundles(
            bool assert)
        {
            var luigisMansionRom =
                DirectoryConstants.ROMS_DIRECTORY.TryToGetExistingFile(
                    "luigis_mansion_3d.cia");

            if (luigisMansionRom == null)
            {
                return(null);
            }

            var fileHierarchy =
                new ThreeDsFileHierarchyExtractor().ExtractFromRom(
                    luigisMansionRom);

            var rootModelDirectory =
                new ModelDirectory <CmbModelFileBundle>("luigis_mansion_3d");
            var queue =
                new Queue <(IFileHierarchyDirectory,
                            IModelDirectory <CmbModelFileBundle>)>();

            queue.Enqueue((fileHierarchy.Root, rootModelDirectory));
            while (queue.Any())
            {
                var(directory, node) = queue.Dequeue();

                this.ExtractModel_(node, directory);

                foreach (var subdir in directory.Subdirs)
                {
                    queue.Enqueue((subdir, node.AddSubdir(subdir.Name)));
                }
            }
            return(rootModelDirectory);
        }