using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.Serialization;
using UnityEngine.UI;
/// <summary>
/// 多状态按钮
/// </summary>
public class UIMultipleStateButton : MonoBehaviour, IPointerClickHandler
{
//按钮图片
[SerializeField]
private Image m_ButtonImage;
//按钮文本框
[SerializeField]
private Text m_ButtonText;
//按钮状态图片
[SerializeField]
private List<Sprite> m_SpriteStateList = new List<Sprite>();
//按钮状态文本
[SerializeField]
private List<string> m_TextStateList = new List<string>();
//当前状态索引
private int m_StateIndex = 0;
[Serializable]
public class StateChangedEvent : UnityEvent<UIMultipleStateButton> { }
[FormerlySerializedAs("onChangedState")]
[SerializeField]
private StateChangedEvent m_OnChangedState = new StateChangedEvent();
// 状态个数
public int StateCount
{
get
{
int spriteCount = m_SpriteStateList.Count;
int textCount = m_TextStateList.Count;
if (spriteCount > textCount)
return spriteCount;
return textCount;
}
}
// 状态索引
public int StateIndex
{
get { return m_StateIndex; }
set { ChangeState(value); }
}
// 切换按钮状态
public void ChangeState(int index)
{
if (m_StateIndex == index) return;
ChangeStateWithoutNotify(index);
m_OnChangedState?.Invoke(this);
}
// 切换按钮状态,不触发事件
public void ChangeStateWithoutNotify(int index)
{
if (m_StateIndex == index) return;
if (index < m_SpriteStateList.Count)
m_ButtonImage.sprite = m_SpriteStateList[index];
if (index < m_TextStateList.Count)
m_ButtonText.text = m_TextStateList[index];
m_StateIndex = index;
}
public void OnPointerClick(PointerEventData eventData)
{
int index = (m_StateIndex + 1) % StateCount;
ChangeState(index);
}
}