yyl
2025-06-09 b9751b2f076ee050fe5b685e91ae4fc4469b1015
Main/Component/UI/Common/PressTip.cs
@@ -4,99 +4,96 @@
using UnityEngine.EventSystems;
using System;
namespace vnxbqy.UI
public class PressTip : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    [SerializeField] GameObject m_Container;
    [SerializeField] float m_Delay = 0f;
    public class PressTip : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
    float timer = 0f;
    PointerState pointerState = PointerState.Up;
    bool triggered = false;
    private void OnEnable()
    {
        [SerializeField] GameObject m_Container;
        [SerializeField] float m_Delay = 0f;
        this.pointerState = PointerState.Up;
        this.m_Container.SetActive(false);
    }
        float timer = 0f;
        PointerState pointerState = PointerState.Up;
        bool triggered = false;
    private void OnDisable()
    {
        this.pointerState = PointerState.Up;
        this.m_Container.SetActive(false);
    }
        private void OnEnable()
    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)
        {
            this.pointerState = PointerState.Up;
            this.m_Container.SetActive(false);
            return;
        }
        private void OnDisable()
        this.timer += Time.deltaTime;
        if (this.timer > this.m_Delay && !triggered)
        {
            this.pointerState = PointerState.Up;
            this.m_Container.SetActive(false);
        }
            triggered = true;
        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)
            if (this.m_Container != null)
            {
                return;
                this.m_Container.SetActive(true);
                AdjustmentContainerPosition(this.m_Container.transform as RectTransform);
            }
            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
        }
    }
    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
    }
}