private static Vector3 MoveHandlesGUI(Rect rect, Vector3 pivot, Quaternion rotation) { int controlID = GUIUtility.GetControlID(RectTool.s_MoveHandleHash, FocusType.Passive); Vector3 vector = pivot; float num = HandleUtility.GetHandleSize(pivot) * 0.2f; float num2 = 1f - GUI.color.a; Vector3[] array = new Vector3[] { rotation *new Vector2(rect.x, rect.y) + pivot, rotation *new Vector2(rect.xMax, rect.y) + pivot, rotation *new Vector2(rect.xMax, rect.yMax) + pivot, rotation *new Vector2(rect.x, rect.yMax) + pivot }; VertexSnapping.HandleKeyAndMouseMove(controlID); bool flag = Selection.transforms.Length == 1 && InternalEditorUtility.SupportsRectLayout(Selection.activeTransform) && Selection.activeTransform.parent.rotation == rotation; Event current = Event.current; EventType typeForControl = current.GetTypeForControl(controlID); Plane plane = new Plane(array[0], array[1], array[2]); switch (typeForControl) { case EventType.MouseDown: { bool flag2 = Tools.vertexDragging || (current.button == 0 && current.modifiers == EventModifiers.None && RectHandles.RaycastGUIPointToWorldHit(current.mousePosition, plane, out RectTool.s_StartMouseWorldPos) && (RectTool.SceneViewDistanceToRectangle(array, current.mousePosition) == 0f || (num2 > 0f && RectTool.SceneViewDistanceToDisc(pivot, rotation * Vector3.forward, num, current.mousePosition) == 0f))); if (flag2) { RectTool.s_StartPosition = pivot; RectTool.s_StartMousePos = (RectTool.s_CurrentMousePos = current.mousePosition); RectTool.s_Moving = false; RectTool.s_LockAxis = -1; int num3 = controlID; GUIUtility.keyboardControl = num3; GUIUtility.hotControl = num3; EditorGUIUtility.SetWantsMouseJumping(1); HandleUtility.ignoreRaySnapObjects = null; current.Use(); if (flag) { Transform activeTransform = Selection.activeTransform; RectTransform component = activeTransform.GetComponent <RectTransform>(); Transform parent = activeTransform.parent; RectTransform component2 = parent.GetComponent <RectTransform>(); RectTool.s_StartRectPosition = component.anchoredPosition; RectTransformSnapping.CalculatePositionSnapValues(parent, activeTransform, component2, component); } } break; } case EventType.MouseUp: if (GUIUtility.hotControl == controlID) { if (!RectTool.s_Moving) { Selection.activeGameObject = SceneViewPicking.PickGameObject(current.mousePosition); } GUIUtility.hotControl = 0; EditorGUIUtility.SetWantsMouseJumping(0); HandleUtility.ignoreRaySnapObjects = null; current.Use(); } break; case EventType.MouseDrag: if (GUIUtility.hotControl == controlID) { RectTool.s_CurrentMousePos += current.delta; if (!RectTool.s_Moving && (RectTool.s_CurrentMousePos - RectTool.s_StartMousePos).magnitude > 3f) { RectTool.s_Moving = true; RectHandles.RaycastGUIPointToWorldHit(RectTool.s_CurrentMousePos, plane, out RectTool.s_StartMouseWorldPos); } if (RectTool.s_Moving) { if (Tools.vertexDragging) { if (HandleUtility.ignoreRaySnapObjects == null) { Handles.SetupIgnoreRaySnapObjects(); } Vector3 vector2; if (HandleUtility.FindNearestVertex(RectTool.s_CurrentMousePos, null, out vector2)) { vector = vector2; GUI.changed = true; } ManipulationToolUtility.minDragDifference = Vector2.zero; } else { ManipulationToolUtility.SetMinDragDifferenceForPos(pivot); Vector3 a; if (RectHandles.RaycastGUIPointToWorldHit(RectTool.s_CurrentMousePos, plane, out a)) { Vector3 vector3 = a - RectTool.s_StartMouseWorldPos; if (current.shift) { vector3 = Quaternion.Inverse(rotation) * vector3; if (RectTool.s_LockAxis == -1) { RectTool.s_LockAxis = ((Mathf.Abs(vector3.x) <= Mathf.Abs(vector3.y)) ? 1 : 0); } vector3[1 - RectTool.s_LockAxis] = 0f; vector3 = rotation * vector3; } else { RectTool.s_LockAxis = -1; } if (flag) { Transform parent2 = Selection.activeTransform.parent; Vector3 vector4 = RectTool.s_StartRectPosition + parent2.InverseTransformVector(vector3); vector4.z = 0f; Quaternion rotation2 = Quaternion.Inverse(rotation); Vector2 snapDistance = Vector2.one * HandleUtility.GetHandleSize(vector) * 0.05f; snapDistance.x /= (rotation2 * parent2.TransformVector(Vector3.right)).x; snapDistance.y /= (rotation2 * parent2.TransformVector(Vector3.up)).y; Vector3 vector5 = RectTransformSnapping.SnapToGuides(vector4, snapDistance); ManipulationToolUtility.DisableMinDragDifferenceBasedOnSnapping(vector4, vector5); vector3 = parent2.TransformVector(vector5 - RectTool.s_StartRectPosition); } vector = RectTool.s_StartPosition + vector3; GUI.changed = true; } } } current.Use(); } break; case EventType.Repaint: if (Tools.vertexDragging) { RectHandles.RectScalingCap(controlID, pivot, rotation, 1f); } else { Handles.color = Handles.secondaryColor * new Color(1f, 1f, 1f, 1.5f * num2); Handles.CircleCap(controlID, pivot, rotation, num); Handles.color = Handles.secondaryColor * new Color(1f, 1f, 1f, 0.3f * num2); Handles.DrawSolidDisc(pivot, rotation * Vector3.forward, num); } break; } ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingPosX", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingLeft", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingRight", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingPosY", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingTop", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingBottom", typeForControl); return(vector); }
private static Vector3 MoveHandlesGUI(Rect rect, Vector3 pivot, Quaternion rotation) { bool flag2; int controlID = GUIUtility.GetControlID(s_MoveHandleHash, FocusType.Passive); Vector3 position = pivot; float radius = HandleUtility.GetHandleSize(pivot) * 0.2f; float num3 = 1f - GUI.color.a; Vector3[] worldPoints = new Vector3[] { (rotation * new Vector2(rect.x, rect.y)) + pivot, (rotation * new Vector2(rect.xMax, rect.y)) + pivot, (rotation * new Vector2(rect.xMax, rect.yMax)) + pivot, (rotation * new Vector2(rect.x, rect.yMax)) + pivot }; VertexSnapping.HandleKeyAndMouseMove(controlID); bool flag = ((Selection.transforms.Length == 1) && InternalEditorUtility.SupportsRectLayout(Selection.activeTransform)) && (Selection.activeTransform.parent.rotation == rotation); Event current = Event.current; EventType typeForControl = current.GetTypeForControl(controlID); Plane plane = new Plane(worldPoints[0], worldPoints[1], worldPoints[2]); switch (typeForControl) { case EventType.MouseDown: flag2 = false; if (!Tools.vertexDragging) { flag2 = (((current.button == 0) && (current.modifiers == EventModifiers.None)) && RectHandles.RaycastGUIPointToWorldHit(current.mousePosition, plane, out s_StartMouseWorldPos)) && ((SceneViewDistanceToRectangle(worldPoints, current.mousePosition) == 0f) || ((num3 > 0f) && (SceneViewDistanceToDisc(pivot, (Vector3)(rotation * Vector3.forward), radius, current.mousePosition) == 0f))); break; } flag2 = true; break; case EventType.MouseUp: if (GUIUtility.hotControl == controlID) { if (!s_Moving) { Selection.activeGameObject = SceneViewPicking.PickGameObject(current.mousePosition); } GUIUtility.hotControl = 0; EditorGUIUtility.SetWantsMouseJumping(0); HandleUtility.ignoreRaySnapObjects = null; current.Use(); } goto Label_05FC; case EventType.MouseDrag: if (GUIUtility.hotControl == controlID) { s_CurrentMousePos += current.delta; if (!s_Moving) { Vector2 vector8 = s_CurrentMousePos - s_StartMousePos; if (vector8.magnitude > 3f) { s_Moving = true; RectHandles.RaycastGUIPointToWorldHit(s_CurrentMousePos, plane, out s_StartMouseWorldPos); } } if (s_Moving) { if (!Tools.vertexDragging) { Vector3 vector3; ManipulationToolUtility.SetMinDragDifferenceForPos(pivot); if (RectHandles.RaycastGUIPointToWorldHit(s_CurrentMousePos, plane, out vector3)) { Vector3 vector = vector3 - s_StartMouseWorldPos; if (current.shift) { vector = (Vector3)(Quaternion.Inverse(rotation) * vector); if (s_LockAxis == -1) { float introduced28 = Mathf.Abs(vector.x); s_LockAxis = (introduced28 <= Mathf.Abs(vector.y)) ? 1 : 0; } vector[1 - s_LockAxis] = 0f; vector = (Vector3)(rotation * vector); } else { s_LockAxis = -1; } if (flag) { Transform parent = Selection.activeTransform.parent; Vector3 vector5 = s_StartRectPosition + parent.InverseTransformVector(vector); vector5.z = 0f; Quaternion quaternion = Quaternion.Inverse(rotation); Vector2 snapDistance = (Vector2)((Vector2.one * HandleUtility.GetHandleSize(position)) * 0.05f); Vector3 vector9 = (Vector3)(quaternion * parent.TransformVector(Vector3.right)); snapDistance.x /= vector9.x; Vector3 vector10 = (Vector3)(quaternion * parent.TransformVector(Vector3.up)); snapDistance.y /= vector10.y; Vector3 positionAfterSnapping = (Vector3)RectTransformSnapping.SnapToGuides(vector5, snapDistance); ManipulationToolUtility.DisableMinDragDifferenceBasedOnSnapping(vector5, positionAfterSnapping); vector = parent.TransformVector(positionAfterSnapping - s_StartRectPosition); } position = s_StartPosition + vector; GUI.changed = true; } } else { Vector3 vector2; if (HandleUtility.ignoreRaySnapObjects == null) { Handles.SetupIgnoreRaySnapObjects(); } if (HandleUtility.FindNearestVertex(s_CurrentMousePos, null, out vector2)) { position = vector2; GUI.changed = true; } ManipulationToolUtility.minDragDifference = (Vector3)Vector2.zero; } } current.Use(); } goto Label_05FC; case EventType.Repaint: if (!Tools.vertexDragging) { Handles.color = Handles.secondaryColor * new Color(1f, 1f, 1f, 1.5f * num3); Handles.CircleCap(controlID, pivot, rotation, radius); Handles.color = Handles.secondaryColor * new Color(1f, 1f, 1f, 0.3f * num3); Handles.DrawSolidDisc(pivot, (Vector3)(rotation * Vector3.forward), radius); } else { RectHandles.RectScalingCap(controlID, pivot, rotation, 1f); } goto Label_05FC; default: goto Label_05FC; } if (flag2) { s_StartPosition = pivot; s_StartMousePos = s_CurrentMousePos = current.mousePosition; s_Moving = false; s_LockAxis = -1; int num4 = controlID; GUIUtility.keyboardControl = num4; GUIUtility.hotControl = num4; EditorGUIUtility.SetWantsMouseJumping(1); HandleUtility.ignoreRaySnapObjects = null; current.Use(); if (flag) { Transform activeTransform = Selection.activeTransform; RectTransform component = activeTransform.GetComponent <RectTransform>(); Transform parentSpace = activeTransform.parent; RectTransform parentRect = parentSpace.GetComponent <RectTransform>(); s_StartRectPosition = (Vector3)component.anchoredPosition; RectTransformSnapping.CalculatePositionSnapValues(parentSpace, activeTransform, parentRect, component); } } Label_05FC: ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingPosX", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingLeft", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingRight", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingPosY", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingTop", typeForControl); ManipulationToolUtility.DetectDraggingBasedOnMouseDownUp("ChangingBottom", typeForControl); return(position); }