// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. #nullable disable using osu.Framework.Allocation; using osu.Framework.Bindables; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using osu.Game.Tournament.Components; using osu.Game.Tournament.Models; using osuTK; namespace osu.Game.Tournament.Screens.TeamWin { public class TeamWinScreen : TournamentMatchScreen, IProvideVideo { private Container mainContainer; private readonly Bindable currentCompleted = new Bindable(); private TourneyVideo blueWinVideo; private TourneyVideo redWinVideo; [BackgroundDependencyLoader] private void load() { RelativeSizeAxes = Axes.Both; InternalChildren = new Drawable[] { blueWinVideo = new TourneyVideo("teamwin-blue") { Alpha = 1, RelativeSizeAxes = Axes.Both, Loop = true, }, redWinVideo = new TourneyVideo("teamwin-red") { Alpha = 0, RelativeSizeAxes = Axes.Both, Loop = true, }, mainContainer = new Container { RelativeSizeAxes = Axes.Both, } }; currentCompleted.BindValueChanged(_ => update()); } protected override void CurrentMatchChanged(ValueChangedEvent match) { base.CurrentMatchChanged(match); currentCompleted.UnbindBindings(); if (match.NewValue == null) return; currentCompleted.BindTo(match.NewValue.Completed); update(); } private bool firstDisplay = true; private void update() => Schedule(() => { var match = CurrentMatch.Value; if (match.Winner == null) { mainContainer.Clear(); return; } redWinVideo.Alpha = match.WinnerColour == TeamColour.Red ? 1 : 0; blueWinVideo.Alpha = match.WinnerColour == TeamColour.Blue ? 1 : 0; if (firstDisplay) { if (match.WinnerColour == TeamColour.Red) redWinVideo.Reset(); else blueWinVideo.Reset(); firstDisplay = false; } mainContainer.Children = new Drawable[] { new DrawableTeamFlag(match.Winner) { Anchor = Anchor.Centre, Origin = Anchor.Centre, Position = new Vector2(-300, 10), Scale = new Vector2(2f) }, new FillFlowContainer { AutoSizeAxes = Axes.Both, Direction = FillDirection.Vertical, Anchor = Anchor.Centre, Origin = Anchor.Centre, X = 260, Children = new Drawable[] { new RoundDisplay(match) { Margin = new MarginPadding { Bottom = 30 }, }, new TournamentSpriteText { Text = "WINNER", Font = OsuFont.Torus.With(size: 100, weight: FontWeight.Bold), Margin = new MarginPadding { Bottom = 50 }, }, new DrawableTeamWithPlayers(match.Winner, match.WinnerColour) } }, }; mainContainer.FadeOut(); mainContainer.Delay(2000).FadeIn(1600, Easing.OutQuint); }); } }