diff --git a/Content.Client/GameTicking/ClientGameTicker.cs b/Content.Client/GameTicking/ClientGameTicker.cs index 5f8910baea..e92e565fcc 100644 --- a/Content.Client/GameTicking/ClientGameTicker.cs +++ b/Content.Client/GameTicking/ClientGameTicker.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using Content.Client.Chat; using Content.Client.Interfaces; using Content.Client.Interfaces.Chat; @@ -11,6 +12,7 @@ using Robust.Client.Interfaces; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Interfaces.UserInterface; +using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Shared.Input; using Robust.Shared.Interfaces.Network; @@ -32,6 +34,7 @@ namespace Content.Client.GameTicking [Dependency] private IClientConsole _console; [Dependency] private ILocalizationManager _localization; [Dependency] private IResourceCache _resourceCache; + [Dependency] private IPlayerManager _playerManager; #pragma warning restore 649 [ViewVariables] private bool _areWeReady; @@ -51,10 +54,25 @@ namespace Content.Client.GameTicking _netManager.RegisterNetMessage(nameof(MsgTickerLobbyStatus), _lobbyStatus); _baseClient.RunLevelChanged += BaseClientOnRunLevelChanged; + _playerManager.PlayerListUpdated += PlayerManagerOnPlayerListUpdated; _initialized = true; } + private void PlayerManagerOnPlayerListUpdated(object sender, EventArgs e) + { + if (_lobby == null) + { + return; + } + + _lobby.OnlinePlayerItemList.Clear(); + foreach (var session in _playerManager.Sessions.OrderBy(s => s.Name)) + { + _lobby.OnlinePlayerItemList.AddItem(session.Name); + } + } + private void BaseClientOnRunLevelChanged(object sender, RunLevelChangedEventArgs e) { if (e.NewLevel != ClientRunLevel.Initialize) diff --git a/Content.Client/UserInterface/LobbyGui.cs b/Content.Client/UserInterface/LobbyGui.cs index 31a6ea6a4b..1e0890398b 100644 --- a/Content.Client/UserInterface/LobbyGui.cs +++ b/Content.Client/UserInterface/LobbyGui.cs @@ -14,11 +14,12 @@ namespace Content.Client.UserInterface public Button ReadyButton { get; } public Button ObserveButton { get; } public Button LeaveButton { get; } - public ChatBox Chat { get; set; } + public ChatBox Chat { get; } + public ItemList OnlinePlayerItemList { get; } public LobbyGui(ILocalizationManager localization, IResourceCache resourceCache) { - PanelOverride = new StyleBoxFlat { BackgroundColor = new Color(37, 37, 45)}; + PanelOverride = new StyleBoxFlat {BackgroundColor = new Color(37, 37, 45)}; PanelOverride.SetContentMarginOverride(StyleBox.Margin.All, 4); var vBox = new VBoxContainer(); @@ -90,12 +91,24 @@ namespace Content.Client.UserInterface Chat.Input.PlaceHolder = localization.GetString("Talk!"); } - // Placeholder. - hBox.AddChild(new Placeholder(resourceCache) { - SizeFlagsHorizontal = SizeFlags.FillExpand, - PlaceholderText = localization.GetString("Server Info\nPlaceholder") - }); + var rightVBox = new VBoxContainer {SizeFlagsHorizontal = SizeFlags.FillExpand}; + hBox.AddChild(rightVBox); + rightVBox.AddChild(new Label + { + Text = localization.GetString("Online Players:") + }); + rightVBox.AddChild(OnlinePlayerItemList = new ItemList + { + SizeFlagsVertical = SizeFlags.FillExpand, + //SelectMode = ItemList.ItemListSelectMode.None + }); + rightVBox.AddChild(new Placeholder(resourceCache) + { + SizeFlagsVertical = SizeFlags.FillExpand, + PlaceholderText = localization.GetString("Server Info\nPlaceholder") + }); + } } } } diff --git a/Content.Client/UserInterface/NanoStyle.cs b/Content.Client/UserInterface/NanoStyle.cs index 0583109070..77f5b76f2f 100644 --- a/Content.Client/UserInterface/NanoStyle.cs +++ b/Content.Client/UserInterface/NanoStyle.cs @@ -149,6 +149,16 @@ namespace Content.Client.UserInterface placeholder.SetPatchMargin(StyleBox.Margin.All, 24); placeholder.SetExpandMargin(StyleBox.Margin.All, -5); + var itemListBackgroundSelected = new StyleBoxFlat {BackgroundColor = new Color(75, 75, 86)}; + itemListBackgroundSelected.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); + itemListBackgroundSelected.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); + var itemListItemBackgroundDisabled = new StyleBoxFlat {BackgroundColor = new Color(10, 10, 12)}; + itemListItemBackgroundDisabled.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); + itemListItemBackgroundDisabled.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); + var itemListItemBackground = new StyleBoxFlat {BackgroundColor = new Color(55, 55, 68)}; + itemListItemBackground.SetContentMarginOverride(StyleBox.Margin.Vertical, 2); + itemListItemBackground.SetContentMarginOverride(StyleBox.Margin.Horizontal, 4); + Stylesheet = new Stylesheet(new[] { // Default font. @@ -367,11 +377,11 @@ namespace Content.Client.UserInterface new StyleProperty(ItemList.StylePropertyBackground, new StyleBoxFlat {BackgroundColor = new Color(32, 32, 40)}), new StyleProperty(ItemList.StylePropertyItemBackground, - new StyleBoxFlat {BackgroundColor = new Color(55, 55, 68)}), + itemListItemBackground), new StyleProperty(ItemList.StylePropertyDisabledItemBackground, - new StyleBoxFlat {BackgroundColor = new Color(10, 10, 12)}), + itemListItemBackgroundDisabled), new StyleProperty(ItemList.StylePropertySelectedItemBackground, - new StyleBoxFlat {BackgroundColor = new Color(75, 75, 86)}) + itemListBackgroundSelected) }), // Tree