You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
C#
75 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|