Ejemplo n.º 1
0
    public static PoolObject Spawn(PoolObject prefab)
    {
        if (prefab == null)
        {
            Debug.LogError("Null prefab, cannot spawn or get from pool.");
            return(null);
        }

        var fromPool = GetFromPool(prefab.GetInstanceID());

        if (fromPool == null)
        {
            var sp = CreateNew(prefab);
            sp.transform.parent = null;
            sp.gameObject.SetActive(true);
            sp.IsPooled = false;
            sp.InvokeUponSpawn();
            return(sp);
        }
        else
        {
            fromPool.transform.parent = null;
            fromPool.gameObject.SetActive(true);
            fromPool.IsPooled = false;
            fromPool.InvokeUponSpawn();
            return(fromPool);
        }
    }
Ejemplo n.º 2
0
    public void CreatePool(PoolObject prefab)
    {
        int id = prefab.GetInstanceID();

        poolDictionary.Add(id, new Queue <PoolObject>());
        poolDictionary[id].Enqueue(CreatePoolObject(prefab, id));
    }
Ejemplo n.º 3
0
    public PoolObject UseObject(PoolObject prefab, Vector3 position, Quaternion rotation, bool setActive = true)
    {
        int id = prefab.GetInstanceID();

        //Controls if dictionary have created pool. if not creates a new one
        if (!poolDictionary.ContainsKey(id))
        {
            CreatePool(prefab, 1);
        }

        //Controls if pool have object that can be used. if not creates new poolobject
        if (poolDictionary[id].Count == 0)
        {
            poolDictionary[id].Enqueue(CreatePoolObject(prefab, id));
        }

        PoolObject gObject = poolDictionary[id].Dequeue();

        pooledObjects.Add(gObject);
        if (gObject.GetComponent <Rigidbody>() != null)
        {
            gObject.GetComponent <Rigidbody>().velocity        = Vector3.zero;
            gObject.GetComponent <Rigidbody>().angularVelocity = Vector3.zero;
        }

        gObject.transform.position = position;
        gObject.transform.rotation = rotation;
        gObject.gameObject.SetActive(setActive ? true : false);
        return(gObject);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Get the selected pool asteroid
    /// </summary>
    /// <param name="poolObject"></param>
    /// <returns>Pool Asteroid object</returns>
    public PoolObject GetObject(PoolObject poolObject)
    {
        int poolKey = poolObject.GetInstanceID();

        if (poolDictionary.ContainsKey(poolKey))
        {
            List <PoolObject> poolObjectList = poolDictionary[poolKey];

            for (int i = 0; i < poolObjectList.Count; i++)
            {
                if (poolObjectList[i].active == false)
                {
                    return(poolObjectList[i]);
                }
            }

            InstantiateNewPoolObject(poolObject, poolObjectList);

            //return object added
            return(poolObjectList[poolObjectList.Count - 1]);
        }
        else
        {
            List <PoolObject> newPoolObjectsList = new List <PoolObject>();
            InstantiateNewPoolObject(poolObject, newPoolObjectsList);

            //Add in poolDictionary
            poolDictionary.Add(poolKey, newPoolObjectsList);

            //return object added
            return(newPoolObjectsList[newPoolObjectsList.Count - 1]);
        }
    }
Ejemplo n.º 5
0
        public void Init()
        {
            DisplayUI(false);

            m_PoolObjectID = 0;

            #region Initaizle the floating damage number.
            if (FloatingNumberPerfab)
            {
                // Create a lot of object for pooling.
                ObjectPoolManager.Instance.CreaterPool(FloatingNumberPerfab, m_FloatingNumberRoot, 50);
                m_PoolObjectID = FloatingNumberPerfab.GetInstanceID();
            }
            else
            {
                Debug.Log("Prefab not exist, please check agian.");
            }
            #endregion

            m_AmmoCountCanvasGroup.alpha = 1;
            m_AmmoStateCanvasGroup.alpha = 0;

            m_DamageIndicatorManager = GetComponentInChildren <DamageIndicatorManager>();
            if (!m_DamageIndicatorManager)
            {
                Debug.Log("Can't find damage indicator manager.");
            }

            RespawnCountDownUI = GetComponentInChildren <RespawnCountDown>();
            if (!RespawnCountDownUI)
            {
                Debug.Log("Can't find respawn count down script.");
            }

            KillConfirmUI = GetComponentInChildren <KillComfirmation>();
            if (!KillConfirmUI)
            {
                Debug.Log("Can't find kill comfirmation script.");
            }

            //RoundInfoUI = GetComponentInChildren<RoundInfo>();
            //if (!RoundInfoUI) Debug.Log("Can't find kill RoundInfo script.");

            CorssHair = GetComponentInChildren <CorssHairManager>();
            if (!CorssHair)
            {
                Debug.Log("Can't find CorssHairManager script.");
            }

            CorssHair.Init();
        }
Ejemplo n.º 6
0
    private static PoolObject CreateNew(PoolObject prefab)
    {
        if (prefab == null)
        {
            return(null);
        }

        prefab._id = prefab.GetInstanceID();
        var spawned = Instantiate(prefab);

        Debug.Assert(spawned.PrefabID == prefab._id);

        return(spawned);
    }
Ejemplo n.º 7
0
    public void CreatePool(PoolObject prefab, int poolSize)
    {
        int id = prefab.GetInstanceID();

        if (!poolDictionary.ContainsKey(id))
        {
            poolDictionary.Add(id, new Queue <PoolObject>());

            for (int i = 0; i < poolSize; i++)
            {
                poolDictionary[id].Enqueue(CreatePoolObject(prefab, id));
            }
        }
    }
Ejemplo n.º 8
0
    public void DeletePool(PoolObject prefab)
    {
        int id = prefab.GetInstanceID();

        if (poolDictionary.ContainsKey(id))
        {
            int poolSize = poolDictionary[id].Count;

            for (int i = 0; i < poolSize; i++)
            {
                DeletePoolObject(poolDictionary[id].Dequeue());
            }

            poolDictionary.Remove(id);
        }
    }
Ejemplo n.º 9
0
        public void Init()
        {
            m_PoolObjectID = 0;

            #region Initaizle the floating damage number.
            if (FloatingNumberPerfab)
            {
                // Create a lot of object for pooling.
                ObjectPoolManager.Instance.CreaterPool(FloatingNumberPerfab, m_FloatingNumberRoot, 50);
                m_PoolObjectID = FloatingNumberPerfab.GetInstanceID();
            }
            else
            {
                Debug.Log("Prefab not exist, please check agian.");
            }
            #endregion
        }
Ejemplo n.º 10
0
        public override void InitUI()
        {
            base.InitUI();

            Properties = new UIProperties(
                UIframework.UIManager.SceneUIs.DamageHUDUI,
                UIframework.UIManager.DisplayUIMode.Normal,
                UIframework.UIManager.UITypes.UnderBlurEffect,
                true, true);

            m_IndicatorList            = new List <DamageIndicator>();
            m_IndicatorDisplayDuration = 4;
            m_PerfabInstanceID         = 0;

            // Create a new pool in the object pooling manager for the indicators.
            ObjectPoolManager.Instance.CreaterPool(IndicatorUIPerfab, IndicatorRoot, 12);
            m_PerfabInstanceID = IndicatorUIPerfab.GetInstanceID();
        }
Ejemplo n.º 11
0
    public PoolObject UsePoolObject(PoolObject poolobject, Vector3 transform, Quaternion rotation)
    {
        int poolid = poolobject.GetInstanceID();

        if (!poolDictionary.ContainsKey(poolid))
        {
            CreatePool(poolobject);
        }
        if (poolDictionary[poolid].Count == 0)
        {
            poolDictionary[poolid].Enqueue(CreatePoolObject(poolobject, poolid));
        }
        PoolObject pooledObject = poolDictionary[poolid].Dequeue();

        pooledObject.transform.position = transform;
        pooledObject.transform.rotation = rotation;
        pooledObject.gameObject.SetActive(true);
        return(pooledObject);
    }
Ejemplo n.º 12
0
    public PoolObject UseObject(PoolObject prefab, Vector3 position, Quaternion rotation, bool setActive = true)
    {
        int id = prefab.GetInstanceID();

        //Controls if dictionary have created pool. if not creates a new one
        if (!poolDictionary.ContainsKey(id))
        {
            CreatePool(prefab, 1);
        }

        //Controls if pool have object that can be used. if not creates new poolobject
        if (poolDictionary[id].Count == 0)
        {
            poolDictionary[id].Enqueue(CreatePoolObject(prefab, id));
        }

        PoolObject gObject = poolDictionary[id].Dequeue();

        gObject.transform.position = position;
        gObject.transform.rotation = rotation;
        gObject.gameObject.SetActive(setActive ? true : false);
        return(gObject);
    }