123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- namespace SRF.UI
- {
- using Internal;
- using UnityEngine;
- [AddComponentMenu(ComponentMenuPaths.LongPressButton)]
- public class LongPressButton : UnityEngine.UI.Button
- {
- private bool _handled;
- [SerializeField] private ButtonClickedEvent _onLongPress = new ButtonClickedEvent();
- private bool _pressed;
- private float _pressedTime;
- public float LongPressDuration = 0.9f;
- public ButtonClickedEvent onLongPress
- {
- get { return _onLongPress; }
- set { _onLongPress = value; }
- }
- public override void OnPointerExit(UnityEngine.EventSystems.PointerEventData eventData)
- {
- base.OnPointerExit(eventData);
- _pressed = false;
- }
- public override void OnPointerDown(UnityEngine.EventSystems.PointerEventData eventData)
- {
- base.OnPointerDown(eventData);
- if (eventData.button != UnityEngine.EventSystems.PointerEventData.InputButton.Left)
- {
- return;
- }
- _pressed = true;
- _handled = false;
- _pressedTime = Time.realtimeSinceStartup;
- }
-
- public override void OnPointerUp(UnityEngine.EventSystems.PointerEventData eventData)
- {
- if (!_handled)
- {
- base.OnPointerUp(eventData);
- }
- _pressed = false;
- }
- public override void OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData)
- {
- if (!_handled)
- {
- base.OnPointerClick(eventData);
- }
- }
- private void Update()
- {
- if (!_pressed)
- {
- return;
- }
- if (Time.realtimeSinceStartup - _pressedTime >= LongPressDuration)
- {
- _pressed = false;
- _handled = true;
- onLongPress.Invoke();
- }
- }
- }
- }
|