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

@@ -1,7 +1,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using Lidgren.Network;
using Robust.Shared.Interfaces.Network;
using Robust.Shared.Interfaces.Serialization;
using Robust.Shared.IoC;
using Robust.Shared.Network;
namespace Content.Shared
@@ -152,6 +155,57 @@ namespace Content.Shared
}
}
protected class MsgTickerLobbyReady : NetMessage
{
#region REQUIRED
public const MsgGroups GROUP = MsgGroups.Command;
public const string NAME = nameof(MsgTickerLobbyReady);
public MsgTickerLobbyReady(INetChannel channel) : base(NAME, GROUP) { }
#endregion
/// <summary>
/// The Players Ready (SessionID:ready)
/// </summary>
public Dictionary<NetSessionId, bool> PlayerReady { get; set; }
public override void ReadFromBuffer(NetIncomingMessage buffer)
{
PlayerReady = new Dictionary<NetSessionId, bool>();
var length = buffer.ReadInt32();
for (int i = 0; i < length; i++)
{
var serializer = IoCManager.Resolve<IRobustSerializer>();
var byteLength = buffer.ReadVariableInt32();
NetSessionId sessionID;
using (var stream = buffer.ReadAsStream(byteLength))
{
serializer.DeserializeDirect(stream, out sessionID);
}
var ready = buffer.ReadBoolean();
PlayerReady.Add(sessionID, ready);
}
}
public override void WriteToBuffer(NetOutgoingMessage buffer)
{
var serializer = IoCManager.Resolve<IRobustSerializer>();
buffer.Write(PlayerReady.Count);
foreach (var p in PlayerReady)
{
using (var stream = new MemoryStream())
{
serializer.SerializeDirect(stream, p.Key);
buffer.WriteVariableInt32((int) stream.Length);
stream.TryGetBuffer(out var segment);
buffer.Write(segment);
}
buffer.Write(p.Value);
}
}
}
public struct RoundEndPlayerInfo
{