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 class ItemComponent : Component { [ViewVariables(VVAccess.ReadWrite)] [DataField("size")] [Access(typeof(SharedItemSystem), Other = AccessPermissions.ReadExecute)] public int Size = 5; [Access(typeof(SharedItemSystem))] [DataField("inhandVisuals")] public Dictionary> InhandVisuals = new(); [Access(typeof(SharedItemSystem))] [ViewVariables(VVAccess.ReadWrite)] [DataField("heldPrefix")] 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 int Size { get; } public string? HeldPrefix { get; } public ItemComponentState(int 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 EntityUid Item; public readonly string ContainerId; public VisualsChangedEvent(EntityUid item, string containerId) { Item = item; ContainerId = containerId; } } /// /// Reference sizes for common containers and items. /// public enum ReferenceSizes { Wallet = 4, Pocket = 12, Box = 24, Belt = 30, Toolbox = 60, Backpack = 100, NoStoring = 9999 }