using UnityEngine.UI; 
 | 
using UnityEngine; 
 | 
using UnityEngine.EventSystems; 
 | 
using System; 
 | 
  
 | 
  
 | 
public class ButtonEx : Button 
 | 
{ 
 | 
  
 | 
    public event Action ableTimeChangeEvent; 
 | 
  
 | 
    public float interval; 
 | 
    public bool customPositiveSound = false; 
 | 
    public bool customNegativeSound = false; 
 | 
    public int positiveSound = 0; 
 | 
    public int negativeSound = 0; 
 | 
    public float pressedScale = 1.1f; 
 | 
  
 | 
    float m_AbleTime = 0f; 
 | 
    private Vector3 originalScale; 
 | 
  
 | 
    public float ableTime { 
 | 
        get { return m_AbleTime; } 
 | 
        private set { 
 | 
            m_AbleTime = value; 
 | 
            if (ableTimeChangeEvent != null) 
 | 
            { 
 | 
                ableTimeChangeEvent(); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public override void OnPointerClick(PointerEventData eventData) 
 | 
    { 
 | 
        if (Time.realtimeSinceStartup < ableTime) 
 | 
        { 
 | 
            PlayNegativeSound(); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        base.OnPointerClick(eventData); 
 | 
  
 | 
        PlayPositiveSound(); 
 | 
        ableTime = Time.realtimeSinceStartup + Mathf.Clamp(interval, 0, float.MaxValue); 
 | 
    } 
 | 
  
 | 
    protected override void Awake() 
 | 
    { 
 | 
        base.Awake(); 
 | 
        originalScale = transform.localScale; 
 | 
    } 
 | 
  
 | 
    public override void OnPointerDown(PointerEventData eventData) 
 | 
    { 
 | 
        if (this.interactable == false) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
        base.OnPointerDown(eventData); 
 | 
        transform.localScale = originalScale * pressedScale; 
 | 
    } 
 | 
  
 | 
    public override void OnPointerUp(PointerEventData eventData) 
 | 
    { 
 | 
        base.OnPointerUp(eventData); 
 | 
        transform.localScale = originalScale; 
 | 
    } 
 | 
  
 | 
    private void PlayPositiveSound() 
 | 
    { 
 | 
        if (customPositiveSound) 
 | 
        { 
 | 
            SoundPlayer.Instance.PlayUIAudio(positiveSound); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            SoundPlayer.Instance.PlayUIAudio(SoundPlayer.defaultClickPositiveAudio); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void PlayNegativeSound() 
 | 
    { 
 | 
        if (customNegativeSound) 
 | 
        { 
 | 
            SoundPlayer.Instance.PlayUIAudio(negativeSound); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
            SoundPlayer.Instance.PlayUIAudio(SoundPlayer.defaultClickNegativeAudio); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |