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