| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using System.Linq;
- using System.Numerics;
- using Content.Client.Message;
- using Content.Shared.GameTicking;
- using Robust.Client.UserInterface.Controls;
- using Robust.Client.UserInterface.CustomControls;
- using Robust.Shared.Utility;
- using static Robust.Client.UserInterface.Controls.BoxContainer;
- namespace Content.Client.RoundEnd
- {
- public sealed class RoundEndSummaryWindow : DefaultWindow
- {
- private readonly IEntityManager _entityManager;
- public int RoundId;
- public RoundEndSummaryWindow(string gm, string roundEnd, TimeSpan roundTimeSpan, int roundId,
- RoundEndMessageEvent.RoundEndPlayerInfo[] info, IEntityManager entityManager)
- {
- _entityManager = entityManager;
- MinSize = SetSize = new Vector2(520, 580);
- Title = Loc.GetString("round-end-summary-window-title");
- // 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.
- RoundId = roundId;
- var roundEndTabs = new TabContainer();
- roundEndTabs.AddChild(MakeRoundEndSummaryTab(gm, roundEnd, roundTimeSpan, roundId));
- roundEndTabs.AddChild(MakePlayerManifestTab(info));
- Contents.AddChild(roundEndTabs);
- OpenCenteredRight();
- MoveToFront();
- }
- private BoxContainer MakeRoundEndSummaryTab(string gamemode, string roundEnd, TimeSpan roundDuration, int roundId)
- {
- var roundEndSummaryTab = new BoxContainer
- {
- Orientation = LayoutOrientation.Vertical,
- Name = Loc.GetString("round-end-summary-window-round-end-summary-tab-title")
- };
- var roundEndSummaryContainerScrollbox = new ScrollContainer
- {
- VerticalExpand = true,
- Margin = new Thickness(10)
- };
- var roundEndSummaryContainer = new BoxContainer
- {
- Orientation = LayoutOrientation.Vertical
- };
- //Gamemode Name
- var gamemodeLabel = new RichTextLabel();
- var gamemodeMessage = new FormattedMessage();
- gamemodeMessage.AddMarkupOrThrow(Loc.GetString("round-end-summary-window-round-id-label", ("roundId", roundId)));
- gamemodeMessage.AddText(" ");
- gamemodeMessage.AddMarkupOrThrow(Loc.GetString("round-end-summary-window-gamemode-name-label", ("gamemode", gamemode)));
- gamemodeLabel.SetMessage(gamemodeMessage);
- 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(roundEnd);
- roundEndSummaryContainer.AddChild(roundEndLabel);
- }
- roundEndSummaryContainerScrollbox.AddChild(roundEndSummaryContainer);
- roundEndSummaryTab.AddChild(roundEndSummaryContainerScrollbox);
- return roundEndSummaryTab;
- }
- private BoxContainer MakePlayerManifestTab(RoundEndMessageEvent.RoundEndPlayerInfo[] playersInfo)
- {
- var playerManifestTab = new BoxContainer
- {
- Orientation = LayoutOrientation.Vertical,
- Name = Loc.GetString("round-end-summary-window-player-manifest-tab-title")
- };
- var playerInfoContainerScrollbox = new ScrollContainer
- {
- VerticalExpand = true,
- Margin = new Thickness(10)
- };
- var playerInfoContainer = new BoxContainer
- {
- Orientation = LayoutOrientation.Vertical
- };
- //Put observers at the bottom of the list. Put antags on top.
- var sortedPlayersInfo = playersInfo.OrderBy(p => p.Observer).ThenBy(p => !p.Antag);
- //Create labels for each player info.
- foreach (var playerInfo in sortedPlayersInfo)
- {
- var hBox = new BoxContainer
- {
- Orientation = LayoutOrientation.Horizontal,
- };
- var playerInfoText = new RichTextLabel
- {
- VerticalAlignment = VAlignment.Center,
- VerticalExpand = true,
- };
- if (playerInfo.PlayerNetEntity != null)
- {
- hBox.AddChild(new SpriteView(playerInfo.PlayerNetEntity.Value, _entityManager)
- {
- OverrideDirection = Direction.South,
- VerticalAlignment = VAlignment.Center,
- SetSize = new Vector2(32, 32),
- VerticalExpand = true,
- });
- }
- if (playerInfo.PlayerICName != null)
- {
- if (playerInfo.Observer)
- {
- playerInfoText.SetMarkup(
- Loc.GetString("round-end-summary-window-player-info-if-observer-text",
- ("playerOOCName", playerInfo.PlayerOOCName),
- ("playerICName", playerInfo.PlayerICName)));
- }
- else
- {
- //TODO: On Hover display a popup detailing more play info.
- //For example: their antag goals and if they completed them sucessfully.
- var icNameColor = playerInfo.Antag ? "red" : "white";
- playerInfoText.SetMarkup(
- Loc.GetString("round-end-summary-window-player-info-if-not-observer-text",
- ("playerOOCName", playerInfo.PlayerOOCName),
- ("icNameColor", icNameColor),
- ("playerICName", playerInfo.PlayerICName),
- ("playerRole", Loc.GetString(playerInfo.Role))));
- }
- }
- hBox.AddChild(playerInfoText);
- playerInfoContainer.AddChild(hBox);
- }
- playerInfoContainerScrollbox.AddChild(playerInfoContainer);
- playerManifestTab.AddChild(playerInfoContainerScrollbox);
- return playerManifestTab;
- }
- }
- }
|