Пример #1
0
    public void UpdateCurrentPart()
    {
        if (currentPart)
        {
            currentPart.SetMaskable(false);
            var     oldLoc = currentPart.info.location;
            Vector2 newLoc;
            currentPart.info.location = newLoc = (GetComponent <RectTransform>().anchoredPosition + offset) / 100;
            if (symmetryCurrentPart)
            {
                symmetryCurrentPart.info.location = GetSymmetrizedVector(currentPart.info.location, symmetryMode);
            }

            if (Input.GetMouseButtonUp(0))
            {
                PlaceCurrentPart();
            }

            if (oldLoc != newLoc || Input.GetMouseButtonUp(0))
            {
                if (currentPart)
                {
                    currentPart.ReflectLocation();
                    currentPart.neighbors.Clear();
                    foreach (var part in parts)
                    {
                        if (ShipBuilder.CheckPartIntersectsWithBound(currentPart, part))
                        {
                            currentPart.neighbors.Add(part);
                        }
                    }
                }

                if (symmetryCurrentPart)
                {
                    symmetryCurrentPart.ReflectLocation();
                    symmetryCurrentPart.neighbors.Clear();
                    foreach (var part in parts)
                    {
                        if (ShipBuilder.CheckPartIntersectsWithBound(symmetryCurrentPart, part))
                        {
                            symmetryCurrentPart.neighbors.Add(part);
                        }
                    }
                }

                builder.UpdateChain();
            }
        }
        else if (Input.GetMouseButtonDown(0))
        {
            grid2lastPos  = grid.anchoredPosition;
            grid2mousePos = Input.mousePosition;
            lastPart      = null;

            var vecPos = GetComponent <RectTransform>().anchoredPosition;
            var part   = FindPart(vecPos, null, true);
            // check for symmetry mode and grab parts accordingly
            if (part)
            {
                if (symmetryMode != SymmetryMode.Off)
                {
                    var symmetryPart = FindPart(GetSymmetrizedVector(part.rectTransform.anchoredPosition, symmetryMode), part);
                    if (symmetryPart == part)
                    {
                        symmetryPart = null;
                    }

                    GrabPart(part, symmetryPart);
                }
                else
                {
                    GrabPart(part);
                }
            }

            if (clickedOnce && !rotateMode && !flipped && !currentPart)
            {
                grid2lastPos = grid.anchoredPosition = Vector2.zero;
            }
            else
            {
                timer       = 0;
                clickedOnce = true;
            }
        }
    }