//-------------------------------------------------------- 
 | 
//    [Author]:                   Wu Xijin 
 | 
//    [Date]   :           Monday, October 10, 2016 
 | 
//-------------------------------------------------------- 
 | 
using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.Events; 
 | 
using UnityEngine.EventSystems; 
 | 
using System; 
 | 
  
 | 
public class RepeatedButton:MonoBehaviour, IPointerDownHandler, IPointerUpHandler { 
 | 
  
 | 
    #region Fields 
 | 
  
 | 
    bool m_IsMouseDown = false; 
 | 
    public bool isMouseDown { 
 | 
        get { 
 | 
            return m_IsMouseDown; 
 | 
        } 
 | 
        private set { 
 | 
            m_IsMouseDown = value; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    float nextTriggerTime = 0f; 
 | 
  
 | 
    [SerializeField] 
 | 
    float m_IntervalTime = 0.1f; 
 | 
    public float intervalTime { 
 | 
        get { 
 | 
            return m_IntervalTime; 
 | 
        } 
 | 
        set { 
 | 
            m_IntervalTime = Mathf.Clamp(value,0f,float.MaxValue); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    [SerializeField] 
 | 
    UnityEvent m_OnClick = new UnityEvent(); 
 | 
    public UnityEvent onClick { 
 | 
        get { 
 | 
            return m_OnClick; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    #endregion 
 | 
  
 | 
    public RepeatedButton AddListener(UnityAction _action) { 
 | 
        onClick.AddListener(_action); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public RepeatedButton RemoveListener(UnityAction _action) { 
 | 
        onClick.RemoveListener(_action); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    public RepeatedButton RemoveAllListener() { 
 | 
        onClick.RemoveAllListeners(); 
 | 
        return this; 
 | 
    } 
 | 
  
 | 
    #region Built-In 
 | 
    void Awake() { 
 | 
  
 | 
    } 
 | 
  
 | 
    void Start() { 
 | 
  
 | 
    } 
 | 
  
 | 
    private void OnEnable() { 
 | 
        isMouseDown = false; 
 | 
    } 
 | 
  
 | 
    private void OnDisable() { 
 | 
        isMouseDown = false; 
 | 
    } 
 | 
  
 | 
    void LateUpdate() { 
 | 
        if(isMouseDown) { 
 | 
            if(Time.time > nextTriggerTime) { 
 | 
                nextTriggerTime += intervalTime; 
 | 
                if(onClick != null) { 
 | 
                    onClick.Invoke(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void OnPointerDown(PointerEventData eventData) { 
 | 
        if(eventData.button != PointerEventData.InputButton.Left) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        isMouseDown = true; 
 | 
        nextTriggerTime = Time.time; 
 | 
    } 
 | 
  
 | 
    public void OnPointerUp(PointerEventData eventData) { 
 | 
        if(eventData.button != PointerEventData.InputButton.Left) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        isMouseDown = false; 
 | 
    } 
 | 
    #endregion 
 | 
  
 | 
} 
 |