//--------------------------------------------------------
|
// [Author]: 玩个游戏
|
// [ Date ]: Tuesday, October 31, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using System;
|
using Cysharp.Threading.Tasks;
|
|
/// <summary>
|
/// 按钮组管理器,负责管理GroupButtonEx组件的组关系和状态切换
|
/// 暂用于预制体中的设置,如果是动态增删按钮需重测试逻辑
|
/// </summary>
|
public class GroupButtonExManager : MonoBehaviour
|
{
|
// 按钮组列表
|
private List<GroupButtonEx> m_Buttons = new List<GroupButtonEx>();
|
|
[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();
|
}
|
|
/// <summary>
|
/// 将按钮添加到组
|
/// </summary>
|
/// <param name="button">要添加的按钮</param>
|
public void AddButton(GroupButtonEx button)
|
{
|
if (button == null)
|
return;
|
|
// 如果按钮不在组中,添加到组
|
if (!m_Buttons.Contains(button))
|
{
|
m_Buttons.Add(button);
|
}
|
}
|
|
/// <summary>
|
/// 从组中移除按钮
|
/// </summary>
|
/// <param name="button">要移除的按钮</param>
|
public void RemoveButton(GroupButtonEx button)
|
{
|
if (button == null)
|
return;
|
|
m_Buttons.Remove(button);
|
}
|
|
/// <summary>
|
/// 选中指定按钮,并取消其他按钮的选中状态
|
/// </summary>
|
/// <param name="button">要选中的按钮</param>
|
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();
|
}
|
|
/// <summary>
|
/// 获取组中的所有按钮
|
/// </summary>
|
/// <returns>按钮列表</returns>
|
public List<GroupButtonEx> GetButtons()
|
{
|
return new List<GroupButtonEx>(m_Buttons);
|
}
|
|
/// <summary>
|
/// 获取组中当前选中的按钮
|
/// </summary>
|
/// <returns>选中的按钮,如果没有则返回null</returns>
|
public GroupButtonEx GetSelectedButton()
|
{
|
foreach (var btn in m_Buttons)
|
{
|
if (btn.state == TitleBtnState.Click)
|
return btn;
|
}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 清除所有按钮
|
/// </summary>
|
public void ClearButtons()
|
{
|
m_Buttons.Clear();
|
}
|
|
/// <summary>
|
/// 更新所有按钮的状态
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 获取按钮状态对应的文本颜色
|
/// </summary>
|
/// <param name="state">按钮状态</param>
|
/// <returns>对应的文本颜色</returns>
|
public Color GetTextColorForState(TitleBtnState state)
|
{
|
return state == TitleBtnState.Click ? m_SelectedTextColor : m_NormalTextColor;
|
}
|
}
|