diff --git a/osu.Game.Rulesets.Sentakki/Edit/Blueprints/Slides/SlideSegmentHighlight.cs b/osu.Game.Rulesets.Sentakki/Edit/Blueprints/Slides/SlideSegmentHighlight.cs index 856c1788f..cd07d127f 100644 --- a/osu.Game.Rulesets.Sentakki/Edit/Blueprints/Slides/SlideSegmentHighlight.cs +++ b/osu.Game.Rulesets.Sentakki/Edit/Blueprints/Slides/SlideSegmentHighlight.cs @@ -125,6 +125,14 @@ private IEnumerable createContextMenuItems() Items = [.. endLaneItems.OrderBy(i => i.Item1).Select(i => i.Item2)] }; + if (SlidePaths.CheckSlideValidity(segment with { Mirrored = !segment.Mirrored }, true)) + { + yield return new TernaryStateToggleMenuItem("Mirrored", action: _ => mirrorSegment()) + { + State = { Value = segment.Mirrored ? TernaryState.True : TernaryState.False } + }; + } + yield return new OsuMenuItem("Duplicate segment", MenuItemType.Standard, action: duplicateSegment); if (slideBodyInfo.Segments.Count > 1) @@ -158,6 +166,19 @@ private void duplicateSegment() beatmap.Update(slide); } + private void mirrorSegment() + { + var segments = slideBodyInfo.Segments.ToList(); + + var segment = segments[SegmentIndex]; + segment.Mirrored = !segment.Mirrored; + + segments[SegmentIndex] = segment; + + slideBodyInfo.Segments = segments; + beatmap.Update(slide); + } + private void changeShape(PathShape shape) { if (segment.Shape == shape)