Example #1
0
        public PoolItem GetPoolItem(PoolType poolType)
        {
            if (!m_poolItems.ContainsKey(poolType.ToString()))
            {
                Debug.LogError("No pool item configured for type: " + poolType);
                return(null);
            }

            PoolItem poolItem = null;

            for (int i = 0; i < m_poolItems[poolType.ToString()].Count; i++)
            {
                if (!m_poolItems[poolType.ToString()][i].Allocated)
                {
                    poolItem = m_poolItems[poolType.ToString()][i];
                    break;
                }
            }

            if (poolItem == null)
            {
                poolItem = SpawnPoolItem(poolType);
            }

            poolItem.OnAllocate();
            return(poolItem);
        }
Example #2
0
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="poolType">对象池类型</param>
    /// <param name="gameObject">Obj</param>
    /// <param name="cont">初始化大小</param>
    public void InitPool(PoolType poolType, GameObject prefab, int count = 20)
    {
        //创建个MgrPool节点 把所有池子都归到这个节点下 方便管理
        if (_poolTotal == null)
        {
            _poolTotal = new GameObject("TamToastPool").transform;
        }

        if (!_poolDic.ContainsKey(poolType))
        {
            if (_unifiedMgr)
            {
                //如果是新池子 创建一个节点
                Transform parent = new GameObject("Pool_" + poolType.ToString()).transform;
                parent.SetParent(_poolTotal);
                _pathDic.Add(poolType, parent);
            }
            _poolDic.Add(poolType, new Queue <GameObject>());
            CreatorItem(poolType, prefab, count);
        }
        else
        {
            //throw new Exception(string.Format("该池子:'{0}'已存在,请勿重复初始化!", poolType));
        }
    }
Example #3
0
    // 从池中获取一个能用的对象
    public GameObject getObjFromPool(PoolType type)
    {
        if (!hashTable.ContainsKey(type))
        {
            throw new Exception("Have not create " + type.ToString() + " Pool");
        }

        PoolObj    poolObj = hashTable[type] as PoolObj;
        GameObject t;

        for (int i = 0; i < poolObj.objList.Count; i++)
        {
            t = poolObj.objList[(poolObj.index + i) % poolObj.objList.Count];
            // Active 为False 即为可以拿出来使用的对象,否则寻找下一个
            if (!t.activeSelf)
            {
                poolObj.index = (poolObj.index + i) % poolObj.objList.Count;
                t.SetActive(true);
                return(t);
            }
        }
        // 所有的都正在使用……只能添加新的了
        t = addToPool(poolObj);
        t.SetActive(true);
        return(t);
    }
Example #4
0
    public GameObject GetPooledObject(PoolType poolType, Vector3 pos, Quaternion rot)
    {
        if (poolDictionary.ContainsKey(poolType))
        {
            // Dequeue object and activates it
            if (poolDictionary[poolType].pooledGameObjects.Count != 0)
            {
                GameObject pooledObject = poolDictionary[poolType].pooledGameObjects.Dequeue();
                pooledObject.transform.position = pos;
                pooledObject.transform.rotation = rot;

                pooledObject.SetActive(true);
                return(pooledObject);
            }

            // Creates a new object and instantly returns it
            else
            {
                GenerateNewObject(poolType);

                GameObject pooledObject = poolDictionary[poolType].pooledGameObjects.Dequeue();
                pooledObject.transform.position = pos;
                pooledObject.transform.rotation = rot;

                pooledObject.SetActive(true);
                return(pooledObject);
            }
        }
        else
        {
            Debug.LogWarning($"Requested Object from a non existing pool! {poolType.ToString()}");
            return(null);
        }
    }
        public PutPoolPartitionSpectraS3Request(string name, PoolType type)
        {
            this.Name = name;
            this.Type = type;

            this.QueryParams.Add("name", name);

            this.QueryParams.Add("type", type.ToString());
        }
