ProximityBeeperSystem.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Content.Shared.Beeper.Components;
  2. using Content.Shared.Item.ItemToggle;
  3. using Content.Shared.Pinpointer;
  4. using Content.Shared.ProximityDetection;
  5. using Content.Shared.ProximityDetection.Components;
  6. using Content.Shared.ProximityDetection.Systems;
  7. namespace Content.Shared.Beeper.Systems;
  8. /// <summary>
  9. /// This handles controlling a beeper from proximity detector events.
  10. /// </summary>
  11. public sealed class ProximityBeeperSystem : EntitySystem
  12. {
  13. [Dependency] private readonly BeeperSystem _beeper = default!;
  14. /// <inheritdoc/>
  15. public override void Initialize()
  16. {
  17. SubscribeLocalEvent<ProximityBeeperComponent, NewProximityTargetEvent>(OnNewProximityTarget);
  18. SubscribeLocalEvent<ProximityBeeperComponent, ProximityTargetUpdatedEvent>(OnProximityTargetUpdate);
  19. }
  20. private void OnProximityTargetUpdate(EntityUid owner, ProximityBeeperComponent proxBeeper, ref ProximityTargetUpdatedEvent args)
  21. {
  22. if (!TryComp<BeeperComponent>(owner, out var beeper))
  23. return;
  24. if (args.Target == null)
  25. {
  26. _beeper.SetMute(owner, true, beeper);
  27. return;
  28. }
  29. _beeper.SetIntervalScaling(owner, args.Distance / args.Detector.Range, beeper);
  30. _beeper.SetMute(owner, false, beeper);
  31. }
  32. private void OnNewProximityTarget(EntityUid owner, ProximityBeeperComponent proxBeeper, ref NewProximityTargetEvent args)
  33. {
  34. _beeper.SetMute(owner, args.Target == null);
  35. }
  36. }