public GameObject Spawn(PoolableObjectKinds kind, bool shouldActivate = true) { var poolableObject = this.GetPoolableObjectByKind(kind); var objects = poolableObject.objects; for (int i = 0; i < objects.Count; i++) { if (!objects[i].activeInHierarchy) { if (shouldActivate) { objects[i].SetActive(true); foreach (var pr in objects[i].GetComponentsInChildren <PoolableResettable>()) { pr.ResetState(); } } return(objects[i]); } } print("Doubling pool (before: " + objects.Count + ")"); if (poolableObject.autoscale) { InstantiateToPool(poolableObject, objects.Count); } print("Doubled pool (after: " + objects.Count + ")"); objects = poolableObject.objects; for (int i = 0; i < objects.Count; i++) { if (!objects[i].activeInHierarchy) { if (shouldActivate) { objects[i].SetActive(true); } return(objects[i]); } } return(null); }
public PoolableObject GetPoolableObjectByKind(PoolableObjectKinds kind) { return(this.poolableObjects.Find((f) => f.kind == kind)); }