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);
     }
 }
Beispiel #3
0
    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);
    }
Beispiel #4
0
 public virtual void Connect(FrostyPoolInstance instance, bool isPostConector = false)
 {
     if (!isPostConector)
     {
         this.poolInstance = instance;
     }
 }
Beispiel #5
0
    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));
 }
Beispiel #9
0
 public bool TryRetrieve(FrostyPoolInstance pool, out GameObject obj)
 {
     return(TryRetrieve(pool, Vector3.zero, Quaternion.identity, out obj));
 }