//------------------------------------------------------------ // 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); } }