diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs b/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs
index e21d1da009..210d5e0403 100644
--- a/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs
+++ b/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs
@@ -4,8 +4,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using osu.Framework.Allocation;
-using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Sprites;
@@ -16,7 +14,6 @@ using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Beatmaps.Timing;
using osu.Game.Configuration;
using osu.Game.Graphics;
-using osu.Game.Graphics.Containers;
using osu.Game.Overlays.Settings;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects;
@@ -29,7 +26,6 @@ using osu.Game.Rulesets.Osu.UI;
using osu.Game.Rulesets.Osu.Utils;
using osu.Game.Rulesets.Scoring;
using osu.Game.Rulesets.UI;
-using osu.Game.Skinning;
using osuTK;
using osuTK.Graphics;
@@ -67,11 +63,6 @@ namespace osu.Game.Rulesets.Osu.Mods
///
private const float distance_cap = 380f;
- // The distances from the hit objects to the borders of the playfield they start to "turn around" and curve towards the middle.
- // The closer the hit objects draw to the border, the sharper the turn
- private const byte border_distance_x = 192;
- private const byte border_distance_y = 144;
-
///
/// The extent of rotation towards playfield centre when a circle is near the edge
///
@@ -341,46 +332,7 @@ namespace osu.Game.Rulesets.Osu.Mods
public void ApplyToDrawableRuleset(DrawableRuleset drawableRuleset)
{
- drawableRuleset.Overlays.Add(new TargetBeatContainer(drawableRuleset.Beatmap.HitObjects.First().StartTime));
- }
-
- public class TargetBeatContainer : BeatSyncedContainer
- {
- private readonly double firstHitTime;
-
- private PausableSkinnableSound sample;
-
- public TargetBeatContainer(double firstHitTime)
- {
- this.firstHitTime = firstHitTime;
- AllowMistimedEventFiring = false;
- Divisor = 1;
- }
-
- [BackgroundDependencyLoader]
- private void load()
- {
- InternalChildren = new Drawable[]
- {
- sample = new PausableSkinnableSound(new SampleInfo("Gameplay/catch-banana"))
- };
- }
-
- protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
- {
- base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes);
-
- if (!IsBeatSyncedWithTrack) return;
-
- int timeSignature = (int)timingPoint.TimeSignature;
-
- // play metronome from one measure before the first object.
- if (BeatSyncClock.CurrentTime < firstHitTime - timingPoint.BeatLength * timeSignature)
- return;
-
- sample.Frequency.Value = beatIndex % timeSignature == 0 ? 1 : 0.5f;
- sample.Play();
- }
+ drawableRuleset.Overlays.Add(new Metronome(drawableRuleset.Beatmap.HitObjects.First().StartTime));
}
#endregion
diff --git a/osu.Game/Rulesets/Mods/Metronome.cs b/osu.Game/Rulesets/Mods/Metronome.cs
new file mode 100644
index 0000000000..ee0a42b4bc
--- /dev/null
+++ b/osu.Game/Rulesets/Mods/Metronome.cs
@@ -0,0 +1,53 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using osu.Framework.Allocation;
+using osu.Framework.Audio.Track;
+using osu.Framework.Graphics;
+using osu.Game.Audio;
+using osu.Game.Beatmaps.ControlPoints;
+using osu.Game.Graphics.Containers;
+using osu.Game.Skinning;
+
+namespace osu.Game.Rulesets.Mods
+{
+ public class Metronome : BeatSyncedContainer
+ {
+ private readonly double firstHitTime;
+
+ private PausableSkinnableSound sample;
+
+ /// Start time of the first hit object, used for providing a count down.
+ public Metronome(double firstHitTime)
+ {
+ this.firstHitTime = firstHitTime;
+ AllowMistimedEventFiring = false;
+ Divisor = 1;
+ }
+
+ [BackgroundDependencyLoader]
+ private void load()
+ {
+ InternalChildren = new Drawable[]
+ {
+ sample = new PausableSkinnableSound(new SampleInfo("Gameplay/catch-banana"))
+ };
+ }
+
+ protected override void OnNewBeat(int beatIndex, TimingControlPoint timingPoint, EffectControlPoint effectPoint, ChannelAmplitudes amplitudes)
+ {
+ base.OnNewBeat(beatIndex, timingPoint, effectPoint, amplitudes);
+
+ if (!IsBeatSyncedWithTrack) return;
+
+ int timeSignature = (int)timingPoint.TimeSignature;
+
+ // play metronome from one measure before the first object.
+ if (BeatSyncClock.CurrentTime < firstHitTime - timingPoint.BeatLength * timeSignature)
+ return;
+
+ sample.Frequency.Value = beatIndex % timeSignature == 0 ? 1 : 0.5f;
+ sample.Play();
+ }
+ }
+}