]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Toggleable items shape change on toggle state (#25392)
authorMilenVolf <63782763+MilenVolf@users.noreply.github.com>
Sun, 25 Feb 2024 13:20:28 +0000 (16:20 +0300)
committerGitHub <noreply@github.com>
Sun, 25 Feb 2024 13:20:28 +0000 (00:20 +1100)
* Toggleable items now can change their shape depends on toggle state

* Update Content.Shared/Item/SharedItemSystem.cs

---------

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Content.Shared/Item/ItemToggle/Components/ItemToggleSizeComponent.cs
Content.Shared/Item/SharedItemSystem.cs

index 353f3d6fd55b4b797425af16b64bf7e93c5b2f3a..b7b47a073223c49d23bca58f16214ca89880d75a 100644 (file)
@@ -18,9 +18,21 @@ public sealed partial class ItemToggleSizeComponent : Component
     [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
     public ProtoId<ItemSizePrototype>? ActivatedSize = null;
 
+    /// <summary>
+    ///     Item's shape when activated
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField]
+    public List<Box2i>? ActivatedShape = null;
+
     /// <summary>
     ///     Item's size when deactivated. If none is mentioned, it uses the item's default size instead.
     /// </summary>
     [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
     public ProtoId<ItemSizePrototype>? DeactivatedSize = null;
+
+    /// <summary>
+    ///     Item's shape when deactivated. If none is mentioned, it uses the item's default shape instead.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite), DataField]
+    public List<Box2i>? DeactivatedShape = null;
 }
index c6a86c5011fd59fdeda2197561ac0df6c9d1715f..29e82f8adebac565709f9ea2b8cd9008e8958545 100644 (file)
@@ -46,6 +46,15 @@ public abstract class SharedItemSystem : EntitySystem
         Dirty(uid, component);
     }
 
+    public void SetShape(EntityUid uid, List<Box2i>? 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<Box2i>(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<ItemSizePrototype>) itemToggleSize.DeactivatedSize, item);