Allow mods to apply to track, not clock

This commit is contained in:
Dean Herbert
2019-12-09 17:34:04 +09:00
parent 7d6cd72a82
commit eb074b7058
12 changed files with 52 additions and 83 deletions

View File

@ -3,15 +3,14 @@
using System;
using System.Linq;
using osu.Framework.Audio;
using osu.Framework.Timing;
using osu.Framework.Audio.Track;
using osu.Game.Beatmaps;
using osu.Game.Rulesets.UI;
using osu.Game.Rulesets.Objects;
namespace osu.Game.Rulesets.Mods
{
public abstract class ModTimeRamp : Mod, IUpdatableByPlayfield, IApplicableToClock, IApplicableToBeatmap
public abstract class ModTimeRamp : Mod, IUpdatableByPlayfield, IApplicableToTrack, IApplicableToBeatmap
{
/// <summary>
/// The point in the beatmap at which the final ramping rate should be reached.
@ -24,11 +23,11 @@ namespace osu.Game.Rulesets.Mods
private double finalRateTime;
private double beginRampTime;
private IAdjustableClock clock;
private Track track;
public virtual void ApplyToClock(IAdjustableClock clock)
public virtual void ApplyToTrack(Track track)
{
this.clock = clock;
this.track = track;
lastAdjust = 1;
@ -46,7 +45,7 @@ namespace osu.Game.Rulesets.Mods
public virtual void Update(Playfield playfield)
{
applyAdjustment((clock.CurrentTime - beginRampTime) / finalRateTime);
applyAdjustment((track.CurrentTime - beginRampTime) / finalRateTime);
}
private double lastAdjust = 1;
@ -59,23 +58,8 @@ namespace osu.Game.Rulesets.Mods
{
double adjust = 1 + (Math.Sign(FinalRateAdjustment) * Math.Clamp(amount, 0, 1) * Math.Abs(FinalRateAdjustment));
switch (clock)
{
case IHasPitchAdjust pitch:
pitch.PitchAdjust /= lastAdjust;
pitch.PitchAdjust *= adjust;
break;
case IHasTempoAdjust tempo:
tempo.TempoAdjust /= lastAdjust;
tempo.TempoAdjust *= adjust;
break;
default:
clock.Rate /= lastAdjust;
clock.Rate *= adjust;
break;
}
track.Tempo.Value /= lastAdjust;
track.Tempo.Value *= lastAdjust;
lastAdjust = adjust;
}