using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; /// <summary> /// ?????? /// </summary> public class BasePanel : MonoBehaviour { /// <summary> /// ??????????ยงรก?? /// </summary> private readonly Dictionary<string,List<UIBehaviour>> controlDic = new Dictionary<string, List<UIBehaviour>>(); /// <summary> /// ????? ?????? /// </summary> protected virtual void Awake() { FindChildrenControl<Button>(); FindChildrenControl<Image>(); FindChildrenControl<Text>(); FindChildrenControl<Toggle>(); FindChildrenControl<Slider>(); FindChildrenControl<ScrollRect>(); FindChildrenControl<InputField>(); FindChildrenControl<TextMeshPro>(); FindChildrenControl<TextMeshProUGUI>(); } /// <summary> /// ????????????? /// </summary> /// <typeparam name="T"></typeparam> /// <param name="controlName"></param> /// <returns></returns> public T GetControl<T>(string controlName) where T : UIBehaviour { if (controlDic.ContainsKey(controlName)) { for (int i = 0; i < controlDic[controlName].Count; i++) { if (controlDic[controlName][i] is T) return controlDic[controlName][i] as T; } } return null; } /// <summary> /// ????????????? /// </summary> /// <typeparam name="T"></typeparam> private void FindChildrenControl<T>() where T : UIBehaviour { T[] controls = GetComponentsInChildren<T>(true); for (int i = 0; i < controls.Length; i++) { string controlName = controls[i].gameObject.name; if (controlDic.ContainsKey(controlName)) { controlDic[controlName].Add(controls[i]); } else { controlDic.Add(controlName,new List<UIBehaviour>() { controls[i] }); } if (controls[i] is Button button) { button.onClick.AddListener(() => { OnClick(controlName); }); } else if(controls[i] is Toggle toggle) { toggle.onValueChanged.AddListener((value) => { OnChangeToggle(controlName,value); }); } else if (controls[i] is Slider slider) { slider.onValueChanged.AddListener((value) => { OnChangeSlider(controlName, value); }); } else if (controls[i] is InputField inputField) { inputField.onValueChanged.AddListener((value) => { OnChangeInputFile(controlName,value); }); } } } /// <summary> /// ?????? /// </summary> public virtual void ShowMe() { } /// <summary> /// ??????? /// </summary> public virtual void HideMe() { } /// <summary> /// ????????? /// </summary> /// <param name="btnName"></param> protected virtual void OnClick(string btnName) { } /// <summary> /// Toogle??? /// </summary> /// <param name="toogleName">toogle????</param> /// <param name="isOn">???</param> protected virtual void OnChangeToggle(string toogleName,bool isOn) { } /// <summary> /// Slider??? /// </summary> /// <param name="SliderName">Slider???????</param> /// <param name="value">???</param> protected virtual void OnChangeSlider(string SliderName, float value) { } /// <summary> /// ????????? /// </summary> /// <param name="inputFileName">?????????</param> /// <param name="value">?????????</param> protected virtual void OnChangeInputFile(string inputFileName,string value) { } }