diff --git a/osu.Game.Rulesets.Catch.Tests/Mods/CatchModMirrorTest.cs b/osu.Game.Rulesets.Catch.Tests/Mods/CatchModMirrorTest.cs
index 8e66284a23..fbbfee6b60 100644
--- a/osu.Game.Rulesets.Catch.Tests/Mods/CatchModMirrorTest.cs
+++ b/osu.Game.Rulesets.Catch.Tests/Mods/CatchModMirrorTest.cs
@@ -36,15 +36,13 @@ namespace osu.Game.Rulesets.Catch.Tests.Mods
beatmapProcessor.PreProcess();
foreach (var hitObject in beatmap.HitObjects)
- {
hitObject.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty());
- if (withMirrorMod)
- mirrorMod.ApplyToHitObject(hitObject);
- }
-
beatmapProcessor.PostProcess();
+ if (withMirrorMod)
+ mirrorMod.ApplyToBeatmap(beatmap);
+
return beatmap;
}
diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModMirror.cs b/osu.Game.Rulesets.Catch/Mods/CatchModMirror.cs
index 7fe7e70fd0..3aa8862a0a 100644
--- a/osu.Game.Rulesets.Catch/Mods/CatchModMirror.cs
+++ b/osu.Game.Rulesets.Catch/Mods/CatchModMirror.cs
@@ -2,6 +2,8 @@
// See the LICENCE file in the repository root for full licence text.
using System.Linq;
+using osu.Game.Beatmaps;
+using osu.Game.Rulesets.Catch.Beatmaps;
using osu.Game.Rulesets.Catch.Objects;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Catch.UI;
@@ -10,11 +12,22 @@ using osuTK;
namespace osu.Game.Rulesets.Catch.Mods
{
- public class CatchModMirror : ModMirror, IApplicableToHitObject
+ public class CatchModMirror : ModMirror, IApplicableToBeatmap
{
public override string Description => "Fruits are flipped horizontally.";
- public void ApplyToHitObject(HitObject hitObject)
+ ///
+ /// is used instead of ,
+ /// as applies offsets in .
+ /// runs after post-processing, while runs before it.
+ ///
+ public void ApplyToBeatmap(IBeatmap beatmap)
+ {
+ foreach (var hitObject in beatmap.HitObjects)
+ applyToHitObject(hitObject);
+ }
+
+ private void applyToHitObject(HitObject hitObject)
{
if (hitObject is BananaShower)
return;
@@ -22,9 +35,13 @@ namespace osu.Game.Rulesets.Catch.Mods
var catchObject = (CatchHitObject)hitObject;
catchObject.OriginalX = CatchPlayfield.WIDTH - catchObject.OriginalX;
+ catchObject.XOffset = -catchObject.XOffset;
foreach (var nested in catchObject.NestedHitObjects.Cast())
+ {
nested.OriginalX = CatchPlayfield.WIDTH - nested.OriginalX;
+ nested.XOffset = -nested.XOffset;
+ }
if (catchObject is JuiceStream juiceStream)
{