1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-05 03:03:21 +08:00

implement proposed osu!mania mod, Full Perfect

This commit is contained in:
Milo 2024-11-11 18:52:30 -04:00
parent bca42e9d24
commit 9a05edab7a
2 changed files with 41 additions and 1 deletions

View File

@ -247,7 +247,7 @@ namespace osu.Game.Rulesets.Mania
return new Mod[]
{
new ManiaModHardRock(),
new MultiMod(new ManiaModSuddenDeath(), new ManiaModPerfect()),
new MultiMod(new ManiaModSuddenDeath(), new ManiaModPerfect(), new ManiaModFullPerfect()),
new MultiMod(new ManiaModDoubleTime(), new ManiaModNightcore()),
new MultiMod(new ManiaModFadeIn(), new ManiaModHidden(), new ManiaModCover()),
new ManiaModFlashlight(),

View File

@ -0,0 +1,40 @@
// 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.4
using System;
using System.Linq;
using osu.Framework.Localisation;
using osu.Game.Rulesets.Judgements;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Scoring;
namespace osu.Game.Rulesets.Mania.Mods
{
public class ManiaModFullPerfect : ManiaModPerfect
{
public override string Name => "Full Perfect";
public override string Acronym => "FP";
public override LocalisableString Description => @"Placeholder";
public override double ScoreMultiplier => 1;
public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[]
{
typeof(ManiaModPerfect),
}).ToArray();
protected override bool FailCondition(HealthProcessor healthProcessor, JudgementResult result)
{
if (!isRelevantResult(result.Judgement.MinResult) && !isRelevantResult(result.Judgement.MaxResult) && !isRelevantResult(result.Type))
return false;
if (result.Judgement.MaxResult == HitResult.Perfect)
return result.Type < HitResult.Perfect;
return result.Type != result.Judgement.MaxResult;
}
private bool isRelevantResult(HitResult result) => result.AffectsAccuracy() || result.AffectsCombo();
}
}