163 lines
4.2 KiB
C#
163 lines
4.2 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>
|
||
/// 线缆预UI制体(右)
|
||
/// </summary>
|
||
public GameObject line_item_prefab_right;
|
||
//-------池对象-------
|
||
|
||
/// <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>
|
||
public Queue<LineItem> line_item_pool_right = new Queue<LineItem>();
|
||
//-------池操作-------
|
||
|
||
/// <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
|
||
}
|