Example #6
0
    EmitterManager CreateEmitterManager(PoolType pType, Transform parent, Vector3 pos)
    {
        var go        = ResourceManager.Load <GameObject>(PathManager.GetEmitterPath(pType.ToString()));
        var emitterGo = PoolManager.InstantiateGameObject(go, pType);
        var emitter   = emitterGo.GetComponent <EmitterManager>();

        emitter.transform.SetParent(parent, false);
        emitter.transform.position = pos;
        return(emitter);
    }
Example #7
0
    private void GenerateNewObject(PoolType poolType)
    {
        if (poolDictionary.ContainsKey(poolType))
        {
            // Instantiate Object inside the respective Pool Container
            GameObject newObject = Instantiate(poolDictionary[poolType].prefabToInstantiate, poolDictionary[poolType].poolContainer.transform);

            // Add tracker to the Object
            newObject.AddComponent <ObjectPoolTracker>().SetObjectType(poolType);

            // Queues the object to its respective pool (Tracker calls ReturnPooledObject())
            newObject.SetActive(false);
        }
        else
        {
            Debug.LogWarning($"Requested Object from a non existing pool! {poolType.ToString()}");
        }
    }
Example #8
0
        public Pool(PoolType type, GameObject prefab, int count)
        {
            PoolTransform = (new GameObject(type.ToString())).transform;

            _inActiveObjects = new Dictionary <int, Poolee>();
            _activeObjects   = new Dictionary <int, Poolee>();

            _prefab = prefab;
            _type   = type;

            Poolee temp;

            for (int i = 0; i < count; i++)
            {
                temp = Create(_type, _prefab);
                temp.gameObject.SetActive(false);
                temp.transform.SetParent(PoolTransform);
                _inActiveObjects.Add(temp.GetInstanceID(), temp);
            }
        }
Example #9
0
        PoolItem SpawnPoolItem(PoolType poolType)
        {
            for (int i = 0; i < m_poolConfig.PoolItems.Length; i++)
            {
                if (m_poolConfig.PoolItems[i].Type == poolType)
                {
                    GameObject newPoolObject = Instantiate(m_poolConfig.PoolItems[i].Item.Object);
                    PoolItem   newPoolItem   = newPoolObject.GetComponent <PoolItem>();

                    newPoolObject.transform.SetParent(m_poolParents[m_poolConfig.PoolItems[i].Type.ToString()]);
                    newPoolObject.SetActive(false);

                    m_poolItems[poolType.ToString()].Add(newPoolItem);

                    return(newPoolItem);
                }
            }

            return(null);
        }
        // 创建一个新的对象池
        public T CreateObjectPool <T>(PoolType poolName, Transform parent = null) where T : ObjectPool, new()
        {
            if (m_PoolDic.ContainsKey(poolName))
            {
                return(m_PoolDic[poolName] as T);
            }

            GameObject obj = new GameObject(poolName.ToString());

            if (parent != null)
            {
                obj.transform.SetParent(parent);
            }
            else
            {
                obj.transform.SetParent(m_RootPoolTrans);
            }
            T pool = new T();

            pool.Init(poolName, obj.transform);
            m_PoolDic.Add(poolName, pool);
            return(pool);
        }
 public GetBucketCapacitySummarySpectraS3Request WithPoolType(PoolType? poolType)
 {
     this._poolType = poolType;
     if (poolType != null)
     {
         this.QueryParams.Add("pool_type", poolType.ToString());
     }
     else
     {
         this.QueryParams.Remove("pool_type");
     }
     return this;
 }
        public IEnumerable <Permission> GetPermissions(PoolType level)
        {
            var permissions = new List <Permission>();

            foreach (var provider in _permissionProviders)
            {
                if (provider.Level == level)
                {
                    permissions.AddRange(provider.PermissionGroups());
                }
            }

            if (permissions.Count == 0)
            {
                throw new NotImplementedException($"No permissions registered for level {level.ToString()}");
            }

            return(permissions);
        }
 public GetPoolPartitionsSpectraS3Request WithType(PoolType? type)
 {
     this._type = type;
     if (type != null)
     {
         this.QueryParams.Add("type", type.ToString());
     }
     else
     {
         this.QueryParams.Remove("type");
     }
     return this;
 }