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 { /// /// 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. /// public sealed class MindTrackerSystem : EntitySystem { [ViewVariables] public readonly HashSet AllMinds = new(); public override void Initialize() { base.Initialize(); SubscribeLocalEvent(Reset); SubscribeLocalEvent(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); } } }