// while dragging, transform the selected handles public void OnDrag(PointerEventData eventData) { Vector3 dragPos = Camera.main.ScreenToWorldPoint(eventData.position); dragPos.z = 0; Vector3 dragDelta = (dragStart - dragPos); dragDelta.z = 0; Vector3 newPos; // alter positions based on the original position plus the drag delta for (int i = 0; i < VertHandler.selectedHandles.Count; i++) { newPos = beforeDragPositions[i] - dragDelta; Mesh m = LevelPlacer.generatedLevel.moveArea.meshFilter.mesh; Vector3 localOldPos = LevelPlacer.generatedLevel.moveArea.transform.InverseTransformPoint(VertHandler.selectedHandles[i].transform.position); Vector3 localnewPos = LevelPlacer.generatedLevel.moveArea.transform.InverseTransformPoint(newPos); // check if the desired position is not crossing the triangle and if its not inside the mesh if (!VertHelper.IsInsideMesh(m, localOldPos, localnewPos) && VertHelper.IsHandlerPositionValid(localOldPos, localnewPos)) { // update the selection triangle verts if (VertHandler.selectionTriangleVerts.Any(x => x == localOldPos)) { // get all vector entries that are equal to this position and replace them with the newest position List <int> indexes = Enumerable.Range(0, VertHandler.selectionTriangleVerts.Count).Where(k => VertHandler.selectionTriangleVerts[k] == localOldPos).ToList(); foreach (int ind in indexes) { VertHandler.selectionTriangleVerts[ind] = localnewPos; } } VertHandler.selectedHandles[i].transform.position = newPos; } } if (VertHandler.quickDragHandle != null && VertHandler.selectedHandles.Count == 0) { newPos = quickDragBefore - dragDelta; Mesh m = LevelPlacer.generatedLevel.moveArea.meshFilter.mesh; Vector3 localOldPos = LevelPlacer.generatedLevel.moveArea.transform.InverseTransformPoint(transform.position); Vector3 localnewPos = LevelPlacer.generatedLevel.moveArea.transform.InverseTransformPoint(newPos); // check if the desired position is not crossing the triangle and if its not inside the mesh if (!VertHelper.IsInsideMesh(m, localOldPos, localnewPos) && VertHelper.IsHandlerPositionValid(localOldPos, localnewPos)) { VertHandler.quickDragHandle.transform.position = newPos; } } }