Exemplo n.º 1
0
    public void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false, EPoolItemRemoveMethod removeMethod = EPoolItemRemoveMethod.OnDisEnable)
    {
        if (item == null)
        {
            return;
        }

        if (item.owner != null)
        {
            CSObjectPoolBase pool = item.owner;

            if (pool != null)
            {
                pool.RemovePoolItem(item, isDestroyResImmi);
            }
            else
            {
                GameObject.Destroy(item.go);
                item.go = null;
            }
        }
        else
        {
            if (item.go != null)
            {
                GameObject.Destroy(item.go);
                item.go = null;
            }
        }
    }
Exemplo n.º 2
0
 public override void AddPoolItem(CSObjectPoolItem item)
 {
     refCount++;
     item.isUse = true;
     mList.Remove(item);
     mList.Add(item);//isUse = true:插入到最后
 }
Exemplo n.º 3
0
    protected override void DestroyPoolItem(CSObjectPoolItem item)
    {
        if (item == null)
        {
            return;
        }
        if (item.isUse)
        {
            return;            //正在使用的话,不进行删除
        }
        if (item.go != null)
        {
            Destroy(item.go);
        }
        item.go = null;
        mList.Remove(item);

        if (mList.size == 0)
        {
            bool isDestroy = mMgr.DestroyPool(poolName);
            if (!isDestroy)
            {
                mLastNotUseTime = mLastNotUseTime + 10 > Time.time ? Time.time : mLastNotUseTime + 10;
                mList.Add(item);
            }
        }
    }
Exemplo n.º 4
0
 public override void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false)
 {
     if (mList.Contains(item))
     {
         refCount--;
         refCount   = Mathf.Max(refCount, 0);
         item.isUse = false;
         mList.Remove(item);
         mList.Insert(0, item);//isUse false:未使用的放到最前面
         if (refCount == 0)
         {
             if (item.go != null)
             {
                 item.go.SetActive(false);
             }
             if (!isDestroyResImmi)
             {
                 mLastNotUseTime = Time.time;
             }
             else
             {
                 mLastNotUseTime = 0;
             }
         }
     }
 }
    protected override void DestroyPoolItem(CSObjectPoolItem item)
    {
        if (item == null)
        {
            return;
        }

        if (item.isUse)
        {
            return;//正在使用的话,不进行删除
        }

        if (CSObjectPoolMgr.Instance == null)
        {
            return;
        }

        if (item.go != null)
        {
            Destroy(item.go);
        }
        item.go = null;
        mList.Remove(item);

        if (mList.size == 0)
        {
            bool isDestroy = CSObjectPoolMgr.Instance.DestroyPool(poolName);
            if (!isDestroy)
            {
                //mLastNotUseTime = mLastNotUseTime+1;//防止不能被删除的资源没有引用时Update中不停调用。但是释放的时候同一帧会进行等待,确认下代码
                mList.Add(item);
            }
        }
    }
Exemplo n.º 6
0
    public CSObjectPoolItem GetAndAddPoolItem_Class_ProjectOverride(string poolNameShow, string poolName, GameObject go, Type type, params object[] args)
    {
        CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, EPoolType.Normal, 1000, true);
        CSObjectPoolBase pool     = mDic[poolName];

        poolItem.go = go;
        pool.AddPoolItem(poolItem);
        return(poolItem);
    }
Exemplo n.º 7
0
 /// <summary>
 /// 设置放入对象池的时间
 /// </summary>
 /// <param name="mPoolItem"></param>
 /// <param name="time">秒</param>
 public void SetPoolRemoveTime(CSObjectPoolItem mPoolItem, float time, EPoolItemRemoveMethod removeMethod = EPoolItemRemoveMethod.OnDisEnable)
 {
     if (mPoolItem == null)
     {
         return;
     }
     mPoolItem.RemoveTime = Time.time + time;
     WaitRemoveList.Add(mPoolItem);
 }
