Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions Editor/ViewportController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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
#endif
35 changes: 35 additions & 0 deletions Runtime/Settings/Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}

/// <summary>
Expand Down Expand Up @@ -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);
}

/// <summary>
Expand Down