// 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.Graphics.Containers; using osu.Framework.Graphics.Video; using osu.Game.Graphics.Containers; namespace osu.Game.Screens.Play { public class DimmableVideo : UserDimContainer { private readonly VideoSprite video; private DrawableVideo drawableVideo; public DimmableVideo(VideoSprite video) { this.video = video; } [BackgroundDependencyLoader] private void load() { initializeVideo(false); } protected override void LoadComplete() { ShowStoryboard.BindValueChanged(_ => initializeVideo(true), true); base.LoadComplete(); } protected override bool ShowDimContent => ShowStoryboard.Value && DimLevel < 1; private void initializeVideo(bool async) { if (drawableVideo != null) return; if (!ShowStoryboard.Value) return; drawableVideo = new DrawableVideo(video); if (async) LoadComponentAsync(drawableVideo, Add); else Add(drawableVideo); } private class DrawableVideo : Container { public DrawableVideo(VideoSprite video) { RelativeSizeAxes = Axes.Both; Masking = true; AddInternal(video); video.RelativeSizeAxes = Axes.Both; } [BackgroundDependencyLoader] private void load(GameplayClock clock) { if (clock != null) Clock = clock; } } } }