using System.Linq; using Content.Shared.Hands.EntitySystems; namespace Content.Shared.Hands.Components; /// /// These helpers exist to make getting basic information out of the hands component more convenient, without /// needing to resolve hands system or something like that. /// public static class HandHelpers { /// /// Returns true if any hand is free. This is a LinQ method, not a property, so /// cache it instead of accessing this multiple times. /// public static bool IsAnyHandFree(this HandsComponent component) => component.Hands.Values.Any(hand => hand.IsEmpty); /// /// Get the number of hands that are not currently holding anything. This is a LinQ method, not a property, so /// cache it instead of accessing this multiple times. /// public static int CountFreeHands(this HandsComponent component) => component.Hands.Values.Count(hand => hand.IsEmpty); /// /// Get the number of hands that are not currently holding anything. This is a LinQ method, not a property, so /// cache it instead of accessing this multiple times. /// public static int CountFreeableHands(this Entity component, SharedHandsSystem system) { return system.CountFreeableHands(component); } /// /// Get a list of hands that are currently holding nothing. This is a LinQ method, not a property, so cache /// it instead of accessing this multiple times. /// public static IEnumerable GetFreeHands(this HandsComponent component) => component.Hands.Values.Where(hand => !hand.IsEmpty); /// /// Get a list of hands that are currently holding nothing. This is a LinQ method, not a property, so cache /// it instead of accessing this multiple times. /// public static IEnumerable GetFreeHandNames(this HandsComponent component) => GetFreeHands(component).Select(hand => hand.Name); }