diff --git a/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
index e1e5affc78..cf6d9a3ccd 100644
--- a/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/ControlPoint.cs
@@ -14,12 +14,15 @@ namespace osu.Game.Beatmaps.ControlPoints
public int CompareTo(ControlPoint other) => Time.CompareTo(other.Time);
- public virtual bool Equals(ControlPoint other)
- {
- if (ReferenceEquals(null, other)) return false;
- if (ReferenceEquals(this, other)) return true;
+ ///
+ /// Whether this provides the same changes to gameplay as another .
+ ///
+ /// The to compare to.
+ /// Whether this provides the same changes to gameplay as .
+ public virtual bool ChangeEquals(ControlPoint other) => !ReferenceEquals(null, other);
- return Time.Equals(other.Time);
- }
+ public bool Equals(ControlPoint other)
+ => ChangeEquals(other)
+ && Time.Equals(other.Time);
}
}
diff --git a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
index 296dcf66b1..f821ff11f4 100644
--- a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs
@@ -18,8 +18,8 @@ namespace osu.Game.Beatmaps.ControlPoints
private double speedMultiplier = 1;
- public override bool Equals(ControlPoint other)
- => base.Equals(other)
+ public override bool ChangeEquals(ControlPoint other)
+ => base.ChangeEquals(other)
&& other is DifficultyControlPoint difficulty
&& SpeedMultiplier.Equals(difficulty.SpeedMultiplier);
}
diff --git a/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
index e41fb3a1d3..0cbdf7fdf2 100644
--- a/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/EffectControlPoint.cs
@@ -15,8 +15,8 @@ namespace osu.Game.Beatmaps.ControlPoints
///
public bool OmitFirstBarLine;
- public override bool Equals(ControlPoint other)
- => base.Equals(other)
+ public override bool ChangeEquals(ControlPoint other)
+ => base.ChangeEquals(other)
&& other is EffectControlPoint effect
&& KiaiMode.Equals(effect.KiaiMode)
&& OmitFirstBarLine.Equals(effect.OmitFirstBarLine);
diff --git a/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
index c4d6ad24a0..11de392d14 100644
--- a/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/SampleControlPoint.cs
@@ -43,8 +43,8 @@ namespace osu.Game.Beatmaps.ControlPoints
Volume = sampleInfo.Volume > 0 ? sampleInfo.Volume : SampleVolume
};
- public override bool Equals(ControlPoint other)
- => base.Equals(other)
+ public override bool ChangeEquals(ControlPoint other)
+ => base.ChangeEquals(other)
&& other is SampleControlPoint sample
&& SampleBank.Equals(sample.SampleBank)
&& SampleVolume.Equals(sample.SampleVolume);
diff --git a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
index 3e4e2a0bb1..8fe3257786 100644
--- a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
+++ b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs
@@ -24,8 +24,8 @@ namespace osu.Game.Beatmaps.ControlPoints
private double beatLength = 1000;
- public override bool Equals(ControlPoint other)
- => base.Equals(other)
+ public override bool ChangeEquals(ControlPoint other)
+ => base.ChangeEquals(other)
&& other is TimingControlPoint timing
&& TimeSignature.Equals(timing.TimeSignature)
&& BeatLength.Equals(timing.BeatLength);
diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs
index f33e963f08..fe55d19908 100644
--- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs
+++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs
@@ -359,7 +359,7 @@ namespace osu.Game.Beatmaps.Formats
{
var existing = beatmap.ControlPointInfo.DifficultyPointAt(newPoint.Time);
- if (newPoint.Equals(existing))
+ if (newPoint.ChangeEquals(existing))
return;
beatmap.ControlPointInfo.DifficultyPoints.RemoveAll(x => x.Time == newPoint.Time);
@@ -370,7 +370,7 @@ namespace osu.Game.Beatmaps.Formats
{
var existing = beatmap.ControlPointInfo.EffectPointAt(newPoint.Time);
- if (newPoint.Equals(existing))
+ if (newPoint.ChangeEquals(existing))
return;
beatmap.ControlPointInfo.EffectPoints.Add(newPoint);
@@ -380,7 +380,7 @@ namespace osu.Game.Beatmaps.Formats
{
var existing = beatmap.ControlPointInfo.SamplePointAt(newPoint.Time);
- if (newPoint.Equals(existing))
+ if (newPoint.ChangeEquals(existing))
return;
beatmap.ControlPointInfo.SamplePoints.Add(newPoint);
diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs
index 60fff4bd7f..f5e3a34462 100644
--- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs
+++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs
@@ -184,8 +184,8 @@ namespace osu.Game.Beatmaps.Formats
return baseInfo;
}
- public override bool Equals(ControlPoint other)
- => base.Equals(other)
+ public override bool ChangeEquals(ControlPoint other)
+ => base.ChangeEquals(other)
&& other is LegacySampleControlPoint legacy
&& CustomSampleBank == legacy.CustomSampleBank;
}