SpraySafetySystem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Content.Shared.Chemistry.EntitySystems;
  2. using Content.Shared.Fluids.Components;
  3. using Content.Shared.Item.ItemToggle;
  4. using Content.Shared.Popups;
  5. using Robust.Shared.Audio.Systems;
  6. namespace Content.Shared.Fluids;
  7. public sealed class SpraySafetySystem : EntitySystem
  8. {
  9. [Dependency] private readonly ItemToggleSystem _toggle = default!;
  10. [Dependency] private readonly SharedAudioSystem _audio = default!;
  11. [Dependency] private readonly SharedPopupSystem _popup = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<SpraySafetyComponent, SolutionTransferAttemptEvent>(OnTransferAttempt);
  16. SubscribeLocalEvent<SpraySafetyComponent, SolutionTransferredEvent>(OnTransferred);
  17. SubscribeLocalEvent<SpraySafetyComponent, SprayAttemptEvent>(OnSprayAttempt);
  18. }
  19. private void OnTransferAttempt(Entity<SpraySafetyComponent> ent, ref SolutionTransferAttemptEvent args)
  20. {
  21. var (uid, comp) = ent;
  22. if (uid == args.To && !_toggle.IsActivated(uid))
  23. args.Cancel(Loc.GetString(comp.Popup));
  24. }
  25. private void OnTransferred(Entity<SpraySafetyComponent> ent, ref SolutionTransferredEvent args)
  26. {
  27. _audio.PlayPredicted(ent.Comp.RefillSound, ent, args.User);
  28. }
  29. private void OnSprayAttempt(Entity<SpraySafetyComponent> ent, ref SprayAttemptEvent args)
  30. {
  31. if (!_toggle.IsActivated(ent.Owner))
  32. {
  33. _popup.PopupEntity(Loc.GetString(ent.Comp.Popup), ent, args.User);
  34. args.Cancel();
  35. }
  36. }
  37. }