FixNegativeSize() public method

public FixNegativeSize ( ) : void
return void
Example #1
0
        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();
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        // 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;
        }
Example #6
0
        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;
        }
Example #7
0
        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();
			}
		}
Example #15
0
        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;
   }
 }
Example #20
0
        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();
            }
        }
		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();
			}
		}