EntityLogic.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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 UnityEngine;
  8. namespace UnityGameFramework.Runtime
  9. {
  10. /// <summary>
  11. /// 实体逻辑基类。
  12. /// </summary>
  13. public abstract class EntityLogic : MonoBehaviour
  14. {
  15. private bool m_Available = false;
  16. private bool m_Visible = false;
  17. private Entity m_Entity = null;
  18. private Transform m_CachedTransform = null;
  19. private int m_OriginalLayer = 0;
  20. private Transform m_OriginalTransform = null;
  21. /// <summary>
  22. /// 获取实体。
  23. /// </summary>
  24. public Entity Entity
  25. {
  26. get
  27. {
  28. return m_Entity;
  29. }
  30. }
  31. /// <summary>
  32. /// 获取或设置实体名称。
  33. /// </summary>
  34. public string Name
  35. {
  36. get
  37. {
  38. return gameObject.name;
  39. }
  40. set
  41. {
  42. gameObject.name = value;
  43. }
  44. }
  45. /// <summary>
  46. /// 获取实体是否可用。
  47. /// </summary>
  48. public bool Available
  49. {
  50. get
  51. {
  52. return m_Available;
  53. }
  54. }
  55. /// <summary>
  56. /// 获取或设置实体是否可见。
  57. /// </summary>
  58. public bool Visible
  59. {
  60. get
  61. {
  62. return m_Available && m_Visible;
  63. }
  64. set
  65. {
  66. if (!m_Available)
  67. {
  68. Log.Warning("Entity '{0}' is not available.", Name);
  69. return;
  70. }
  71. if (m_Visible == value)
  72. {
  73. return;
  74. }
  75. m_Visible = value;
  76. InternalSetVisible(value);
  77. }
  78. }
  79. /// <summary>
  80. /// 获取已缓存的 Transform。
  81. /// </summary>
  82. public Transform CachedTransform
  83. {
  84. get
  85. {
  86. return m_CachedTransform;
  87. }
  88. }
  89. /// <summary>
  90. /// 实体初始化。
  91. /// </summary>
  92. /// <param name="userData">用户自定义数据。</param>
  93. public virtual void OnInit(object userData)
  94. {
  95. if (m_CachedTransform == null)
  96. {
  97. m_CachedTransform = transform;
  98. }
  99. m_Entity = GetComponent<Entity>();
  100. m_OriginalLayer = gameObject.layer;
  101. m_OriginalTransform = CachedTransform.parent;
  102. }
  103. /// <summary>
  104. /// 实体回收。
  105. /// </summary>
  106. public virtual void OnRecycle()
  107. {
  108. }
  109. /// <summary>
  110. /// 实体显示。
  111. /// </summary>
  112. /// <param name="userData">用户自定义数据。</param>
  113. public virtual void OnShow(object userData)
  114. {
  115. m_Available = true;
  116. Visible = true;
  117. }
  118. /// <summary>
  119. /// 实体隐藏。
  120. /// </summary>
  121. /// <param name="isShutdown">是否是关闭实体管理器时触发。</param>
  122. /// <param name="userData">用户自定义数据。</param>
  123. public virtual void OnHide(bool isShutdown, object userData)
  124. {
  125. gameObject.SetLayerRecursively(m_OriginalLayer);
  126. Visible = false;
  127. m_Available = false;
  128. }
  129. /// <summary>
  130. /// 实体附加子实体。
  131. /// </summary>
  132. /// <param name="childEntity">附加的子实体。</param>
  133. /// <param name="parentTransform">被附加父实体的位置。</param>
  134. /// <param name="userData">用户自定义数据。</param>
  135. public virtual void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData)
  136. {
  137. }
  138. /// <summary>
  139. /// 实体解除子实体。
  140. /// </summary>
  141. /// <param name="childEntity">解除的子实体。</param>
  142. /// <param name="userData">用户自定义数据。</param>
  143. public virtual void OnDetached(EntityLogic childEntity, object userData)
  144. {
  145. }
  146. /// <summary>
  147. /// 实体附加子实体。
  148. /// </summary>
  149. /// <param name="parentEntity">被附加的父实体。</param>
  150. /// <param name="parentTransform">被附加父实体的位置。</param>
  151. /// <param name="userData">用户自定义数据。</param>
  152. public virtual void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData)
  153. {
  154. CachedTransform.SetParent(parentTransform);
  155. }
  156. /// <summary>
  157. /// 实体解除子实体。
  158. /// </summary>
  159. /// <param name="parentEntity">被解除的父实体。</param>
  160. /// <param name="userData">用户自定义数据。</param>
  161. public virtual void OnDetachFrom(EntityLogic parentEntity, object userData)
  162. {
  163. CachedTransform.SetParent(m_OriginalTransform);
  164. }
  165. /// <summary>
  166. /// 实体轮询。
  167. /// </summary>
  168. /// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
  169. /// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
  170. public virtual void OnUpdate(float elapseSeconds, float realElapseSeconds)
  171. {
  172. }
  173. /// <summary>
  174. /// 设置实体的可见性。
  175. /// </summary>
  176. /// <param name="visible">实体的可见性。</param>
  177. public virtual void InternalSetVisible(bool visible)
  178. {
  179. gameObject.SetActive(visible);
  180. }
  181. }
  182. }