Example #1
0
        public BundleCache LoadAssetBundleSync(string name)
        {
            BundleInfo info = m_assetCfg.GetBundleInfo(name);

            if (info == null)
            {
                return(null);
            }

            //find cache
            BundleCache bundle = null;

            if (m_bundleCache.TryGetValue(name, out bundle))
            {
                bundle.Access();
                return(bundle);
            }

            //load depend
            _AddDependAbSync(info);

            if (m_bundleCache.TryGetValue(name, out bundle))
            {
                bundle.Access();
                return(bundle);
            }
            return(null);
        }
Example #2
0
        public BundleCache GetBundleCached(string name)
        {
            BundleCache bundle = null;

            if (m_bundleCache.TryGetValue(name, out bundle))
            {
                bundle.Access();
                return(bundle);
            }
            return(null);
        }
Example #3
0
        private void _AddDependAbSync(BundleInfo info)
        {
            if (info == null)
            {
                return;
            }

            //find cache
            if (info.HasDependBundle())
            {
                for (int i = 0; i < info.dependBundle.Count; ++i)
                {
                    BundleInfo dependInfo = m_assetCfg.GetBundleInfo(info.dependBundle[i]);
                    //find cache
                    BundleCache bundle = null;
                    if (!m_bundleCache.TryGetValue(dependInfo.name, out bundle))
                    {
                        //load depend
                        _AddDependAbSync(dependInfo);
                    }
                    else
                    {
                        bundle.Access();
                    }
                }
            }

            //load
            AssetBundle ab = _LoadAssetBundleSync(info.name);

            if (ab != null)
            {
                BundleCache bundle = new BundleCache();
                bundle.name   = info.name;
                bundle.info   = info;
                bundle.bundle = ab;
                bundle.Access();
                m_bundleCache.Add(info.name, bundle);
            }
            else
            {
                if (m_useDownload)
                {
                    VersionUpdate.GetIns().UpdateOneRes(info.name, null);
                }
            }
        }
Example #4
0
        public void LoadAssetBundleAsync(string name, Action <string, BundleCache> callback)
        {
            BundleInfo info = m_assetCfg.GetBundleInfo(name);

            if (info == null)
            {
                if (callback != null)
                {
                    callback(name, null);
                }
                return;
            }

            //find cache
            BundleCache bundle = null;

            if (m_bundleCache.TryGetValue(name, out bundle))
            {
                bundle.Access();
                callback(name, bundle);
                return;
            }

            //find request
            for (int i = 0; i < m_loadRequest.Count; ++i)
            {
                if (m_loadRequest[i].name.Equals(name))
                {
                    m_loadRequest[i].finishedCallback += callback;
                    return;
                }
            }

            //add depend ab
            BundleLoadRequest request = new BundleLoadRequest(name, info, callback);

            _AddDependAb(request);

            //add self
            m_loadRequest.Add(request);
        }
Example #5
0
        public void OnTick()
        {
            bool isIdle = true;

            //load ab
            for (int i = 0; i < m_loadRequest.Count; ++i)
            {
                if (m_loadRequest[i].GetStatus() == AssetLoadStatus.Wait ||
                    m_loadRequest[i].GetStatus() == AssetLoadStatus.Downloaded)
                {
                    string      name  = m_loadRequest[i].name;
                    BundleCache cache = null;
                    if (m_bundleCache.TryGetValue(name, out cache))
                    {
                        m_loadRequest[i].OnAssetBundleLoadFinished(name, cache);
                        continue;
                    }
                    AssetBundle ab = _LoadAssetBundleSync(name);
                    if (ab == null)
                    {
                        bool isFaild = true;
                        if (m_useDownload && m_loadRequest[i].GetStatus() != AssetLoadStatus.Downloaded)
                        {
                            isFaild = !m_loadRequest[i].DownLoad();
                        }

                        if (isFaild)
                        {
                            m_loadRequest[i].OnAssetBundleLoadFinished(name, null);
                        }
                    }
                    else
                    {
                        isIdle = false;

                        cache        = new BundleCache();
                        cache.name   = name;
                        cache.info   = m_loadRequest[i].info;
                        cache.bundle = ab;
                        cache.Access();
                        m_bundleCache.Add(name, cache);
                        m_loadRequest[i].OnAssetBundleLoadFinished(name, cache);
                        break;  //do one!
                    }
                }
            }

            //check
            for (int i = 0; i < m_loadRequest.Count; ++i)
            {
                if (m_loadRequest[i].GetStatus() == AssetLoadStatus.Loading)
                {
                    isIdle = false;
                    List <string> unRefDepend = m_loadRequest[i].GetUnRefDependName();
                    if (unRefDepend != null)
                    {
                        for (int k = 0; k < unRefDepend.Count; ++k)
                        {
                            BundleCache cache = null;
                            if (m_bundleCache.TryGetValue(unRefDepend[k], out cache))
                            {
                                m_loadRequest[i].OnAssetBundleLoadFinished(unRefDepend[k], cache);
                            }
                        }
                    }
                }
            }

//__end:
            //clear finished request
            for (int i = 0; i < m_loadRequest.Count;)
            {
                BundleLoadRequest request = m_loadRequest[i];
                if (request.GetStatus() == AssetLoadStatus.Finished)
                {
                    request.OnRelease();
                    m_loadRequest.RemoveAt(i);
                }
                else
                {
                    ++i;
                }
            }

            if (isIdle)
            {
                _ReleaseAb(false);
            }
        }