//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 loyalsoft. All rights reserved.
// Homepage: http://www.game7000.com/
// Feedback: http://www.game7000.com/
//------------------------------------------------------------
using System;
namespace GameFramework.ObjectPool
{
///
/// 对象基类。
///
public abstract class ObjectBase : IReference
{
private string m_Name;
private object m_Target;
private bool m_Locked;
private int m_Priority;
private DateTime m_LastUseTime;
///
/// 初始化对象基类的新实例。
///
public ObjectBase()
{
m_Name = null;
m_Target = null;
m_Locked = false;
m_Priority = 0;
m_LastUseTime = default(DateTime);
}
///
/// 获取对象名称。
///
public string Name
{
get
{
return m_Name;
}
}
///
/// 获取对象。
///
public object Target
{
get
{
return m_Target;
}
}
///
/// 获取或设置对象是否被加锁。
///
public bool Locked
{
get
{
return m_Locked;
}
set
{
m_Locked = value;
}
}
///
/// 获取或设置对象的优先级。
///
public int Priority
{
get
{
return m_Priority;
}
set
{
m_Priority = value;
}
}
///
/// 获取自定义释放检查标记。
///
public virtual bool CustomCanReleaseFlag
{
get
{
return true;
}
}
///
/// 获取对象上次使用时间。
///
public DateTime LastUseTime
{
get
{
return m_LastUseTime;
}
internal set
{
m_LastUseTime = value;
}
}
///
/// 初始化对象基类。
///
/// 对象。
public void Initialize(object target)
{
Initialize(null, target, false, 0);
}
///
/// 初始化对象基类。
///
/// 对象名称。
/// 对象。
public void Initialize(string name, object target)
{
Initialize(name, target, false, 0);
}
///
/// 初始化对象基类。
///
/// 对象名称。
/// 对象。
/// 对象是否被加锁。
public void Initialize(string name, object target, bool locked)
{
Initialize(name, target, locked, 0);
}
///
/// 初始化对象基类。
///
/// 对象名称。
/// 对象。
/// 对象的优先级。
public void Initialize(string name, object target, int priority)
{
Initialize(name, target, false, priority);
}
///
/// 初始化对象基类。
///
/// 对象名称。
/// 对象。
/// 对象是否被加锁。
/// 对象的优先级。
public void Initialize(string name, object target, bool locked, int priority)
{
if (target == null)
{
throw new GameFrameworkException(Utility.Text.Format("Target '{0}' is invalid.", name));
}
m_Name = name ?? string.Empty;
m_Target = target;
m_Locked = locked;
m_Priority = priority;
m_LastUseTime = DateTime.UtcNow;
}
///
/// 清理对象基类。
///
public virtual void Clear()
{
m_Name = null;
m_Target = null;
m_Locked = false;
m_Priority = 0;
m_LastUseTime = default(DateTime);
}
///
/// 获取对象时的事件。
///
public virtual void OnSpawn()
{
}
///
/// 回收对象时的事件。
///
public virtual void OnUnspawn()
{
}
///
/// 释放对象。
///
/// 是否是关闭对象池时触发。
public abstract void Release(bool isShutdown);
}
}