using Content.Shared.Hands.Components; using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Item; /// /// Handles items which can be picked up to hands and placed in pockets, as well as storage containers /// like backpacks. /// [RegisterComponent] [NetworkedComponent] [Access(typeof(SharedItemSystem))] public sealed partial class ItemComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite)] [Access(typeof(SharedItemSystem))] public ItemSize Size = ItemSize.Small; [Access(typeof(SharedItemSystem))] [DataField] public Dictionary> InhandVisuals = new(); [Access(typeof(SharedItemSystem))] [ViewVariables(VVAccess.ReadWrite)] [DataField] public string? HeldPrefix; /// /// Rsi of the sprite shown on the player when this item is in their hands. Used to generate a default entry for /// [Access(typeof(SharedItemSystem))] [ViewVariables(VVAccess.ReadWrite)] [DataField("sprite")] public string? RsiPath; } [Serializable, NetSerializable] public sealed class ItemComponentState : ComponentState { public ItemSize Size { get; } public string? HeldPrefix { get; } public ItemComponentState(ItemSize size, string? heldPrefix) { Size = size; HeldPrefix = heldPrefix; } } /// /// Raised when an item's visual state is changed. The event is directed at the entity that contains this item, so /// that it can properly update its hands or inventory sprites and GUI. /// [Serializable, NetSerializable] public sealed class VisualsChangedEvent : EntityEventArgs { public readonly NetEntity Item; public readonly string ContainerId; public VisualsChangedEvent(NetEntity item, string containerId) { Item = item; ContainerId = containerId; } } /// /// Abstracted sizes for items. /// Used to determine what can fit into inventories. /// public enum ItemSize { /// /// Items that can be held completely in one's hand. /// Tiny = 1, /// /// Items that can fit inside of a standard pocket. /// Small = 2, /// /// Items that can fit inside of a standard bag. /// Normal = 4, /// /// Items that are too large to fit inside of standard bags, but can worn in exterior slots or placed in custom containers. /// Large = 8, /// /// Items that are too large to place inside of any kind of container. /// Huge = 16, /// /// Picture furry gf /// Ginormous = 32 }