]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
storedOffset bugfix (#33606)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Thu, 17 Apr 2025 00:42:22 +0000 (03:42 +0300)
committerGitHub <noreply@github.com>
Thu, 17 Apr 2025 00:42:22 +0000 (20:42 -0400)
* Update ItemGridPiece.cs

* Update SharedItemSystem.cs

* Update ItemGridPiece.cs

* EmoGarbage Review

---------

Co-authored-by: EmoGarbage404 <retron404@gmail.com>
Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs
Content.Shared/Item/SharedItemSystem.cs

index f4c4158b5ceddc9388985fa0e45b04960b8a3520..92035ba8d91532b103fa5c9e4f703507d692868f 100644 (file)
@@ -163,14 +163,16 @@ public sealed class ItemGridPiece : Control, IEntityControl
         }
 
         // typically you'd divide by two, but since the textures are half a tile, this is done implicitly
-        var iconPosition = new Vector2((boundingGrid.Width + 1) * size.X + itemComponent.StoredOffset.X * 2,
-            (boundingGrid.Height + 1) * size.Y + itemComponent.StoredOffset.Y * 2);
+        var iconOffset = Location.Rotation.RotateVec(itemComponent.StoredOffset) * 2 * UIScale;
+        var iconPosition = new Vector2(
+            (boundingGrid.Width + 1) * size.X + iconOffset.X,
+            (boundingGrid.Height + 1) * size.Y + iconOffset.Y);
         var iconRotation = Location.Rotation + Angle.FromDegrees(itemComponent.StoredRotation);
 
         if (itemComponent.StoredSprite is { } storageSprite)
         {
             var scale = 2 * UIScale;
-            var offset = (((Box2) boundingGrid).Size - Vector2.One) * size;
+            var offset = (((Box2) boundingGrid).Size - Vector2.One) * size + iconOffset;
             var sprite = _entityManager.System<SpriteSystem>().Frame0(storageSprite);
 
             var spriteBox = new Box2Rotated(new Box2(0f, sprite.Height * scale, sprite.Width * scale, 0f), -iconRotation, Vector2.Zero);
index a058cb865884055641c3bfeb926a95ad41239c4a..8ba26fd3495ebfd288b9d16682a1b7c455cc638a 100644 (file)
@@ -55,6 +55,20 @@ public abstract class SharedItemSystem : EntitySystem
         Dirty(uid, component);
     }
 
+    /// <summary>
+    /// Sets the offset used for the item's sprite inside the storage UI.
+    /// Dirties.
+    /// </summary>
+    [PublicAPI]
+    public void SetStoredOffset(EntityUid uid, Vector2i newOffset, ItemComponent? component = null)
+    {
+        if (!Resolve(uid, ref component, false))
+            return;
+
+        component.StoredOffset = newOffset;
+        Dirty(uid, component);
+    }
+
     public void SetHeldPrefix(EntityUid uid, string? heldPrefix, bool force = false, ItemComponent? component = null)
     {
         if (!Resolve(uid, ref component, false))