예제 #1
0
        private void _addAsbInfo(string asbName, string name, string extral, bool isOrdered)
        {
            if (null == OnLoadCallbcak)
            {
                return;
            }
            AsbInfo info = ObjPools.GetAsbInfo();

            info.Set(asbName, name, extral);
            if (isOrdered)
            {
                if (!mQueue.Contains(info))
                {
                    mQueue.Enqueue(info);
                    return;
                }
            }
            else
            {
                if (!mList.Contains(info))
                {
                    mList.Add(info);
                    return;
                }
            }
            //如果已经在list或者队列里则回收
            ObjPools.Recover(info);
            return;
        }
예제 #2
0
 protected override void OnDestroy()
 {
     recoverAll();
     if (null != mCurItems)
     {
         mCurItems.Clear();
     }
     if (null != mItemPool)
     {
         mItemPool.Dispose();
     }
     if (null != mItemDatas)
     {
         for (int i = 0; i < mItemDatas.Count; i++)
         {
             mItemDatas[i].Dispose();
         }
         mItemDatas.Clear();
     }
     if (null != mOnItemClickLua)
     {
         mOnItemClickLua.Dispose();
         mOnItemClickLua = null;
     }
     if (null != mItemSelectStatus)
     {
         ObjPools.Recover(mItemSelectStatus);
     }
     if (null != mOnSelectChangeLua)
     {
         mOnSelectChangeLua.Dispose();
         mOnSelectChangeLua = null;
     }
     base.OnDestroy();
 }
예제 #3
0
        private bool _onLoad(string asbName, string assetName, T t)
        {
            bool ret = mDict.AddObj(asbName, assetName, t);

            if (null != OnLoadCallbcak)
            {
                if (mList.Count > 0)
                {
                    for (int i = mList.Count - 1; i > -1; --i)
                    {
                        AsbInfo info = mList[i];
                        if (info.Equals(asbName, assetName))
                        {
                            OnLoadCallbcak(t, info);
                            mList.Remove(info);
                            ObjPools.Recover(info);
                        }
                    }
                }

                if (mQueue.Count > 0)
                {
                    AsbInfo info = mQueue.Peek();
                    if (info.Equals(asbName, assetName))
                    {
                        OnLoadCallbcak(t, info);
                        mQueue.Dequeue();
                        ObjPools.Recover(info);

                        for (int i = 0; i < mQueue.Count; i++)
                        {
                            AsbInfo head = mQueue.Peek();
                            T       obj  = Get(head.asbName, head.assetName);
                            if (null != obj)
                            {
                                OnLoadCallbcak(obj, head);
                                mQueue.Dequeue();
                                ObjPools.Recover(head);
                            }
                            else
                            {
                                //不是调用序列的第一个直接返回
                                return(ret);
                            }
                        }
                    }
                }
            }
            return(ret);
        }
예제 #4
0
 bool _removeUIObj(UIBase obj)
 {
     if (null != obj)
     {
         if (obj.IsStatic)
         {
             if (mStaticViews.Contains(obj))
             {
                 int index = mStaticViews.IndexOf(obj);
                 mStaticViews.RemoveAt(index);
                 ObjPools.Recover(mStaticViewInfos[index]);
                 mStaticViewInfos.RemoveAt(index);
             }
         }
         Destroy(obj.gameObject);
         return(true);
     }
     return(false);
 }
예제 #5
0
        public static int[] GetIntArry(string content)
        {
            string[]   array = content.Split(',');
            List <int> l     = ObjPools.GetListInt();

            for (int i = 0; i < array.Length; i++)
            {
                int v;
                if (!int.TryParse(array[i], out v))
                {
                    LogFile.Warn("GetIntArry error -> colorStr:" + content);
                }
                else
                {
                    l.Add(v);
                }
            }
            int[] ret = l.ToArray();
            ObjPools.Recover(l);
            return(ret);
        }
예제 #6
0
        public void ClearUIByType(RenderMode type)
        {
            Canvas c = GetCanvasByMode(type, false);

            if (null != c)
            {
                for (int i = 0; i < c.transform.childCount; ++i)
                {
                    GameObject child = c.transform.GetChild(i).gameObject;
                    Destroy(child);
                }
                if (RenderMode.ScreenSpaceOverlay == type)
                {
                    mStackViews.Clear();
                    //TODO:针对static的View处理
                    mStaticViews.Clear();
                    for (int i = 0; i < mStaticViewInfos.Count; i++)
                    {
                        ObjPools.Recover(mStaticViewInfos[i]);
                    }
                    mStaticViewInfos.Clear();
                }
            }
        }
예제 #7
0
        private void onSelectStatusChanges()
        {
            List <int> l = ObjPools.GetListInt();

            for (int i = 0; i < mItemSelectStatus.Count; i++)
            {
                if (mItemSelectStatus[i])
                {
                    l.Add(i);
                }
            }

            int[] arr = l.ToArray();
            ObjPools.Recover(l);

            if (null != mOnSelectChange)
            {
                mOnSelectChange(arr);
            }
            if (null != mOnSelectChangeLua)
            {
                mOnSelectChangeLua.Call <int[]>(arr);
            }
        }