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