Move intro screen background to base implementation and use colour fading

This commit is contained in:
Dean Herbert
2022-07-08 02:01:51 +09:00
parent 216150b52d
commit 15d070668d
3 changed files with 27 additions and 44 deletions

View File

@ -88,6 +88,11 @@ namespace osu.Game.Screens.Menu
/// </summary> /// </summary>
protected bool UsingThemedIntro { get; private set; } protected bool UsingThemedIntro { get; private set; }
protected override BackgroundScreen CreateBackground() => new BackgroundScreenDefault(false)
{
Colour = Color4.Black
};
protected IntroScreen([CanBeNull] Func<MainMenu> createNextScreen = null) protected IntroScreen([CanBeNull] Func<MainMenu> createNextScreen = null)
{ {
this.createNextScreen = createNextScreen; this.createNextScreen = createNextScreen;
@ -201,6 +206,8 @@ namespace osu.Game.Screens.Menu
{ {
this.FadeIn(300); this.FadeIn(300);
ApplyToBackground(b => b.FadeColour(Color4.Black));
double fadeOutTime = exit_delay; double fadeOutTime = exit_delay;
var track = musicController.CurrentTrack; var track = musicController.CurrentTrack;
@ -243,13 +250,22 @@ namespace osu.Game.Screens.Menu
base.OnResuming(e); base.OnResuming(e);
} }
private bool backgroundFaded;
protected void FadeInBackground(float fadeInTime)
{
backgroundFaded = true;
ApplyToBackground(b => b.FadeColour(Color4.White, fadeInTime));
}
public override void OnSuspending(ScreenTransitionEvent e) public override void OnSuspending(ScreenTransitionEvent e)
{ {
base.OnSuspending(e); base.OnSuspending(e);
initialBeatmap = null; initialBeatmap = null;
}
protected override BackgroundScreen CreateBackground() => new BackgroundScreenBlack(); if (!backgroundFaded)
FadeInBackground(200);
}
protected virtual void StartTrack() protected virtual void StartTrack()
{ {

View File

@ -8,19 +8,18 @@ using JetBrains.Annotations;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Framework.Logging; using osu.Framework.Logging;
using osu.Framework.Utils; using osu.Framework.Screens;
using osu.Framework.Timing; using osu.Framework.Timing;
using osu.Framework.Utils;
using osu.Game.Graphics; using osu.Game.Graphics;
using osu.Game.Graphics.Containers; using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites; using osu.Game.Graphics.Sprites;
using osu.Game.Rulesets; using osu.Game.Rulesets;
using osu.Game.Screens.Backgrounds;
using osuTK; using osuTK;
using osuTK.Graphics; using osuTK.Graphics;
@ -32,16 +31,9 @@ namespace osu.Game.Screens.Menu
protected override string BeatmapFile => "triangles.osz"; protected override string BeatmapFile => "triangles.osz";
protected override BackgroundScreen CreateBackground() => background = new BackgroundScreenDefault(false)
{
Alpha = 0,
};
[Resolved] [Resolved]
private AudioManager audio { get; set; } private AudioManager audio { get; set; }
private BackgroundScreenDefault background;
private Sample welcome; private Sample welcome;
private DecoupleableInterpolatingFramedClock decoupledClock; private DecoupleableInterpolatingFramedClock decoupledClock;
@ -75,7 +67,7 @@ namespace osu.Game.Screens.Menu
if (UsingThemedIntro) if (UsingThemedIntro)
decoupledClock.ChangeSource(Track); decoupledClock.ChangeSource(Track);
LoadComponentAsync(intro = new TrianglesIntroSequence(logo, background) LoadComponentAsync(intro = new TrianglesIntroSequence(logo, () => FadeInBackground(0))
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
Clock = decoupledClock, Clock = decoupledClock,
@ -95,19 +87,10 @@ namespace osu.Game.Screens.Menu
{ {
base.OnSuspending(e); base.OnSuspending(e);
// ensure the background is shown, even if the TriangleIntroSequence failed to do so.
background.ApplyToBackground(b => b.Show());
// important as there is a clock attached to a track which will likely be disposed before returning to this screen. // important as there is a clock attached to a track which will likely be disposed before returning to this screen.
intro.Expire(); intro.Expire();
} }
public override void OnResuming(ScreenTransitionEvent e)
{
base.OnResuming(e);
background.FadeOut(100);
}
protected override void StartTrack() protected override void StartTrack()
{ {
decoupledClock.Start(); decoupledClock.Start();
@ -116,7 +99,7 @@ namespace osu.Game.Screens.Menu
private class TrianglesIntroSequence : CompositeDrawable private class TrianglesIntroSequence : CompositeDrawable
{ {
private readonly OsuLogo logo; private readonly OsuLogo logo;
private readonly BackgroundScreenDefault background; private readonly Action showBackgroundAction;
private OsuSpriteText welcomeText; private OsuSpriteText welcomeText;
private RulesetFlow rulesets; private RulesetFlow rulesets;
@ -128,10 +111,10 @@ namespace osu.Game.Screens.Menu
public Action LoadMenu; public Action LoadMenu;
public TrianglesIntroSequence(OsuLogo logo, BackgroundScreenDefault background) public TrianglesIntroSequence(OsuLogo logo, Action showBackgroundAction)
{ {
this.logo = logo; this.logo = logo;
this.background = background; this.showBackgroundAction = showBackgroundAction;
} }
[Resolved] [Resolved]
@ -205,7 +188,6 @@ namespace osu.Game.Screens.Menu
rulesets.Hide(); rulesets.Hide();
lazerLogo.Hide(); lazerLogo.Hide();
background.ApplyToBackground(b => b.Hide());
using (BeginAbsoluteSequence(0)) using (BeginAbsoluteSequence(0))
{ {
@ -267,7 +249,7 @@ namespace osu.Game.Screens.Menu
logo.FadeIn(); logo.FadeIn();
background.ApplyToBackground(b => b.Show()); showBackgroundAction();
game.Add(new GameWideFlash()); game.Add(new GameWideFlash());

View File

@ -5,11 +5,9 @@
using System; using System;
using JetBrains.Annotations; using JetBrains.Annotations;
using osuTK;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Screens;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Shapes;
@ -17,8 +15,8 @@ using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Textures;
using osu.Game.Audio; using osu.Game.Audio;
using osu.Game.Online.API; using osu.Game.Online.API;
using osu.Game.Screens.Backgrounds;
using osu.Game.Skinning; using osu.Game.Skinning;
using osuTK;
using osuTK.Graphics; using osuTK.Graphics;
namespace osu.Game.Screens.Menu namespace osu.Game.Screens.Menu
@ -35,13 +33,6 @@ namespace osu.Game.Screens.Menu
private ISample pianoReverb; private ISample pianoReverb;
protected override string SeeyaSampleName => "Intro/Welcome/seeya"; protected override string SeeyaSampleName => "Intro/Welcome/seeya";
protected override BackgroundScreen CreateBackground() => background = new BackgroundScreenDefault(false)
{
Alpha = 0,
};
private BackgroundScreenDefault background;
public IntroWelcome([CanBeNull] Func<MainMenu> createNextScreen = null) public IntroWelcome([CanBeNull] Func<MainMenu> createNextScreen = null)
: base(createNextScreen) : base(createNextScreen)
{ {
@ -100,7 +91,7 @@ namespace osu.Game.Screens.Menu
logo.ScaleTo(1); logo.ScaleTo(1);
logo.FadeIn(fade_in_time); logo.FadeIn(fade_in_time);
background.FadeIn(fade_in_time); FadeInBackground(fade_in_time);
LoadMenu(); LoadMenu();
}, delay_step_two); }, delay_step_two);
@ -108,12 +99,6 @@ namespace osu.Game.Screens.Menu
} }
} }
public override void OnResuming(ScreenTransitionEvent e)
{
base.OnResuming(e);
background.FadeOut(100);
}
private class WelcomeIntroSequence : Container private class WelcomeIntroSequence : Container
{ {
private Drawable welcomeText; private Drawable welcomeText;