ObjectPoolBase.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 loyalsoft. All rights reserved.
  4. // Homepage: http://www.game7000.com/
  5. // Feedback: http://www.game7000.com/
  6. //------------------------------------------------------------
  7. using System;
  8. namespace GameFramework.ObjectPool
  9. {
  10. /// <summary>
  11. /// 对象池基类。
  12. /// </summary>
  13. public abstract class ObjectPoolBase
  14. {
  15. private readonly string m_Name;
  16. /// <summary>
  17. /// 初始化对象池基类的新实例。
  18. /// </summary>
  19. public ObjectPoolBase()
  20. : this(null)
  21. {
  22. }
  23. /// <summary>
  24. /// 初始化对象池基类的新实例。
  25. /// </summary>
  26. /// <param name="name">对象池名称。</param>
  27. public ObjectPoolBase(string name)
  28. {
  29. m_Name = name ?? string.Empty;
  30. }
  31. /// <summary>
  32. /// 获取对象池名称。
  33. /// </summary>
  34. public string Name
  35. {
  36. get
  37. {
  38. return m_Name;
  39. }
  40. }
  41. /// <summary>
  42. /// 获取对象池完整名称。
  43. /// </summary>
  44. public string FullName
  45. {
  46. get
  47. {
  48. return new TypeNamePair(ObjectType, m_Name).ToString();
  49. }
  50. }
  51. /// <summary>
  52. /// 获取对象池对象类型。
  53. /// </summary>
  54. public abstract Type ObjectType
  55. {
  56. get;
  57. }
  58. /// <summary>
  59. /// 获取对象池中对象的数量。
  60. /// </summary>
  61. public abstract int Count
  62. {
  63. get;
  64. }
  65. /// <summary>
  66. /// 获取对象池中能被释放的对象的数量。
  67. /// </summary>
  68. public abstract int CanReleaseCount
  69. {
  70. get;
  71. }
  72. /// <summary>
  73. /// 获取是否允许对象被多次获取。
  74. /// </summary>
  75. public abstract bool AllowMultiSpawn
  76. {
  77. get;
  78. }
  79. /// <summary>
  80. /// 获取或设置对象池自动释放可释放对象的间隔秒数。
  81. /// </summary>
  82. public abstract float AutoReleaseInterval
  83. {
  84. get;
  85. set;
  86. }
  87. /// <summary>
  88. /// 获取或设置对象池的容量。
  89. /// </summary>
  90. public abstract int Capacity
  91. {
  92. get;
  93. set;
  94. }
  95. /// <summary>
  96. /// 获取或设置对象池对象过期秒数。
  97. /// </summary>
  98. public abstract float ExpireTime
  99. {
  100. get;
  101. set;
  102. }
  103. /// <summary>
  104. /// 获取或设置对象池的优先级。
  105. /// </summary>
  106. public abstract int Priority
  107. {
  108. get;
  109. set;
  110. }
  111. /// <summary>
  112. /// 释放对象池中的可释放对象。
  113. /// </summary>
  114. public abstract void Release();
  115. /// <summary>
  116. /// 释放对象池中的可释放对象。
  117. /// </summary>
  118. /// <param name="toReleaseCount">尝试释放对象数量。</param>
  119. public abstract void Release(int toReleaseCount);
  120. /// <summary>
  121. /// 释放对象池中的所有未使用对象。
  122. /// </summary>
  123. public abstract void ReleaseAllUnused();
  124. /// <summary>
  125. /// 获取所有对象信息。
  126. /// </summary>
  127. /// <returns>所有对象信息。</returns>
  128. public abstract ObjectInfo[] GetAllObjectInfos();
  129. internal abstract void Update(float elapseSeconds, float realElapseSeconds);
  130. internal abstract void Shutdown();
  131. }
  132. }