Chem guidebook (#17123)

* im good at atomizing. welcome to half-finished chem guides.

* wagh

* e

* save work

* aa

* woweee UI

* finishing the last of it

* don't actually update the engine :(

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
This commit is contained in:
Nemanja
2023-06-04 16:45:02 -04:00
committed by GitHub
parent 1e6dbd0b67
commit b9fb66f005
72 changed files with 1411 additions and 12 deletions

View File

@@ -0,0 +1,67 @@
using Content.Shared.Chemistry;
using Content.Shared.Chemistry.Reagent;
using Robust.Server.Player;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
namespace Content.Server.Chemistry.EntitySystems;
public sealed class ChemistryGuideDataSystem : SharedChemistryGuideDataSystem
{
[Dependency] private readonly IPlayerManager _player = default!;
/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();
PrototypeManager.PrototypesReloaded += PrototypeManagerReload;
_player.PlayerStatusChanged += OnPlayerStatusChanged;
InitializeServerRegistry();
}
private void InitializeServerRegistry()
{
var changeset = new ReagentGuideChangeset(new Dictionary<string, ReagentGuideEntry>(), new HashSet<string>());
foreach (var proto in PrototypeManager.EnumeratePrototypes<ReagentPrototype>())
{
var entry = new ReagentGuideEntry(proto, PrototypeManager, EntityManager.EntitySysManager);
changeset.GuideEntries.Add(proto.ID, entry);
Registry[proto.ID] = entry;
}
var ev = new ReagentGuideRegistryChangedEvent(changeset);
RaiseNetworkEvent(ev);
}
private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e)
{
if (e.NewStatus != SessionStatus.Connected)
return;
var sendEv = new ReagentGuideRegistryChangedEvent(new ReagentGuideChangeset(Registry, new HashSet<string>()));
RaiseNetworkEvent(sendEv, e.Session);
}
private void PrototypeManagerReload(PrototypesReloadedEventArgs obj)
{
if (!obj.ByType.TryGetValue(typeof(ReagentPrototype), out var reagents))
return;
var changeset = new ReagentGuideChangeset(new Dictionary<string, ReagentGuideEntry>(), new HashSet<string>());
foreach (var (id, proto) in reagents.Modified)
{
var reagentProto = (ReagentPrototype) proto;
var entry = new ReagentGuideEntry(reagentProto, PrototypeManager, EntityManager.EntitySysManager);
changeset.GuideEntries.Add(id, entry);
Registry[id] = entry;
}
var ev = new ReagentGuideRegistryChangedEvent(changeset);
RaiseNetworkEvent(ev);
}
}