1
0

ResearchDiskSystem.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Linq;
  2. using Content.Shared.Interaction;
  3. using Content.Server.Popups;
  4. using Content.Shared.Research.Prototypes;
  5. using Content.Server.Research.Systems;
  6. using Content.Shared.Research.Components;
  7. using Robust.Shared.Prototypes;
  8. namespace Content.Server.Research.Disk
  9. {
  10. public sealed class ResearchDiskSystem : EntitySystem
  11. {
  12. [Dependency] private readonly IPrototypeManager _prototype = default!;
  13. [Dependency] private readonly PopupSystem _popupSystem = default!;
  14. [Dependency] private readonly ResearchSystem _research = default!;
  15. public override void Initialize()
  16. {
  17. base.Initialize();
  18. SubscribeLocalEvent<ResearchDiskComponent, AfterInteractEvent>(OnAfterInteract);
  19. SubscribeLocalEvent<ResearchDiskComponent, MapInitEvent>(OnMapInit);
  20. }
  21. private void OnAfterInteract(EntityUid uid, ResearchDiskComponent component, AfterInteractEvent args)
  22. {
  23. if (!args.CanReach)
  24. return;
  25. if (!TryComp<ResearchServerComponent>(args.Target, out var server))
  26. return;
  27. _research.ModifyServerPoints(args.Target.Value, component.Points, server);
  28. _popupSystem.PopupEntity(Loc.GetString("research-disk-inserted", ("points", component.Points)), args.Target.Value, args.User);
  29. EntityManager.QueueDeleteEntity(uid);
  30. args.Handled = true;
  31. }
  32. private void OnMapInit(EntityUid uid, ResearchDiskComponent component, MapInitEvent args)
  33. {
  34. if (!component.UnlockAllTech)
  35. return;
  36. component.Points = _prototype.EnumeratePrototypes<TechnologyPrototype>()
  37. .Sum(tech => tech.Cost);
  38. }
  39. }
  40. }