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<bool> 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<bool> _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 
 | 
    } 
 | 
} 
 |