using Content.Shared.Hands.Components; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; 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)), AutoGenerateComponentState(true)] public sealed partial class ItemComponent : Component { [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] [Access(typeof(SharedItemSystem))] public ProtoId Size = "Small"; [Access(typeof(SharedItemSystem))] [DataField] public Dictionary> InhandVisuals = new(); [Access(typeof(SharedItemSystem))] [ViewVariables(VVAccess.ReadWrite)] [DataField, AutoNetworkedField] 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; /// /// An optional override for the shape of the item within the grid storage. /// If null, a default shape will be used based on . /// [DataField, AutoNetworkedField] public List? Shape; /// /// A sprite used to depict this entity specifically when it is displayed in the storage UI. /// [DataField, AutoNetworkedField] public SpriteSpecifier? StoredSprite; /// /// An additional angle offset, in degrees, applied to the visual depiction of the item when displayed in the storage UI. /// [DataField, AutoNetworkedField] public float StoredRotation = 0; /// /// An additional offset, in pixels, applied to the visual depiction of the item when displayed in the storage UI. /// [DataField, AutoNetworkedField] public Vector2i StoredOffset; } /// /// 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; } }