2022-12-19 16:14:02 -05:00
|
|
|
using System.Linq;
|
2021-06-09 22:19:39 +02:00
|
|
|
using Content.Server.Research.Components;
|
2021-05-10 20:45:53 +02:00
|
|
|
using JetBrains.Annotations;
|
2022-06-28 22:54:08 +10:00
|
|
|
using Robust.Server.GameObjects;
|
|
|
|
|
using Robust.Shared.Prototypes;
|
2022-12-19 16:14:02 -05:00
|
|
|
using Robust.Shared.Timing;
|
2022-03-12 13:26:06 -05:00
|
|
|
|
2022-12-19 16:14:02 -05:00
|
|
|
namespace Content.Server.Research.Systems
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2021-05-10 20:45:53 +02:00
|
|
|
[UsedImplicitly]
|
2022-06-28 22:54:08 +10:00
|
|
|
public sealed partial class ResearchSystem : EntitySystem
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
[Dependency] private readonly IGameTiming _timing = default!;
|
2022-06-28 22:54:08 +10:00
|
|
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
|
|
|
|
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
|
|
|
|
|
2022-03-12 13:26:06 -05:00
|
|
|
public override void Initialize()
|
|
|
|
|
{
|
|
|
|
|
base.Initialize();
|
2022-12-19 22:31:47 -05:00
|
|
|
SubscribeLocalEvent<ResearchServerComponent, ComponentStartup>(OnStartup);
|
|
|
|
|
|
2022-06-28 22:54:08 +10:00
|
|
|
InitializeClient();
|
|
|
|
|
InitializeConsole();
|
2022-12-19 16:14:02 -05:00
|
|
|
InitializeSource();
|
2022-06-28 22:54:08 +10:00
|
|
|
InitializeTechnology();
|
2022-03-12 13:26:06 -05:00
|
|
|
}
|
|
|
|
|
|
2022-12-19 22:31:47 -05:00
|
|
|
private void OnStartup(EntityUid uid, ResearchServerComponent component, ComponentStartup args)
|
|
|
|
|
{
|
|
|
|
|
component.Id = EntityQuery<ResearchServerComponent>(true).Count();
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-16 15:50:20 +01:00
|
|
|
public ResearchServerComponent? GetServerById(int id)
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
foreach (var server in EntityQuery<ResearchServerComponent>())
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
if (server.Id == id)
|
|
|
|
|
return server;
|
2019-09-03 22:51:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string[] GetServerNames()
|
|
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
var allServers = EntityQuery<ResearchServerComponent>(true).ToArray();
|
|
|
|
|
var list = new string[allServers.Length];
|
2019-09-03 22:51:19 +02:00
|
|
|
|
2022-12-19 16:14:02 -05:00
|
|
|
for (var i = 0; i < allServers.Length; i++)
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
list[i] = allServers[i].ServerName;
|
2019-09-03 22:51:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int[] GetServerIds()
|
|
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
var allServers = EntityQuery<ResearchServerComponent>(true).ToArray();
|
|
|
|
|
var list = new int[allServers.Length];
|
2019-09-03 22:51:19 +02:00
|
|
|
|
2022-12-19 16:14:02 -05:00
|
|
|
for (var i = 0; i < allServers.Length; i++)
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
list[i] = allServers[i].Id;
|
2019-09-03 22:51:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Update(float frameTime)
|
|
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
foreach (var server in EntityQuery<ResearchServerComponent>())
|
2019-09-03 22:51:19 +02:00
|
|
|
{
|
2022-12-19 16:14:02 -05:00
|
|
|
if (server.NextUpdateTime > _timing.CurTime)
|
|
|
|
|
continue;
|
|
|
|
|
server.NextUpdateTime = _timing.CurTime + server.ResearchConsoleUpdateTime;
|
2019-09-03 22:51:19 +02:00
|
|
|
|
2022-12-19 16:14:02 -05:00
|
|
|
UpdateServer(server, (int) server.ResearchConsoleUpdateTime.TotalSeconds);
|
2019-09-03 22:51:19 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|