using Content.Shared.Hands; namespace Content.Shared.Inventory; /// /// Helper functions for subscribing to component events that are also relayed via hands/inventory. /// public static class RelaySubscriptionHelpers { /// /// Subscribe to an event, along with different relayed event wrappers, in one call. /// /// Subscriptions for the entity system we're subscribing on. /// The event handler to be called for the event. /// Whether to subscribe the base event type. /// Whether to subscribe for . /// Whether to subscribe for . /// public static void SubscribeWithRelay( this EntitySystem.Subscriptions subs, EntityEventRefHandler handler, bool baseEvent = true, bool inventory = true, bool held = true) where TEvent : notnull where TComp : IComponent { if (baseEvent) subs.SubscribeLocalEvent(handler); if (inventory) { subs.SubscribeLocalEvent((Entity ent, ref InventoryRelayedEvent ev) => { handler(ent, ref ev.Args); }); } if (held) { subs.SubscribeLocalEvent((Entity ent, ref HeldRelayedEvent ev) => { handler(ent, ref ev.Args); }); } } /// /// Subscribe to an event, along with different relayed event wrappers, in one call. /// /// Subscriptions for the entity system we're subscribing on. /// The event handler to be called for the event. /// Whether to subscribe the base event type. /// Whether to subscribe for . /// Whether to subscribe for . /// public static void SubscribeWithRelay( this EntitySystem.Subscriptions subs, ComponentEventHandler handler, bool baseEvent = true, bool inventory = true, bool held = true) where TEvent : notnull where TComp : IComponent { if (baseEvent) subs.SubscribeLocalEvent(handler); if (inventory) { subs.SubscribeLocalEvent((EntityUid uid, TComp component, InventoryRelayedEvent args) => { handler(uid, component, args.Args); }); } if (held) { subs.SubscribeLocalEvent((EntityUid uid, TComp component, HeldRelayedEvent args) => { handler(uid, component, args.Args); }); } } /// /// Subscribe to an event, along with different relayed event wrappers, in one call. /// /// Subscriptions for the entity system we're subscribing on. /// The event handler to be called for the event. /// Whether to subscribe the base event type. /// Whether to subscribe for . /// Whether to subscribe for . /// public static void SubscribeWithRelay( this EntitySystem.Subscriptions subs, ComponentEventRefHandler handler, bool baseEvent = true, bool inventory = true, bool held = true) where TEvent : notnull where TComp : IComponent { if (baseEvent) subs.SubscribeLocalEvent(handler); if (inventory) { subs.SubscribeLocalEvent((EntityUid uid, TComp component, ref InventoryRelayedEvent args) => { handler(uid, component, ref args.Args); }); } if (held) { subs.SubscribeLocalEvent((EntityUid uid, TComp component, ref HeldRelayedEvent args) => { handler(uid, component, ref args.Args); }); } } }