Ejemplo n.º 1
0
        /// <summary>
        /// Returns the download progress of the asset bundle(s) required for the given asset to become available
        /// </summary>
        /// <param name="assetName"></param>
        /// <returns></returns>
        public float GetDownloadProgressOf(string assetName)
        {
            float progress            = 0;
            DownloadingAssetItem item = null;

            item = downloadingItems.Find(aitem => aitem.requiredAssetName == assetName);
            if (item != null)
            {
                progress = item.Progress;
            }
            else
            {
                Debug.Log(assetName + " was not downloading");
            }
            return(progress);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Generates a temporary item of type T. It then adds a new DownloadingAssetItem to downloadingItems that contains a refrence to this created temp asset and the name of the asset that it should be replaced by once the given assetbundle has completed downloading.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="requiredAssetName"></param>
        /// <param name="requiredAssetNameHash"></param>
        /// <param name="containingBundle"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public T AddDownloadItem <T>(string requiredAssetName, int?requiredAssetNameHash, string containingBundle, Delegate callback = null) where T : UnityEngine.Object
        {
            T thisTempAsset = null;

            if (downloadingItems.Find(item => item.requiredAssetName == requiredAssetName) == null)
            {
                if (requiredAssetNameHash == null)
                {
                    requiredAssetNameHash = UMAUtils.StringToHash(requiredAssetName);
                }
                thisTempAsset = GetTempAsset <T>();
                if (typeof(T) == typeof(RaceData))
                {
                    (thisTempAsset as RaceData).raceName = requiredAssetName;
                    (thisTempAsset as RaceData).name     = requiredAssetName;
                }
                else if (typeof(T) == typeof(SlotDataAsset))
                {
                    (thisTempAsset as SlotDataAsset).name     = requiredAssetName;
                    (thisTempAsset as SlotDataAsset).slotName = requiredAssetName;
                    (thisTempAsset as SlotDataAsset).nameHash = (int)requiredAssetNameHash;
                }
                else if (typeof(T) == typeof(OverlayDataAsset))
                {
                    (thisTempAsset as OverlayDataAsset).name        = requiredAssetName;
                    (thisTempAsset as OverlayDataAsset).overlayName = requiredAssetName;
                    (thisTempAsset as OverlayDataAsset).nameHash    = (int)requiredAssetNameHash;
                }
                else if (typeof(T) == typeof(UMATextRecipe))
                {
                    //now that wardrobeRecipes have their own type, we can assume an UMATextRecipe is a full character recipe
                    thisTempAsset.name = requiredAssetName;
                }
                else if (typeof(T) == typeof(UMAWardrobeRecipe))
                {
                    (thisTempAsset as UMAWardrobeRecipe).recipeType      = "Wardrobe";
                    (thisTempAsset as UMAWardrobeRecipe).wardrobeSlot    = AssetBundleManager.AssetBundleIndexObject.AssetWardrobeSlot(containingBundle, requiredAssetName);
                    (thisTempAsset as UMAWardrobeRecipe).Hides           = AssetBundleManager.AssetBundleIndexObject.AssetWardrobeHides(containingBundle, requiredAssetName);
                    (thisTempAsset as UMAWardrobeRecipe).compatibleRaces = AssetBundleManager.AssetBundleIndexObject.AssetWardrobeCompatibleWith(containingBundle, requiredAssetName);
                    thisTempAsset.name = requiredAssetName;
                }
                else if (typeof(T) == typeof(UMAWardrobeCollection))
                {
                    (thisTempAsset as UMAWardrobeCollection).recipeType      = "WardrobeCollection";
                    (thisTempAsset as UMAWardrobeCollection).wardrobeSlot    = AssetBundleManager.AssetBundleIndexObject.AssetWardrobeCollectionSlot(containingBundle, requiredAssetName);
                    (thisTempAsset as UMAWardrobeCollection).compatibleRaces = AssetBundleManager.AssetBundleIndexObject.AssetWardrobeCollectionCompatibleWith(containingBundle, requiredAssetName);
                    thisTempAsset.name = requiredAssetName;
                }
                else if (typeof(T) == typeof(RuntimeAnimatorController))
                {
                    (thisTempAsset as RuntimeAnimatorController).name = requiredAssetName;
                }
                else
                {
                    thisTempAsset.name = requiredAssetName;
                }
                var thisDlItem = new DownloadingAssetItem(requiredAssetName, thisTempAsset, containingBundle, callback);
                downloadingItems.Add(thisDlItem);
            }
            else
            {
                DownloadingAssetItem dlItem = null;
                if (downloadingItems.Find(item => item.requiredAssetName == requiredAssetName) != null)
                {
                    dlItem = downloadingItems.Find(item => item.requiredAssetName == requiredAssetName);
                }
                if (dlItem != null)
                {
                    //Debug.LogWarning("DownloadingAssetsList already had entry for " + requiredAssetName + " as type " + dlItem.tempAsset.GetType().ToString() + " new request wanted it as type " + typeof(T) + " and its callback was " + dlItem.dynamicCallback[0].Method.Name);
                    if (callback != null)
                    {
                        if (!dlItem.dynamicCallback.Contains(callback))
                        {
                            dlItem.dynamicCallback.Add(callback);
                        }
                    }
                    thisTempAsset = dlItem.tempAsset as T;
                }
                else
                {
                    if (Debug.isDebugBuild)
                    {
                        Debug.LogWarning("Could not get TempAsset for " + requiredAssetName);
                    }
                }
            }
            return(thisTempAsset);
        }