基本面板类

版权声明:转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/TIANHUNYISHUI/article/details/88814883
using System;
using System.Collections.Generic;
using UnityEngine;

namespace Framework {
	/// <summary>
	/// 基本面板类
	/// </summary>
	public abstract class UIPanel {
		private const string LOG_GET = "{0} can't get{1} component:{2}";

		/// <summary>
		/// 游戏物体
		/// </summary>
		public GameObject GameObject { get; private set; }

		/// <summary>
		/// 世界变换
		/// </summary>
		public RectTransform Transform { get { return GameObject.transform as RectTransform; } }

		/// <summary>
		/// 面板名
		/// </summary>
		public string PanelName { get; private set; }

		public string Name {
			get { return GameObject.name; }
			set { GameObject.name = value; }
		}

		/// <summary>
		/// 启用开关
		/// </summary>
		public virtual bool Enabled {
			get { return GameObject.activeSelf; }
			set {
				GameObject.SetActive (value);
				if (value) {
					OnEnabled ();
				} else {
					OnDisabled ();
				}
			}
		}

		/// <summary>
		/// 面板链表
		/// </summary>
		protected List<UIPanel> m_PanelList = new List<UIPanel> ();

		/// <summary>
		/// 获取面板数量
		/// </summary>
		public int PanelCount { get { return m_PanelList.Count; } }

		/// <summary>
		/// 初始化
		/// </summary>
		/// <param name="panelName"></param>
		/// <param name="gameObject"></param>
		public void Init (string panelName, GameObject gameObject) {
			PanelName = panelName;
			GameObject = gameObject;

			OnInit ();
		}

		/// <summary>
		/// 初始化回调
		/// </summary>
		public virtual void OnInit () { }

		/// <summary>
		/// 启用调用
		/// </summary>
		public virtual void OnEnabled () {
			foreach (var panel in m_PanelList) {
				if (panel.Enabled) {
					panel.OnEnabled ();
				}
			}
		}

		/// <summary>
		/// 关闭调用
		/// </summary>
		public virtual void OnDisabled () {
			foreach (var panel in m_PanelList) {
				panel.OnDisabled ();
			}
		}

		/// <summary>
		/// 更新回调
		/// </summary>
		public virtual void OnUpdate () {
			foreach (var panel in m_PanelList) {
				if (!panel.Enabled)
					continue;

				panel.OnUpdate ();
			}
		}

		/// <summary>
		/// 销毁回调
		/// </summary>
		public virtual void OnDestroy () {
			foreach (var panel in m_PanelList) {
				panel.OnDestroy ();
			}
			m_PanelList.Clear ();
		}

		/// <summary>
		/// 获取所有面板
		/// </summary>
		/// <returns>返回所有面板</returns>
		public UIPanel[] GetAllPanel () {
			return m_PanelList.ToArray ();
		}

		/// <summary>
		/// 获取节点
		/// </summary>
		/// <param name="childName">节点名</param>
		/// <returns>返回节点</returns>
		public Transform GetChild (string childName = null) {
			Transform child = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			if (child == null) {
				Debug.LogError (string.Format (LOG_GET, Name, "child", childName));
			}
			return child;
		}

		/// <summary>
		/// 获取面板
		/// </summary>
		/// <param name="type">面板类型</param>
		/// <param name="childName">面板节点名</param>
		/// <param name="panelName">面板名 </param>
		/// <returns>返回面板</returns>
		public UIPanel GetPanel (Type type, string childName = null, string panelName = null) {
			Transform child = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			if (child == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
				return null;
			}

			UIPanel panel = Activator.CreateInstance (type) as UIPanel;
			panel.Init (panelName ?? panelName, child.gameObject);
			m_PanelList.Add (panel);
			return panel;
		}

		/// <summary>
		/// 获取动态面板
		/// </summary>
		/// <param name="type">动态面板类型</param>
		/// <param name="panelName">面板资源名</param>
		/// <param name="childName">面板节点名</param>
		/// <returns>返回面板</returns>
		public UIDynamicPanel GetDynamicPanel (Type type, string panelName, string childName = null) {
			Transform child = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			if (child == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
				return null;
			}

			GameObject asset = Resources.Load<GameObject> (panelName);
			UIDynamicPanel panel = new UIDynamicPanel (type, asset);
			panel.Init (panelName, child.gameObject);
			m_PanelList.Add (panel);
			return panel;
		}

		/// <summary>
		/// 获取组件
		/// </summary>
		/// <param name="type">组件类型</param>
		/// <param name="childName">节点名</param>
		/// <returns>返回组件</returns>
		public Component GetComponent (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);

			if (transform == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			Component component = transform.GetComponent (type);
			if (component == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return component;
		}

		/// <summary>
		/// 从子节点获取组件
		/// </summary>
		/// <param name="type"></param>
		/// <param name="childName"></param>
		/// <returns>返回组件</returns>
		public Component GetComponentInChildren (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			Component component = transform.GetComponentInChildren (type, true);
			if (component == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return component;
		}

		/// <summary>
		/// 从父节点获取组件
		/// </summary>
		/// <param name="type">组件类型</param>
		/// <param name="childName">节点名</param>
		/// <returns>返回组件</returns>
		public Component GetComponentInParent (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			Component component = transform.GetComponentInParent (type);
			if (component == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return component;
		}

		/// <summary>
		/// 获取类型的所有组件
		/// </summary>
		/// <param name="type">组件类型</param>
		/// <param name="childName">节点名</param>
		/// <returns>返回组件</returns>
		public Component[] GetComponents (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			Component[] components = transform.GetComponents (type);
			if (components == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return components;
		}

		/// <summary>
		/// 从子节点获取所有组件
		/// </summary>
		/// <param name="type">组件类型</param>
		/// <param name="childName">节点名</param>
		/// <returns>返回组件</returns>
		public Component[] GetComponentsInChildren (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			Component[] components = transform.GetComponentsInChildren (type, true);
			if (components == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return components;
		}

		/// <summary>
		/// 从父节点获取所有组件
		/// </summary>
		/// <param name="type"></param>
		/// <param name="childName"></param>
		/// <returns></returns>
		public Component[] GetComponentsInParent (Type type, string childName = null) {
			Transform transform = string.IsNullOrEmpty (childName) ? Transform : Transform.Find (childName);
			Component[] components = transform.GetComponentsInParent (type, true);
			if (components == null) {
				Debug.LogError (string.Format (LOG_GET, Name, type.Name, childName));
			}

			return components;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/TIANHUNYISHUI/article/details/88814883