using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine.Events; public class ToggleButton : MonoBehaviour { [SerializeField] Button m_Button; public Button button { get { return m_Button; } } [SerializeField] bool m_IsOn = false; public bool isOn { get { return m_IsOn; } set { if (m_IsOn != value) { m_IsOn = value; selected.SetActive(m_IsOn); if (group != null && m_IsOn) { group.NotifyToggleOn(this); } if (onValueChange != null) { onValueChange(m_IsOn); } } } } [SerializeField] Image m_Selected; public Image selected { get { return m_Selected; } } [SerializeField] ToggleButtonGroup m_Group; public ToggleButtonGroup group { get { return m_Group; } set { if (m_Group != null) { m_Group.UnRegister(this); } m_Group = value; if (m_Group != null) { m_Group.Register(this); } } } UnityAction onValueChange; private void OnEnable() { selected.SetActive(m_IsOn); if (group != null) { group.Register(this); if (m_IsOn) { group.NotifyToggleOn(this); } } } private void OnDisable() { if (group != null) { group.UnRegister(this); } } public void SetListener(UnityAction action ) { if (button != null) { button.SetListener(action); } } public void AddListener(UnityAction _action) { if (button != null) { button.AddListener(_action); } } public void RemoveListener() { if (button != null) { button.RemoveAllListeners(); } } public void OnValueChange(UnityAction _action) { onValueChange = _action; } public void RemoveOnValueChange() { onValueChange = null; } private void OnValidate() { #if UNITY_EDITOR if (selected != null) { selected.SetActive(isOn); } if (group != null) { group.NotifyToggleOn(this); } #endif } }