Ejemplo n.º 1
0
    public override void OnDrag(PointerEventData eventData)
    {
        base.OnDrag(eventData);
        Vector3 deltaVector3 = new Vector3(eventData.delta.x, eventData.delta.y);

        RectTransformUtility.ScreenPointToLocalPointInRectangle(CanvasHelper.Main.transform as RectTransform, Input.mousePosition, CanvasHelper.Main.worldCamera, out Vector2 mousePosition);
        _targetPosition = mousePosition;

        Quaternion velocityRotation = Quaternion.LookRotation(deltaVector3);

        Vector3 rotationAxis = velocityRotation * Vector3.up;

        _destRotation = Quaternion.AngleAxis(eventData.delta.magnitude * 5f, rotationAxis);

        if (Owner.CardData.TargetType != CardTargetType.E_NonTarget)
        {
            if (RectTransformUtility.RectangleContainsScreenPoint(InGameInterface.Instance.HandField, Input.mousePosition))
            {
                if (!IsVisible)
                {
                    ((RectTransform)Owner.transform).anchoredPosition = _targetPosition;
                }
                SetUseEffect(false);
                IsVisible = true;

                CardRangeInterface.Instance.IsVisible = false;
                InGameInterface.Instance.ArrowBody.SetActive(false);
            }
            else
            {
                CardRangeInterface.Instance.IsVisible = true;
                InGameInterface.Instance.ArrowBody.SetActive(true);

                if (IsVisible)
                {
                    SetUseEffect(true);
                }

                Vector3 basePos = InGameInterface.Instance.GetCardLocationInHand(Owner.HandIndex);
                Vector3 target  = new Vector3(_targetPosition.x, _targetPosition.y, 0f);
                InGameInterface.Instance.ArrowBody.transform.localPosition = basePos;

                Vector2 arrowSize = ((RectTransform)InGameInterface.Instance.ArrowBody.transform).sizeDelta;
                arrowSize.y = (target - basePos).magnitude - 100f;
                ((RectTransform)InGameInterface.Instance.ArrowBody.transform).sizeDelta = arrowSize;

                Quaternion arrowRotation = Quaternion.FromToRotation(Vector3.up, (target - basePos).normalized);
                InGameInterface.Instance.ArrowBody.transform.localRotation = arrowRotation;

                if (Owner.CardData.TargetType == CardTargetType.E_Target)
                {
                    RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

                    if (hit.collider != null)
                    {
                        _target.SetTarget(hit.collider.GetComponentInParent <Character>());

                        if (_target.Target is Player)
                        {
                            _target.SetTarget(null);
                        }
                    }
                    else
                    {
                        _target.SetTarget(null);
                    }

                    InGameInterface.Instance.CollectCircle.SetActive(_target.Target != null);
                }
                else
                {
                    Vector3 point = Isometric.GetIsometicBasePositionByWorldRay(Camera.main.ScreenToWorldPoint(Input.mousePosition),
                                                                                Camera.main.transform.forward);
                    _target.SetTarget(point);
                    CardRangeInterface.Instance.CurrentPoint = point;
                }
            }
        }
        else
        {
            if (RectTransformUtility.RectangleContainsScreenPoint(InGameInterface.Instance.HandField, Input.mousePosition))
            {
                CardRangeInterface.Instance.IsVisible = false;
            }
            else
            {
                CardRangeInterface.Instance.IsVisible = true;
            }
        }
    }