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); }