using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using UnityEngine.EventSystems;
|
using System;
|
|
|
public class PressTip : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
|
{
|
[SerializeField] GameObject m_Container;
|
[SerializeField] float m_Delay = 0f;
|
|
float timer = 0f;
|
PointerState pointerState = PointerState.Up;
|
bool triggered = false;
|
|
private void OnEnable()
|
{
|
this.pointerState = PointerState.Up;
|
this.m_Container.SetActive(false);
|
}
|
|
private void OnDisable()
|
{
|
this.pointerState = PointerState.Up;
|
this.m_Container.SetActive(false);
|
}
|
|
public virtual void OnPointerDown(PointerEventData eventData)
|
{
|
this.pointerState = PointerState.Down;
|
this.timer = 0f;
|
triggered = false;
|
}
|
|
public virtual void OnPointerUp(PointerEventData eventData)
|
{
|
this.pointerState = PointerState.Up;
|
this.m_Container.SetActive(false);
|
}
|
|
private void LateUpdate()
|
{
|
if (this.pointerState != PointerState.Down)
|
{
|
return;
|
}
|
|
this.timer += Time.deltaTime;
|
if (this.timer > this.m_Delay && !triggered)
|
{
|
triggered = true;
|
|
if (this.m_Container != null)
|
{
|
this.m_Container.SetActive(true);
|
AdjustmentContainerPosition(this.m_Container.transform as RectTransform);
|
}
|
}
|
|
}
|
|
void AdjustmentContainerPosition(RectTransform _container)
|
{
|
if (_container == null)
|
{
|
return;
|
}
|
|
var viewPortPoint = CameraManager.uiCamera.ScreenToViewportPoint(Input.mousePosition);
|
var normalizedOffset = CalculateNormalizedOffset(_container);
|
|
var containerSize = new Vector2(_container.rect.width, _container.rect.height);
|
var xOffset = viewPortPoint.x < normalizedOffset.x ? 1 : viewPortPoint.x > (1 - normalizedOffset.x) ? -1 : 0;
|
var yOffset = viewPortPoint.y > (1 - normalizedOffset.y * 2) ? -1 : xOffset != 0 ? 0 : 1;
|
|
var uiposition = CameraManager.uiCamera.ViewportToWorldPoint(viewPortPoint);
|
|
_container.position = uiposition.SetZ(0);
|
_container.localPosition += new Vector3(xOffset * containerSize.x * 0.5f, yOffset * containerSize.y * 0.5f, -_container.localPosition.z);
|
}
|
|
Vector2 CalculateNormalizedOffset(RectTransform _rectTransform)
|
{
|
var offsetX = _rectTransform.rect.width / Constants.DESIGN_RESOLUTION.x * 0.5f;
|
var offsetY = _rectTransform.rect.height / Constants.DESIGN_RESOLUTION.y * 0.5f;
|
|
return new Vector2(offsetX, offsetY);
|
}
|
|
enum PointerState
|
{
|
Down,
|
Up
|
}
|
|
}
|