47 lines
1.4 KiB
C#
47 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Content.Server.GameTicking;
|
|
using Content.Server.Mind.Components;
|
|
using Content.Shared.GameTicking;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.ViewVariables;
|
|
using Robust.Shared.Player;
|
|
|
|
namespace Content.Server.Mind
|
|
{
|
|
/// <summary>
|
|
/// This is absolutely evil.
|
|
/// It tracks all mind changes and logs all the Mind objects.
|
|
/// This is so that when round end comes around, there's a coherent list of all Minds that were in play during the round.
|
|
/// The Minds themselves contain metadata about their owners.
|
|
/// Anyway, this is because disconnected people and ghost roles have been breaking round end statistics for way too long.
|
|
/// </summary>
|
|
public sealed class MindTrackerSystem : EntitySystem
|
|
{
|
|
[ViewVariables]
|
|
public readonly HashSet<Mind> AllMinds = new();
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<RoundRestartCleanupEvent>(Reset);
|
|
SubscribeLocalEvent<MindComponent, MindAddedMessage>(OnMindAdded);
|
|
}
|
|
|
|
void Reset(RoundRestartCleanupEvent ev)
|
|
{
|
|
AllMinds.Clear();
|
|
}
|
|
|
|
void OnMindAdded(EntityUid uid, MindComponent mc, MindAddedMessage args)
|
|
{
|
|
var mind = mc.Mind;
|
|
if (mind != null)
|
|
AllMinds.Add(mind);
|
|
}
|
|
}
|
|
}
|
|
|