using Content.Shared.Implants.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Mobs; namespace Content.Shared.Implants; public abstract partial class SharedSubdermalImplantSystem { public void InitializeRelay() { SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); } /// /// Relays events from the implanted to the implant. /// private void RelayToImplantEvent(EntityUid uid, ImplantedComponent component, T args) where T : notnull { if (!_container.TryGetContainer(uid, ImplanterComponent.ImplantSlotId, out var implantContainer)) return; var relayEv = new ImplantRelayEvent(args, uid); foreach (var implant in implantContainer.ContainedEntities) { if (args is HandledEntityEventArgs { Handled: true }) return; RaiseLocalEvent(implant, relayEv); } } } /// /// Wrapper for relaying events from an implanted entity to their implants. /// public sealed class ImplantRelayEvent where T : notnull { public readonly T Event; public readonly EntityUid ImplantedEntity; public ImplantRelayEvent(T ev, EntityUid implantedEntity) { Event = ev; ImplantedEntity = implantedEntity; } }