Exemple #1
0
        /// <summary>
        /// check the queue and load assetbundle and asset
        /// </summary>
        static protected bool LoadingQueue()
        {
            if (inProgressBundleOperations.Count > 0)
            {
                return(false);                                      //wait bundle load
            }
            LinkedListNode <BundleGroundQueue> fristNode = bundleGroundQueue.First;

            while (fristNode != null && maxLoading - loadingTasks.Count > 0)
            {
                BundleGroundQueue value = fristNode.Value;
                if (value.Count > 0)
                {
                    var req = value.Dequeue();
#if HUGULA_LOADER_DEBUG
                    HugulaDebug.FilterLogFormat("LoadingQueue", "<color=#05AA01>0.1 LoadAssetBundle Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2}, frameCount{4}</color>", req.url, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, Time.frameCount);
#endif
                    LoadAssetBundle(req);
                }
                else
                {
                    fristNode = fristNode.Next;
                    bundleGroundQueue.Remove(value);
                }

                var ts = System.DateTime.Now - frameBegin;
                if (ts.TotalMilliseconds > BundleLoadBreakMilliSeconds)
                {
                    return(true);
                }
            }

            return(false);
        }
        private void FinishDownload()
        {
            if (m_webrequest == null)
            {
                error = string.Format("the webrequest is null CRequest({0},{1})", cRequest.key, cRequest.assetName);
                return;
            }

            error = m_webrequest.error;

            if (!string.IsNullOrEmpty(error))
            {
                Debug.LogError(error);
            }
            else if ((assetBundle = DownloadHandlerAssetBundle.GetContent(m_webrequest)) == null)
            {
                error = string.Format("the asset bundle({0}) is not exist. CRequest({1})", cRequest.key, cRequest.assetName);
            }
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>1.5 AssetBundleDownloadFromWebOperation is done Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2},asyn={4},frameCount{5}</color>", cRequest.url, cRequest.assetName, cRequest.keyHashCode, cRequest.dependencies == null ? 0 : cRequest.dependencies.Length, cRequest.async, Time.frameCount);
#endif
            m_webrequest.Dispose();
            m_webrequest     = null;
            m_asyncOperation = null;
        }
