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