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);
});
}
}
}