New struct for basic round end info per player.
This commit is contained in:
@@ -73,7 +73,7 @@ namespace Content.Client.GameTicking
|
||||
{
|
||||
|
||||
//This is not ideal at all, but I don't see an immediately better fit anywhere else.
|
||||
var roundEnd = new RoundEndSummaryWindow(message.GamemodeTitle, message.DurationInHours);
|
||||
var roundEnd = new RoundEndSummaryWindow(message.GamemodeTitle, message.DurationInHours, message.AllPlayersEndInfo);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@ using Robust.Shared.Maths;
|
||||
using Content.Client.Utility;
|
||||
using Robust.Client.Player;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using static Robust.Client.UserInterface.Controls.ItemList;
|
||||
using static Content.Shared.SharedGameTicker;
|
||||
|
||||
namespace Content.Client.UserInterface
|
||||
{
|
||||
@@ -27,7 +29,7 @@ namespace Content.Client.UserInterface
|
||||
|
||||
protected override Vector2? CustomSize => (520, 580);
|
||||
|
||||
public RoundEndSummaryWindow(string gm, uint duration)
|
||||
public RoundEndSummaryWindow(string gm, uint duration, List<RoundEndPlayerInfo> info )
|
||||
{
|
||||
Title = Loc.GetString("Round End Summary");
|
||||
|
||||
@@ -59,12 +61,15 @@ namespace Content.Client.UserInterface
|
||||
SelectMode = ItemList.ItemListSelectMode.Button
|
||||
};
|
||||
|
||||
foreach (var session in _playerManager.Sessions.OrderBy(s => s.Name))
|
||||
foreach(var plyinfo in info)
|
||||
{
|
||||
var playerOOCName = session.SessionId.Username;
|
||||
//No Mind data so no ICName/Job/Role, etc.
|
||||
_playerList.AddItem(playerOOCName);
|
||||
var oocName = plyinfo.PlayerOOCName;
|
||||
var icName = plyinfo.PlayerICName;
|
||||
var role = plyinfo.Role;
|
||||
var wasAntag = plyinfo.Antag;
|
||||
_playerList.AddItem($"{oocName} was {icName} playing role of {role}.");
|
||||
}
|
||||
|
||||
VBox.AddChild(_playerList);
|
||||
OpenCentered();
|
||||
MoveToFront();
|
||||
|
||||
@@ -205,8 +205,30 @@ namespace Content.Server.GameTicking
|
||||
//Tell every client the round has ended.
|
||||
var roundEndMessage = _netManager.CreateNetMessage<MsgRoundEndMessage>();
|
||||
roundEndMessage.GamemodeTitle = MakeGamePreset().ModeTitle;
|
||||
|
||||
//TODO:Grab actual timespan of round.
|
||||
roundEndMessage.DurationInHours = 1337;
|
||||
|
||||
//Generate a list of basic player info to display in the end round summary.
|
||||
var listOfPlayerInfo = new List<RoundEndPlayerInfo>();
|
||||
foreach(var ply in _playerManager.GetAllPlayers().OrderBy(p => p.Name))
|
||||
{
|
||||
if (ply == null) continue;
|
||||
if(ply.AttachedEntity.TryGetComponent<MindComponent>(out var mindComponent)
|
||||
&& mindComponent.HasMind)
|
||||
{
|
||||
var playerEndRoundInfo = new RoundEndPlayerInfo()
|
||||
{
|
||||
PlayerOOCName = ply.Name,
|
||||
PlayerICName = mindComponent.Mind.CurrentEntity.Name,
|
||||
Role = mindComponent.Mind.AllRoles.First().Name,
|
||||
Antag = false
|
||||
};
|
||||
listOfPlayerInfo.Add(playerEndRoundInfo);
|
||||
}
|
||||
}
|
||||
|
||||
roundEndMessage.AllPlayersEndInfo = listOfPlayerInfo;
|
||||
_netManager.ServerSendToAll(roundEndMessage);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Lidgren.Network;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Interfaces.Network;
|
||||
using Robust.Shared.Network;
|
||||
|
||||
@@ -114,6 +116,14 @@ namespace Content.Shared
|
||||
buffer.Write(TextBlob);
|
||||
}
|
||||
}
|
||||
public struct RoundEndPlayerInfo
|
||||
{
|
||||
public string PlayerOOCName;
|
||||
public string PlayerICName;
|
||||
public string Role;
|
||||
public bool Antag;
|
||||
|
||||
}
|
||||
|
||||
protected class MsgRoundEndMessage : NetMessage
|
||||
{
|
||||
@@ -130,10 +140,30 @@ namespace Content.Shared
|
||||
//TODO: Change to a more detailed measurement of time.
|
||||
public uint DurationInHours;
|
||||
|
||||
public uint PlayerCount;
|
||||
|
||||
public List<RoundEndPlayerInfo> AllPlayersEndInfo;
|
||||
|
||||
public override void ReadFromBuffer(NetIncomingMessage buffer)
|
||||
{
|
||||
GamemodeTitle = buffer.ReadString();
|
||||
DurationInHours = buffer.ReadUInt32();
|
||||
|
||||
PlayerCount = buffer.ReadUInt32();
|
||||
AllPlayersEndInfo = new List<RoundEndPlayerInfo>();
|
||||
for(var i = 0; i < PlayerCount + 1; i++)
|
||||
{
|
||||
var readPlayerData = new RoundEndPlayerInfo
|
||||
{
|
||||
PlayerOOCName = buffer.ReadString(),
|
||||
PlayerICName = buffer.ReadString(),
|
||||
Role = buffer.ReadString(),
|
||||
Antag = buffer.ReadBoolean()
|
||||
};
|
||||
|
||||
AllPlayersEndInfo.Add(readPlayerData);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override void WriteToBuffer(NetOutgoingMessage buffer)
|
||||
@@ -141,6 +171,14 @@ namespace Content.Shared
|
||||
buffer.Write(GamemodeTitle);
|
||||
buffer.Write(DurationInHours);
|
||||
|
||||
buffer.Write(PlayerCount);
|
||||
foreach(var playerEndInfo in AllPlayersEndInfo)
|
||||
{
|
||||
buffer.Write(playerEndInfo.PlayerOOCName);
|
||||
buffer.Write(playerEndInfo.PlayerICName);
|
||||
buffer.Write(playerEndInfo.Role);
|
||||
buffer.Write(playerEndInfo.Antag);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user