internal void WriteMethods(IndentedTextWriter2 writer, ShortTypeNameGenerator sng) { RetrieveExplicitMethod.Write(writer, sng); writer.WriteLine(); RetrieveMethod.Write(writer, sng); writer.WriteLine(); RetrieveAllExplicitMethod.Write(writer, sng); writer.WriteLine(); RetrieveAllMethod.Write(writer, sng); writer.WriteLine(); RetrieveFastMethod.Write(writer, sng); }
// 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 }); }