//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 loyalsoft. All rights reserved. // Homepage: http://www.game7000.com/ // Feedback: http://www.game7000.com/ //------------------------------------------------------------ using UnityEngine; namespace UnityGameFramework.Runtime { /// /// 实体逻辑基类。 /// public abstract class EntityLogic : MonoBehaviour { private bool m_Available = false; private bool m_Visible = false; private Entity m_Entity = null; private Transform m_CachedTransform = null; private int m_OriginalLayer = 0; private Transform m_OriginalTransform = null; /// /// 获取实体。 /// public Entity Entity { get { return m_Entity; } } /// /// 获取或设置实体名称。 /// public string Name { get { return gameObject.name; } set { gameObject.name = value; } } /// /// 获取实体是否可用。 /// public bool Available { get { return m_Available; } } /// /// 获取或设置实体是否可见。 /// public bool Visible { get { return m_Available && m_Visible; } set { if (!m_Available) { Log.Warning("Entity '{0}' is not available.", Name); return; } if (m_Visible == value) { return; } m_Visible = value; InternalSetVisible(value); } } /// /// 获取已缓存的 Transform。 /// public Transform CachedTransform { get { return m_CachedTransform; } } /// /// 实体初始化。 /// /// 用户自定义数据。 public virtual void OnInit(object userData) { if (m_CachedTransform == null) { m_CachedTransform = transform; } m_Entity = GetComponent(); m_OriginalLayer = gameObject.layer; m_OriginalTransform = CachedTransform.parent; } /// /// 实体回收。 /// public virtual void OnRecycle() { } /// /// 实体显示。 /// /// 用户自定义数据。 public virtual void OnShow(object userData) { m_Available = true; Visible = true; } /// /// 实体隐藏。 /// /// 是否是关闭实体管理器时触发。 /// 用户自定义数据。 public virtual void OnHide(bool isShutdown, object userData) { gameObject.SetLayerRecursively(m_OriginalLayer); Visible = false; m_Available = false; } /// /// 实体附加子实体。 /// /// 附加的子实体。 /// 被附加父实体的位置。 /// 用户自定义数据。 public virtual void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData) { } /// /// 实体解除子实体。 /// /// 解除的子实体。 /// 用户自定义数据。 public virtual void OnDetached(EntityLogic childEntity, object userData) { } /// /// 实体附加子实体。 /// /// 被附加的父实体。 /// 被附加父实体的位置。 /// 用户自定义数据。 public virtual void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData) { CachedTransform.SetParent(parentTransform); } /// /// 实体解除子实体。 /// /// 被解除的父实体。 /// 用户自定义数据。 public virtual void OnDetachFrom(EntityLogic parentEntity, object userData) { CachedTransform.SetParent(m_OriginalTransform); } /// /// 实体轮询。 /// /// 逻辑流逝时间,以秒为单位。 /// 真实流逝时间,以秒为单位。 public virtual void OnUpdate(float elapseSeconds, float realElapseSeconds) { } /// /// 设置实体的可见性。 /// /// 实体的可见性。 public virtual void InternalSetVisible(bool visible) { gameObject.SetActive(visible); } } }