}
// 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);
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))