From 7ab5b531f1bcd67fa076594e910be7388ffcf828 Mon Sep 17 00:00:00 2001 From: wrexbe <81056464+wrexbe@users.noreply.github.com> Date: Sun, 12 Dec 2021 05:09:47 -0800 Subject: [PATCH] Make round end summary scroll (#5740) --- .../RoundEnd/RoundEndSummaryWindow.cs | 107 ++++++++++-------- 1 file changed, 61 insertions(+), 46 deletions(-) diff --git a/Content.Client/RoundEnd/RoundEndSummaryWindow.cs b/Content.Client/RoundEnd/RoundEndSummaryWindow.cs index e8f245c1ce..f1bb5b11a6 100644 --- a/Content.Client/RoundEnd/RoundEndSummaryWindow.cs +++ b/Content.Client/RoundEnd/RoundEndSummaryWindow.cs @@ -1,21 +1,16 @@ using System; -using System.Collections.Generic; using System.Linq; using Content.Client.Message; using Content.Shared.GameTicking; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Localization; -using static Content.Shared.GameTicking.SharedGameTicker; using static Robust.Client.UserInterface.Controls.BoxContainer; namespace Content.Client.RoundEnd { public sealed class RoundEndSummaryWindow : SS14Window { - private BoxContainer RoundEndSummaryTab { get; } - private BoxContainer PlayerManifestoTab { get; } - private TabContainer RoundEndWindowTabs { get; } public RoundEndSummaryWindow(string gm, string roundEnd, TimeSpan roundTimeSpan, RoundEndMessageEvent.RoundEndPlayerInfo[] info) { @@ -23,65 +18,88 @@ namespace Content.Client.RoundEnd Title = Loc.GetString("round-end-summary-window-title"); - //Round End Window is split into two tabs, one about the round stats - //and the other is a list of RoundEndPlayerInfo for each player. - //This tab would be a good place for things like: "x many people died.", - //"clown slipped the crew x times.", "x shots were fired this round.", etc. - //Also good for serious info. - RoundEndSummaryTab = new BoxContainer + // The round end window is split into two tabs, one about the round stats + // and the other is a list of RoundEndPlayerInfo for each player. + // This tab would be a good place for things like: "x many people died.", + // "clown slipped the crew x times.", "x shots were fired this round.", etc. + // Also good for serious info. + + var roundEndTabs = new TabContainer(); + roundEndTabs.AddChild(MakeRoundEndSummaryTab(gm, roundEnd, roundTimeSpan)); + roundEndTabs.AddChild(MakePlayerManifestoTab(info)); + + Contents.AddChild(roundEndTabs); + + OpenCentered(); + MoveToFront(); + } + + private BoxContainer MakeRoundEndSummaryTab(string gamemode, string roundEnd, TimeSpan roundDuration) + { + var roundEndSummaryTab = new BoxContainer { Orientation = LayoutOrientation.Vertical, Name = Loc.GetString("round-end-summary-window-round-end-summary-tab-title") }; - //Tab for listing unique info per player. - PlayerManifestoTab = new BoxContainer + var roundEndSummaryContainerScrollbox = new ScrollContainer { - Orientation = LayoutOrientation.Vertical, - Name = Loc.GetString("round-end-summary-window-player-manifesto-tab-title") + VerticalExpand = true + }; + var roundEndSummaryContainer = new BoxContainer + { + Orientation = LayoutOrientation.Vertical }; - - RoundEndWindowTabs = new TabContainer(); - RoundEndWindowTabs.AddChild(RoundEndSummaryTab); - RoundEndWindowTabs.AddChild(PlayerManifestoTab); - - Contents.AddChild(RoundEndWindowTabs); //Gamemode Name var gamemodeLabel = new RichTextLabel(); - gamemodeLabel.SetMarkup(Loc.GetString("round-end-summary-window-gamemode-name-label", ("gamemode",gm))); - RoundEndSummaryTab.AddChild(gamemodeLabel); + gamemodeLabel.SetMarkup(Loc.GetString("round-end-summary-window-gamemode-name-label", ("gamemode", gamemode))); + roundEndSummaryContainer.AddChild(gamemodeLabel); + + //Duration + var roundTimeLabel = new RichTextLabel(); + roundTimeLabel.SetMarkup(Loc.GetString("round-end-summary-window-duration-label", + ("hours", roundDuration.Hours), + ("minutes", roundDuration.Minutes), + ("seconds", roundDuration.Seconds))); + roundEndSummaryContainer.AddChild(roundTimeLabel); //Round end text if (!string.IsNullOrEmpty(roundEnd)) { var roundEndLabel = new RichTextLabel(); - roundEndLabel.SetMarkup(Loc.GetString(roundEnd)); - RoundEndSummaryTab.AddChild(roundEndLabel); + roundEndLabel.SetMarkup(roundEnd); + roundEndSummaryContainer.AddChild(roundEndLabel); } - //Duration - var roundTimeLabel = new RichTextLabel(); - roundTimeLabel.SetMarkup(Loc.GetString("round-end-summary-window-duration-label", - ("hours",roundTimeSpan.Hours), - ("minutes",roundTimeSpan.Minutes), - ("seconds",roundTimeSpan.Seconds))); - RoundEndSummaryTab.AddChild(roundTimeLabel); + roundEndSummaryContainerScrollbox.AddChild(roundEndSummaryContainer); + roundEndSummaryTab.AddChild(roundEndSummaryContainerScrollbox); - //Initialize what will be the list of players display. - var scrollContainer = new ScrollContainer + return roundEndSummaryTab; + } + + private BoxContainer MakePlayerManifestoTab(RoundEndMessageEvent.RoundEndPlayerInfo[] playersInfo) + { + var playerManifestTab = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + Name = Loc.GetString("round-end-summary-window-player-manifesto-tab-title") + }; + + var playerInfoContainerScrollbox = new ScrollContainer { VerticalExpand = true }; - var innerScrollContainer = new BoxContainer + var playerInfoContainer = new BoxContainer { Orientation = LayoutOrientation.Vertical }; //Put observers at the bottom of the list. Put antags on top. - var manifestSortedList = info.OrderBy(p => p.Observer).ThenBy(p => !p.Antag); + var sortedPlayersInfo = playersInfo.OrderBy(p => p.Observer).ThenBy(p => !p.Antag); + //Create labels for each player info. - foreach (var playerInfo in manifestSortedList) + foreach (var playerInfo in sortedPlayersInfo) { var playerInfoText = new RichTextLabel(); @@ -91,7 +109,7 @@ namespace Content.Client.RoundEnd { playerInfoText.SetMarkup( Loc.GetString("round-end-summary-window-player-info-if-observer-text", - ("playerOOCName",playerInfo.PlayerOOCName), + ("playerOOCName", playerInfo.PlayerOOCName), ("playerICName", playerInfo.PlayerICName))); } else @@ -103,20 +121,17 @@ namespace Content.Client.RoundEnd Loc.GetString("round-end-summary-window-player-info-if-not-observer-text", ("playerOOCName", playerInfo.PlayerOOCName), ("icNameColor", icNameColor), - ("playerICName",playerInfo.PlayerICName), + ("playerICName", playerInfo.PlayerICName), ("playerRole", Loc.GetString(playerInfo.Role)))); } } - innerScrollContainer.AddChild(playerInfoText); + playerInfoContainer.AddChild(playerInfoText); } - scrollContainer.AddChild(innerScrollContainer); - //Attach the entire ScrollContainer that holds all the playerinfo. - PlayerManifestoTab.AddChild(scrollContainer); + playerInfoContainerScrollbox.AddChild(playerInfoContainer); + playerManifestTab.AddChild(playerInfoContainerScrollbox); - //Finally, display the window. - OpenCentered(); - MoveToFront(); + return playerManifestTab; } }