1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 18:23:04 +08:00

Add ManiaHealthProcessor that uses the legacy drain rate algorithm

This commit is contained in:
Dan Balasescu 2023-11-24 18:04:57 +09:00
parent 8314f656a3
commit d924227810
No known key found for this signature in database

View File

@ -1,23 +1,61 @@
// 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.Game.Rulesets.Judgements;
using System.Collections.Generic;
using osu.Game.Rulesets.Mania.Objects;
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Scoring;
namespace osu.Game.Rulesets.Mania.Scoring
{
public partial class ManiaHealthProcessor : DrainingHealthProcessor
public partial class ManiaHealthProcessor : LegacyDrainingHealthProcessor
{
/// <inheritdoc/>
public ManiaHealthProcessor(double drainStartTime)
: base(drainStartTime, 1.0)
: base(drainStartTime)
{
}
protected override HitResult GetSimulatedHitResult(Judgement judgement)
protected override IEnumerable<HitObject> EnumerateTopLevelHitObjects() => Beatmap.HitObjects;
protected override IEnumerable<HitObject> EnumerateNestedHitObjects(HitObject hitObject) => hitObject.NestedHitObjects;
protected override double GetHealthIncreaseFor(HitObject hitObject, HitResult result)
{
// Users are not expected to attain perfect judgements for all notes due to the tighter hit window.
return judgement.MaxResult == HitResult.Perfect ? HitResult.Great : judgement.MaxResult;
double increase = 0;
switch (result)
{
case HitResult.Miss:
switch (hitObject)
{
case HeadNote:
case TailNote:
return -(Beatmap.Difficulty.DrainRate + 1) * 0.00375;
default:
return -(Beatmap.Difficulty.DrainRate + 1) * 0.0075;
}
case HitResult.Meh:
return -(Beatmap.Difficulty.DrainRate + 1) * 0.0016;
case HitResult.Ok:
return 0;
case HitResult.Good:
increase = 0.004 - Beatmap.Difficulty.DrainRate * 0.0004;
break;
case HitResult.Great:
increase = 0.005 - Beatmap.Difficulty.DrainRate * 0.0005;
break;
case HitResult.Perfect:
increase = 0.0055 - Beatmap.Difficulty.DrainRate * 0.0005;
break;
}
return HpMultiplierNormal * increase;
}
}
}