/// <summary> /// Initializes a new instance of the <see cref="ObjectDatabase" /> class. /// </summary> /// <param name="vfsMainUrl">The VFS main URL.</param> /// <param name="indexName">Name of the index file.</param> /// <param name="vfsAdditionalUrl">The VFS additional URL. It will be used only if vfsMainUrl is read-only.</param> public ObjectDatabase(string vfsMainUrl, string indexName = "index", string vfsAdditionalUrl = null, bool loadDefaultBundle = true) { if (vfsMainUrl == null) { throw new ArgumentNullException("vfsMainUrl"); } // Create the merged asset index map AssetIndexMap = new ObjectDatabaseAssetIndexMap(); // Try to open file backends bool isReadOnly = Platform.Type != PlatformType.Windows; var backend = new FileOdbBackend(vfsMainUrl, isReadOnly, indexName); AssetIndexMap.Merge(backend.AssetIndexMap); if (backend.IsReadOnly) { backendRead1 = backend; if (vfsAdditionalUrl != null) { backendWrite = backendRead2 = new FileOdbBackend(vfsAdditionalUrl, false); AssetIndexMap.Merge(backendWrite.AssetIndexMap); } } else { backendWrite = backendRead1 = backend; } AssetIndexMap.WriteableAssetIndexMap = backendWrite.AssetIndexMap; bundleBackend = new BundleOdbBackend(vfsMainUrl); // Try to open "default" pack file synchronously if (loadDefaultBundle) { try { bundleBackend.LoadBundle("default", AssetIndexMap).GetAwaiter().GetResult(); } catch (FileNotFoundException) { } } }
/// <summary> /// Loads the specified bundle. /// </summary> /// <param name="bundleName">Name of the bundle.</param> /// <returns></returns> public Task LoadBundle(string bundleName) { return(bundleBackend.LoadBundle(bundleName, AssetIndexMap)); }