using System;
namespace TEngine
{
///
/// 对象池基类。
///
public abstract class ObjectPoolBase
{
private readonly string _name;
///
/// 初始化对象池基类的新实例。
///
public ObjectPoolBase()
: this(null)
{
}
///
/// 初始化对象池基类的新实例。
///
/// 对象池名称。
public ObjectPoolBase(string name)
{
_name = name ?? string.Empty;
}
///
/// 获取对象池名称。
///
public string Name => _name;
///
/// 获取对象池完整名称。
///
public string FullName => new TypeNamePair(ObjectType, _name).ToString();
///
/// 获取对象池对象类型。
///
public abstract Type ObjectType
{
get;
}
///
/// 获取对象池中对象的数量。
///
public abstract int Count
{
get;
}
///
/// 获取对象池中能被释放的对象的数量。
///
public abstract int CanReleaseCount
{
get;
}
///
/// 获取是否允许对象被多次获取。
///
public abstract bool AllowMultiSpawn
{
get;
}
///
/// 获取或设置对象池自动释放可释放对象的间隔秒数。
///
public abstract float AutoReleaseInterval
{
get;
set;
}
///
/// 获取或设置对象池的容量。
///
public abstract int Capacity
{
get;
set;
}
///
/// 获取或设置对象池对象过期秒数。
///
public abstract float ExpireTime
{
get;
set;
}
///
/// 获取或设置对象池的优先级。
///
public abstract int Priority
{
get;
set;
}
///
/// 释放对象池中的可释放对象。
///
public abstract void Release();
///
/// 释放对象池中的可释放对象。
///
/// 尝试释放对象数量。
public abstract void Release(int toReleaseCount);
///
/// 释放对象池中的所有未使用对象。
///
public abstract void ReleaseAllUnused();
///
/// 获取所有对象信息。
///
/// 所有对象信息。
public abstract ObjectInfo[] GetAllObjectInfos();
internal abstract void Update(float elapseSeconds, float realElapseSeconds);
internal abstract void Shutdown();
}
}