1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-15 17:47:18 +08:00

use IApplicableToBeatmap instead of IApplicableToRulesetContainer

This commit is contained in:
LeNitrous 2019-01-26 13:39:23 +08:00
parent 1427c9f576
commit d76681aa82

View File

@ -9,6 +9,7 @@ using osu.Game.Beatmaps;
using osu.Game.Graphics;
using osu.Game.Rulesets.UI;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Types;
namespace osu.Game.Rulesets.Mods
{
@ -24,10 +25,10 @@ namespace osu.Game.Rulesets.Mods
public abstract double AppendRate { get; }
}
public class ModWindUp<T> : ModWindUp, IUpdatableByPlayfield, IApplicableToClock, IApplicableToRulesetContainer<T>
public abstract class ModWindUp<T> : ModWindUp, IUpdatableByPlayfield, IApplicableToClock, IApplicableToBeatmap<T>
where T : HitObject
{
private Track Track;
private double LastObjectEndTime;
private IAdjustableClock Clock;
private IHasPitchAdjust ClockAdjust;
public override double AppendRate => 0.5;
@ -38,14 +39,15 @@ namespace osu.Game.Rulesets.Mods
ClockAdjust = clock as IHasPitchAdjust;
}
public virtual void ApplyToRulesetContainer(RulesetContainer<T> ruleset)
public virtual void ApplyToBeatmap(Beatmap<T> beatmap)
{
Track = ruleset.WorkingBeatmap.Track;
HitObject LastObject = beatmap.HitObjects[beatmap.HitObjects.Count - 1];
LastObjectEndTime = (LastObject as IHasEndTime)?.EndTime ?? LastObject?.StartTime ?? 0;
}
public virtual void Update(Playfield playfield)
{
double newRate = 1 + (AppendRate * (Track.CurrentTime / Track.Length));
double newRate = 1 + (AppendRate * (Clock.CurrentTime / LastObjectEndTime));
Clock.Rate = newRate;
ClockAdjust.PitchAdjust = newRate;
}