Пример #1
0
        public bool Add2Load(string name, Action <bool, IRes> listener = null, bool lastOrder = true)
        {
            if (string.IsNullOrEmpty(name))
            {
                return(false);
            }
            IRes res = FindResInList(m_ResList, name);

            if (res != null)
            {
                if (listener != null)
                {
                    res.RegisteOnResLoadDoneEvent(listener);
                }
                return(true);
            }
            res = ResMgr.S.GetRes(name, true);
            if (res == null)
            {
                return(false);
            }

            if (listener != null)
            {
                res.RegisteOnResLoadDoneEvent(listener);
            }

            //无论该资源是否加载完成,都需要添加对该资源依赖的引用
            string[] depends = res.GetDependResList();
            if (depends != null)
            {
                for (int i = 0; i < depends.Length; ++i)
                {
                    Add2Load(depends[i]);
                }
            }

            AddRes2List(res, lastOrder);
            return(true);
        }
Пример #2
0
        private void DoLoadAsync()
        {
            if (m_LoadingCount == 0)
            {
                if (m_Listener != null)
                {
                    Action callback = m_Listener;
                    m_Listener = null;
                    callback();
                }

                return;
            }

            var nextNode = m_WaitLoadList.First;
            LinkedListNode <IRes> currentNode = null;

            while (nextNode != null)
            {
                currentNode = nextNode;
                IRes res = currentNode.Value;
                nextNode = currentNode.Next;
                if (res.IsDependResLoadFinish())
                {
                    m_WaitLoadList.Remove(currentNode);

                    if (res.State != ResState.Ready)
                    {
                        res.RegisteOnResLoadDoneEvent(OnResLoadFinish);
                        res.LoadAsync();
                    }
                    else
                    {
                        --m_LoadingCount;
                    }
                }
            }
        }