Esempio n. 1
0
 public bool Init(QObjCreator <T> creator, QObjCreatorFactory <T> creatorFactory = null)
 {
     FreeCount        = 0;
     TotleCount       = 0;
     m_creator        = creator;
     m_creatorFactory = creatorFactory;
     return(Resize());
 }
Esempio n. 2
0
    //public void Realse()
    //{
    //    if (BAK_CREATOR == null)
    //    {
    //        Debug.LogError("QObjPool 的备份对象生成器为null");
    //        return;
    //    }

    //    for (int i = 0; i < FreeCount; i++)
    //    {
    //        T obj = m_pool.Dequeue();
    //        BAK_CREATOR.RealseObject(obj);
    //    }

    //    FreeCount        = 0;
    //    BAK_CREATOR      = null;
    //    m_creator        = null;
    //    m_creatorFactory = null;
    //}

    /// <summary>
    /// 按指定对象个数释放,当leftCout == 0 时表示整个pool的对象都释放
    /// </summary>
    /// <param name="count"></param>
    /// <param name="leftCout"></param>
    public void Realse(int count, out int leftCout)
    {
        if (BAK_CREATOR == null)
        {
            Debug.LogWarning("QObjPool 的备份对象生成器为null");
            leftCout = FreeCount;
            return;
        }

        int realseCount = Mathf.Min(count, FreeCount);

        for (int i = 0; i < realseCount; i++)
        {
            T obj = m_pool.Dequeue();
            BAK_CREATOR.RealseObject(obj);
            FreeCount--;
        }

        leftCout = FreeCount;

        if (FreeCount <= 0)
        {
            m_pool = null;

            BAK_CREATOR.Realse();
            BAK_CREATOR = null;

            if (m_creator != null)
            {
                m_creator.Realse();
                m_creator = null;
            }

            if (m_creatorFactory != null)
            {
                m_creatorFactory.Realse();
                m_creatorFactory = null;
            }
        }
    }
Esempio n. 3
0
    private T [] CreatObjects(QObjCreator <T> creator, QObjCreatorFactory <T> creatorFactory)
    {
        T [] objs = null;

        if (creator != null)
        {
            m_creator   = creator;
            BAK_CREATOR = creator;
            objs        = m_creator.CreateObjects();
        }
        else if (creatorFactory != null)
        {
            QObjCreator <T> _creator = creatorFactory.CreatCreator();
            BAK_CREATOR = _creator;
            objs        = _creator.CreateObjects();
        }
        else
        {
            objs = null;
        }

        return(objs);
    }
Esempio n. 4
0
    public virtual QObjCreator <T> CreatCreator()
    {
        QObjCreator <T> creator = null;

        return(creator);
    }