GQ_Communicate/GQ_TongXin/Assets/Scripts/WJ/LineGroup/LineObjectPool.cs

157 lines
3.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LineObjectPool : MonoBehaviour
{
public static LineObjectPool Instance;
private void Awake()
{
Instance = this;
}
#region
//-------预制体-------
/// <summary>
/// 线缆预UI制体
/// </summary>
public GameObject line_item_prefab;
/// <summary>
/// 线缆组UI预制体
/// </summary>
public GameObject line_group_item_prefab;
//-------池对象-------
/// <summary>
/// 线缆池对象
/// </summary>
public Queue<LineItem> line_item_pool = new Queue<LineItem>();
/// <summary>
/// 线缆组池对象
/// </summary>
public Queue<LineGroupItem> line_group_item_pool = new Queue<LineGroupItem>();
//-------池操作-------
/// <summary>
/// 从池中取出
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="type"></param>
/// <returns></returns>
public T GetItemFromPool<T>()
{
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<LineItem>();
}
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<LineGroupItem>();
}
break;
default:
break;
}
return (T)resoult;
}
/// <summary>
/// 回收至池中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="item"></param>
public void PushItemToPool<T>(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
/// <summary>
/// 从池中拿线item
/// </summary>
/// <returns></returns>
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<LineItem>();
}
}
/// <summary>
/// 往池中放线item
/// </summary>
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
}