Exemple #3
0
        /// <summary>
        /// append request to  assetCallBackList
        /// </summary>
        /// <param name="AssetBundleLoadAssetOperation">operation.</param>
        static protected bool AddAssetBundleLoadAssetOperationToCallBackList(AssetBundleLoadAssetOperation operation)
        {
            bool            isLoading = false;
            var             req       = operation.cRequest;
            string          key       = req.udAssetKey;
            List <CRequest> list      = null;

            if (assetCallBackList.TryGetValue(key, out list)) //回调列表
            {
                list.Add(req);
                isLoading = true;
                operation.ReleaseToPool();
            }
            else
            {
                list = ListPool <CRequest> .Get();

                assetCallBackList.Add(key, list);
                list.Add(req);
            }
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(req.key, "<color=#ffff00>2.0.0 AddAssetBundleLoadAssetOperationToCallBackList  Request(url={0},assetname={1},keyHashCode{2},asyn={4}) list.count={3}, frameCount{5}</color>", req.url, req.assetName, req.keyHashCode, list.Count, req.async, Time.frameCount);
#endif
            return(isLoading);
        }
        internal static bool CheckRemove(int keyhashcode)
        {
            if (removeDic.ContainsKey(keyhashcode))
            {
                removeDic.Remove(keyhashcode);
                CacheData cache = CacheManager.TryGetCache(keyhashcode);
                AddDependenciesReferCount(cache, true);
 #if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cache.assetBundleKey, "CheckRemove AssetBundle(key={0},hash={1}),frameCount{5}</color>", cache.assetBundleKey, cache.assetHashCode, Time.frameCount);
#endif
                // #if HUGULA_CACHE_DEBUG
                //                 HugulaDebug.FilterLogFormat(cache.assetBundleKey, "<color=#ffff00> -1 remove  abName({0}) for ABDelayUnloadManager ,ref count =  {1},removed={2} </color>", cache.assetBundleKey, cache.count, re);
                // #endif
                //                 if (cache != null && cache.dependencies != null)
                //                 {
                //                     int keyhash = 0;
                //                     int[] alldep = cache.dependencies;
                // #if HUGULA_CACHE_DEBUG
                //                     HugulaDebug.FilterLogFormat(cache.assetBundleKey, "<color=#ffff00> -1 remove  abName({0})'s allDependencies from ABDelayUnloadManager , Dependencies.count = {1}  </color>", cache.assetBundleKey, alldep == null ? 0 : alldep.Length);
                // #endif
                //                     for (int i = 0; i < alldep.Length; i++)
                //                     {
                //                         keyhash = alldep[i];
                //                         CountMananger.WillAdd(keyhash); //引用数量加1
                //                         CheckRemove(keyhash);
                //                     }
                //                 }
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #5
0
        /// <summary>
        /// LoadAsset
        /// </summary>
        /// <param name="req"></param>
        /// <param name="coroutine"></param>
        /// <returns></returns>
        static public AssetBundleLoadAssetOperation LoadAsset(CRequest req, bool coroutine = false)
        {
            AssetBundleLoadAssetOperation op = null;

            if (coroutine)
            {
#if UNITY_EDITOR
                if (ManifestManager.SimulateAssetBundleInEditor)
                {
                    op = new AssetBundleLoadAssetOperationSimulation();
                }
                else
                {
                    op = new AssetBundleLoadAssetOperationFull();
                }
#else
                op = new AssetBundleLoadAssetOperationFull();
#endif
                op.SetRequest(req);
                req.assetOperation = op;
                op.Update();
            }

            var groupQueue = BundleGroundQueue.Get();
            groupQueue.priority = req.priority;
            groupQueue.Enqueue(req);
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(req.key, "<color=#15A0A1>0.0.1  before LoadGroupAsset, ResourcesLoader.LoadAsset(Request(url={0},assetname={1},keyhash={2}),coroutine={3}),assetOperation={4},frameCount={5}</color>", req.url, req.assetName, req.keyHashCode, coroutine, op, Time.frameCount);
#endif

            LoadGroupAsset(groupQueue);
            return(op);
        }
Exemple #6
0
        static public void LoadAsset(CRequest req)
        {
            string relativeUrl = ManifestManager.RemapVariantName(req.vUrl);

            req.vUrl = relativeUrl;

            //check asset cache
            if (LoadAssetFromCache(req))
            {
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(req.key, "<color=#15A0A1>2.0.0 LoadAssetFromCache Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2}, frameCount{4}</color>", req.url, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, Time.frameCount);
#endif
                DispatchReqAssetOperation(req, false);
                return;
            }

            //check loading count
            if (maxLoading - loadingTasks.Count <= 0)
            {
                waitRequest.Enqueue(req);//等待
            }
            else
            {
                LoadAssetBundle(req);//real load
            }
        }
Exemple #7
0
        /// <summary>
        /// real load assetbundle
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        static protected AssetBundleDownloadOperation LoadAssetBundleInternal(CRequest req)
        {
            AssetBundleDownloadOperation abDownloadOp = null;

            if (!downloadingBundles.TryGetValue(req.key, out abDownloadOp))
            {
                req.url = GetAssetBundleDownloadingURL(req.vUrl); // set full url

                if (req.url.StartsWith(Common.HTTP_STRING))       //load assetbunlde
                {
                    abDownloadOp = AssetBundleDownloadFromWebOperation.Get();
                }
                else
                {
                    abDownloadOp = AssetBundleDownloadFromDiskOperation.Get();
                }
                abDownloadOp.SetRequest(req);
                downloadingBundles.Add(req.key, abDownloadOp);

                CacheData cached = null;
                CacheManager.CreateOrGetCache(req.keyHashCode, out cached);//cache data
                inProgressBundleOperations.Add(abDownloadOp);
                abDownloadOp.BeginDownload();

#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(req.key, "<color=#10f010>1.2 LoadAssetBundleInternal Request(key={0},isShared={1},assetname={2},dependencies.count={4})keyHashCode{3}, frameCount{5}</color>", req.key, req.isShared, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, Time.frameCount);
#endif
            }
            else if (req.isShared)
            {
                req.ReleaseToPool();
            }

            return(abDownloadOp);
        }
        internal static void AddDependenciesReferCount(CacheData cache)
        {
            if (cache != null)
            {
                int   keyhash = 0;
                int[] alldep  = cache.dependencies;
#if HUGULA_CACHE_DEBUG
                HugulaDebug.FilterLogFormat(cache.assetBundleKey, "<color=#ffff00> CheckRemove  abName({0})'s allDependencies from ABDelayUnloadManager , Dependencies.count = {1}  </color>", cache.assetBundleKey, alldep == null ? 0 : alldep.Length);
#endif
                if (alldep != null)
                {
                    CacheData pCache = null;
                    for (int i = 0; i < alldep.Length; i++)
                    {
                        keyhash = alldep[i];
                        pCache  = CacheManager.TryGetCache(keyhash);
                        if (pCache != null)
                        {
                            pCache.count++;
#if HUGULA_CACHE_DEBUG
                            HugulaDebug.FilterLogFormat(pCache.assetBundleKey, " <color=#fcfcfc>check add  (assetBundle={0},parent={1},hash={2},count={3}) frameCount={4}</color>", pCache.assetBundleKey, cache.assetBundleKey, keyhash, pCache.count, UnityEngine.Time.frameCount);
#endif
                            if (removeDic.ContainsKey(keyhash)) //如果在回收列表
                            {
                                removeDic.Remove(keyhash);
                                // if (pCache.count == 1) //相加后为1,在回收列表,需要对所有依赖项目引用+1
                                AddDependenciesReferCount(pCache);
                            }
                        }
                    } //end for
                }     // end if
            }         // end cache
        }
Exemple #9
0
        void m_Done()
        {
            if (cRequest.error != null)
            {
                return;
            }

            object m_Data    = null;
            bool   isLoadAll = LoaderType.Typeof_ABAllAssets.Equals(cRequest.assetType);

            if (isLoadAll)
            {
                m_Data = m_Request.allAssets;
            }
            else
            {
                m_Data = m_Request.asset;
            }

#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, " <color=#15A0A1> 1.2 LoadAssetOperation done  Request(assetName={0}) data={1} key={2},frame={3} </color>", cRequest.assetName, m_Data, cRequest.key, Time.frameCount);
#endif
            if (m_Data == null)
            {
                cRequest.error = string.Format("load asset({0}) from {1}  error", m_Request, cRequest.url);
                Debug.LogError(cRequest.error);
            }
            else
            {
                cRequest.data = m_Data;
                m_Bundle.SetAsset(cRequest.udAssetKey, m_Data);
            }
        }
Exemple #10
0
        /// <summary>
        /// finish asset or http request
        /// </summary>
        /// <param name="operation"></param>
        static void ProcessFinishedOperation(ResourcesLoadOperation operation)
        {
            var  req     = operation.cRequest;
            bool isError = false;
            AssetBundleLoadAssetOperation assetLoad = operation as AssetBundleLoadAssetOperation;
            HttpLoadOperation             httpLoad;

            if (assetLoad != null)
            {
                loadingTasks.Remove(req);
                isError = assetLoad.error != null;
                operation.ReleaseToPool(); //relase AssetBundleLoadAssetOperation
                SetCacheAsset(req);        // set asset cache
                DispatchAssetBundleLoadAssetOperation(req, isError);

                //等两帧再CheckAllComplete
                allCompleteCheckCount = 0.5f;
                //CheckAllComplete();//check all complete
            }
            else if ((httpLoad = operation as HttpLoadOperation) != null)
            {
                isError = !string.IsNullOrEmpty(httpLoad.error);

                if (isError && UriGroup.CheckAndSetNextUriGroup(req)) //
                {
#if HUGULA_LOADER_DEBUG
                    HugulaDebug.FilterLogFormat(req.key, "<color=#10f010>1.9  ProcessFinishedOperation re Loaded Request(url={0},assetname={1},dependencies.count={3},keyHashCode{2}),isError={4} frameCount{5}</color>", req.url, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, isError, Time.frameCount);
#endif
                    // Debug.LogFormat(" re try {0};",req.url);
                    inProgressOperations.Add(httpLoad);
                    httpLoad.Reset();
                    httpLoad.SetRequest(req);
                    httpLoad.BeginDownload(); //retry
                }
                else
                {
                    operation.ReleaseToPool();

                    if (isError)
                    {
                        req.DispatchEnd();
                    }
                    else
                    {
                        req.DispatchComplete();
                    }

                    if (req.group != null)
                    {
                        req.group.Complete(req, isError);
                    }

                    req.ReleaseToPool();
                }
            }
        }
        public override void Reset()
        {
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1 AssetBundleLoadAssetOperationFull.Reset Request(url={0},assetName={1}) ,m_Request={2},m_Data={3},error={4},frameCount={5}</color>", url, assetName, m_Request, m_Data, error, Time.frameCount);
#endif
            base.Reset();
            url       = null;
            m_Request = null;
            isLoadAll = false;
        }
        public override void ReleaseToPool()
        {
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1 AssetBundleLoadAssetOperationFull.ReleaseToPool Request(url={0},assetName={1}) ,m_Request={2},m_Data={3},error={4},pool={5},frameCount={6}</color>", url, assetName, m_Request, m_Data, error, pool, Time.frameCount);
#endif
            if (pool)
            {
                Release(this);
            }
        }
Exemple #13
0
        public void Unload()
        {
            if (assetBundle)
            {
                assetBundle.Unload(false);
            }
            isUnloaded = true;
#if HUGULA_CACHE_DEBUG
            HugulaDebug.FilterLogFormat(assetBundleKey, "Unload  CacheData({0},assetHashCode({1})),frame={2}  ", assetBundleKey, assetHashCode, Time.frameCount);
#endif
        }
        private void _BeginDownload()
        {
            m_webrequest = UnityWebRequest.GetAssetBundle(this.cRequest.url);
            if (m_webrequest != null)
            {
                m_asyncOperation = m_webrequest.Send();
            }
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>1.4 AssetBundleDownloadFromWebOperation Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2}, frameCount{4}</color>", cRequest.url, cRequest.assetName, cRequest.keyHashCode, cRequest.dependencies == null ? 0 : cRequest.dependencies.Length, Time.frameCount);
#endif
        }
Exemple #15
0
        internal void SubtractReferCount()
        {
            var subre = CountMananger.Subtract(this.assetHashCode);

#if HUGULA_CACHE_DEBUG
            HugulaDebug.FilterLogFormat(assetbundle, " SubtractReferCount: name({0}) abName({1}) assetHashCode({2})  referCount={3} ", GetPathName(this.transform), assetbundle, assetHashCode, subre);
#endif
            if (subre == -1)
            {
                Debug.LogWarningFormat("SubtractReferCount: name({0}) abName({1}) assetHashCode({2},count={3}) refer delete error ", GetPathName(this.transform), assetbundle, assetHashCode, subre);
            }
        }
Exemple #16
0
        /// <summary>
        /// unload assetbundle and Dependencies false
        /// </summary>
        /// <param name="assetBundleName"></param>
        public static bool UnloadDependenciesCacheFalse(string assetBundleName)
        {
            int hash = LuaHelper.StringToHash(assetBundleName);

            if (!UnloadDependenciesCacheFalse(hash))
            {
#if UNITY_EDITOR || HUGULA_CACHE_DEBUG
                HugulaDebug.FilterLogWarningFormat(assetBundleName, "Unload Dependencies Cache False {0} fail is null or locked ", assetBundleName);
#endif
                return(false);
            }
            return(true);
        }
Exemple #17
0
        internal static bool AddSourceCacheDataFromWWW(AssetBundle ab, CRequest req)
        {
            CacheData cacheData = null;

            CreateOrGetCache(req.keyHashCode, out cacheData);
            cacheData.SetCacheData(ab, req.key); //缓存
            cacheData.dependencies = req.dependencies;
            cacheData.isDone       = true;
#if HUGULA_CACHE_DEBUG
            HugulaDebug.FilterLogFormat(req.key, " <color=#ffffff>LoadDone add  (assetBundle={0},hash={1},count={2})  frameCount{3}</color>", cacheData.assetBundleKey, req.keyHashCode, cacheData.count, UnityEngine.Time.frameCount);
#endif
            return(true);
        }
Exemple #18
0
        bool m_Update()
        {
            if (!CacheManager.CheckDependenciesComplete(cRequest))
            {
                return(true);                                                    //wait
            }
            if (cRequest.error != null)
            {
                return(false);                        //assetbundle is error
            }
            if (m_Bundle == null)
            {
                m_Bundle = CacheManager.TryGetCache(cRequest.keyHashCode);
            }

            if (m_Bundle == null)
            {
                return(true);
            }

            if (m_Request != null)
            {
                return(!m_Request.isDone);
            }

            if (m_Bundle.isError || !m_Bundle.canUse)
            {
                cRequest.error = string.Format("load asset({0}) from bundle({1})  error", cRequest.assetName, cRequest.key);
                Debug.LogError(cRequest.error);
                return(false);
            }
            else
            {
                string assetName = cRequest.assetName;
                var    typ       = cRequest.assetType;
                bool   isLoadAll = LoaderType.Typeof_ABAllAssets.Equals(typ);
                if (isLoadAll)
                {
                    m_Request = m_Bundle.assetBundle.LoadAllAssetsAsync();
                }
                else
                {
                    m_Request = m_Bundle.assetBundle.LoadAssetAsync(cRequest.assetName, typ);
                }

#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cRequest.key, " <color=#15A0A1> 1.2 Asset  Request(assetName={0}) is done={1} key={2},frame={3} </color>", cRequest.assetName, m_Request.isDone, cRequest.key, Time.frameCount);
#endif
                return(!m_Request.isDone);
            }
        }
Exemple #19
0
        /// <summary>
        /// real load assetbundle
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        static protected AssetBundleDownloadOperation LoadAssetBundleInternal(CRequest req)
        {
            AssetBundleDownloadOperation abDownloadOp = null;

            if (!downloadingBundles.TryGetValue(req.key, out abDownloadOp))
            {
#if HUGULA_PROFILER_DEBUG
                Profiler.BeginSample(string.Format("LoadAssetBundleInternal ({0},{1},{2})", req.assetName, req.key, req.isShared));
#endif
                if (!UriGroup.CheckRequestCurrentIndexCrc(req)) //crc
                {
                    abDownloadOp       = new AssetBundleDownloadErrorOperation();
                    abDownloadOp.error = string.Format("assetbundle({0}) crc check wrong ", req.key);
                }
                else if (req.url.StartsWith(Common.HTTP_STRING))  //load assetbunlde
                {
                    abDownloadOp = AssetBundleDownloadFromWebOperation.Get();
                }
                else
                {
                    abDownloadOp = AssetBundleDownloadFromDiskOperation.Get();
                }
                abDownloadOp.SetRequest(req);
                downloadingBundles.Add(req.key, abDownloadOp);
                CacheData cached = null;
                CacheManager.CreateOrGetCache(req.keyHashCode, out cached);//cache data
                //load now
                if (bundleMax - inProgressBundleOperations.Count > 0)
                {
                    inProgressBundleOperations.Add(abDownloadOp);
                    abDownloadOp.BeginDownload();
                }
                else
                {
                    bundleQueue.Enqueue(abDownloadOp);
                }
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(req.key, "<color=#10f010>1.2 LoadAssetBundleInternal Request(key={0},isShared={1},assetname={2},dependencies.count={4})keyHashCode{3}, frameCount{5}</color>", req.key, req.isShared, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, Time.frameCount);
#endif

#if HUGULA_PROFILER_DEBUG
                Profiler.EndSample();
#endif
            }
            else if (req.isShared)
            {
                req.ReleaseToPool();
            }

            return(abDownloadOp);
        }
Exemple #20
0
        internal void SubtractReferCount()
        {
            var subre = CountMananger.Subtract(this.assetHashCode);

#if HUGULA_CACHE_DEBUG
            HugulaDebug.FilterLogFormat(assetbundle, " SubtractReferCount: name({0}) abName({1}) assetHashCode({2})  referCount={3} ", this.name, assetbundle, assetHashCode, subre);
#endif
#if UNITY_EDITOR || !HUGULA_RELEASE
            if (subre == -1)
            {
                Debug.LogWarningFormat("SubtractReferCount: name({0}) abName({1}) assetHashCode({2},count={3}) refer delete error ", this.name, assetbundle, assetHashCode, subre);
            }
#endif
        }
Exemple #21
0
        /// <summary>
        /// unload assetbundle false
        /// </summary>
        /// <param name="assetBundleName"></param>
        public static bool UnloadCacheFalse(string assetBundleName)
        {
            assetBundleName = ManifestManager.RemapVariantName(assetBundleName);
            int hash = LuaHelper.StringToHash(assetBundleName);

            if (!UnloadCacheFalse(hash))
            {
#if HUGULA_CACHE_DEBUG
                HugulaDebug.FilterLogWarningFormat(assetBundleName, "Unload Cache False {0} fail is null or locked ", assetBundleName);
#endif
                return(false);
            }
            return(true);
        }
Exemple #22
0
        /// <summary>
        /// 根据组策略校验request.url的crc值。
        /// 文件不存在或者校验失败返回false
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public static bool CheckUriCrc(CRequest req)
        {
            bool check = ManifestManager.CheckReqCrc(req); //CheckLocalFileCrc(req.url, out crc);

            if (!check)
            {
                var re = UriGroup.CheckAndSetNextUriGroup(req); //CUtils.SetRequestUri(req, 1);
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(req.key, "<color=#ffff00>CrcCheck.CheckUriCrc Req(assetname={0},url={1}) CheckFileCrc=false,SetNextUri={2}</color>", req.assetName, req.url, re);
#endif
                return(re);
            }

            return(true);
        }
        private void FinishDownload()
        {
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>1.5 AssetBundleDownloadFromDiskOperation is done Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2},asyn={4},frameCount{5}</color>", cRequest.url, cRequest.assetName, cRequest.keyHashCode, cRequest.dependencies == null ? 0 : cRequest.dependencies.Length, cRequest.async, Time.frameCount);
#endif
            if (m_abRequest != null)
            {
                assetBundle = m_abRequest.assetBundle;
            }
            if (assetBundle == null)
            {
                error = string.Format("the asset bundle({0}) is not exist. CRequest({1})", cRequest.key, cRequest.assetName);
            }
            m_abRequest = null;
        }
