New struct for basic round end info per player.

This commit is contained in:
scuffedjays
2020-04-10 01:37:14 -05:00
parent c47368231b
commit 3ce50879b7
4 changed files with 71 additions and 6 deletions

View File

@@ -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. //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);
} }
} }

View File

@@ -10,7 +10,9 @@ using Robust.Shared.Maths;
using Content.Client.Utility; using Content.Client.Utility;
using Robust.Client.Player; using Robust.Client.Player;
using System.Linq; using System.Linq;
using System.Collections.Generic;
using static Robust.Client.UserInterface.Controls.ItemList; using static Robust.Client.UserInterface.Controls.ItemList;
using static Content.Shared.SharedGameTicker;
namespace Content.Client.UserInterface namespace Content.Client.UserInterface
{ {
@@ -27,7 +29,7 @@ namespace Content.Client.UserInterface
protected override Vector2? CustomSize => (520, 580); 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"); Title = Loc.GetString("Round End Summary");
@@ -59,12 +61,15 @@ namespace Content.Client.UserInterface
SelectMode = ItemList.ItemListSelectMode.Button SelectMode = ItemList.ItemListSelectMode.Button
}; };
foreach (var session in _playerManager.Sessions.OrderBy(s => s.Name)) foreach(var plyinfo in info)
{ {
var playerOOCName = session.SessionId.Username; var oocName = plyinfo.PlayerOOCName;
//No Mind data so no ICName/Job/Role, etc. var icName = plyinfo.PlayerICName;
_playerList.AddItem(playerOOCName); var role = plyinfo.Role;
var wasAntag = plyinfo.Antag;
_playerList.AddItem($"{oocName} was {icName} playing role of {role}.");
} }
VBox.AddChild(_playerList); VBox.AddChild(_playerList);
OpenCentered(); OpenCentered();
MoveToFront(); MoveToFront();

View File

@@ -205,8 +205,30 @@ namespace Content.Server.GameTicking
//Tell every client the round has ended. //Tell every client the round has ended.
var roundEndMessage = _netManager.CreateNetMessage<MsgRoundEndMessage>(); var roundEndMessage = _netManager.CreateNetMessage<MsgRoundEndMessage>();
roundEndMessage.GamemodeTitle = MakeGamePreset().ModeTitle; roundEndMessage.GamemodeTitle = MakeGamePreset().ModeTitle;
//TODO:Grab actual timespan of round. //TODO:Grab actual timespan of round.
roundEndMessage.DurationInHours = 1337; 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); _netManager.ServerSendToAll(roundEndMessage);
} }

View File

@@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Generic;
using Lidgren.Network; using Lidgren.Network;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Network;
using Robust.Shared.Network; using Robust.Shared.Network;
@@ -114,6 +116,14 @@ namespace Content.Shared
buffer.Write(TextBlob); buffer.Write(TextBlob);
} }
} }
public struct RoundEndPlayerInfo
{
public string PlayerOOCName;
public string PlayerICName;
public string Role;
public bool Antag;
}
protected class MsgRoundEndMessage : NetMessage protected class MsgRoundEndMessage : NetMessage
{ {
@@ -130,10 +140,30 @@ namespace Content.Shared
//TODO: Change to a more detailed measurement of time. //TODO: Change to a more detailed measurement of time.
public uint DurationInHours; public uint DurationInHours;
public uint PlayerCount;
public List<RoundEndPlayerInfo> AllPlayersEndInfo;
public override void ReadFromBuffer(NetIncomingMessage buffer) public override void ReadFromBuffer(NetIncomingMessage buffer)
{ {
GamemodeTitle = buffer.ReadString(); GamemodeTitle = buffer.ReadString();
DurationInHours = buffer.ReadUInt32(); 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) public override void WriteToBuffer(NetOutgoingMessage buffer)
@@ -141,6 +171,14 @@ namespace Content.Shared
buffer.Write(GamemodeTitle); buffer.Write(GamemodeTitle);
buffer.Write(DurationInHours); 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);
}
} }
} }