1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-16 16:23:39 +08:00
Files
osu-lazer/osu.Game.Rulesets.Mania/Mods/IManiaRateAdjustmentMod.cs
T
Bartłomiej Dach 6afdf99df8 Support mania-specific hit window quirks
The quirks in question being that lazer's hit windows in mania preceding
this change are used in stable *if and only if* Score V2 is active. If
Score V2 is *not* active, stable has two disparate other sets of hit
window ranges, dependent on whether the beatmap is a convert or not.

With this commit, those hit windows are used in lazer when the Classic
mod is active.

Open points for discussion would be:

- What does this mean for plays already set on lazer using the Classic
  mod? Are there even enough of them to care about? Also, on `master`
  the Classic mod does precisely nothing, so maybe such scores should
  just have Classic mod stripped from them?

- What does this mean for the mod multiplier of Classic in mania? (I don't
  expect an answer to this one.)
2025-07-02 12:26:50 +02:00

38 lines
1.4 KiB
C#

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
using osu.Framework.Bindables;
using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Mania.Scoring;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Objects;
namespace osu.Game.Rulesets.Mania.Mods
{
/// <summary>
/// May be attached to rate-adjustment mods to adjust hit windows adjust relative to gameplay rate.
/// </summary>
/// <remarks>
/// Historically, in osu!mania, hit windows are expected to adjust relative to the gameplay rate such that the real-world hit window remains the same.
/// </remarks>
public interface IManiaRateAdjustmentMod : IApplicableToHitObject
{
BindableNumber<double> SpeedChange { get; }
void IApplicableToHitObject.ApplyToHitObject(HitObject hitObject)
{
switch (hitObject)
{
case Note:
((ManiaHitWindows)hitObject.HitWindows).SpeedMultiplier = SpeedChange.Value;
break;
case HoldNote hold:
((ManiaHitWindows)hold.Head.HitWindows).SpeedMultiplier = SpeedChange.Value;
((ManiaHitWindows)hold.Tail.HitWindows).SpeedMultiplier = SpeedChange.Value;
break;
}
}
}
}