Exemple #24
0
        /// <summary>
        /// load group request
        /// </summary>
        /// <param name="bGroup"></param>
        static public void LoadGroupAsset(BundleGroundQueue bGroup)
        {
            if (bGroup.Count == 0)
            {
                Debug.LogWarning("LoadGroupAsset group.count ==0");
                if (bGroup.onComplete != null)
                {
                    bGroup.onComplete(false);
                }
                return;
            }
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat("LoadGroupAsset", "<color=#05AA01>0.0 Append LoadGroupAsset  BundleGroundQueue(Count={0}priority={1}) frameCount{2}</color>", bGroup.Count, bGroup.priority, Time.frameCount);
#endif
            bool flag     = false;
            int  priority = bGroup.priority;
            for (LinkedListNode <BundleGroundQueue> fristNode = bundleGroundQueue.First; fristNode != null; fristNode = fristNode.Next)
            {
                if (fristNode.Value.priority == priority)
                {
#if HUGULA_LOADER_DEBUG
                    HugulaDebug.FilterLogFormat("LoadGroupAsset", "<color=#05AA01>0.0 LoadGroupAsset AddAfter BundleGroundQueue(Count={0}priority={1}) frameCount{2}</color>", bGroup.Count, bGroup.priority, Time.frameCount);
#endif
                    bundleGroundQueue.AddAfter(fristNode, bGroup);
                    flag = true;
                    break;
                }
                if (fristNode.Value.priority < priority)
                {
#if HUGULA_LOADER_DEBUG
                    HugulaDebug.FilterLogFormat("LoadGroupAsset", "<color=#05AA01>0.0 LoadGroupAsset AddBefore BundleGroundQueue(Count={0}priority={1}) frameCount{2}</color>", bGroup.Count, bGroup.priority, Time.frameCount);
#endif
                    bundleGroundQueue.AddBefore(fristNode, bGroup);
                    flag = true;
                    break;
                }
            }

            if (!flag)
            {
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat("LoadGroupAsset", "<color=#05AA01>0.0 LoadGroupAsset AddLast BundleGroundQueue(Count={0}priority={1}) frameCount{2}</color>", bGroup.Count, bGroup.priority, Time.frameCount);
#endif
                bundleGroundQueue.AddLast(bGroup);
            }

            LoadingQueue();
        }
        bool _IsDone()
        {
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1.1.1 AssetBundleLoadAssetOperationFull._IsDone Request(url={0},assetName={1}) ,m_Request={2},m_Data={3},error={4},frameCount={5}</color>", url, assetName, m_Request, m_Data, error, Time.frameCount);
#endif
            // error
            if (error != null)
            {
                Debug.LogError(error);
                return(true);
            }

            if (m_Request != null && m_Request.isDone)
            {
                if (isLoadAll)
                {
                    m_Data = m_Request.allAssets;
                }
                else
                {
                    m_Data = m_Request.asset;
                }

                if (m_Data == null)
                {
                    error = string.Format("load asset({0}) from {1}  error", m_Request, url);
                }

                SetRequestData(cRequest, m_Data);
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1.1.2 AssetBundleLoadAssetOperationFull._IsDone async isdone Request(url={0},assetname={1}),m_Request={2},m_Data={3},error={4},loadAll={5},frameCount={6}</color>", url, assetName, m_Request, m_Data, error, isLoadAll, Time.frameCount);
#endif
                return(true);
            }

            //no async load asset
            if (m_Data != null)
            {
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1.1.3 AssetBundleLoadAssetOperationFull._IsDone isdone Request(url={0},assetName={1}) ,m_Request={2},m_Data={3},error={4},frameCount={5}</color>", url, assetName, m_Request, m_Data, error, Time.frameCount);
#endif
                SetRequestData(cRequest, m_Data);
                return(true);
            }

            return(false);
        }
