diff --git a/osu.Game/Rulesets/Objects/PathControlPoint.cs b/osu.Game/Rulesets/Objects/PathControlPoint.cs
index 83436b7a36..de40c24060 100644
--- a/osu.Game/Rulesets/Objects/PathControlPoint.cs
+++ b/osu.Game/Rulesets/Objects/PathControlPoint.cs
@@ -26,12 +26,25 @@ namespace osu.Game.Rulesets.Objects
///
internal event Action Changed;
+ ///
+ /// Creates a new .
+ ///
public PathControlPoint()
+ : this(Vector2.Zero, null)
+ {
+ }
+
+ ///
+ /// Creates a new with a provided position and type.
+ ///
+ /// The initial position.
+ /// The initial type.
+ public PathControlPoint(Vector2 position, PathType? type = null)
{
Position.ValueChanged += _ => Changed?.Invoke();
Type.ValueChanged += _ => Changed?.Invoke();
}
- public bool Equals(PathControlPoint other) => Position.Value == other.Position.Value && Type.Value == other.Type.Value;
+ public bool Equals(PathControlPoint other) => Position.Value == other?.Position.Value && Type.Value == other.Type.Value;
}
}
diff --git a/osu.Game/Rulesets/Objects/SliderPath.cs b/osu.Game/Rulesets/Objects/SliderPath.cs
index 969cdcc463..dbd236107c 100644
--- a/osu.Game/Rulesets/Objects/SliderPath.cs
+++ b/osu.Game/Rulesets/Objects/SliderPath.cs
@@ -40,12 +40,10 @@ namespace osu.Game.Rulesets.Objects
///
public readonly BindableList ControlPoints = new BindableList();
- public readonly List Test = new List();
-
- private readonly Cached pathCache = new Cached();
-
private readonly List calculatedPath = new List();
private readonly List cumulativeLength = new List();
+ private readonly Cached pathCache = new Cached();
+
private double calculatedLength;
///
@@ -87,7 +85,7 @@ namespace osu.Game.Rulesets.Objects
}
///
- /// Creates a new .
+ /// Creates a new initialised with a list of control points.
///
/// An optional set of s to initialise the path with.
/// A user-set distance of the path that may be shorter or longer than the true distance between all control points.
@@ -101,13 +99,8 @@ namespace osu.Game.Rulesets.Objects
}
public SliderPath(PathType type, Vector2[] controlPoints, double? expectedDistance = null)
- : this()
+ : this(controlPoints.Select((c, i) => new PathControlPoint(c, i == 0 ? (PathType?)type : null)).ToArray(), expectedDistance)
{
- foreach (var c in controlPoints)
- ControlPoints.Add(new PathControlPoint { Position = { Value = c } });
- ControlPoints[0].Type.Value = type;
-
- ExpectedDistance.Value = expectedDistance;
}
///