public static async Task Init(EasyAssets __instance, [CanBeNull] IBundleLock bundleLock, string defaultKey, string rootPath, string platformName, [CanBeNull] Func <string, bool> shouldExclude) { Traverse traverse = Traverse.Create(__instance); string path = rootPath.Replace("file:///", "").Replace("file://", "") + "/" + platformName + "/"; AssetBundleCreateRequest manifestLoading = AssetBundle.LoadFromFileAsync(path + platformName); await manifestLoading.Await(); AssetBundle assetBundle = manifestLoading.assetBundle; AssetBundleRequest assetLoading = assetBundle.LoadAllAssetsAsync(); await assetLoading.Await(); traverse.Field <AssetBundleManifest>("Manifest").Value = (AssetBundleManifest)assetLoading.allAssets[0]; AssetBundleManifest manifest = traverse.Field <AssetBundleManifest>("Manifest").Value; //Add ModManifest List <string> result = manifest.GetAllAssetBundles().ToList <string>(); List <string> resourcesModbundles = new List <string>(); foreach (KeyValuePair <string, BundleInfo> kvp in Settings.bundles) { resourcesModbundles.Add(kvp.Key); } string[] bundleNames = result.Union(resourcesModbundles).ToList <string>().ToArray <string>(); //string[] bundleNames = manifest.GetAllAssetBundles(); traverse.Field(bundlesFieldName).SetValue(Array.CreateInstance(easyBundleType, bundleNames.Length)); if (bundleLock == null) { bundleLock = new BundleLock(int.MaxValue); } IEasyBundle[] bundles = traverse.Field(bundlesFieldName).GetValue <IEasyBundle[]>(); var startTime = Time.time; for (int i = 0; i < bundleNames.Length; i++) { bundles[i] = (IEasyBundle)Activator.CreateInstance(easyBundleType, new object[] { bundleNames[i], path, manifest, bundleLock }); await JobScheduler.Yield(); } var endTime = Time.time; UnityEngine.Debug.LogError(endTime - startTime); traverse.Field(bundlesFieldName).SetValue(bundles); traverse.Property <DependencyGraph>("System").Value = new DependencyGraph(bundles, defaultKey, shouldExclude); }
static bool PatchPrefix(EasyAssets __instance, [CanBeNull] IBundleLock bundleLock, string defaultKey, string rootPath, string platformName, [CanBeNull] Func <string, bool> shouldExclude, ref Task __result) { __result = Init(__instance, bundleLock, defaultKey, rootPath, platformName, shouldExclude); return(false); }
static bool PatchPrefix(IEasyBundle __instance, string key, string rootPath, UnityEngine.AssetBundleManifest manifest, IBundleLock bundleLock) { EasyBundleHelper esayBundle = new EasyBundleHelper(__instance); esayBundle.Key = key; var path = rootPath + key; BundleInfo bundle; if (Settings.bundles.TryGetValue(key, out bundle)) { path = bundle.Path; } esayBundle.Path = path; esayBundle.KeyWithoutExtension = Path.GetFileNameWithoutExtension(key); string[] dependencyKeys = manifest.GetDirectDependencies(key); foreach (KeyValuePair <string, BundleInfo> kvp in Settings.bundles) { if (!key.Equals(kvp.Key)) { continue; } List <string> result = dependencyKeys == null ? new List <string>() : dependencyKeys.ToList <string>(); dependencyKeys = result.Union(kvp.Value.DependencyKeys).ToList <string>().ToArray <string>(); break; } esayBundle.DependencyKeys = dependencyKeys; esayBundle.LoadState = new BindableState(ELoadState.Unloaded, null); esayBundle.BundleLock = bundleLock; return(false); }