Exemple #1
0
        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);
        }
Exemple #2
0
 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);
        }