diff --git a/Editor/ViewportController.cs b/Editor/ViewportController.cs index bc0c24b..61c067f 100644 --- a/Editor/ViewportController.cs +++ b/Editor/ViewportController.cs @@ -87,8 +87,8 @@ static void Update() _wasHorizonLocked = Settings.LockHorizon; // Return if device is idle. - if (SpaceNavigatorHID.current.Translation.ReadValue() == Vector3.zero && - SpaceNavigatorHID.current.Rotation.ReadValue() == Vector3.zero) + if (ApproximatelyEqual(SpaceNavigatorHID.current.Translation.ReadValue(), Vector3.zero, Settings.TransSensEpsilon) && + ApproximatelyEqual(SpaceNavigatorHID.current.Rotation.ReadValue(), Vector3.zero, Settings.RotSensEpsilon)) { _wasIdle = true; return; @@ -132,6 +132,8 @@ static void Fly(SceneView sceneView) static void Fly(SceneView sceneView, Vector3 translationInversion, Vector3 rotationInversion) { + if (sceneView.in2DMode) return; + SyncRigWithScene(); // Apply inversion of axes for fly/grabmove mode. @@ -431,6 +433,19 @@ private static Vector3 SnapOnTranslation(Vector3 v, float snap) } #endregion - Snapping - + + #region - Calibration - + + private static bool ApproximatelyEqual(Vector3 lhs, Vector3 rhs, float epsilon) + { + float num = lhs.x - rhs.x; + float num2 = lhs.y - rhs.y; + float num3 = lhs.z - rhs.z; + float num4 = num * num + num2 * num2 + num3 * num3; + return num4 < (9.99999944f * Mathf.Pow(10, -epsilon)); + } + + #endregion - Calibration - } } -#endif \ No newline at end of file +#endif diff --git a/Runtime/Settings/Settings.cs b/Runtime/Settings/Settings.cs index aacf2c1..c4070eb 100644 --- a/Runtime/Settings/Settings.cs +++ b/Runtime/Settings/Settings.cs @@ -70,6 +70,12 @@ public static class Settings { public static Vector3 TelekinesisInvertTranslation, TelekinesisInvertRotation; public static Vector3 GrabMoveInvertTranslation, GrabMoveInvertRotation; + // Calibration + public const float TransSensEpsilonDefault = 11f; + public static float TransSensEpsilon = TransSensEpsilonDefault; + public const float RotSensEpsilonDefault = 11f; + public static float RotSensEpsilon = RotSensEpsilonDefault; + private static Vector2 _scrollPos; static Settings() { @@ -316,6 +322,29 @@ public static void OnGUI() { GUILayout.EndHorizontal(); #endregion - Axes inversion per mode - + #region - Calibration - + GUILayout.Space(10); + GUILayout.BeginVertical(); + GUILayout.Label("Calibration"); + GUILayout.Space(4); + + #region - Translation Epsilon - + GUILayout.BeginHorizontal(); + GUILayout.Label("Translation Epsilon", GUILayout.Width(120)); + TransSensEpsilon = EditorGUILayout.FloatField(TransSensEpsilon, GUILayout.Width(30)); + GUILayout.EndHorizontal(); + #endregion - Translation Epsilon - + + #region - Rotation Epsilon - + GUILayout.BeginHorizontal(); + GUILayout.Label("Rotation Epsilon", GUILayout.Width(120)); + RotSensEpsilon = EditorGUILayout.FloatField(RotSensEpsilon, GUILayout.Width(30)); + GUILayout.EndHorizontal(); + #endregion - Rotation Epsilon - + + GUILayout.EndVertical(); + #endregion - Calibration - + #region - Dead Zone - #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX GUILayout.BeginVertical(); @@ -398,6 +427,9 @@ public static void Write() { WriteAxisInversions(OrbitInvertTranslation, OrbitInvertRotation, "Orbit"); WriteAxisInversions(TelekinesisInvertTranslation, TelekinesisInvertRotation, "Telekinesis"); WriteAxisInversions(GrabMoveInvertTranslation, GrabMoveInvertRotation, "Grab move"); + // Calibration + PlayerPrefs.SetFloat("Translation sensitivity epsilon", TransSensEpsilon); + PlayerPrefs.SetFloat("Rotation sensitivity epsilon", RotSensEpsilon); } /// @@ -439,6 +471,9 @@ public static void Read() { ReadAxisInversions(ref OrbitInvertTranslation, ref OrbitInvertRotation, "Orbit"); ReadAxisInversions(ref TelekinesisInvertTranslation, ref TelekinesisInvertRotation, "Telekinesis"); ReadAxisInversions(ref GrabMoveInvertTranslation, ref GrabMoveInvertRotation, "Grab move"); + // Calibration + TransSensEpsilon = PlayerPrefs.GetFloat("Translation sensitivity epsilon", TransSensEpsilonDefault); + RotSensEpsilon = PlayerPrefs.GetFloat("Rotation sensitivity epsilon", RotSensEpsilonDefault); } ///