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); } }
public void CreatePool(PoolObject prefab) { int id = prefab.GetInstanceID(); poolDictionary.Add(id, new Queue <PoolObject>()); poolDictionary[id].Enqueue(CreatePoolObject(prefab, id)); }
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); }
/// <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]); } }
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(); }
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); }
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)); } } }
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); } }
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 }
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(); }
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); }
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); }