//--------------------------------------------------------
|
// [Author]: 玩个游戏
|
// [ Date ]: Tuesday, October 31, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using UnityEngine.EventSystems;
|
|
using System;
|
|
|
//关联按钮,其中一个亮起,其他按下,文字颜色对应变更
|
//数据更新通过SelectBtn更新 或者 GroupButtonExManager.SelectButton
|
//使用步骤 1.序列化GroupButtonEx类型的按钮,2:初始需设置SelectBtn()选中哪个按钮,其他和按钮使用方法一致
|
public class GroupButtonEx : ButtonEx
|
{
|
[SerializeField] GroupButtonExManager m_Manager; // 按钮组管理器引用
|
public GroupButtonExManager manager
|
{
|
get { return m_Manager; }
|
set
|
{
|
if (m_Manager != value)
|
{
|
// 从旧管理器移除并添加到新管理器
|
if (m_Manager != null)
|
{
|
m_Manager.RemoveButton(this);
|
}
|
|
m_Manager = value;
|
|
if (m_Manager != null)
|
{
|
m_Manager.AddButton(this);
|
}
|
}
|
}
|
}
|
|
[NonSerialized] TitleBtnState m_State = TitleBtnState.Normal;
|
public TitleBtnState state
|
{
|
get { return m_State; }
|
set
|
{
|
if (m_State != value)
|
{
|
m_State = value;
|
}
|
}
|
}
|
|
[SerializeField] ImageEx m_SelectIcon;
|
public ImageEx selectIcon
|
{
|
get { return this.m_SelectIcon; }
|
set { this.m_SelectIcon = value; }
|
}
|
|
[SerializeField] ImageEx m_UnSelectIcon;
|
public ImageEx unSelectIcon
|
{
|
get { return this.m_UnSelectIcon; }
|
set { this.m_UnSelectIcon = value; }
|
}
|
|
[SerializeField] TextEx m_Title;
|
public TextEx title
|
{
|
get { return this.m_Title; }
|
set { this.m_Title = value; }
|
}
|
|
[SerializeField] UIEffectPlayer m_SelectEffect; //选中特效
|
public UIEffectPlayer selectEffect
|
{
|
get { return m_SelectEffect; }
|
set { m_SelectEffect = value; }
|
}
|
|
|
protected override void Awake()
|
{
|
base.Awake();
|
// 确保已添加到管理器
|
if (m_Manager != null)
|
{
|
m_Manager.AddButton(this);
|
}
|
}
|
|
protected override void OnDestroy()
|
{
|
if (m_Manager != null)
|
{
|
m_Manager.RemoveButton(this);
|
}
|
base.OnDestroy();
|
}
|
|
public override void OnPointerClick(PointerEventData eventData)
|
{
|
base.OnPointerClick(eventData);
|
SelectBtn();
|
}
|
|
// 选中当前按钮,只处理刷新显示
|
public void SelectBtn(bool forceRefresh = false)
|
{
|
if (m_State == TitleBtnState.Click && !forceRefresh)
|
return;
|
|
// 通过管理器处理选中逻辑
|
if (m_Manager != null)
|
{
|
m_Manager.SelectButton(this);
|
}
|
|
}
|
|
// 更新按钮状态
|
public void UpdateButtonState()
|
{
|
// 更新图标显示
|
if (m_SelectIcon != null)
|
m_SelectIcon.SetActive(m_State == TitleBtnState.Click);
|
|
if (m_UnSelectIcon != null)
|
m_UnSelectIcon.SetActive(m_State != TitleBtnState.Click);
|
|
// 更新文字颜色
|
if (m_Title != null && m_Manager != null)
|
{
|
m_Title.color = m_Manager.GetTextColorForState(m_State);
|
}
|
|
if (m_SelectEffect != null)
|
{
|
if (m_State == TitleBtnState.Click)
|
{
|
//选中,显示特效
|
m_SelectEffect.Play();
|
}
|
else
|
{
|
m_SelectEffect.Stop();
|
}
|
}
|
}
|
}
|