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.
CrowdControl/Assets/3rd/StompyRobot/SRF/Scripts/UI/LongPressButton.cs

75 lines
2.0 KiB
C#

2 months ago
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();
}
}
}
}