using Content.Shared.Emp; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Radio.Components; namespace Content.Shared.Radio.EntitySystems; public abstract class SharedHeadsetSystem : EntitySystem { public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(OnGetDefault); SubscribeLocalEvent(OnGotEquipped); SubscribeLocalEvent(OnGotUnequipped); SubscribeLocalEvent(OnEmpPulse); } private void OnGetDefault(EntityUid uid, HeadsetComponent component, InventoryRelayedEvent args) { if (!component.Enabled || !component.IsEquipped) { // don't provide default channels from pocket slots. return; } if (TryComp(uid, out EncryptionKeyHolderComponent? keyHolder)) args.Args.Channel ??= keyHolder.DefaultChannel; } protected virtual void OnGotEquipped(EntityUid uid, HeadsetComponent component, GotEquippedEvent args) { component.IsEquipped = args.SlotFlags.HasFlag(component.RequiredSlot); Dirty(uid, component); } protected virtual void OnGotUnequipped(EntityUid uid, HeadsetComponent component, GotUnequippedEvent args) { component.IsEquipped = false; Dirty(uid, component); } private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) { if (ent.Comp.Enabled) { args.Affected = true; args.Disabled = true; } } }