private void DoFlags(RetrievedObjectData getObject, List <PoolingFlags> flags) { if (flags.Contains(PoolingFlags.POSITION_TO_ZERO)) { getObject.retrievedObject.transform.position = Vector3.zero; } }
public GameObject RetrieveOrCreate(int objectType) { RetrievedObjectData getObject = Retrieve(objectType, RetrieveMethod.BOTTOM); //if it found an object in the pooling list, return it and set it to occupied if (getObject.retrievedObject.isNotNull()) { return(SetupRetrieved(objectType, getObject)); } //if the pooler did not find an object, and does not allow spawning anymore objects in to replace it, return a null object if (!getObject.allowSpawning) { return(null); } //if it cannot be retrieved because the object pooler requires it to be instantiated if (getObject.retrievedObject.isNull()) { getObject = new RetrievedObjectData() { retrievedObject = Create(objectType) } } ; return(SetupRetrieved(objectType, getObject)); }
//sets up the retrieved object in the pool private GameObject SetupRetrieved(int objectType, RetrievedObjectData getObject) { //sets the availability to occupied now that the specific object is being used SetAvailabilityInPool(objectType, getObject.retrievedObject, PoolingAvailability.OCCUPIED); //do any pooling flags that the object settings define List <PoolingFlags> poolingFlags = GetSettingsFlags(objectType); if (getObject.retrievedObject.isNotNull() && poolingFlags.Count > 0) { DoFlags(getObject, poolingFlags); } return(getObject.retrievedObject); }