| 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 | 
|     } | 
|   | 
| } |