GQ_Communicate/GQ_URP/GQ/Assets/Scripts/WJ/LineGroup/LineObjectPool.cs

163 lines
4.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}