From b1bc1e838e300056762e31786654eb694035c92f Mon Sep 17 00:00:00 2001 From: WilliamQiufeng Date: Fri, 3 Jul 2026 00:29:50 +0100 Subject: [PATCH] Add automod issue hinting a mine should not overlap a note's marvelous window --- Quaver.API/Maps/AutoMod/AutoMod.cs | 25 +++++++++++++++++++ .../HitObjects/AutoModIssueOverlappingMine.cs | 25 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs diff --git a/Quaver.API/Maps/AutoMod/AutoMod.cs b/Quaver.API/Maps/AutoMod/AutoMod.cs index 795f8c4f2..ff418224e 100644 --- a/Quaver.API/Maps/AutoMod/AutoMod.cs +++ b/Quaver.API/Maps/AutoMod/AutoMod.cs @@ -47,6 +47,11 @@ public class AutoMod /// public const int OverlappingObjectsThreshold = 10; + /// + /// The minimum amount of time in milliseconds between a mine and a note + /// + public const int OverlappingMineThreshold = 36; + /// /// The amount of time in milliseconds where a break would be considered too excessive /// and against the ranking criteria. @@ -179,6 +184,26 @@ private void DetectHitObjectIssues() continue; } + // Check for mines overlapping with notes + switch ((prevColObject.Type, hitObject.Type)) + { + case (HitObjectType.Mine, HitObjectType.Normal): + case (HitObjectType.Normal, HitObjectType.Mine): + { + var prevEndTime = prevColObject.IsLongNote + ? prevColObject.EndTime + : prevColObject.StartTime; + if (hitObject.StartTime - prevEndTime <= OverlappingMineThreshold) + { + var issue = prevColObject.Type is HitObjectType.Mine + ? new AutoModIssueOverlappingMine(prevColObject, hitObject) + : new AutoModIssueOverlappingMine(hitObject, prevColObject); + Issues.Add(issue); + } + break; + } + } + // Check for long note overlaps if (prevColObject.IsLongNote) { diff --git a/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs b/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs new file mode 100644 index 000000000..b2b8ac30d --- /dev/null +++ b/Quaver.API/Maps/AutoMod/Issues/HitObjects/AutoModIssueOverlappingMine.cs @@ -0,0 +1,25 @@ +using Quaver.API.Maps.Structures; + +namespace Quaver.API.Maps.AutoMod.Issues.HitObjects +{ + public class AutoModIssueOverlappingMine : AutoModIssue + { + public override AutoModIssueCategory Category { get; protected set; } = + AutoModIssueCategory.HitObjects; + + public HitObjectInfo Mine { get; } + + public HitObjectInfo CoveredHitObject { get; } + + public AutoModIssueOverlappingMine(HitObjectInfo mine, HitObjectInfo coveredHitObject) : + base(AutoModIssueLevel.Ranking) + { + Mine = mine; + CoveredHitObject = coveredHitObject; + Text = + $"Mine at {Mine.StartTime} lane {Mine.Lane} should be " + + $">{AutoMod.OverlappingMineThreshold}ms away from hit object " + + $"at {CoveredHitObject.StartTime}."; + } + } +} \ No newline at end of file