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