Exemplo n.º 8
0
 void RemovePoolItem()
 {
     if (CSObjectPoolMgr.Instance != null)
     {
         CSObjectPoolMgr.Instance.RemovePoolItem(poolItem);
         poolItem = null;
         mAtlas   = null;
     }
 }
 public override void AddPoolItem(CSObjectPoolItem item)
 {
     refCount++;
     item.isUse = true;
     //mList.Remove(item);
     if (!mList.Contains(item))
     {
         mList.Add(item);//isUse = true:插入到最后
     }
 }
Exemplo n.º 10
0
    private CSObjectPoolItem AddPool(string resPath)
    {
        CSResource resource = CSResourceManager.Instance.GetLoadedRes(resPath);

        if (resource == null)
        {
            return(null);
        }
        CSObjectPoolItem item = resource.GetPoolItem(EPoolType.Normal);

        return(item);
    }
Exemplo n.º 11
0
    private void TryCreateBody()
    {
        Model3DComponentLoadData data = GetWaitModelComponent(EModelStructure.Body) as Model3DComponentLoadData;

        if (data != null)
        {
            RemoveWaitModelComponent(EModelStructure.Body);
            CSObjectPoolItem body = AddPool(data.ResPath);
            if (body != null && body.go != null)
            {
            }
        }
    }
Exemplo n.º 12
0
    public override void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false)
    {
        int index = -1;

        if (mList.Contains(item, ref index))
        {
            refCount--;
            refCount   = Mathf.Max(refCount, 0);
            item.isUse = false;
            if (item.go != null)
            {
                if (item.owner == null || item.owner.transform == null)
                {
                    //item.go.SetActive(false);
                    GameObject.Destroy(item.go);
                    item.go = null;
                }
                else if (item.owner.RemoveMethod == EPoolItemRemoveMethod.OnDisEnable)
                {
                    item.go.SetActive(false);
                    item.go.transform.parent = item.owner.transform;
                }
                else if (item.owner.RemoveMethod == EPoolItemRemoveMethod.RemoveVision)
                {
                    item.go.transform.localPosition = Vector3.zero;
                }
            }
            mList.MoveToFront(index);
            //mList.Remove(item);
            //mList.Insert(0, item);//isUse false:未使用的放到最前面
            if (refCount == 0)
            {
                if (!isDestroyResImmi)
                {
                    mLastNotUseTime = Time.time;
                }
                else
                {
                    mLastNotUseTime = -releaseTime;
                }
            }
        }
        else
        {
            if (item != null)
            {
                GameObject.Destroy(item.go);
                item.go = null;
            }
        }
    }
Exemplo n.º 13
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="poolNameShow"></param>
    /// <param name="poolName"></param>
    /// <param name="go">例如CSAvater,如果不使用了,需要将go(CSAvater。GO)隐藏掉,不然场景上面会有残留</param>
    /// <param name="poolType"></param>
    /// <param name="poolNum"></param>
    /// <param name="isForever"></param>
    /// <returns></returns>
    CSObjectPoolItem GetAndAddPoolItem(string poolNameShow, string poolName, GameObject go,
                                       EPoolType poolType, int poolNum, bool isForever, Type type, params object[] args)
    {
        CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, poolType, poolNum, isForever);
        CSObjectPoolBase pool     = mDic[poolName];

        poolItem.go = go;
        if (poolItem.objParam == null && type != null)
        {
            poolItem.objParam = Activator.CreateInstance(type, args);
        }
        pool.AddPoolItem(poolItem);
        return(poolItem);
    }
