2024-03-17 08:20:12 +08:00
// 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 System ;
using System.Collections.Generic ;
2024-03-19 01:02:33 +08:00
using osu.Game.Beatmaps ;
2024-03-17 08:20:12 +08:00
using osu.Game.Rulesets.Edit.Checks.Components ;
namespace osu.Game.Rulesets.Edit.Checks
{
public class CheckUnusedAudioAtEnd : ICheck
{
public CheckMetadata Metadata = > new CheckMetadata ( CheckCategory . Compose , "More than 20% unused audio at the end" ) ;
public IEnumerable < IssueTemplate > PossibleTemplates = > new IssueTemplate [ ]
{
new IssueTemplateUnusedAudioAtEnd ( this ) ,
} ;
public IEnumerable < Issue > Run ( BeatmapVerifierContext context )
{
2024-03-19 01:02:33 +08:00
double mappedLength = context . Beatmap . GetLastObjectTime ( ) ;
2024-03-17 08:20:12 +08:00
double trackLength = context . WorkingBeatmap . Track . Length ;
2024-03-19 00:27:43 +08:00
double mappedPercentage = Math . Round ( mappedLength / trackLength * 100 ) ;
2024-03-17 08:20:12 +08:00
if ( mappedPercentage < 80 )
{
2024-03-19 00:51:36 +08:00
double percentageLeft = Math . Abs ( mappedPercentage - 100 ) ;
yield return new IssueTemplateUnusedAudioAtEnd ( this ) . Create ( percentageLeft ) ;
2024-03-17 08:20:12 +08:00
}
}
public class IssueTemplateUnusedAudioAtEnd : IssueTemplate
{
public IssueTemplateUnusedAudioAtEnd ( ICheck check )
2024-03-19 00:51:36 +08:00
: base ( check , IssueType . Warning , "Currently there is {0}% unused audio at the end. Ensure the outro significantly contributes to the song, otherwise cut the outro." )
2024-03-17 08:20:12 +08:00
{
}
2024-03-19 00:51:36 +08:00
public Issue Create ( double percentageLeft ) = > new Issue ( this , percentageLeft ) ;
2024-03-17 08:20:12 +08:00
}
}
}