//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, November 25, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using UnityEngine.Events;
|
using UnityEngine.EventSystems;
|
using System.Collections.Generic;
|
|
namespace vnxbqy.UI
|
{
|
[RequireComponent(typeof(RectTransform))]
|
public class FakeButton : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IDragHandler
|
{
|
RectTransform m_RectTransform;
|
public RectTransform rectTransform { get { return m_RectTransform ?? (m_RectTransform = this.transform as RectTransform); } }
|
|
UIEvent m_OnClick = new UIEvent();
|
|
public void AddListener(UnityAction _callBack)
|
{
|
m_OnClick.AddListener(_callBack);
|
}
|
|
public void RemoveAllListeners()
|
{
|
m_OnClick.RemoveAllListeners();
|
}
|
|
public void OnPointerUp(PointerEventData eventData)
|
{
|
PassEvent(eventData, ExecuteEvents.pointerUpHandler);
|
}
|
|
public void OnPointerDown(PointerEventData eventData)
|
{
|
PassEvent(eventData, ExecuteEvents.pointerDownHandler);
|
}
|
|
public void OnDrag(PointerEventData eventData)
|
{
|
PassEvent(eventData, ExecuteEvents.dragHandler);
|
}
|
|
public void OnPointerClick(PointerEventData eventData)
|
{
|
m_OnClick.Invoke();
|
PassEvent(eventData, ExecuteEvents.submitHandler);
|
PassEvent(eventData, ExecuteEvents.pointerClickHandler);
|
}
|
|
public void PassEvent<T>(PointerEventData data, ExecuteEvents.EventFunction<T> function) where T : IEventSystemHandler
|
{
|
List<RaycastResult> results = new List<RaycastResult>();
|
EventSystem.current.RaycastAll(data, results);
|
GameObject current = data.pointerCurrentRaycast.gameObject;
|
for (int i = 0; i < results.Count; i++)
|
{
|
if (current != results[i].gameObject)
|
{
|
if (ExecuteEvents.Execute(results[i].gameObject, data, function))
|
{
|
break;
|
}
|
}
|
}
|
}
|
|
|
}
|
|
}
|