Exemple #26
0
        /// <summary>
        /// finish assetbundle
        /// </summary>
        /// <param name="operation"></param>
        static void ProcessFinishedBundleOperation(AssetBundleDownloadOperation operation)
        {
#if HUGULA_PROFILER_DEBUG
            Profiler.BeginSample(string.Format("ResourcesLoader.ProcessFinishedBundleOperation CRequest({0},shared={1})", operation.cRequest.assetName, operation.cRequest.isShared));
#endif
            var  req     = operation.cRequest;
            bool isError = operation.assetBundle == null;
            var  ab      = operation.assetBundle;
            AssetBundleDownloadOperation download = operation;
            if (!isError)
            {
                CacheManager.AddSourceCacheDataFromWWW(ab, req);
            }
            else
            {
#if UNITY_EDITOR
                Debug.LogWarning(operation.error);
#endif
                CacheManager.AddErrorSourceCacheDataFromReq(req);
            }
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(req.key, "<color=#10f010>1.9  ProcessFinishedBundleOperation AssetBundle Loaded Request(url={0},assetname={1},dependencies.count={3},keyHashCode{2}),isError={4} frameCount{5}</color>", req.url, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, isError, Time.frameCount);
#endif

            //begin load asset
            InsertAssetBundleLoadAssetOperation(download);

            downloadingBundles.Remove(req.key);
            download.ReleaseToPool();

            if (isError)
            {
                CallOnAssetBundleErr(req);
            }
            else
            {
                CallOnAssetBundleComplete(req, ab);
            }

            if (req.isShared)
            {
                req.ReleaseToPool();
            }
#if HUGULA_PROFILER_DEBUG
            Profiler.EndSample();
#endif
        }
