using Content.Shared.Beeper.Components; using Content.Shared.Item.ItemToggle; using Content.Shared.Pinpointer; using Content.Shared.ProximityDetection; using Content.Shared.ProximityDetection.Components; using Content.Shared.ProximityDetection.Systems; namespace Content.Shared.Beeper.Systems; /// /// This handles controlling a beeper from proximity detector events. /// public sealed class ProximityBeeperSystem : EntitySystem { [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly ProximityDetectionSystem _proximity = default!; [Dependency] private readonly BeeperSystem _beeper = default!; /// public override void Initialize() { SubscribeLocalEvent(OnNewProximityTarget); SubscribeLocalEvent(OnProximityTargetUpdate); } private void OnProximityTargetUpdate(EntityUid owner, ProximityBeeperComponent proxBeeper, ref ProximityTargetUpdatedEvent args) { if (!TryComp(owner, out var beeper)) return; if (args.Target == null) { _beeper.SetMute(owner, true, beeper); return; } _beeper.SetIntervalScaling(owner, args.Distance / args.Detector.Range, beeper); _beeper.SetMute(owner, false, beeper); } private void OnNewProximityTarget(EntityUid owner, ProximityBeeperComponent proxBeeper, ref NewProximityTargetEvent args) { _beeper.SetMute(owner, args.Target != null); } }