Ready Indicator in the lobby (#1771)

* Ready Indicator in the lobby

* Use SessionID instead of Name

* Don't show ready state when game is already running

* Make Ready List not selectable

* -Remove disconnected sessions from Ready
-Fix showing ReadyStatus when staying in lobby
This commit is contained in:
Exp
2020-08-18 14:52:59 +02:00
committed by GitHub
parent 6fb2a335b1
commit 5de57d6cd2
6 changed files with 157 additions and 5 deletions

View File

@@ -49,6 +49,7 @@ using Robust.Shared.Localization;
using Robust.Shared.Log;
using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Shared.Network;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
@@ -138,6 +139,7 @@ namespace Content.Server.GameTicking
_netManager.RegisterNetMessage<MsgTickerLobbyStatus>(nameof(MsgTickerLobbyStatus));
_netManager.RegisterNetMessage<MsgTickerLobbyInfo>(nameof(MsgTickerLobbyInfo));
_netManager.RegisterNetMessage<MsgTickerLobbyCountdown>(nameof(MsgTickerLobbyCountdown));
_netManager.RegisterNetMessage<MsgTickerLobbyReady>(nameof(MsgTickerLobbyReady));
_netManager.RegisterNetMessage<MsgRoundEndMessage>(nameof(MsgRoundEndMessage));
_netManager.RegisterNetMessage<MsgRequestWindowAttention>(nameof(MsgRequestWindowAttention));
@@ -381,6 +383,7 @@ namespace Content.Server.GameTicking
_playersInLobby[player] = ready;
_netManager.ServerSendMessage(_getStatusMsg(player), player.ConnectedClient);
_netManager.ServerSendToAll(GetReadySingle(player, ready));
}
public T AddGameRule<T>() where T : GameRule, new()
@@ -871,6 +874,7 @@ namespace Content.Server.GameTicking
_netManager.ServerSendMessage(_netManager.CreateNetMessage<MsgTickerJoinLobby>(), session.ConnectedClient);
_netManager.ServerSendMessage(_getStatusMsg(session), session.ConnectedClient);
_netManager.ServerSendMessage(GetInfoMsg(), session.ConnectedClient);
_netManager.ServerSendMessage(GetReadyStatus(), session.ConnectedClient);
}
private void _playerJoinGame(IPlayerSession session)
@@ -882,6 +886,26 @@ namespace Content.Server.GameTicking
_netManager.ServerSendMessage(_netManager.CreateNetMessage<MsgTickerJoinGame>(), session.ConnectedClient);
}
private MsgTickerLobbyReady GetReadyStatus()
{
var msg = _netManager.CreateNetMessage<MsgTickerLobbyReady>();
msg.PlayerReady = new Dictionary<NetSessionId, bool>();
foreach (var player in _playersInLobby.Keys)
{
_playersInLobby.TryGetValue(player, out var ready);
msg.PlayerReady.Add(player.SessionId, ready);
}
return msg;
}
private MsgTickerLobbyReady GetReadySingle(IPlayerSession player, bool ready)
{
var msg = _netManager.CreateNetMessage<MsgTickerLobbyReady>();
msg.PlayerReady = new Dictionary<NetSessionId, bool>();
msg.PlayerReady.Add(player.SessionId, ready);
return msg;
}
private MsgTickerLobbyStatus _getStatusMsg(IPlayerSession session)
{
_playersInLobby.TryGetValue(session, out var ready);