<BoxContainer Orientation="Horizontal">
<Label Name="PlayerCount" HorizontalExpand="True" SizeFlagsStretchRatio="0.50"
Text="{Loc Player Count}" />
+ <Button Name="ShowDisconnectedButton" HorizontalExpand="True" SizeFlagsStretchRatio="0.25"
+ Text="{Loc player-tab-show-disconnected}" ToggleMode="True"/>
<Button Name="OverlayButton" HorizontalExpand="True" SizeFlagsStretchRatio="0.25"
Text="{Loc player-tab-overlay}" ToggleMode="True"/>
</BoxContainer>
+using System.Linq;
using Content.Client.Administration.Systems;
using Content.Shared.Administration;
using Robust.Client.AutoGenerated;
private readonly Color _altColor = Color.FromHex("#292B38");
private readonly Color _defaultColor = Color.FromHex("#2F2F3B");
private readonly AdminSystem _adminSystem;
- private readonly List<PlayerTabEntry> _players = new();
+ private IReadOnlyList<PlayerInfo> _players = new List<PlayerInfo>();
private Header _headerClicked = Header.Username;
private bool _ascending = true;
+ private bool _showDisconnected;
public event Action<ButtonEventArgs>? OnEntryPressed;
_adminSystem.OverlayDisabled += OverlayDisabled;
OverlayButton.OnPressed += OverlayButtonPressed;
+ ShowDisconnectedButton.OnPressed += ShowDisconnectedPressed;
ListHeader.BackgroundColorPanel.PanelOverride = new StyleBoxFlat(_altColor);
ListHeader.OnHeaderClicked += HeaderClicked;
}
}
+ private void ShowDisconnectedPressed(ButtonEventArgs args)
+ {
+ _showDisconnected = args.Button.Pressed;
+ RefreshPlayerList(_players);
+ }
+
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
private void RefreshPlayerList(IReadOnlyList<PlayerInfo> players)
{
- foreach (var control in _players)
+ foreach (var child in PlayerList.Children.ToArray())
{
- PlayerList.RemoveChild(control);
+ if (child is PlayerTabEntry)
+ child.Orphan();
}
- _players.Clear();
+ _players = players;
var playerManager = IoCManager.Resolve<IPlayerManager>();
PlayerCount.Text = $"Players: {playerManager.PlayerCount}";
var useAltColor = false;
foreach (var player in sortedPlayers)
{
+ if (!_showDisconnected && !player.Connected)
+ continue;
+
var entry = new PlayerTabEntry(player.Username,
player.CharacterName,
player.IdentityName,
entry.PlayerUid = player.EntityUid;
entry.OnPressed += args => OnEntryPressed?.Invoke(args);
PlayerList.AddChild(entry);
- _players.Add(entry);
useAltColor ^= true;
}