2020-12-22 03:13:43 +00:00
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
|
|
|
|
using System;
|
2020-03-28 18:36:12 +00:00
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
2021-05-12 00:15:11 +01:00
|
|
|
|
using UniRx;
|
2020-03-28 18:36:12 +00:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.Events;
|
|
|
|
|
|
using UnityEngine.EventSystems;
|
|
|
|
|
|
|
2022-08-08 22:43:55 +01:00
|
|
|
|
public class ClickCatcher : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, /*IPointerUpHandler, */IPointerDownHandler, IPointerClickHandler
|
2020-03-28 18:36:12 +00:00
|
|
|
|
{
|
2020-03-29 04:19:24 +01:00
|
|
|
|
//public bool EnableMouse => PointerIsInside && !_catching;
|
2020-03-28 18:36:12 +00:00
|
|
|
|
public bool PointerIsInside { get; private set; }
|
2020-05-04 00:07:36 +01:00
|
|
|
|
public float DragDistance = 25f;
|
2020-03-28 18:36:12 +00:00
|
|
|
|
|
2021-05-12 00:15:11 +01:00
|
|
|
|
public Subject<PointerEventData> OnEnter = new Subject<PointerEventData>();
|
|
|
|
|
|
public Subject<PointerEventData> OnExit = new Subject<PointerEventData>();
|
|
|
|
|
|
public Subject<PointerEventData> OnClick = new Subject<PointerEventData>();
|
2022-08-08 22:43:55 +01:00
|
|
|
|
public Subject<PointerEventData> OnDown = new Subject<PointerEventData>();
|
2020-03-28 18:36:12 +00:00
|
|
|
|
|
2021-05-12 00:15:11 +01:00
|
|
|
|
// private float downTime;
|
2020-04-25 00:01:13 +01:00
|
|
|
|
|
2020-03-28 18:36:12 +00:00
|
|
|
|
public static ClickCatcher Background
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_background == null)
|
|
|
|
|
|
_background = GameObject.FindGameObjectWithTag("UIBackground").GetComponent<ClickCatcher>();
|
|
|
|
|
|
return _background;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static ClickCatcher _background;
|
|
|
|
|
|
|
|
|
|
|
|
public void OnPointerEnter(PointerEventData eventData)
|
|
|
|
|
|
{
|
2020-04-29 11:27:55 +01:00
|
|
|
|
//Debug.Log("Pointer Entered");
|
2021-05-12 00:15:11 +01:00
|
|
|
|
OnEnter.OnNext(eventData);
|
2020-03-28 18:36:12 +00:00
|
|
|
|
PointerIsInside = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void OnPointerExit(PointerEventData eventData)
|
|
|
|
|
|
{
|
2020-04-29 11:27:55 +01:00
|
|
|
|
//Debug.Log("Pointer Exited");
|
2021-05-12 00:15:11 +01:00
|
|
|
|
OnExit.OnNext(eventData);
|
2020-03-28 18:36:12 +00:00
|
|
|
|
PointerIsInside = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-04-25 00:01:13 +01:00
|
|
|
|
// public void OnPointerUp(PointerEventData eventData)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(Time.time - downTime < ClickTime)
|
|
|
|
|
|
// OnClick?.Invoke(eventData);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
2022-08-08 22:43:55 +01:00
|
|
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
|
|
|
|
{
|
|
|
|
|
|
OnDown.OnNext(eventData);
|
|
|
|
|
|
}
|
2020-04-25 00:01:13 +01:00
|
|
|
|
|
2020-03-28 18:36:12 +00:00
|
|
|
|
public void OnPointerClick(PointerEventData eventData)
|
|
|
|
|
|
{
|
2020-05-04 00:07:36 +01:00
|
|
|
|
if((eventData.pressPosition - eventData.position).sqrMagnitude < DragDistance)
|
2021-05-12 00:15:11 +01:00
|
|
|
|
OnClick.OnNext(eventData);
|
2020-03-28 18:36:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|