private IEntityManager _entManager;
private IUserInterfaceManager _uiManager;
+ private PlayerInfo? _selectedPlayer;
+
public PlayerListControl()
{
_entManager = IoCManager.Resolve<IEntityManager>();
return;
OnSelectionChanged?.Invoke(selectedPlayer);
+ _selectedPlayer = selectedPlayer;
// update label text. Only required if there is some override (e.g. unread bwoink count).
if (OverrideText != null && args.Button.Children.FirstOrDefault()?.Children?.FirstOrDefault() is Label label)
_sortedPlayerList.Sort((a, b) => Comparison(a, b));
PlayerListContainer.PopulateList(_sortedPlayerList.Select(info => new PlayerListData(info)).ToList());
+ if (_selectedPlayer != null)
+ PlayerListContainer.Select(new PlayerListData(_selectedPlayer));
}
public void PopulateList(IReadOnlyList<PlayerInfo>? players = null)
players ??= _adminSystem.PlayerList;
_playerList = players.ToList();
+ if (_selectedPlayer != null && !_playerList.Contains(_selectedPlayer))
+ _selectedPlayer = null;
+
FilterList();
}
namespace Content.Shared.Administration
{
[Serializable, NetSerializable]
- public record PlayerInfo(
+ public sealed record PlayerInfo(
string Username,
string CharacterName,
string IdentityName,
public string PlaytimeString => _playtimeString ??=
OverallPlaytime?.ToString("%d':'hh':'mm") ?? Loc.GetString("generic-unknown-title");
+
+ public bool Equals(PlayerInfo? other)
+ {
+ return other?.SessionId == SessionId;
+ }
+
+ public override int GetHashCode()
+ {
+ return SessionId.GetHashCode();
+ }
}
}