| using UnityEngine; | 
| using UnityEngine.UI; | 
| using UnityEngine.Events; | 
| using System; | 
|   | 
|   | 
| public static class ComponentExtersion | 
| { | 
|   | 
|     public static Component FindComponent(this Component _component, string _type, string _path) | 
|     { | 
|         try | 
|         { | 
|             if (_component == null) | 
|             { | 
|                 return null; | 
|             } | 
|   | 
|             var transform = _component.transform.Find(_path); | 
|             if (transform == null) | 
|             { | 
|                 return null; | 
|             } | 
|   | 
|             return transform.GetComponent(_type); | 
|         } | 
|         catch (Exception ex) | 
|         { | 
|             Debug.Log(ex); | 
|             return null; | 
|         } | 
|   | 
|     } | 
|   | 
|     public static T AddMissingComponent<T>(this Component _compoent) where T : Component | 
|     { | 
|         if (_compoent == null) | 
|         { | 
|             return null; | 
|         } | 
|   | 
|         T component = _compoent.GetComponent<T>(); | 
|         if (component == null) | 
|         { | 
|             component = _compoent.gameObject.AddComponent<T>(); | 
|         } | 
|   | 
|         return component; | 
|     } | 
|   | 
|     public static T AddMissingComponent<T>(this Transform _transform) where T : Component | 
|     { | 
|         if (_transform == null) | 
|         { | 
|             return null; | 
|         } | 
|   | 
|         T component = _transform.GetComponent<T>(); | 
|         if (component == null) | 
|         { | 
|             component = _transform.gameObject.AddComponent<T>(); | 
|         } | 
|   | 
|         return component; | 
|     } | 
|   | 
|     public static T AddMissingComponent<T>(this GameObject _gameObject) where T : Component | 
|     { | 
|         if (_gameObject == null) | 
|         { | 
|             return null; | 
|         } | 
|   | 
|         T component = _gameObject.GetComponent<T>(); | 
|         if (component == null) | 
|         { | 
|             component = _gameObject.AddComponent<T>(); | 
|         } | 
|   | 
|         return component; | 
|     } | 
|   | 
|   | 
|     public static void AddListener(this Button _button, UnityAction _action) | 
|     { | 
|         if (_button == null) | 
|         { | 
|             return; | 
|         } | 
|         _button.onClick.RemoveAllListeners(); | 
|         //_button.onClick.RemoveListener(_action); | 
|         _button.onClick.AddListener(_action); | 
|     } | 
|   | 
|   | 
|     public static void RemoveAllListeners(this Button _button) | 
|     { | 
|         if (_button == null) | 
|         { | 
|             return; | 
|         } | 
|         _button.onClick.RemoveAllListeners(); | 
|     } | 
|   | 
|   | 
|     public static void SetListener(this Button button, UnityAction action) | 
|     { | 
|         if (button == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         button.onClick.RemoveAllListeners(); | 
|         button.AddListener(action); | 
|     } | 
|   | 
|     public static void AddListener(this Toggle _toggle, UnityAction<bool> _action) | 
|     { | 
|         if (_toggle == null) | 
|         { | 
|             return; | 
|         } | 
|         _toggle.onValueChanged.RemoveAllListeners(); | 
|         _toggle.onValueChanged.AddListener(_action); | 
|     } | 
|   | 
|   | 
|     public static void SetListener(this Toggle toggle, UnityAction<bool> action) | 
|     { | 
|         if (toggle == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         toggle.onValueChanged.RemoveAllListeners(); | 
|         toggle.onValueChanged.AddListener(action); | 
|     } | 
|   | 
|     public static void RemoveAllListeners(this Toggle _toggle) | 
|     { | 
|         if (_toggle == null) | 
|         { | 
|             return; | 
|         } | 
|         _toggle.onValueChanged.RemoveAllListeners(); | 
|     } | 
|   | 
|   | 
|     public static void AddListener(this Slider _slider, UnityAction<float> _action) | 
|     { | 
|         if (_slider == null) | 
|         { | 
|             return; | 
|         } | 
|         _slider.onValueChanged.AddListener(_action); | 
|     } | 
|   | 
|   | 
|     public static void SetListener(this Slider slider, UnityAction<float> action) | 
|     { | 
|         if (slider == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         slider.onValueChanged.RemoveAllListeners(); | 
|         slider.onValueChanged.AddListener(action); | 
|     } | 
|   | 
|     public static void RemoveAllListeners(this Slider _slider) | 
|     { | 
|         if (_slider == null) | 
|         { | 
|             return; | 
|         } | 
|         _slider.onValueChanged.RemoveAllListeners(); | 
|     } | 
|   | 
|   | 
|     public static void AddListener(this InputField _inputField, UnityAction<string> _action) | 
|     { | 
|         if (_inputField == null) | 
|         { | 
|             return; | 
|         } | 
|         _inputField.onValueChanged.AddListener(_action); | 
|     } | 
|   | 
|     public static void SetListener(this InputField inputField, UnityAction<string> action) | 
|     { | 
|         if (inputField == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         inputField.onValueChanged.RemoveAllListeners(); | 
|         inputField.onValueChanged.AddListener(action); | 
|     } | 
|   | 
|   | 
|     public static void RemoveAllListeners(this InputField _inputField) | 
|     { | 
|         if (_inputField == null) | 
|         { | 
|             return; | 
|         } | 
|         _inputField.onValueChanged.RemoveAllListeners(); | 
|     } | 
|   | 
|     public static void SetListener(this Dropdown dropdown, UnityAction<int> action) | 
|     { | 
|         if (dropdown == null) | 
|         { | 
|             return; | 
|         } | 
|         dropdown.onValueChanged.RemoveAllListeners(); | 
|         dropdown.onValueChanged.AddListener(action); | 
|     } | 
|   | 
|     // public static void SetEnable(this Button _btn, Text _btnTxt, bool _enable, EnableButtonConfig.EnableButtonType _type = | 
|     //     EnableButtonConfig.EnableButtonType.Default) | 
|     // { | 
|     //     EnableButtonConfig.SetEnable(_btn, _btnTxt, _enable, _type); | 
|     // } | 
|   | 
|   | 
|     public static void SetColorful(this Button _btn, Text _btnTxt, bool _colorful, int pattern = 0) | 
|     { | 
|         if (_btn != null) | 
|         { | 
|             var imageEx = _btn.image as ImageEx; | 
|             if (imageEx != null) | 
|             { | 
|                 imageEx.gray = !_colorful; | 
|             } | 
|         } | 
|         if (_btnTxt != null) | 
|         { | 
|             switch (pattern) | 
|             { | 
|                 case 1: | 
|                     _btnTxt.color = UIHelper.GetUIColor(_colorful ? TextColType.LightWhite : TextColType.White); | 
|                     break; | 
|                 case 2: | 
|                     _btnTxt.color = UIHelper.GetUIColor(_colorful ? TextColType.Green : TextColType.White); | 
|                     break; | 
|                 default: | 
|                     //false 灰色,true 原色 | 
|                     if (!_colorful) | 
|                         _btnTxt.text = UIHelper.AppendColor(TextColType.NavyGray, _btnTxt.text);    //不改变组件颜色,只改变显示颜色 | 
|                     else | 
|                         _btnTxt.text = UIHelper.AppendColor(_btnTxt.color, _btnTxt.text); | 
|                     break; | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     // 设置按钮是否可点击,且取第一个文本组件置灰或置原色 | 
|     // 要先设置文本再调用该函数 因为没有改变文本组件的颜色避免颜色被还原,同理恢复可以不用改变颜色改文字即可 | 
|     // 更多功能请使用SetColorful | 
|     public static void SetInteractable(this Button _btn, bool _interactable, Text _btnText = null) | 
|     { | 
|         if (_btn != null) | 
|         { | 
|             _btn.interactable = _interactable; | 
|             var imageEx = _btn.image as ImageEx; | 
|             if (imageEx != null) | 
|             { | 
|                 imageEx.gray = !_interactable; | 
|             } | 
|         } | 
|         if (_btnText == null) | 
|             _btnText = _btn.GetComponentInChildren<Text>(); | 
|         if (_btnText != null) | 
|         { | 
|             //false 灰色,true 原色 | 
|             if (!_interactable) | 
|                 _btnText.text = UIHelper.AppendColor(TextColType.NavyGray, _btnText.text);    //不改变组件颜色,只改变显示颜色 | 
|             else | 
|                 _btnText.text = UIHelper.AppendColor(_btnText.color, UIHelper.RemoveColor(_btnText.text)); | 
|         } | 
|     } | 
|   | 
|     //通过ICON表加载 | 
|     public static void SetSprite(this Image _image, string _id) | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(_id)) | 
|         { | 
|             Debug.LogError("Image SetSprite id is null or empty " + _id); | 
|             return; | 
|         } | 
|   | 
|         var sprite = UILoader.LoadSprite(_id); | 
|         _image.overrideSprite = sprite; | 
|     } | 
|   | 
|   | 
|     public static void SetSprite(this TextImage _textImage, string _id) | 
|     { | 
|         if (_textImage == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(_id)) | 
|         { | 
|             Debug.LogError("TextImage SetSprite id is null or empty " + _id); | 
|             return; | 
|         } | 
|   | 
|         var sprite = UILoader.LoadSprite(_id); | 
|         _textImage.sprite = sprite; | 
|     } | 
|   | 
|     //通过图片名加载, 如物品表 技能表等,节省在Icon表做多余配置 | 
|     public static void SetOrgSprite(this Image _image, string iconName, string folderName = "icon") | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(iconName)) | 
|         { | 
|             Debug.LogError("SetOrgSprite iconName is null or empty " + iconName); | 
|             return; | 
|         } | 
|   | 
|         var sprite = UILoader.LoadSprite(folderName, iconName); | 
|         if (null == sprite) return; | 
|         _image.overrideSprite = sprite; | 
|     } | 
|   | 
|     public static void SetItemSprite(this Image _image, int itemID) | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         var itemConfig = ItemConfig.Get(itemID); | 
|         if (itemConfig == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(itemConfig.IconKey)) | 
|         { | 
|             Debug.LogError("SetItemSprite IconKey is null or empty for itemID " + itemID); | 
|             return; | 
|         } | 
|   | 
|         var sprite = UILoader.LoadSprite("icon", itemConfig.IconKey); | 
|         _image.overrideSprite = sprite; | 
|     } | 
|   | 
|     public static void SetSkillSprite(this Image _image, int skillID) | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         var skillConfig = SkillConfig.Get(skillID); | 
|         if (skillConfig == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(skillConfig.IconName)) | 
|         { | 
|             Debug.LogError("SetSkillSprite IconName is null or empty for skillID " + skillID); | 
|             return; | 
|         } | 
|   | 
|         var sprite = UILoader.LoadSprite("SkillIcon", skillConfig.IconName); | 
|         _image.overrideSprite = sprite; | 
|     } | 
|   | 
|     public static void SetActive(this Component compoent, bool active) | 
|     { | 
|         if (compoent != null) | 
|         { | 
|             if (active && !compoent.gameObject.activeSelf) | 
|             { | 
|                 compoent.gameObject.SetActive(true); | 
|             } | 
|             else if (!active && compoent.gameObject.activeSelf) | 
|             { | 
|                 compoent.gameObject.SetActive(false); | 
|             } | 
|         } | 
|     } | 
|   | 
|   | 
|     public static void SetTexture2D(this RawImage _image, string _id) | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         var texture = UILoader.LoadTexture2D(_id); | 
|         _image.texture = texture; | 
|     } | 
|   | 
|   | 
|     public static void SetTexture2DPNG(this RawImage _image, string _id) | 
|     { | 
|         if (_image == null) | 
|         { | 
|             return; | 
|         } | 
|   | 
|         if (string.IsNullOrEmpty(_id)) | 
|         { | 
|             Debug.LogError("SetTexture2DPNG id is null or empty " + _id); | 
|             return; | 
|         } | 
|   | 
|         var texture = UILoader.LoadTexture2DPNG(_id); | 
|         _image.texture = texture; | 
|     } | 
| } |