// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Screens; using osu.Game.Graphics.Containers; namespace osu.Game.Screens { public class OsuScreenStack : ScreenStack { [Cached] private BackgroundScreenStack backgroundScreenStack; private ParallaxContainer parallaxContainer; protected float ParallaxAmount => parallaxContainer.ParallaxAmount; public OsuScreenStack() { initializeStack(); } public OsuScreenStack(IScreen baseScreen) : base(baseScreen) { initializeStack(); } private void initializeStack() { InternalChild = parallaxContainer = new ParallaxContainer { RelativeSizeAxes = Axes.Both, Child = backgroundScreenStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both }, }; ScreenPushed += onScreenChange; ScreenExited += onScreenChange; } private void onScreenChange(IScreen prev, IScreen next) { parallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * ((IOsuScreen)next)?.BackgroundParallaxAmount ?? 1.0f; } } }