You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.3 KiB
144 lines
4.3 KiB
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.UI;
|
|
using UltraCombos;
|
|
|
|
public class TouchArea : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerExitHandler, IPointerUpHandler, IPointerEnterHandler, IPointerClickHandler
|
|
{
|
|
[HideInInspector]
|
|
public Image img;
|
|
|
|
public bool MouseOnly = false;
|
|
|
|
[System.Serializable]
|
|
public class OnPointerEnterEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerEnterEvent PointerEnter = new OnPointerEnterEvent();
|
|
[System.Serializable]
|
|
public class OnPointerDownEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerDownEvent PointerDown = new OnPointerDownEvent();
|
|
[System.Serializable]
|
|
public class OnPointerDragEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerDragEvent PointerDrag = new OnPointerDragEvent();
|
|
[System.Serializable]
|
|
public class OnRayHitEvent : UnityEvent<PointerEventData> { };
|
|
public OnRayHitEvent RayHit = new OnRayHitEvent();
|
|
|
|
[System.Serializable]
|
|
public class OnRayNoHitEvent : UnityEvent<PointerEventData> { };
|
|
public OnRayNoHitEvent RayNoHit = new OnRayNoHitEvent();
|
|
|
|
[System.Serializable]
|
|
public class OnPointerUpEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerUpEvent PointerUp = new OnPointerUpEvent();
|
|
[System.Serializable]
|
|
public class OnPointerClickEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerClickEvent PointerClick = new OnPointerClickEvent();
|
|
|
|
[System.Serializable]
|
|
public class OnPointerExitEvent : UnityEvent<PointerEventData> { };
|
|
public OnPointerExitEvent PointerExit = new OnPointerExitEvent();
|
|
|
|
|
|
EventSystem eventSystem;
|
|
GlobalMKHookInputModule inputmodule;
|
|
private void Awake()
|
|
{
|
|
img = GetComponent<Image>();
|
|
inputmodule = GameObject.Find("UCEventSystem").GetComponent<GlobalMKHookInputModule>();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (inputmodule != null)
|
|
{
|
|
CheckRayCast();
|
|
}
|
|
}
|
|
|
|
void CheckRayCast()
|
|
{
|
|
if (RayNoHit != null)
|
|
RayNoHit.Invoke(null);
|
|
foreach (PointerEventData pointerdata in inputmodule.GetPointerDatas.Values)
|
|
{
|
|
List<RaycastResult> raycastResult = new List<RaycastResult>();
|
|
EventSystem.current.RaycastAll(pointerdata, raycastResult);
|
|
if(raycastResult.Count != 0)
|
|
{
|
|
foreach(RaycastResult result in raycastResult)
|
|
{
|
|
if(result.gameObject == gameObject)
|
|
{
|
|
RayHit.Invoke(pointerdata);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
{
|
|
if (PointerDown == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerDown.Invoke(eventData);
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
if (PointerDrag == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerDrag.Invoke(eventData);
|
|
}
|
|
public void OnPointerUp(PointerEventData eventData)
|
|
{
|
|
if (PointerUp == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerUp.Invoke(eventData);
|
|
}
|
|
|
|
public void OnPointerExit(PointerEventData eventData)
|
|
{
|
|
Debug.Log("Exit:" + gameObject.name);
|
|
if (PointerExit == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerExit.Invoke(eventData);
|
|
}
|
|
|
|
public void OnPointerEnter(PointerEventData eventData)
|
|
{
|
|
Debug.Log("Enter:" + gameObject.name);
|
|
if (PointerEnter == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerEnter.Invoke(eventData);
|
|
}
|
|
|
|
public void OnPointerClick(PointerEventData eventData)
|
|
{
|
|
if (PointerClick == null)
|
|
return;
|
|
if (skip_on_mouse_only(eventData))
|
|
return;
|
|
PointerClick.Invoke(eventData);
|
|
}
|
|
|
|
private bool skip_on_mouse_only(PointerEventData eventData)
|
|
{
|
|
return MouseOnly && eventData.pointerId != -1;
|
|
}
|
|
|
|
} |