using UnityEngine; 
 | 
using System.Collections; 
 | 
using UnityEngine.UI; 
 | 
using UnityEngine.EventSystems; 
 | 
using System; 
 | 
  
 | 
namespace vnxbqy.UI 
 | 
{ 
 | 
  
 | 
    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 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |