using System;
namespace TEngine
{
///
/// 对象池接口。
///
/// 对象类型。
public interface IObjectPool where T : ObjectBase
{
///
/// 获取对象池名称。
///
string Name
{
get;
}
///
/// 获取对象池完整名称。
///
string FullName
{
get;
}
///
/// 获取对象池对象类型。
///
Type ObjectType
{
get;
}
///
/// 获取对象池中对象的数量。
///
int Count
{
get;
}
///
/// 获取对象池中能被释放的对象的数量。
///
int CanReleaseCount
{
get;
}
///
/// 获取是否允许对象被多次获取。
///
bool AllowMultiSpawn
{
get;
}
///
/// 获取或设置对象池自动释放可释放对象的间隔秒数。
///
float AutoReleaseInterval
{
get;
set;
}
///
/// 获取或设置对象池的容量。
///
int Capacity
{
get;
set;
}
///
/// 获取或设置对象池对象过期秒数。
///
float ExpireTime
{
get;
set;
}
///
/// 获取或设置对象池的优先级。
///
int Priority
{
get;
set;
}
///
/// 创建对象。
///
/// 对象。
/// 对象是否已被获取。
void Register(T obj, bool spawned);
///
/// 检查对象。
///
/// 要检查的对象是否存在。
bool CanSpawn();
///
/// 检查对象。
///
/// 对象名称。
/// 要检查的对象是否存在。
bool CanSpawn(string name);
///
/// 获取对象。
///
/// 要获取的对象。
T Spawn();
///
/// 获取对象。
///
/// 对象名称。
/// 要获取的对象。
T Spawn(string name);
///
/// 回收对象。
///
/// 要回收的对象。
void Unspawn(T obj);
///
/// 回收对象。
///
/// 要回收的对象。
void Unspawn(object target);
///
/// 设置对象是否被加锁。
///
/// 要设置被加锁的对象。
/// 是否被加锁。
void SetLocked(T obj, bool locked);
///
/// 设置对象是否被加锁。
///
/// 要设置被加锁的对象。
/// 是否被加锁。
void SetLocked(object target, bool locked);
///
/// 设置对象的优先级。
///
/// 要设置优先级的对象。
/// 优先级。
void SetPriority(T obj, int priority);
///
/// 设置对象的优先级。
///
/// 要设置优先级的对象。
/// 优先级。
void SetPriority(object target, int priority);
///
/// 释放对象。
///
/// 要释放的对象。
/// 释放对象是否成功。
bool ReleaseObject(T obj);
///
/// 释放对象。
///
/// 要释放的对象。
/// 释放对象是否成功。
bool ReleaseObject(object target);
///
/// 释放对象池中的可释放对象。
///
void Release();
///
/// 释放对象池中的可释放对象。
///
/// 尝试释放对象数量。
void Release(int toReleaseCount);
///
/// 释放对象池中的可释放对象。
///
/// 释放对象筛选函数。
void Release(ReleaseObjectFilterCallback releaseObjectFilterCallback);
///
/// 释放对象池中的可释放对象。
///
/// 尝试释放对象数量。
/// 释放对象筛选函数。
void Release(int toReleaseCount, ReleaseObjectFilterCallback releaseObjectFilterCallback);
///
/// 释放对象池中的所有未使用对象。
///
void ReleaseAllUnused();
}
}