using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LineObjectPool : MonoBehaviour
{
public static LineObjectPool Instance;
private void Awake()
{
Instance = this;
}
#region 池对象操作
//-------预制体-------
///
/// 线缆预UI制体
///
public GameObject line_item_prefab;
///
/// 线缆组UI预制体
///
public GameObject line_group_item_prefab;
//-------池对象-------
///
/// 线缆池对象
///
public Queue line_item_pool = new Queue();
///
/// 线缆组池对象
///
public Queue line_group_item_pool = new Queue();
//-------池操作-------
///
/// 从池中取出
///
///
///
///
public T GetItemFromPool()
{
object resoult = null;
switch (typeof(T).Name)
{
case "LineItem":
//线缆
if (line_item_pool.Count > 0)
{
var item = line_item_pool.Dequeue();
item.gameObject.SetActive(true);
resoult = item;
}
else
{
var temp = Instantiate(line_item_prefab);
resoult = temp.GetComponent();
}
break;
case "LineGroupItem":
//线缆组
if (line_group_item_pool.Count > 0)
{
var item = line_group_item_pool.Dequeue();
item.gameObject.SetActive(true);
resoult = item;
}
else
{
var temp = Instantiate(line_group_item_prefab);
resoult = temp.GetComponent();
}
break;
default:
break;
}
return (T)resoult;
}
///
/// 回收至池中
///
///
///
public void PushItemToPool(T item)
{
switch (item)
{
case LineItem:
LineItem line_temp = item as LineItem;
line_temp.transform.SetParent(null);
line_temp.gameObject.SetActive(false);
line_temp.Clear();
line_item_pool.Enqueue(line_temp);
break;
case LineGroupItem:
LineGroupItem line_group_temp = item as LineGroupItem;
line_group_temp.transform.SetParent(null);
line_group_temp.gameObject.SetActive(false);
line_group_temp.Clear();
line_group_item_pool.Enqueue(line_group_temp);
break;
default: break;
}
}
#endregion
#region
#endregion
#region 弃用
///
/// 从池中拿线item
///
///
private LineItem GetLineItemFromPool()
{
if (line_item_pool.Count > 0)
{
var item = line_item_pool.Dequeue();
item.gameObject.SetActive(true);
Debug.Log("从线池取出" + line_item_pool.Count);
return item;
}
else
{
var temp = Instantiate(line_item_prefab);
Debug.Log("空线池,新增一个");
return temp.GetComponent();
}
}
///
/// 往池中放线item
///
private void PushLineItemToPool(LineItem item)
{
item.transform.SetParent(null);
item.gameObject.SetActive(false);
item.Clear();
line_item_pool.Enqueue(item);
Debug.Log("添加至线池" + line_item_pool.Count);
}
#endregion
}