コード例 #1
0
ファイル: GamePooler.cs プロジェクト: Raelr/Game-Studio-1
        ///////// HELPER METHODS

        private void SetAvailabilityInPool(int objectType, GameObject objectKey, PoolingAvailability newAvailability)
        {
            //retreives the index of where the object key exists on the object type entry's list
            int objectDataIndex = GetObjectDataIndex(pool[objectType].objects, objectKey, objectType);

            //gets the pooled object data struct and sets the new availability
            if (objectDataIndex != -1)
            {
                PooledObjectData getObjectData = pool[objectType].objects[objectDataIndex];
                getObjectData.availability = newAvailability;

                //places the modified pooled object data struct back into the object type entry's list
                pool[objectType].objects[objectDataIndex] = getObjectData;
            }
        }
コード例 #2
0
ファイル: GamePooler.cs プロジェクト: Raelr/Game-Studio-1
        // checks whether it can receive the object from the pool
        private RetrievedObjectData Retrieve(int objectType, RetrieveMethod method)
        {
            // retrieve nothing if the pool doesn't even have an entry for that object type
            if (!pool.ContainsKey(objectType))
            {
                if (debug)
                {
                    Debug.Log("[POOLER] No entry exists for " + objectType);
                }
                return(new RetrievedObjectData()
                {
                    allowSpawning = true
                });
            }

            // retrieve nothing if the pool for that object type hasn't been filled to the brim
            if (GetPoolCount(objectType) < GetSettingsMaxCount(objectType))
            {
                if (debug)
                {
                    Debug.Log("[POOLER] " + objectType + " is not at max capacity yet  (" + GetPoolCount(objectType) + " < " + GetSettingsMaxCount(objectType) + ")");
                }
                return(new RetrievedObjectData()
                {
                    allowSpawning = true
                });
            }

            switch (method)
            {
            // iterates from bottom to top of the object type's list looking for an object that is 'pooled' to be reused
            case RetrieveMethod.BOTTOM:
                for (int i = 0; i < pool[objectType].objects.Count; i++)
                {
                    PooledObjectData pooledObjectData = pool[objectType].objects[i];
                    if (pooledObjectData.availability == PoolingAvailability.POOLED)
                    {
                        return new RetrievedObjectData()
                               {
                                   retrievedObject = pooledObjectData.pooledObject
                               }
                    }
                    ;
                }
                if (debug)
                {
                    Debug.Log("[POOLER] All " + objectType + " objects are currently being used in game");
                }
                return(new RetrievedObjectData()
                {
                    allowSpawning = false
                });
            }

            // if the pooling method used is undefined / null
            if (debug)
            {
                Debug.LogError("[POOLER] Unknown pool retrieving method");
            }
            return(new RetrievedObjectData()
            {
                allowSpawning = false
            });
        }