2021-08-22 20:26:53 +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.
2022-06-17 15:37:17 +08:00
#nullable disable
2021-08-22 21:53:48 +08:00
using System ;
using System.Globalization ;
using System.Linq ;
2021-08-22 20:26:53 +08:00
using osu.Framework.Allocation ;
2021-08-22 21:53:48 +08:00
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Containers ;
2021-08-22 20:26:53 +08:00
using osu.Framework.Localisation ;
2021-08-22 21:53:48 +08:00
using osu.Game.Beatmaps ;
2021-08-22 20:26:53 +08:00
using osu.Game.Graphics.UserInterfaceV2 ;
2021-08-22 21:53:48 +08:00
using osuTK ;
2021-08-22 20:26:53 +08:00
namespace osu.Game.Screens.Edit.Setup
{
internal class DesignSection : SetupSection
{
2021-08-30 00:01:40 +08:00
protected LabelledSwitchButton EnableCountdown ;
2021-09-01 04:40:58 +08:00
protected FillFlowContainer CountdownSettings ;
2021-08-30 00:01:40 +08:00
protected LabelledEnumDropdown < CountdownType > CountdownSpeed ;
protected LabelledNumberBox CountdownOffset ;
2021-08-22 21:53:48 +08:00
2021-08-22 20:26:53 +08:00
private LabelledSwitchButton widescreenSupport ;
private LabelledSwitchButton epilepsyWarning ;
private LabelledSwitchButton letterboxDuringBreaks ;
2021-09-12 22:54:17 +08:00
private LabelledSwitchButton samplesMatchPlaybackRate ;
2021-08-22 20:26:53 +08:00
public override LocalisableString Title = > "Design" ;
[BackgroundDependencyLoader]
private void load ( )
{
Children = new [ ]
{
2021-08-30 00:01:40 +08:00
EnableCountdown = new LabelledSwitchButton
2021-08-22 21:53:48 +08:00
{
Label = "Enable countdown" ,
Current = { Value = Beatmap . BeatmapInfo . Countdown ! = CountdownType . None } ,
Description = "If enabled, an \"Are you ready? 3, 2, 1, GO!\" countdown will be inserted at the beginning of the beatmap, assuming there is enough time to do so."
} ,
2021-09-01 04:40:58 +08:00
CountdownSettings = new FillFlowContainer
2021-08-22 21:53:48 +08:00
{
RelativeSizeAxes = Axes . X ,
AutoSizeAxes = Axes . Y ,
Spacing = new Vector2 ( 10 ) ,
Direction = FillDirection . Vertical ,
Children = new Drawable [ ]
{
2021-08-30 00:01:40 +08:00
CountdownSpeed = new LabelledEnumDropdown < CountdownType >
2021-08-22 21:53:48 +08:00
{
Label = "Countdown speed" ,
Current = { Value = Beatmap . BeatmapInfo . Countdown ! = CountdownType . None ? Beatmap . BeatmapInfo . Countdown : CountdownType . Normal } ,
Items = Enum . GetValues ( typeof ( CountdownType ) ) . Cast < CountdownType > ( ) . Where ( type = > type ! = CountdownType . None )
} ,
2021-08-30 00:01:40 +08:00
CountdownOffset = new LabelledNumberBox
2021-08-22 21:53:48 +08:00
{
Label = "Countdown offset" ,
Current = { Value = Beatmap . BeatmapInfo . CountdownOffset . ToString ( ) } ,
Description = "If the countdown sounds off-time, use this to make it appear one or more beats early." ,
}
}
} ,
Empty ( ) ,
2021-08-22 20:26:53 +08:00
widescreenSupport = new LabelledSwitchButton
{
Label = "Widescreen support" ,
2021-08-23 16:41:03 +08:00
Description = "Allows storyboards to use the full screen space, rather than be confined to a 4:3 area." ,
2021-08-22 20:26:53 +08:00
Current = { Value = Beatmap . BeatmapInfo . WidescreenStoryboard }
} ,
epilepsyWarning = new LabelledSwitchButton
{
Label = "Epilepsy warning" ,
2021-08-23 16:34:19 +08:00
Description = "Recommended if the storyboard or video contain scenes with rapidly flashing colours." ,
2021-08-22 20:26:53 +08:00
Current = { Value = Beatmap . BeatmapInfo . EpilepsyWarning }
} ,
letterboxDuringBreaks = new LabelledSwitchButton
{
Label = "Letterbox during breaks" ,
2021-08-23 16:41:03 +08:00
Description = "Adds horizontal letterboxing to give a cinematic look during breaks." ,
2021-08-22 20:26:53 +08:00
Current = { Value = Beatmap . BeatmapInfo . LetterboxInBreaks }
2021-09-12 22:54:17 +08:00
} ,
samplesMatchPlaybackRate = new LabelledSwitchButton
{
Label = "Samples match playback rate" ,
Description = "When enabled, all samples will speed up or slow down when rate-changing mods are enabled." ,
Current = { Value = Beatmap . BeatmapInfo . SamplesMatchPlaybackRate }
2021-08-22 20:26:53 +08:00
}
} ;
}
protected override void LoadComplete ( )
{
base . LoadComplete ( ) ;
2021-08-30 00:01:40 +08:00
EnableCountdown . Current . BindValueChanged ( _ = > updateCountdownSettingsVisibility ( ) , true ) ;
2021-08-22 21:53:48 +08:00
2021-08-30 00:01:40 +08:00
EnableCountdown . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
CountdownSpeed . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
2022-06-24 20:25:23 +08:00
CountdownOffset . OnCommit + = ( _ , _ ) = > onOffsetCommitted ( ) ;
2021-08-22 21:53:48 +08:00
2021-08-22 20:26:53 +08:00
widescreenSupport . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
epilepsyWarning . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
letterboxDuringBreaks . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
2021-09-12 22:54:17 +08:00
samplesMatchPlaybackRate . Current . BindValueChanged ( _ = > updateBeatmap ( ) ) ;
2021-08-22 20:26:53 +08:00
}
2021-09-01 04:40:58 +08:00
private void updateCountdownSettingsVisibility ( ) = > CountdownSettings . FadeTo ( EnableCountdown . Current . Value ? 1 : 0 ) ;
2021-08-22 21:53:48 +08:00
2021-08-30 00:01:40 +08:00
private void onOffsetCommitted ( )
{
updateBeatmap ( ) ;
// update displayed text to ensure parsed value matches display (i.e. if empty string was provided).
CountdownOffset . Current . Value = Beatmap . BeatmapInfo . CountdownOffset . ToString ( CultureInfo . InvariantCulture ) ;
}
2021-08-22 20:26:53 +08:00
private void updateBeatmap ( )
{
2021-08-30 00:01:40 +08:00
Beatmap . BeatmapInfo . Countdown = EnableCountdown . Current . Value ? CountdownSpeed . Current . Value : CountdownType . None ;
Beatmap . BeatmapInfo . CountdownOffset = int . TryParse ( CountdownOffset . Current . Value , NumberStyles . None , CultureInfo . InvariantCulture , out int offset ) ? offset : 0 ;
2021-08-22 21:53:48 +08:00
2021-08-22 20:26:53 +08:00
Beatmap . BeatmapInfo . WidescreenStoryboard = widescreenSupport . Current . Value ;
Beatmap . BeatmapInfo . EpilepsyWarning = epilepsyWarning . Current . Value ;
Beatmap . BeatmapInfo . LetterboxInBreaks = letterboxDuringBreaks . Current . Value ;
2021-09-12 22:54:17 +08:00
Beatmap . BeatmapInfo . SamplesMatchPlaybackRate = samplesMatchPlaybackRate . Current . Value ;
2021-08-22 20:26:53 +08:00
}
}
}