diff --git a/Content.Shared/Item/ItemToggle/Components/ItemToggleSizeComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemToggleSizeComponent.cs index 353f3d6fd5..b7b47a0732 100644 --- a/Content.Shared/Item/ItemToggle/Components/ItemToggleSizeComponent.cs +++ b/Content.Shared/Item/ItemToggle/Components/ItemToggleSizeComponent.cs @@ -18,9 +18,21 @@ public sealed partial class ItemToggleSizeComponent : Component [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public ProtoId? ActivatedSize = null; + /// + /// Item's shape when activated + /// + [ViewVariables(VVAccess.ReadWrite), DataField] + public List? ActivatedShape = null; + /// /// Item's size when deactivated. If none is mentioned, it uses the item's default size instead. /// [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] public ProtoId? DeactivatedSize = null; + + /// + /// Item's shape when deactivated. If none is mentioned, it uses the item's default shape instead. + /// + [ViewVariables(VVAccess.ReadWrite), DataField] + public List? DeactivatedShape = null; } diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index c6a86c5011..29e82f8ade 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -46,6 +46,15 @@ public abstract class SharedItemSystem : EntitySystem Dirty(uid, component); } + public void SetShape(EntityUid uid, List? shape, ItemComponent? component = null) + { + if (!Resolve(uid, ref component, false)) + return; + + component.Shape = shape; + Dirty(uid, component); + } + public void SetHeldPrefix(EntityUid uid, string? heldPrefix, bool force = false, ItemComponent? component = null) { if (!Resolve(uid, ref component, false)) @@ -209,6 +218,13 @@ public abstract class SharedItemSystem : EntitySystem if (args.Activated) { + if (itemToggleSize.ActivatedShape != null) + { + // Set the deactivated shape to the default item's shape before it gets changed. + itemToggleSize.DeactivatedShape ??= new List(GetItemShape(item)); + SetShape(uid, itemToggleSize.ActivatedShape, item); + } + if (itemToggleSize.ActivatedSize != null) { // Set the deactivated size to the default item's size before it gets changed. @@ -218,6 +234,11 @@ public abstract class SharedItemSystem : EntitySystem } else { + if (itemToggleSize.DeactivatedShape != null) + { + SetShape(uid, itemToggleSize.DeactivatedShape, item); + } + if (itemToggleSize.DeactivatedSize != null) { SetSize(uid, (ProtoId) itemToggleSize.DeactivatedSize, item);