Пример #1
0
    public static AlignInfo GetAlignLine(Element element, AlignInfo alignInfo)
    {
        if (GlobalData.CurrentDisplayObjects.Count == GlobalData.CurrentSelectDisplayObjectDic.Count)
        {
            return(null);
        }
        if (element == null)
        {
            return(null);
        }
        RectTransform rt            = GlobalData.ContainerRect;
        float         closeValue    = GlobalData.CloseValue / rt.localScale.x;
        const float   lineThickness = GlobalData.AlignLineThickness;       // * rt.localScale.x;

        if (alignInfo != null)
        {
            alignInfo.UpdateInfo(element, closeValue, lineThickness);
        }
        else
        {
            alignInfo = new AlignInfo(element, closeValue, lineThickness);
        }
        List <Element> elements = GlobalData.ModuleDic[GlobalData.CurrentModule];
        int            count    = elements.Count;

        // 优先考虑最上层的 displayObject
        for (int idx = count - 1; idx >= 0; --idx)
        {
            if (element.Name.Equals(elements[idx].Name))
            {
                continue;
            }
            if (GlobalData.CurrentSelectDisplayObjectDic.ContainsKey(elements[idx].Name))
            {
                continue;
            }
            alignInfo.Merge(elements[idx]);
        }

        return(alignInfo);
    }
Пример #2
0
    public void OnDrag(PointerEventData eventData)
    {
        if (Input.GetMouseButton(2))
        {
            return;
        }
        if (_selfElement == null)
        {
            _selfElement = GlobalData.GetElement(transform.name);
        }
        Vector2 pos    = Utils.GetAnchoredPositionInContainer(Input.mousePosition) - _offset;
        Vector2 offset = pos - selfRect.anchoredPosition;

        DisplayObjectUtil.UpdateElementPosition(selfRect, _selfElement, pos);
        UlEventSystem.DispatchTrigger <UIEventType>(UIEventType.UpdateInspectorInfo);
        _alignInfo = DisplayObjectUtil.GetAlignLine(_selfElement, _alignInfo);
        if (_alignInfo?.HorizontalAlignLine != null)
        {
            Rectangle horizontalAlignRect = _alignInfo.HorizontalAlignLine;
            print($"_alignInfo.HorizontalAlignType: {_alignInfo.HorizontalAlignType}, isCenter: {_alignInfo.HorizontalAlignType == AlignType.HorizontalCenter}");
            _horizontalAlignLineManager.gameObject.SetActive(true);
            _horizontalAlignLineManager.transform.SetAsLastSibling();
            AlignType leftType  = _alignInfo.HorizontalAlignType;
            AlignType rightType = _alignInfo.OtherHorizontalAlignType;
            if (Math.Abs(_alignInfo.HorizontalAlignLine.Right - _selfElement.Right) < Math.Abs(_alignInfo.HorizontalAlignLine.Left - _selfElement.Left))
            {
                leftType  = _alignInfo.OtherHorizontalAlignType;
                rightType = _alignInfo.HorizontalAlignType;
            }
            _horizontalAlignLineManager.UpdateHorizontal(leftType,
                                                         rightType,
                                                         Element.InvConvertTo(new Vector2(horizontalAlignRect.X - GlobalData.AlignExtensionValue, horizontalAlignRect.Y)),
                                                         new Vector2(horizontalAlignRect.Width + (GlobalData.AlignExtensionValue << 1), horizontalAlignRect.Height));
        }
        else
        {
            _horizontalAlignLineManager.gameObject.SetActive(false);
        }

        if (_alignInfo?.VerticalAlignLine != null)
        {
            Rectangle verticalAlignRect = _alignInfo.VerticalAlignLine;
            print($"_alignInfo.VerticalAlignType: {_alignInfo.VerticalAlignType}, isCenter: {_alignInfo.VerticalAlignType == AlignType.VerticalCenter}");
            _verticalAlignLineManager.gameObject.SetActive(true);
            _verticalAlignLineManager.transform.SetAsLastSibling();
            AlignType upType   = _alignInfo.VerticalAlignType;
            AlignType downType = _alignInfo.OtherVerticalAlignType;
            if (Math.Abs(_alignInfo.VerticalAlignLine.Top - _selfElement.Top) < Math.Abs(_alignInfo.VerticalAlignLine.Bottom - _selfElement.Bottom))
            {
                upType   = _alignInfo.OtherVerticalAlignType;
                downType = _alignInfo.VerticalAlignType;
            }
            _verticalAlignLineManager.UpdateVertical(upType,
                                                     downType,
                                                     Element.InvConvertTo(new Vector2(verticalAlignRect.X, verticalAlignRect.Y - GlobalData.AlignExtensionValue)),
                                                     new Vector2(verticalAlignRect.Width, verticalAlignRect.Height + (GlobalData.AlignExtensionValue << 1)));
        }
        else
        {
            _verticalAlignLineManager.gameObject.SetActive(false);
        }

        if (GlobalData.CurrentSelectDisplayObjectDic.Count == 1)
        {
            return;
        }
        foreach (var pair in GlobalData.CurrentSelectDisplayObjectDic)
        {
            if (pair.Value == transform)
            {
                continue;
            }
            RectTransform rt = pair.Value.GetComponent <RectTransform>();
            DisplayObjectUtil.UpdateElementPosition(rt, pair.Key, rt.anchoredPosition + offset);
        }
    }