using Content.Shared.Implants; using Content.Shared.Implants.Components; using Content.Shared.Radio.Components; namespace Content.Server.Implants; public sealed class RadioImplantSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnImplantImplanted); SubscribeLocalEvent(OnImplantRemoved); } /// /// If implanted with a radio implant, installs the necessary intrinsic radio components /// private void OnImplantImplanted(Entity ent, ref ImplantImplantedEvent args) { var activeRadio = EnsureComp(args.Implanted); foreach (var channel in ent.Comp.RadioChannels) { if (activeRadio.Channels.Add(channel)) ent.Comp.ActiveAddedChannels.Add(channel); } EnsureComp(args.Implanted); var intrinsicRadioTransmitter = EnsureComp(args.Implanted); foreach (var channel in ent.Comp.RadioChannels) { if (intrinsicRadioTransmitter.Channels.Add(channel)) ent.Comp.TransmitterAddedChannels.Add(channel); } } /// /// Removes intrinsic radio components once the Radio Implant is removed /// private void OnImplantRemoved(Entity ent, ref ImplantRemovedEvent args) { if (TryComp(args.Implanted, out var activeRadioComponent)) { foreach (var channel in ent.Comp.ActiveAddedChannels) { activeRadioComponent.Channels.Remove(channel); } ent.Comp.ActiveAddedChannels.Clear(); if (activeRadioComponent.Channels.Count == 0) { RemCompDeferred(args.Implanted); } } if (!TryComp(args.Implanted, out var radioTransmitterComponent)) return; foreach (var channel in ent.Comp.TransmitterAddedChannels) { radioTransmitterComponent.Channels.Remove(channel); } ent.Comp.TransmitterAddedChannels.Clear(); if (radioTransmitterComponent.Channels.Count == 0 || activeRadioComponent?.Channels.Count == 0) { RemCompDeferred(args.Implanted); } } }