using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace XFramework.Objects
{
///
/// 单个对象池
///
public class SingleObjPool where T:Object
{
///
/// 已经使用过的对象
///
private Dictionary> useDict;
///
/// 没有使用过的对象列表
///
private List> unUseList;
///
/// 该对象池存储的原始对象
/// 之后的对象都是其克隆体
///
private T original;
///
/// 单个对象池
///
/// 原始对象
public SingleObjPool(T __original)
{
original = __original;
useDict = new Dictionary>();
unUseList = new List>();
}
///
/// 创建对象容器 和所需对象
///
///
private ObjectContainer CreateObjContainer()
{
ObjectContainer container = new ObjectContainer();
container.Item = Object.Instantiate(original);
unUseList.Add(container);
return container;
}
///
/// 从对象池里获取一个对象
///
///
public T Get()
{
ObjectContainer container;
if (unUseList.Count == 0)
{
//Debug.Log("chuangjianxinwuti");
container = CreateObjContainer();
}
else
{
container = unUseList[0];
}
container.Consume();
unUseList.Remove(container);
useDict.Add(container.Item, container);
return container.Item;
}
///
/// 释放对象
///
/// 要释放的对象
/// 释放成功返回true
public bool Release(T item)
{
if (useDict.ContainsKey(item))
{
ObjectContainer container = useDict[item];
unUseList.Add(container);
useDict.Remove(item);
container.Release();
return true;
}
else
Debug.Log($"名为{item.name}的对象可能已经被回收");
return false;
}
}
}