Skip to content

Commit ddc44f1

Browse files
author
Julia Schwarz
committed
Represent slider start and end as distances from center instead of local space coords.
1 parent 01819d5 commit ddc44f1

File tree

1 file changed

+27
-9
lines changed
  • Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Sliders

1 file changed

+27
-9
lines changed

Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Sliders/PinchSlider.cs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ namespace Microsoft.MixedReality.Toolkit.UI
1616
/// </summary>
1717
public class PinchSlider : MonoBehaviour, IMixedRealityPointerHandler, IMixedRealityFocusHandler
1818
{
19-
2019
#region Serialized Fields and Properties
2120
[Tooltip("The gameObject that contains the slider thumb.")]
2221
[SerializeField]
@@ -54,20 +53,26 @@ private enum SliderAxis
5453
}
5554

5655
[SerializeField]
57-
[Tooltip("Where the slider track starts, in local coordinates")]
58-
private Vector3 sliderStartPosition = new Vector3(-0.5f, 0, 0);
56+
[Tooltip("Where the slider track starts, as distance from center along slider axis, in local space units.")]
57+
private float sliderStartDistance = -.5f;
5958
[SerializeField]
60-
[Tooltip("Where the slider track ends, in local coordinates")]
61-
private Vector3 sliderEndPosition = new Vector3(0.5f, 0, 0);
59+
[Tooltip("Where the slider track ends, as distance from center along slider axis, in local space units.")]
60+
private float sliderEndDistance = .5f;
6261

6362
/// <summary>
6463
/// Gets the start position of the slider, in world space, or zero if invalid.
6564
/// Sets the start position of the slider, in world space, projected to the slider's axis.
6665
/// </summary>
6766
public Vector3 SliderStartPosition
6867
{
69-
get { return transform.TransformPoint(sliderStartPosition); }
70-
set { sliderStartPosition = Vector3.Project(transform.InverseTransformPoint(value), GetSliderAxis()); }
68+
get
69+
{
70+
return transform.TransformPoint(GetSliderAxis() * sliderStartDistance);
71+
}
72+
set
73+
{
74+
sliderStartDistance = Vector3.Dot(transform.InverseTransformPoint(value), GetSliderAxis());
75+
}
7176
}
7277

7378
/// <summary>
@@ -76,8 +81,14 @@ public Vector3 SliderStartPosition
7681
/// </summary>
7782
public Vector3 SliderEndPosition
7883
{
79-
get { return transform.TransformPoint(sliderEndPosition); }
80-
set { sliderEndPosition = Vector3.Project(transform.InverseTransformPoint(value), GetSliderAxis()); }
84+
get
85+
{
86+
return transform.TransformPoint(GetSliderAxis() * sliderEndDistance);
87+
}
88+
set
89+
{
90+
sliderEndDistance = Vector3.Dot(transform.InverseTransformPoint(value), GetSliderAxis());
91+
}
8192
}
8293

8394
/// <summary>
@@ -106,6 +117,13 @@ public Vector3 SliderTrackDirection
106117
private Vector3 sliderThumbOffset = Vector3.zero;
107118
#endregion
108119

120+
#region Constants
121+
/// <summary>
122+
/// Minimum distance between start and end of slider, in world space
123+
/// </summary>
124+
private const float MinSliderLength = 0.001f;
125+
#endregion
126+
109127
#region Unity methods
110128
public void Start()
111129
{

0 commit comments

Comments
 (0)