//--------------------------------------------------------
// [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;
}
}