Exemple #27
0
        internal static bool CheckRemove(int keyhashcode)
        {
            if (removeDic.ContainsKey(keyhashcode))
            {
                removeDic.Remove(keyhashcode);
                CacheData cache = CacheManager.TryGetCache(keyhashcode);
                AddDependenciesReferCount(cache);
 #if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cache.assetBundleKey, "CheckRemove AssetBundle(key={0},hash={1}),frameCount{5}</color>", cache.assetBundleKey, cache.assetHashCode, Time.frameCount);
#endif
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #28
0
        void m_Start()
        {
#if HUGULA_LOADER_DEBUG
            HugulaDebug.FilterLogFormat(cRequest.key, " <color=#15A0A1> 1.2 LoadAssetOperationSimulation  Request(assetName={0}) key={1} </color>", cRequest.assetName, cRequest.key);
#endif

            string[] assetPaths = UnityEditor.AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(cRequest.key, cRequest.assetName);
            if (assetPaths.Length == 0)
            {
                cRequest.error = "There is no asset with name \"" + cRequest.assetName + "\" in " + cRequest.key;
                Debug.LogError(cRequest.error);
            }
            var    assetType = cRequest.assetType;
            bool   loadAll   = LoaderType.Typeof_ABAllAssets.Equals(assetType);
            object data      = null;
            List <UnityEngine.Object> datas = null;
            foreach (var p in assetPaths)
            {
                if (loadAll)
                {
                    // data
                    UnityEngine.Object[] target = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(p);
                    if (datas == null)
                    {
                        datas = new List <UnityEngine.Object> ();
                        datas.AddRange(target);
                    }
                    else
                    {
                        datas.AddRange(target);
                    }
                    data = datas.ToArray();
                }
                else
                {
                    UnityEngine.Object target = UnityEditor.AssetDatabase.LoadAssetAtPath(p, assetType);
                    if (target)
                    {
                        data = target;
                        break;
                    }
                }
            }

            cRequest.data = data;
        }
        public void BeginDownload()
        {
#if HUGULA_LOADER_DEBUG
            var req = cRequest;
            HugulaDebug.FilterLogFormat(req.key, "<color=#10f010>1.3 BeginDownload  AssetBundle Request(key={0},assetname={1},dependencies.count={3})keyHashCode{2}, frameCount{4}</color>", req.key, req.assetName, req.keyHashCode, req.dependencies == null ? 0 : req.dependencies.Length, Time.frameCount);
#endif
#if HUGULA_PROFILER_DEBUG
            Profiler.BeginSample(string.Format("AssetBundleDownloadOperation.BeginDownload CRequest({0},{1},shared={2}) ,", cRequest.assetName, cRequest.key, cRequest.isShared));
#endif
            if (m_BeginDownload != null)
            {
                m_BeginDownload();
            }
#if HUGULA_PROFILER_DEBUG
            Profiler.EndSample();
#endif
        }
Exemple #30
0
        bool _IsDone()
        {
            // error
            if (error != null)
            {
                Debug.LogWarning(error);
                return(true);
            }

            //no async load asset
            if (m_Data != null)
            {
                SetRequestData(cRequest, m_Data);
                return(true);
            }

            if (m_Request != null && m_Request.isDone)
            {
                bool loadAll = CacheManager.Typeof_ABAllAssets.Equals(cRequest.assetType);
#if HUGULA_LOADER_DEBUG
                HugulaDebug.FilterLogFormat(cRequest.key, "<color=#15A0A1>2.1 AssetBundleLoadAssetOperationFull  isDone Request(url={0},assetname={1},dependencies.count={3})keyHashCode{2},asyn={4},loadAll={5},frameCount{6}</color>", cRequest.url, cRequest.assetName, cRequest.keyHashCode, cRequest.dependencies == null ? 0 : cRequest.dependencies.Length, cRequest.async, loadAll, Time.frameCount);
#endif
                if (loadAll)
                {
                    m_Data = m_Request.allAssets;
                }
                else
                {
                    m_Data = m_Request.asset;
                }

                if (m_Data == null)
                {
                    error = string.Format("load asset({0}) from {1}  error", cRequest.assetName, cRequest.key);
                }

                SetRequestData(cRequest, m_Data);

                return(true);
            }
            else
            {
                return(false);
            }
        }