public void Release(FrostyPoolInstance poolInstance, GameObject obj) { // No pool instance? Destroy object if (poolInstance == null) { GameObject.Destroy(obj); return; } // Unknown pool? Get out if (!pools.ContainsKey(poolInstance)) { return; } // Try to find from pool and deactivate it for (int i = 0; i < pools[poolInstance].Length; i++) { if (pools[poolInstance][i].poolObject.transform.GetInstanceID() == obj.transform.GetInstanceID()) { pools[poolInstance][i].available = true; pools[poolInstance][i].poolObject.gameObject.SetActive(false); return; } } // No pool, kill the object GameObject.Destroy(obj); }
public override void Connect(FrostyPoolInstance instance, bool isChildrenConector) { if (isChildrenConector) { base.Connect(instance); } }
public bool TryRetrieve(FrostyPoolInstance pool, Vector3 position, Quaternion rotation, out GameObject obj) { obj = null; if (pool == null) { throw new System.Exception("Invalid or disconnected pool instance"); } // No pool? if (!pools.ContainsKey(pool)) { return(false); } // Try to find an available slot from pool for (int i = 0; i < pools[pool].Length; i++) { if (pools[pool][i].available) { pools[pool][i].poolObject.gameObject.SetActive(true); for (int p = 0; p < pools[pool][i].poolBehaviours.Length; p++) { pools[pool][i].poolBehaviours[p].ResetState(); } pools[pool][i].poolObject.position = position; pools[pool][i].poolObject.rotation = rotation; pools[pool][i].available = false; obj = pools[pool][i].poolObject.gameObject; return(true); } } return(false); }
public virtual void Connect(FrostyPoolInstance instance, bool isPostConector = false) { if (!isPostConector) { this.poolInstance = instance; } }
public GameObject Retrieve(FrostyPoolInstance pool, Vector3 position, Quaternion rotation) { GameObject obj = null; if (pool == null) { throw new System.Exception("Invalid or disconnected pool instance"); } if (!TryRetrieve(pool, position, rotation, out obj)) { obj = Instantiate(pool.objectType); obj.transform.position = position; obj.transform.rotation = rotation; } return(obj); }
public void AddInstanceToPool(FrostyPoolInstance instance) { this.pools.Add(instance, new FrostyPooledObject[instance.count]); for (int i = 0; i < this.pools[instance].Length; i++) { this.pools[instance][i] = new FrostyPooledObject() { available = true }; this.pools[instance][i].poolObject = GameObject.Instantiate(instance.objectType).transform; this.pools[instance][i].poolObject.gameObject.SetActive(false); this.pools[instance][i].poolObject.transform.SetParent(this.pool.transform, false); var poolBehaviours = this.pools[instance][i].poolObject.GetComponentsInChildren <FrostyPoolableObject>(); this.pools[instance][i].poolBehaviours = poolBehaviours; for (int p = 0; p < poolBehaviours.Length; p++) { poolBehaviours[p].Connect(instance); } } }
public GameObject Retrieve(FrostyPoolInstance poolInstance, Vector3 position) { return(Retrieve(poolInstance, position, Quaternion.identity)); }
public GameObject Retrieve(FrostyPoolInstance poolInstance) { return(Retrieve(poolInstance, Vector3.zero, Quaternion.identity)); }
public bool TryRetrieve(FrostyPoolInstance pool, out GameObject obj) { return(TryRetrieve(pool, Vector3.zero, Quaternion.identity, out obj)); }