//-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Tuesday, October 31, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using Cysharp.Threading.Tasks; /// /// 按钮组管理器,负责管理GroupButtonEx组件的组关系和状态切换 /// 暂用于预制体中的设置,如果是动态增删按钮需重测试逻辑 /// public class GroupButtonExManager : MonoBehaviour { // 按钮组列表 private List m_Buttons = new List(); [SerializeField] Color m_SelectedTextColor = UIHelper.GetUIColor(TextColType.titleSelectColor); // 选中状态文字颜色 public Color selectedTextColor { get { return m_SelectedTextColor; } set { m_SelectedTextColor = value; } } [SerializeField] Color m_NormalTextColor = UIHelper.GetUIColor(TextColType.titleUnSelectColor); // 未选中状态文字颜色 public Color normalTextColor { get { return m_NormalTextColor; } set { m_NormalTextColor = value; } } void OnEnable() { ExecuteNextFrame(); } protected async void ExecuteNextFrame() { await UniTask.DelayFrame(1); UpdateAllButtonsState(); } /// /// 将按钮添加到组 /// /// 要添加的按钮 public void AddButton(GroupButtonEx button) { if (button == null) return; // 如果按钮不在组中,添加到组 if (!m_Buttons.Contains(button)) { m_Buttons.Add(button); } } /// /// 从组中移除按钮 /// /// 要移除的按钮 public void RemoveButton(GroupButtonEx button) { if (button == null) return; m_Buttons.Remove(button); } /// /// 选中指定按钮,并取消其他按钮的选中状态 /// /// 要选中的按钮 public void SelectButton(GroupButtonEx button) { if (button == null) return; button.state = TitleBtnState.Click; // 取消其他按钮的选中状态 foreach (var btn in m_Buttons) { if (btn != button) { btn.state = TitleBtnState.Normal; } } UpdateAllButtonsState(); } /// /// 获取组中的所有按钮 /// /// 按钮列表 public List GetButtons() { return new List(m_Buttons); } /// /// 获取组中当前选中的按钮 /// /// 选中的按钮,如果没有则返回null public GroupButtonEx GetSelectedButton() { foreach (var btn in m_Buttons) { if (btn.state == TitleBtnState.Click) return btn; } return null; } /// /// 清除所有按钮 /// public void ClearButtons() { m_Buttons.Clear(); } /// /// 更新所有按钮的状态 /// private void UpdateAllButtonsState() { // SortBtns(); foreach (var btn in m_Buttons) { btn.UpdateButtonState(); } } bool sortyet = false; public void SortBtns(bool forceSort = false) { if (m_Buttons.Count <= 0) return; if (sortyet && !forceSort) return; m_Buttons.Sort((a, b) => { return a.transform.GetSiblingIndex() - b.transform.GetSiblingIndex(); }); sortyet = true; } /// /// 获取按钮状态对应的文本颜色 /// /// 按钮状态 /// 对应的文本颜色 public Color GetTextColorForState(TitleBtnState state) { return state == TitleBtnState.Click ? m_SelectedTextColor : m_NormalTextColor; } }