mirror of
https://github.com/ppy/osu.git
synced 2025-01-07 17:52:54 +08:00
Reorder methods
This commit is contained in:
parent
016de7be6a
commit
a210469956
@ -190,50 +190,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSliderPathFromBSplineBuilder()
|
|
||||||
{
|
|
||||||
IReadOnlyList<Vector2> builderPoints = bSplineBuilder.ControlPoints;
|
|
||||||
|
|
||||||
if (builderPoints.Count == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int lastSegmentStart = 0;
|
|
||||||
PathType? lastPathType = null;
|
|
||||||
|
|
||||||
HitObject.Path.ControlPoints.Clear();
|
|
||||||
|
|
||||||
// Iterate through generated points, finding each segment and adding non-inheriting path types where appropriate.
|
|
||||||
// Importantly, the B-Spline builder returns three Vector2s at the same location when a new segment is to be started.
|
|
||||||
for (int i = 0; i < builderPoints.Count; i++)
|
|
||||||
{
|
|
||||||
bool isLastPoint = i == builderPoints.Count - 1;
|
|
||||||
bool isNewSegment = i < builderPoints.Count - 2 && builderPoints[i] == builderPoints[i + 1] && builderPoints[i] == builderPoints[i + 2];
|
|
||||||
|
|
||||||
if (isNewSegment || isLastPoint)
|
|
||||||
{
|
|
||||||
int pointsInSegment = i - lastSegmentStart;
|
|
||||||
|
|
||||||
// Where possible, we can use the simpler LINEAR path type.
|
|
||||||
PathType? pathType = pointsInSegment == 1 ? PathType.LINEAR : PathType.BSpline(3);
|
|
||||||
|
|
||||||
// Linear segments can be combined, as two adjacent linear sections are computationally the same as one with the points combined.
|
|
||||||
if (lastPathType == pathType && lastPathType == PathType.LINEAR)
|
|
||||||
pathType = null;
|
|
||||||
|
|
||||||
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[lastSegmentStart], pathType));
|
|
||||||
for (int j = lastSegmentStart + 1; j < i; j++)
|
|
||||||
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[j]));
|
|
||||||
|
|
||||||
if (isLastPoint)
|
|
||||||
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[i]));
|
|
||||||
|
|
||||||
// Skip the redundant duplicated points (see isNewSegment above) which have been coalesced into a path type.
|
|
||||||
lastSegmentStart = (i += 2);
|
|
||||||
if (pathType != null) lastPathType = pathType;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnDragEnd(DragEndEvent e)
|
protected override void OnDragEnd(DragEndEvent e)
|
||||||
{
|
{
|
||||||
base.OnDragEnd(e);
|
base.OnDragEnd(e);
|
||||||
@ -249,6 +205,15 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
base.OnMouseUp(e);
|
base.OnMouseUp(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
base.Update();
|
||||||
|
updateSlider();
|
||||||
|
|
||||||
|
// Maintain the path type in case it got defaulted to bezier at some point during the drag.
|
||||||
|
updatePathType();
|
||||||
|
}
|
||||||
|
|
||||||
private void beginCurve()
|
private void beginCurve()
|
||||||
{
|
{
|
||||||
BeginPlacement(commitStart: true);
|
BeginPlacement(commitStart: true);
|
||||||
@ -261,15 +226,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
EndPlacement(true);
|
EndPlacement(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
|
||||||
{
|
|
||||||
base.Update();
|
|
||||||
updateSlider();
|
|
||||||
|
|
||||||
// Maintain the path type in case it got defaulted to bezier at some point during the drag.
|
|
||||||
updatePathType();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updatePathType()
|
private void updatePathType()
|
||||||
{
|
{
|
||||||
if (state == SliderPlacementState.Drawing)
|
if (state == SliderPlacementState.Drawing)
|
||||||
@ -349,6 +305,50 @@ namespace osu.Game.Rulesets.Osu.Edit.Blueprints.Sliders
|
|||||||
tailCirclePiece.UpdateFrom(HitObject.TailCircle);
|
tailCirclePiece.UpdateFrom(HitObject.TailCircle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateSliderPathFromBSplineBuilder()
|
||||||
|
{
|
||||||
|
IReadOnlyList<Vector2> builderPoints = bSplineBuilder.ControlPoints;
|
||||||
|
|
||||||
|
if (builderPoints.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int lastSegmentStart = 0;
|
||||||
|
PathType? lastPathType = null;
|
||||||
|
|
||||||
|
HitObject.Path.ControlPoints.Clear();
|
||||||
|
|
||||||
|
// Iterate through generated points, finding each segment and adding non-inheriting path types where appropriate.
|
||||||
|
// Importantly, the B-Spline builder returns three Vector2s at the same location when a new segment is to be started.
|
||||||
|
for (int i = 0; i < builderPoints.Count; i++)
|
||||||
|
{
|
||||||
|
bool isLastPoint = i == builderPoints.Count - 1;
|
||||||
|
bool isNewSegment = i < builderPoints.Count - 2 && builderPoints[i] == builderPoints[i + 1] && builderPoints[i] == builderPoints[i + 2];
|
||||||
|
|
||||||
|
if (isNewSegment || isLastPoint)
|
||||||
|
{
|
||||||
|
int pointsInSegment = i - lastSegmentStart;
|
||||||
|
|
||||||
|
// Where possible, we can use the simpler LINEAR path type.
|
||||||
|
PathType? pathType = pointsInSegment == 1 ? PathType.LINEAR : PathType.BSpline(3);
|
||||||
|
|
||||||
|
// Linear segments can be combined, as two adjacent linear sections are computationally the same as one with the points combined.
|
||||||
|
if (lastPathType == pathType && lastPathType == PathType.LINEAR)
|
||||||
|
pathType = null;
|
||||||
|
|
||||||
|
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[lastSegmentStart], pathType));
|
||||||
|
for (int j = lastSegmentStart + 1; j < i; j++)
|
||||||
|
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[j]));
|
||||||
|
|
||||||
|
if (isLastPoint)
|
||||||
|
HitObject.Path.ControlPoints.Add(new PathControlPoint(builderPoints[i]));
|
||||||
|
|
||||||
|
// Skip the redundant duplicated points (see isNewSegment above) which have been coalesced into a path type.
|
||||||
|
lastSegmentStart = (i += 2);
|
||||||
|
if (pathType != null) lastPathType = pathType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private enum SliderPlacementState
|
private enum SliderPlacementState
|
||||||
{
|
{
|
||||||
Initial,
|
Initial,
|
||||||
|
Loading…
Reference in New Issue
Block a user