using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Administration.Logs; using Content.Server.Radio.EntitySystems; using Content.Shared.Access.Systems; using Content.Shared.Popups; using Content.Shared.Research.Components; using Content.Shared.Research.Systems; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Timing; namespace Content.Server.Research.Systems { [UsedImplicitly] public sealed partial class ResearchSystem : SharedResearchSystem { [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly RadioSystem _radio = default!; public override void Initialize() { base.Initialize(); InitializeClient(); InitializeConsole(); InitializeSource(); InitializeServer(); SubscribeLocalEvent(OnDatabaseRegistrationChanged); } /// /// Gets a server based on it's unique numeric id. /// /// /// /// /// public bool TryGetServerById(int id, [NotNullWhen(true)] out EntityUid? serverUid, [NotNullWhen(true)] out ResearchServerComponent? serverComponent) { serverUid = null; serverComponent = null; var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var server)) { if (server.Id != id) continue; serverUid = uid; serverComponent = server; return true; } return false; } /// /// Gets the names of all the servers. /// /// public string[] GetServerNames() { var allServers = EntityQuery(true).ToArray(); var list = new string[allServers.Length]; for (var i = 0; i < allServers.Length; i++) { list[i] = allServers[i].ServerName; } return list; } /// /// Gets the ids of all the servers /// /// public int[] GetServerIds() { var allServers = EntityQuery(true).ToArray(); var list = new int[allServers.Length]; for (var i = 0; i < allServers.Length; i++) { list[i] = allServers[i].Id; } return list; } public override void Update(float frameTime) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var server)) { if (server.NextUpdateTime > _timing.CurTime) continue; server.NextUpdateTime = _timing.CurTime + server.ResearchConsoleUpdateTime; UpdateServer(uid, (int) server.ResearchConsoleUpdateTime.TotalSeconds, server); } } } }