Keep PlayerTab entries until the end of the round (#5910)

This commit is contained in:
ShadowCommander
2021-12-27 03:46:38 -08:00
committed by GitHub
parent 0869aa79f7
commit e51f6ee851
5 changed files with 28 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Content.Shared.Administration; using Content.Shared.Administration;
using Content.Shared.Administration.Events; using Content.Shared.Administration.Events;
using Content.Shared.GameTicking;
using Robust.Client.Player; using Robust.Client.Player;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.IoC; using Robust.Shared.IoC;
@@ -36,6 +37,7 @@ namespace Content.Client.Administration
SubscribeNetworkEvent<FullPlayerListEvent>(OnPlayerListChanged); SubscribeNetworkEvent<FullPlayerListEvent>(OnPlayerListChanged);
SubscribeNetworkEvent<PlayerInfoChangedEvent>(OnPlayerInfoChanged); SubscribeNetworkEvent<PlayerInfoChangedEvent>(OnPlayerInfoChanged);
SubscribeNetworkEvent<PlayerInfoRemovalMessage>(OnPlayerInfoRemoval); SubscribeNetworkEvent<PlayerInfoRemovalMessage>(OnPlayerInfoRemoval);
SubscribeNetworkEvent<RoundRestartCleanupEvent>(OnRoundRestartCleanup);
} }
public override void Shutdown() public override void Shutdown()
@@ -44,11 +46,27 @@ namespace Content.Client.Administration
ShutdownOverlay(); ShutdownOverlay();
} }
private void OnRoundRestartCleanup(RoundRestartCleanupEvent msg, EntitySessionEventArgs args)
{
if (_playerList == null)
return;
foreach (var (id, playerInfo) in _playerList.ToArray())
{
if (playerInfo.Connected)
continue;
_playerList.Remove(id);
}
PlayerListChanged?.Invoke(_playerList.Values.ToList());
}
private void OnPlayerInfoRemoval(PlayerInfoRemovalMessage ev) private void OnPlayerInfoRemoval(PlayerInfoRemovalMessage ev)
{ {
if (_playerList == null) _playerList = new(); if (_playerList == null) _playerList = new();
_playerList.Remove(ev.NetUserId); var playerInfo = _playerList[ev.NetUserId];
_playerList[ev.NetUserId] = new PlayerInfo(playerInfo.Username, playerInfo.CharacterName, playerInfo.Antag,
playerInfo.EntityUid, playerInfo.SessionId, false);
PlayerListChanged?.Invoke(_playerList.Values.ToList()); PlayerListChanged?.Invoke(_playerList.Values.ToList());
} }

View File

@@ -52,7 +52,8 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
PlayerList.AddChild(new PlayerTabEntry("Username", PlayerList.AddChild(new PlayerTabEntry("Username",
"Character", "Character",
"Antagonist", "Antagonist",
new StyleBoxFlat(altColor))); new StyleBoxFlat(altColor),
true));
PlayerList.AddChild(new HSeparator()); PlayerList.AddChild(new HSeparator());
var useAltColor = false; var useAltColor = false;
@@ -61,7 +62,8 @@ namespace Content.Client.Administration.UI.Tabs.PlayerTab
var entry = new PlayerTabEntry(player.Username, var entry = new PlayerTabEntry(player.Username,
player.CharacterName, player.CharacterName,
player.Antag ? "YES" : "NO", player.Antag ? "YES" : "NO",
new StyleBoxFlat(useAltColor ? altColor : defaultColor)); new StyleBoxFlat(useAltColor ? altColor : defaultColor),
player.Connected);
entry.PlayerUid = player.EntityUid; entry.PlayerUid = player.EntityUid;
entry.OnPressed += args => OnEntryPressed?.Invoke(args); entry.OnPressed += args => OnEntryPressed?.Invoke(args);
PlayerList.AddChild(entry); PlayerList.AddChild(entry);

View File

@@ -11,11 +11,13 @@ public partial class PlayerTabEntry : ContainerButton
{ {
public EntityUid? PlayerUid; public EntityUid? PlayerUid;
public PlayerTabEntry(string username, string character, string antagonist, StyleBox styleBox) public PlayerTabEntry(string username, string character, string antagonist, StyleBox styleBox, bool connected)
{ {
RobustXamlLoader.Load(this); RobustXamlLoader.Load(this);
UsernameLabel.Text = username; UsernameLabel.Text = username;
if (!connected)
UsernameLabel.StyleClasses.Add("Disabled");
CharacterLabel.Text = character; CharacterLabel.Text = character;
AntagonistLabel.Text = antagonist; AntagonistLabel.Text = antagonist;
BackgroundColorPanel.PanelOverride = styleBox; BackgroundColorPanel.PanelOverride = styleBox;

View File

@@ -130,7 +130,7 @@ namespace Content.Server.Administration
var antag = session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false; var antag = session.ContentData()?.Mind?.AllRoles.Any(r => r.Antagonist) ?? false;
return new PlayerInfo(name, username, antag, session.AttachedEntity.GetValueOrDefault(), session.UserId); return new PlayerInfo(name, username, antag, session.AttachedEntity.GetValueOrDefault(), session.UserId, true);
} }
} }
} }

View File

@@ -6,5 +6,5 @@ using Robust.Shared.Serialization;
namespace Content.Shared.Administration namespace Content.Shared.Administration
{ {
[Serializable, NetSerializable] [Serializable, NetSerializable]
public record PlayerInfo(string Username, string CharacterName, bool Antag, EntityUid EntityUid, NetUserId SessionId); public record PlayerInfo(string Username, string CharacterName, bool Antag, EntityUid EntityUid, NetUserId SessionId, bool Connected);
} }