2019-01-24 16:43:03 +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.
2018-04-13 17:19:50 +08:00
2022-10-06 13:51:17 +08:00
using System ;
2018-01-03 17:44:25 +08:00
using System.Collections.Generic ;
using System.Linq ;
using osu.Game.Beatmaps ;
using osu.Game.Rulesets.Mania.Objects ;
using osu.Game.Rulesets.Mania.UI ;
2018-04-13 17:19:50 +08:00
2018-01-03 17:44:25 +08:00
namespace osu.Game.Rulesets.Mania.Beatmaps
{
public class ManiaBeatmap : Beatmap < ManiaHitObject >
{
/// <summary>
2018-01-03 18:13:42 +08:00
/// The definitions for each stage in a <see cref="ManiaPlayfield"/>.
2018-01-03 17:44:25 +08:00
/// </summary>
2018-01-15 14:49:03 +08:00
public List < StageDefinition > Stages = new List < StageDefinition > ( ) ;
2018-04-13 17:19:50 +08:00
2018-01-03 17:44:25 +08:00
/// <summary>
2018-01-03 18:13:42 +08:00
/// Total number of columns represented by all stages in this <see cref="ManiaBeatmap"/>.
2018-01-03 17:44:25 +08:00
/// </summary>
2018-01-03 18:13:42 +08:00
public int TotalColumns = > Stages . Sum ( g = > g . Columns ) ;
2018-04-13 17:19:50 +08:00
2018-01-03 17:44:25 +08:00
/// <summary>
/// Creates a new <see cref="ManiaBeatmap"/>.
/// </summary>
2018-01-15 14:49:03 +08:00
/// <param name="defaultStage">The initial stages.</param>
2020-10-14 16:53:28 +08:00
/// <param name="originalTotalColumns">The total number of columns present before any user adjustments. Defaults to the total columns in <paramref name="defaultStage"/>.</param>
public ManiaBeatmap ( StageDefinition defaultStage , int? originalTotalColumns = null )
2018-01-03 17:44:25 +08:00
{
2018-01-15 14:49:03 +08:00
Stages . Add ( defaultStage ) ;
2018-01-03 17:44:25 +08:00
}
2018-05-07 09:58:56 +08:00
public override IEnumerable < BeatmapStatistic > GetStatistics ( )
{
2018-05-07 10:33:05 +08:00
int notes = HitObjects . Count ( s = > s is Note ) ;
2021-12-10 13:15:00 +08:00
int holdNotes = HitObjects . Count ( s = > s is HoldNote ) ;
2018-05-07 09:58:56 +08:00
return new [ ]
{
new BeatmapStatistic
{
Name = @"Note Count" ,
2020-09-04 14:01:32 +08:00
CreateIcon = ( ) = > new BeatmapStatisticIcon ( BeatmapStatisticsIconType . Circles ) ,
2018-05-07 09:58:56 +08:00
Content = notes . ToString ( ) ,
} ,
new BeatmapStatistic
{
Name = @"Hold Note Count" ,
2020-09-04 14:01:32 +08:00
CreateIcon = ( ) = > new BeatmapStatisticIcon ( BeatmapStatisticsIconType . Sliders ) ,
2021-12-10 13:15:00 +08:00
Content = holdNotes . ToString ( ) ,
2018-05-07 09:58:56 +08:00
} ,
} ;
}
2022-10-06 13:51:17 +08:00
public StageDefinition GetStageForColumnIndex ( int column )
{
foreach ( var stage in Stages )
{
if ( column < stage . Columns )
return stage ;
column - = stage . Columns ;
}
throw new ArgumentOutOfRangeException ( nameof ( column ) , "Provided index exceeds all available stages" ) ;
}
2018-01-03 17:44:25 +08:00
}
}