Exemplo n.º 14
0
    public CSObjectPoolItem GetAndAddPoolItem_GameObject(string poolNameShow, string poolName, GameObject origin, bool isForever = false,
                                                         EPoolType type = EPoolType.Normal, bool IsClone = true)
    {
        CSObjectPoolItem poolItem = GetPoolItem(poolNameShow, poolName, type, 1000, isForever);
        CSObjectPoolBase pool     = mDic[poolName];

        pool.AddPoolItem(poolItem);

        if (poolItem.go == null && IsClone)
        {
            poolItem.go = GameObject.Instantiate(origin) as GameObject;
        }
        return(poolItem);
    }
Exemplo n.º 15
0
    public override CSObjectPoolItem GetGOFromPool()
    {
        CSObjectPoolItem item = null;

        if (mList.size > 0)
        {
            item = mList[0];
        }
        else
        {
            item       = new CSObjectPoolItem();
            item.owner = this;
        }
        return(item);
    }
Exemplo n.º 16
0
    public override CSObjectPoolItem GetGOFromPool()
    {
        CSObjectPoolItem item = null;

        if (mList.size > 0 && !mList[0].isUse)//如果正在使用,新建Item,外部去克隆
        {
            item = mList[0];
        }
        else
        {
            item       = new CSObjectPoolItem();
            item.owner = this;
        }
        return(item);
    }
Exemplo n.º 17
0
    public void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false)
    {
        if (item == null)
        {
            return;
        }

        if (item.owner != null)
        {
            CSObjectPoolBase pool = item.owner;

            if (pool != null)
            {
                pool.RemovePoolItem(item, isDestroyResImmi);
            }
        }
    }
Exemplo n.º 18
0
 public override void AddPoolItem(CSObjectPoolItem item)
 {
     if (refCount == 0 && item.go != null)
     {
         item.go.SetActive(true);
     }
     if (!mList.Contains(item))
     {
         refCount++;
         item.isUse = true;
         mList.Remove(item);
         mList.Add(item);//isUse = true:插入到最后
     }
     else//Atlas如果存在,外部调用AddPoolItem只是添加一个引用计数
     {
         refCount++;
         item.isUse = true;
     }
 }
Exemplo n.º 19
0
    /// <summary>
    /// 得到Avater的对象缓存池
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="type"></param>
    /// <returns></returns>
    protected CSAvater GetPoolItem <T>(Type type) where T : CSAvater, new ()
    {
        if (CSObjectPoolMgr.Instance == null)
        {
            return(null);
        }

        CSAvater         avater   = null;
        string           s        = type.ToString();
        CSObjectPoolItem poolItem = CSObjectPoolMgr.Instance.GetAndAddPoolItem_Class_ProjectOverride(s, s, null, type, null);

        if (poolItem.objParam == null && type != null)
        {
            poolItem.objParam = CSAvater.Create <T>();
        }
        avater = poolItem.objParam as CSAvater;
        avater.InitCreate();
        avater.PoolItem = poolItem;
        return(avater);
    }
Exemplo n.º 20
0
    protected override void DestroyPoolItem(CSObjectPoolItem item)
    {
        if (item == null)
        {
            return;
        }
        if (item.isUse)
        {
            return;            //正在使用的话,不进行删除
        }
        if (item.go != null)
        {
            Destroy(item.go);
        }
        item.go = null;
        mList.Remove(item);

        if (mList.size == 0)
        {
            mMgr.DestroyPool(poolName);
        }
    }
Exemplo n.º 21
0
 public virtual void ForceUpdateList(CSObjectPoolItem item)
 {
 }
Exemplo n.º 22
0
 public virtual void AddPoolItem(CSObjectPoolItem item)
 {
 }
Exemplo n.º 23
0
 protected virtual void DestroyPoolItem(CSObjectPoolItem item)
 {
 }
Exemplo n.º 24
0
 public virtual void RemovePoolItem(CSObjectPoolItem item, bool isDestroyResImmi = false)
 {
 }
Exemplo n.º 25
0
 public override void ForceUpdateList(CSObjectPoolItem item)
 {
     mList.Remove(item);
     mList.Add(item);//isUse = true:插入到最后
 }