public static void DoViewTool(Transform cameraTransform, SceneView view) { Event current = Event.current; int num = SceneViewMotion.s_ViewToolID; EventType typeForControl = current.GetTypeForControl(num); float d = 0f; if (view && Tools.s_LockedViewTool == ViewTool.FPS) { view.FixNegativeSize(); d = (view.pivot - cameraTransform.position).magnitude; } switch (typeForControl) { case EventType.MouseDown: SceneViewMotion.HandleMouseDown(view, num, current.button); break; case EventType.MouseUp: SceneViewMotion.HandleMouseUp(view, num, current.button, current.clickCount); break; case EventType.MouseDrag: SceneViewMotion.HandleMouseDrag(cameraTransform, view, num); break; case EventType.KeyDown: SceneViewMotion.HandleKeyDown(view); break; case EventType.KeyUp: SceneViewMotion.HandleKeyUp(); break; case EventType.ScrollWheel: SceneViewMotion.HandleScrollWheel(view, !current.alt); break; case EventType.Layout: { Vector3 movementDirection = SceneViewMotion.GetMovementDirection(); if (GUIUtility.hotControl == num && movementDirection.sqrMagnitude != 0f) { cameraTransform.position += cameraTransform.rotation * movementDirection; } break; } } if (view && Tools.s_LockedViewTool == ViewTool.FPS) { if (!view.orthographic) { view.rotation = cameraTransform.rotation; } view.pivot = cameraTransform.position + cameraTransform.forward * d; view.Repaint(); } }
public static void DoViewTool(SceneView view) { Event current = Event.current; int num = SceneViewMotion.s_ViewToolID; EventType typeForControl = current.GetTypeForControl(num); if (view && Tools.s_LockedViewTool == ViewTool.FPS) { view.FixNegativeSize(); } switch (typeForControl) { case EventType.MouseDown: SceneViewMotion.HandleMouseDown(view, num, current.button); break; case EventType.MouseUp: SceneViewMotion.HandleMouseUp(view, num, current.button, current.clickCount); break; case EventType.MouseDrag: SceneViewMotion.HandleMouseDrag(view, num); break; case EventType.KeyDown: SceneViewMotion.HandleKeyDown(view); break; case EventType.KeyUp: SceneViewMotion.HandleKeyUp(); break; case EventType.ScrollWheel: SceneViewMotion.HandleScrollWheel(view, view.in2DMode == current.alt); break; case EventType.Layout: { Vector3 movementDirection = SceneViewMotion.GetMovementDirection(); if (GUIUtility.hotControl == num && movementDirection.sqrMagnitude != 0f) { view.pivot += view.rotation * movementDirection; view.Repaint(); } break; } case EventType.Used: if (GUIUtility.hotControl != num && SceneViewMotion.s_CurrentState != SceneViewMotion.MotionState.kInactive) { SceneViewMotion.ResetDragState(); } break; } }
// HANDLE THE VIEW TOOL & ALT COMBOS public static void DoViewTool(SceneView view) { Event evt = Event.current; // Ensure we always call the GetControlID the same number of times int id = s_ViewToolID; EventType eventType = evt.GetTypeForControl(id); // In FPS mode we update the pivot for Orbit mode (see below and inside HandleMouseDrag) if (view && Tools.s_LockedViewTool == ViewTool.FPS) { view.FixNegativeSize(); } switch (eventType) { case EventType.ScrollWheel: HandleScrollWheel(view, view.in2DMode == evt.alt); break; // Default to zooming to mouse position in 2D mode without alt case EventType.MouseDown: HandleMouseDown(view, id, evt.button); break; case EventType.MouseUp: HandleMouseUp(view, id, evt.button, evt.clickCount); break; case EventType.MouseDrag: HandleMouseDrag(view, id); break; case EventType.KeyDown: HandleKeyDown(view); break; case EventType.KeyUp: HandleKeyUp(); break; case EventType.Layout: { Vector3 motion = GetMovementDirection(); // This seems to be the best way to have a continuously repeating event if (GUIUtility.hotControl == id && motion.sqrMagnitude != 0) { view.pivot = view.pivot + view.rotation * motion; view.Repaint(); } } break; case EventType.Used: // since FPS tool acts on right click, nothing prevents a regular control // from taking the control ID on left click, so some cleanup is necessary // to not get locked into FPS mode (case 777346) if (GUIUtility.hotControl != id && s_CurrentState != MotionState.kInactive) { ResetDragState(); } break; } }
public static void DoViewTool(SceneView view) { Event current = Event.current; int controlID = s_ViewToolID; EventType typeForControl = current.GetTypeForControl(controlID); if ((view != null) && (Tools.s_LockedViewTool == UnityEditor.ViewTool.FPS)) { view.FixNegativeSize(); } switch (typeForControl) { case EventType.MouseDown: HandleMouseDown(view, controlID, current.button); break; case EventType.MouseUp: HandleMouseUp(view, controlID, current.button, current.clickCount); break; case EventType.MouseDrag: HandleMouseDrag(view, controlID); break; case EventType.KeyDown: HandleKeyDown(view); break; case EventType.KeyUp: HandleKeyUp(); break; case EventType.ScrollWheel: HandleScrollWheel(view, !current.alt); break; case EventType.Layout: { Vector3 movementDirection = GetMovementDirection(); if ((GUIUtility.hotControl == controlID) && (movementDirection.sqrMagnitude != 0f)) { view.pivot += view.rotation * movementDirection; view.Repaint(); } break; } } }
private static void OrbitCameraBehavior(SceneView view) { Event current = Event.current; view.FixNegativeSize(); Quaternion target = view.m_Rotation.target; Quaternion quaternion1 = Quaternion.AngleAxis((float)((double)current.delta.y * (3.0 / 1000.0) * 57.2957801818848), target * Vector3.right) * target; Quaternion quaternion2 = Quaternion.AngleAxis((float)((double)current.delta.x * (3.0 / 1000.0) * 57.2957801818848), Vector3.up) * quaternion1; if ((double)view.size < 0.0) { view.pivot = view.camera.transform.position; view.size = 0.0f; } view.rotation = quaternion2; }
private static void OrbitCameraBehavior(SceneView view) { Event evt = Event.current; view.FixNegativeSize(); Quaternion rotation = view.m_Rotation.target; rotation = Quaternion.AngleAxis(evt.delta.y * .003f * Mathf.Rad2Deg, rotation * Vector3.right) * rotation; rotation = Quaternion.AngleAxis(evt.delta.x * .003f * Mathf.Rad2Deg, Vector3.up) * rotation; if (view.size < 0) { view.pivot = view.camera.transform.position; view.size = 0; } view.rotation = rotation; }
private static void OrbitCameraBehavior(SceneView view) { Event current = Event.current; view.FixNegativeSize(); Quaternion quaternion = view.m_Rotation.target; quaternion = Quaternion.AngleAxis(current.delta.y * 0.003f * 57.29578f, quaternion * Vector3.right) * quaternion; quaternion = Quaternion.AngleAxis(current.delta.x * 0.003f * 57.29578f, Vector3.up) * quaternion; if (view.size < 0f) { view.pivot = view.camera.transform.position; view.size = 0f; } view.rotation = quaternion; }
public static void DoViewTool(SceneView view) { Event current = Event.current; int viewToolId = SceneViewMotion.s_ViewToolID; EventType typeForControl = current.GetTypeForControl(viewToolId); if ((bool)((Object)view) && Tools.s_LockedViewTool == ViewTool.FPS) { view.FixNegativeSize(); } switch (typeForControl) { case EventType.MouseDown: SceneViewMotion.HandleMouseDown(view, viewToolId, current.button); break; case EventType.MouseUp: SceneViewMotion.HandleMouseUp(view, viewToolId, current.button, current.clickCount); break; case EventType.MouseDrag: SceneViewMotion.HandleMouseDrag(view, viewToolId); break; case EventType.KeyDown: SceneViewMotion.HandleKeyDown(view); break; case EventType.KeyUp: SceneViewMotion.HandleKeyUp(); break; case EventType.ScrollWheel: SceneViewMotion.HandleScrollWheel(view, !current.alt); break; case EventType.Layout: Vector3 movementDirection = SceneViewMotion.GetMovementDirection(); if (GUIUtility.hotControl != viewToolId || (double)movementDirection.sqrMagnitude == 0.0) { break; } view.pivot = view.pivot + view.rotation * movementDirection; view.Repaint(); break; } }
private static void HandleMouseDrag(SceneView view, int id) { s_Dragged = true; if (GUIUtility.hotControl != id) { return; } Event current = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: if (!view.in2DMode && !view.isRotationLocked) { OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, (Vector3) (view.rotation * Vector3.forward), view.m_Ortho.target); } goto Label_031E; case ViewTool.Pan: { view.viewIsLockedToObject = false; view.FixNegativeSize(); Vector3 position = view.camera.WorldToScreenPoint(view.pivot) + new Vector3(-Event.current.delta.x, Event.current.delta.y, 0f); Vector3 vector7 = Camera.current.ScreenToWorldPoint(position) - view.pivot; vector7 = (Vector3) (vector7 * EditorGUIUtility.pixelsPerPoint); if (current.shift) { vector7 = (Vector3) (vector7 * 4f); } view.pivot += vector7; goto Label_031E; } case ViewTool.Zoom: { float num = HandleUtility.niceMouseDeltaZoom * (!current.shift ? ((float) 3) : ((float) 9)); if (!view.orthographic) { s_TotalMotion += num; if (s_TotalMotion < 0f) { view.size = s_StartZoom * (1f + (s_TotalMotion * 0.001f)); } else { view.size += (num * s_ZoomSpeed) * 0.003f; } } else { view.size = Mathf.Max((float) 0.0001f, (float) (view.size * (1f + (num * 0.001f)))); } goto Label_031E; } case ViewTool.FPS: { if (view.in2DMode || view.isRotationLocked) { goto Label_031E; } if (view.orthographic) { OrbitCameraBehavior(view); break; } view.viewIsLockedToObject = false; Vector3 vector = view.pivot - ((Vector3) ((view.rotation * Vector3.forward) * view.cameraDistance)); Quaternion rotation = view.rotation; rotation = Quaternion.AngleAxis((current.delta.y * 0.003f) * 57.29578f, (Vector3) (rotation * Vector3.right)) * rotation; rotation = Quaternion.AngleAxis((current.delta.x * 0.003f) * 57.29578f, Vector3.up) * rotation; view.rotation = rotation; view.pivot = vector + ((Vector3) ((rotation * Vector3.forward) * view.cameraDistance)); break; } default: Debug.Log("Enum value Tools.s_LockViewTool not handled"); goto Label_031E; } view.svRot.UpdateGizmoLabel(view, (Vector3) (view.rotation * Vector3.forward), view.m_Ortho.target); Label_031E: current.Use(); }
private static void HandleMouseDrag(SceneView view, int id) { s_Dragged = true; if (GUIUtility.hotControl != id) { return; } Event current = Event.current; switch (Tools.s_LockedViewTool) { case UnityEditor.ViewTool.Orbit: if (!view.in2DMode && !view.isRotationLocked) { OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, (Vector3)(view.rotation * Vector3.forward), view.m_Ortho.target); } goto Label_031E; case UnityEditor.ViewTool.Pan: { view.viewIsLockedToObject = false; view.FixNegativeSize(); Vector3 position = view.camera.WorldToScreenPoint(view.pivot) + new Vector3(-Event.current.delta.x, Event.current.delta.y, 0f); Vector3 vector7 = Camera.current.ScreenToWorldPoint(position) - view.pivot; vector7 = (Vector3)(vector7 * EditorGUIUtility.pixelsPerPoint); if (current.shift) { vector7 = (Vector3)(vector7 * 4f); } view.pivot += vector7; goto Label_031E; } case UnityEditor.ViewTool.Zoom: { float num = HandleUtility.niceMouseDeltaZoom * (!current.shift ? ((float)3) : ((float)9)); if (!view.orthographic) { s_TotalMotion += num; if (s_TotalMotion < 0f) { view.size = s_StartZoom * (1f + (s_TotalMotion * 0.001f)); } else { view.size += (num * s_ZoomSpeed) * 0.003f; } } else { view.size = Mathf.Max((float)0.0001f, (float)(view.size * (1f + (num * 0.001f)))); } goto Label_031E; } case UnityEditor.ViewTool.FPS: { if (view.in2DMode || view.isRotationLocked) { goto Label_031E; } if (view.orthographic) { OrbitCameraBehavior(view); break; } view.viewIsLockedToObject = false; Vector3 vector = view.pivot - ((Vector3)((view.rotation * Vector3.forward) * view.cameraDistance)); Quaternion rotation = view.rotation; rotation = Quaternion.AngleAxis((current.delta.y * 0.003f) * 57.29578f, (Vector3)(rotation * Vector3.right)) * rotation; rotation = Quaternion.AngleAxis((current.delta.x * 0.003f) * 57.29578f, Vector3.up) * rotation; view.rotation = rotation; view.pivot = vector + ((Vector3)((rotation * Vector3.forward) * view.cameraDistance)); break; } default: Debug.Log("Enum value Tools.s_LockViewTool not handled"); goto Label_031E; } view.svRot.UpdateGizmoLabel(view, (Vector3)(view.rotation * Vector3.forward), view.m_Ortho.target); Label_031E: current.Use(); }
public static void DoViewTool(SceneView view) { Init(); s_CurrentSceneView = view; // If a SceneView is currently taking input, don't let other views accept input if (s_ActiveSceneView != null && s_CurrentSceneView != s_ActiveSceneView) { return; } Event evt = Event.current; // Ensure we always call the GetControlID the same number of times int id = s_ViewToolID; EventType eventType = evt.GetTypeForControl(id); // In FPS mode we update the pivot for Orbit mode (see below and inside HandleMouseDrag) if (view && Tools.s_LockedViewTool == ViewTool.FPS) { view.FixNegativeSize(); } using (var inputSamplingScope = new CameraFlyModeContext.InputSamplingScope(s_CameraFlyModeContext, Tools.s_LockedViewTool, id, view, view.orthographic)) { if (inputSamplingScope.currentlyMoving) { view.viewIsLockedToObject = false; } s_Motion = inputSamplingScope.currentInputVector; } switch (eventType) { case EventType.ScrollWheel: HandleScrollWheel(view, view.in2DMode == evt.alt); break; // Default to zooming to mouse position in 2D mode without alt case EventType.MouseDown: HandleMouseDown(view, id, evt.button); break; case EventType.KeyUp: case EventType.MouseUp: HandleMouseUp(view, id, evt.button, evt.clickCount); break; case EventType.KeyDown: HandleKeyDown(view, id); break; case EventType.MouseMove: case EventType.MouseDrag: HandleMouseDrag(view, id); break; case EventType.Layout: if (GUIUtility.hotControl == id || s_FlySpeed.isAnimating || s_Moving) { view.pivot = view.pivot + view.rotation * GetMovementDirection(); view.Repaint(); } break; case EventType.Used: // since FPS tool acts on right click, nothing prevents a regular control // from taking the control ID on left click, so some cleanup is necessary // to not get locked into FPS mode (case 777346) if (GUIUtility.hotControl != id && s_CurrentState != MotionState.kInactive) { ResetDragState(); } break; } if (s_CurrentState == MotionState.kDragging && evt.type == EventType.Repaint) { HandleMouseDrag(view, id); } if (shortcutKey != KeyCode.None) { GUIUtility.hotControl = s_ViewToolID; } }
private static void HandleMouseDrag(SceneView view, int id) { SceneViewMotion.s_Dragged = true; if (GUIUtility.hotControl != id) return; Event current = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: if (!view.in2DMode) { SceneViewMotion.OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); break; } break; case ViewTool.Pan: view.viewIsLockedToObject = false; view.FixNegativeSize(); Vector3 vector3_1 = Camera.current.ScreenToWorldPoint(view.camera.WorldToScreenPoint(view.pivot) + new Vector3(-Event.current.delta.x, Event.current.delta.y, 0.0f)) - view.pivot; if (current.shift) vector3_1 *= 4f; view.pivot += vector3_1; break; case ViewTool.Zoom: float num = HandleUtility.niceMouseDeltaZoom * (!current.shift ? 3f : 9f); if (view.orthographic) { view.size = Mathf.Max(0.0001f, view.size * (float) (1.0 + (double) num * (1.0 / 1000.0))); break; } SceneViewMotion.s_TotalMotion += num; view.size = (double) SceneViewMotion.s_TotalMotion >= 0.0 ? view.size + (float) ((double) num * (double) SceneViewMotion.s_ZoomSpeed * (3.0 / 1000.0)) : SceneViewMotion.s_StartZoom * (float) (1.0 + (double) SceneViewMotion.s_TotalMotion * (1.0 / 1000.0)); break; case ViewTool.FPS: if (!view.in2DMode) { if (!view.orthographic) { view.viewIsLockedToObject = false; Vector3 vector3_2 = view.pivot - view.rotation * Vector3.forward * view.cameraDistance; Quaternion rotation = view.rotation; Quaternion quaternion1 = Quaternion.AngleAxis((float) ((double) current.delta.y * (3.0 / 1000.0) * 57.2957801818848), rotation * Vector3.right) * rotation; Quaternion quaternion2 = Quaternion.AngleAxis((float) ((double) current.delta.x * (3.0 / 1000.0) * 57.2957801818848), Vector3.up) * quaternion1; view.rotation = quaternion2; view.pivot = vector3_2 + quaternion2 * Vector3.forward * view.cameraDistance; } else SceneViewMotion.OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); break; } break; default: Debug.Log((object) "Enum value Tools.s_LockViewTool not handled"); break; } current.Use(); }
private static void OrbitCameraBehavior(SceneView view) { Event current = Event.current; view.FixNegativeSize(); Quaternion target = view.m_Rotation.target; Quaternion quaternion1 = Quaternion.AngleAxis((float) ((double) current.delta.y * (3.0 / 1000.0) * 57.2957801818848), target * Vector3.right) * target; Quaternion quaternion2 = Quaternion.AngleAxis((float) ((double) current.delta.x * (3.0 / 1000.0) * 57.2957801818848), Vector3.up) * quaternion1; if ((double) view.size < 0.0) { view.pivot = view.camera.transform.position; view.size = 0.0f; } view.rotation = quaternion2; }
private static void HandleMouseDrag(Transform cameraTransform, SceneView view, int id) { SceneViewMotion.s_Dragged = true; if (GUIUtility.hotControl == id) { Event current = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: if (!view.in2DMode) { SceneViewMotion.OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } break; case ViewTool.Pan: { view.viewIsLockedToObject = false; view.FixNegativeSize(); Camera camera = view.camera; Vector3 vector = camera.WorldToScreenPoint(view.pivot); vector += new Vector3(-Event.current.delta.x, Event.current.delta.y, 0f); Vector3 vector2 = Camera.current.ScreenToWorldPoint(vector) - view.pivot; if (current.shift) { vector2 *= 4f; } view.pivot += vector2; break; } case ViewTool.Zoom: { float num = HandleUtility.niceMouseDeltaZoom * (float)((!current.shift) ? 3 : 9); if (view.orthographic) { view.size = Mathf.Max(0.0001f, view.size * (1f + num * 0.001f)); } else { SceneViewMotion.s_TotalMotion += num; if (SceneViewMotion.s_TotalMotion < 0f) { view.size = SceneViewMotion.s_StartZoom * (1f + SceneViewMotion.s_TotalMotion * 0.001f); } else { view.size += num * SceneViewMotion.s_ZoomSpeed * 0.003f; } } break; } case ViewTool.FPS: if (!view.in2DMode) { if (!view.orthographic) { view.viewIsLockedToObject = false; Quaternion quaternion = cameraTransform.rotation; quaternion = Quaternion.AngleAxis(current.delta.y * 0.003f * 57.29578f, quaternion * Vector3.right) * quaternion; quaternion = Quaternion.AngleAxis(current.delta.x * 0.003f * 57.29578f, Vector3.up) * quaternion; cameraTransform.rotation = quaternion; } else { SceneViewMotion.OrbitCameraBehavior(view); } view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } break; default: Debug.Log("Enum value Tools.s_LockViewTool not handled"); break; } current.Use(); } }
private static void HandleMouseDrag(SceneView view, int id) { // we now are dragging for real s_CurrentState = MotionState.kDragging; if (GUIUtility.hotControl == id) { Event evt = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: { if (!view.in2DMode && !view.isRotationLocked) { OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } } break; case ViewTool.FPS: { if (!view.in2DMode && !view.isRotationLocked) { if (!view.orthographic) { view.viewIsLockedToObject = false; // The reason we calculate the camera position from the pivot, rotation and distance, // rather than just getting it from the camera transform is that the camera transform // is the *output* of camera motion calculations. It shouldn't be input and putput at the same time, // otherwise we easily get accumulated error. // We did get accumulated error before when we did this - the camera would continuously move slightly in FPS mode // even when not holding down any arrow/ASDW keys or moving the mouse. Vector3 camPos = view.pivot - view.rotation * Vector3.forward * view.cameraDistance; // Normal FPS camera behavior Quaternion rotation = view.rotation; rotation = Quaternion.AngleAxis(evt.delta.y * .003f * Mathf.Rad2Deg, rotation * Vector3.right) * rotation; rotation = Quaternion.AngleAxis(evt.delta.x * .003f * Mathf.Rad2Deg, Vector3.up) * rotation; view.rotation = rotation; view.pivot = camPos + rotation * Vector3.forward * view.cameraDistance; } else { // We want orbit behavior in orthograpic when using FPS OrbitCameraBehavior(view); } view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } } break; case ViewTool.Pan: { view.viewIsLockedToObject = false; view.FixNegativeSize(); Camera cam = view.camera; Vector3 screenPos = cam.WorldToScreenPoint(view.pivot); screenPos += new Vector3(-Event.current.delta.x, Event.current.delta.y, 0); Vector3 worldDelta = Camera.current.ScreenToWorldPoint(screenPos) - view.pivot; worldDelta *= EditorGUIUtility.pixelsPerPoint; if (evt.shift) { worldDelta *= 4; } view.pivot += worldDelta; } break; case ViewTool.Zoom: { float zoomDelta = HandleUtility.niceMouseDeltaZoom * (evt.shift ? 9 : 3); if (view.orthographic) { view.size = Mathf.Max(.0001f, view.size * (1 + zoomDelta * .001f)); } else { s_TotalMotion += zoomDelta; if (s_TotalMotion < 0) { view.size = s_StartZoom * (1 + s_TotalMotion * .001f); } else { view.size = view.size + zoomDelta * s_ZoomSpeed * .003f; } } } break; } evt.Use(); } }
public static void DoViewTool(SceneView view) { Event current = Event.current; int controlID = s_ViewToolID; EventType typeForControl = current.GetTypeForControl(controlID); if ((view != null) && (Tools.s_LockedViewTool == ViewTool.FPS)) { view.FixNegativeSize(); } switch (typeForControl) { case EventType.MouseDown: HandleMouseDown(view, controlID, current.button); break; case EventType.MouseUp: HandleMouseUp(view, controlID, current.button, current.clickCount); break; case EventType.MouseDrag: HandleMouseDrag(view, controlID); break; case EventType.KeyDown: HandleKeyDown(view); break; case EventType.KeyUp: HandleKeyUp(); break; case EventType.ScrollWheel: HandleScrollWheel(view, !current.alt); break; case EventType.Layout: { Vector3 movementDirection = GetMovementDirection(); if ((GUIUtility.hotControl == controlID) && (movementDirection.sqrMagnitude != 0f)) { view.pivot += view.rotation * movementDirection; view.Repaint(); } break; } } }
private static void HandleMouseDrag(SceneView view, int id) { SceneViewMotion.s_Dragged = true; if (GUIUtility.hotControl != id) { return; } Event current = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: if (!view.in2DMode) { SceneViewMotion.OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); break; } break; case ViewTool.Pan: view.viewIsLockedToObject = false; view.FixNegativeSize(); Vector3 vector3_1 = Camera.current.ScreenToWorldPoint(view.camera.WorldToScreenPoint(view.pivot) + new Vector3(-Event.current.delta.x, Event.current.delta.y, 0.0f)) - view.pivot; if (current.shift) { vector3_1 *= 4f; } view.pivot += vector3_1; break; case ViewTool.Zoom: float num = HandleUtility.niceMouseDeltaZoom * (!current.shift ? 3f : 9f); if (view.orthographic) { view.size = Mathf.Max(0.0001f, view.size * (float)(1.0 + (double)num * (1.0 / 1000.0))); break; } SceneViewMotion.s_TotalMotion += num; view.size = (double)SceneViewMotion.s_TotalMotion >= 0.0 ? view.size + (float)((double)num * (double)SceneViewMotion.s_ZoomSpeed * (3.0 / 1000.0)) : SceneViewMotion.s_StartZoom * (float)(1.0 + (double)SceneViewMotion.s_TotalMotion * (1.0 / 1000.0)); break; case ViewTool.FPS: if (!view.in2DMode) { if (!view.orthographic) { view.viewIsLockedToObject = false; Vector3 vector3_2 = view.pivot - view.rotation * Vector3.forward * view.cameraDistance; Quaternion rotation = view.rotation; Quaternion quaternion1 = Quaternion.AngleAxis((float)((double)current.delta.y * (3.0 / 1000.0) * 57.2957801818848), rotation * Vector3.right) * rotation; Quaternion quaternion2 = Quaternion.AngleAxis((float)((double)current.delta.x * (3.0 / 1000.0) * 57.2957801818848), Vector3.up) * quaternion1; view.rotation = quaternion2; view.pivot = vector3_2 + quaternion2 * Vector3.forward * view.cameraDistance; } else { SceneViewMotion.OrbitCameraBehavior(view); } view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); break; } break; default: Debug.Log((object)"Enum value Tools.s_LockViewTool not handled"); break; } current.Use(); }
private static void OrbitCameraBehavior(SceneView view) { Event current = Event.current; view.FixNegativeSize(); Quaternion target = view.m_Rotation.target; target = Quaternion.AngleAxis((current.delta.y * 0.003f) * 57.29578f, (Vector3) (target * Vector3.right)) * target; target = Quaternion.AngleAxis((current.delta.x * 0.003f) * 57.29578f, Vector3.up) * target; if (view.size < 0f) { view.pivot = view.camera.transform.position; view.size = 0f; } view.rotation = target; }
public static void DoViewTool(SceneView view) { Event current = Event.current; int viewToolId = SceneViewMotion.s_ViewToolID; EventType typeForControl = current.GetTypeForControl(viewToolId); if ((bool) ((Object) view) && Tools.s_LockedViewTool == ViewTool.FPS) view.FixNegativeSize(); switch (typeForControl) { case EventType.MouseDown: SceneViewMotion.HandleMouseDown(view, viewToolId, current.button); break; case EventType.MouseUp: SceneViewMotion.HandleMouseUp(view, viewToolId, current.button, current.clickCount); break; case EventType.MouseDrag: SceneViewMotion.HandleMouseDrag(view, viewToolId); break; case EventType.KeyDown: SceneViewMotion.HandleKeyDown(view); break; case EventType.KeyUp: SceneViewMotion.HandleKeyUp(); break; case EventType.ScrollWheel: SceneViewMotion.HandleScrollWheel(view, !current.alt); break; case EventType.Layout: Vector3 movementDirection = SceneViewMotion.GetMovementDirection(); if (GUIUtility.hotControl != viewToolId || (double) movementDirection.sqrMagnitude == 0.0) break; view.pivot = view.pivot + view.rotation * movementDirection; view.Repaint(); break; } }
private static void HandleMouseDrag(SceneView view, int id) { SceneViewMotion.s_CurrentState = SceneViewMotion.MotionState.kDragging; if (GUIUtility.hotControl == id) { Event current = Event.current; switch (Tools.s_LockedViewTool) { case ViewTool.Orbit: if (!view.in2DMode && !view.isRotationLocked) { SceneViewMotion.OrbitCameraBehavior(view); view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } break; case ViewTool.Pan: { view.viewIsLockedToObject = false; view.FixNegativeSize(); Camera camera = view.camera; Vector3 vector = camera.WorldToScreenPoint(view.pivot); vector += new Vector3(-Event.current.delta.x, Event.current.delta.y, 0f); Vector3 vector2 = Camera.current.ScreenToWorldPoint(vector) - view.pivot; vector2 *= EditorGUIUtility.pixelsPerPoint; if (current.shift) { vector2 *= 4f; } view.pivot += vector2; break; } case ViewTool.Zoom: { float num = HandleUtility.niceMouseDeltaZoom * (float)((!current.shift) ? 3 : 9); if (view.orthographic) { view.size = Mathf.Max(0.0001f, view.size * (1f + num * 0.001f)); } else { SceneViewMotion.s_TotalMotion += num; if (SceneViewMotion.s_TotalMotion < 0f) { view.size = SceneViewMotion.s_StartZoom * (1f + SceneViewMotion.s_TotalMotion * 0.001f); } else { view.size += num * SceneViewMotion.s_ZoomSpeed * 0.003f; } } break; } case ViewTool.FPS: if (!view.in2DMode && !view.isRotationLocked) { if (!view.orthographic) { view.viewIsLockedToObject = false; Vector3 a = view.pivot - view.rotation * Vector3.forward * view.cameraDistance; Quaternion quaternion = view.rotation; quaternion = Quaternion.AngleAxis(current.delta.y * 0.003f * 57.29578f, quaternion * Vector3.right) * quaternion; quaternion = Quaternion.AngleAxis(current.delta.x * 0.003f * 57.29578f, Vector3.up) * quaternion; view.rotation = quaternion; view.pivot = a + quaternion * Vector3.forward * view.cameraDistance; } else { SceneViewMotion.OrbitCameraBehavior(view); } view.svRot.UpdateGizmoLabel(view, view.rotation * Vector3.forward, view.m_Ortho.target); } break; default: Debug.Log("Enum value Tools.s_LockViewTool not handled"); break; } current.Use(); } }