Fix scaling issues in the statue minigame sprites
This commit is contained in:
@@ -300,12 +300,15 @@ namespace Minigames.StatueDressup.Controllers
|
|||||||
RectTransform rectTransform = decoration.GetComponent<RectTransform>();
|
RectTransform rectTransform = decoration.GetComponent<RectTransform>();
|
||||||
SpriteRenderer spriteRenderer = decoration.GetComponent<SpriteRenderer>();
|
SpriteRenderer spriteRenderer = decoration.GetComponent<SpriteRenderer>();
|
||||||
|
|
||||||
|
// Get actual displayed size (accounts for preserveAspect)
|
||||||
|
Vector2 actualSize = decoration.GetActualDisplayedSize();
|
||||||
|
|
||||||
DecorationPlacement placement = new DecorationPlacement
|
DecorationPlacement placement = new DecorationPlacement
|
||||||
{
|
{
|
||||||
decorationId = decoration.Data.DecorationId,
|
decorationId = decoration.Data.DecorationId,
|
||||||
localPosition = decoration.transform.localPosition,
|
localPosition = decoration.transform.localPosition,
|
||||||
localScale = decoration.transform.localScale,
|
localScale = decoration.transform.localScale,
|
||||||
sizeDelta = rectTransform != null ? rectTransform.sizeDelta : Vector2.zero,
|
sizeDelta = actualSize != Vector2.zero ? actualSize : (rectTransform != null ? rectTransform.sizeDelta : Vector2.zero),
|
||||||
rotation = decoration.transform.eulerAngles.z,
|
rotation = decoration.transform.eulerAngles.z,
|
||||||
sortingOrder = spriteRenderer != null ? spriteRenderer.sortingOrder : 0
|
sortingOrder = spriteRenderer != null ? spriteRenderer.sortingOrder : 0
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -43,6 +43,51 @@ namespace Minigames.StatueDressup.DragDrop
|
|||||||
public DecorationData Data => _decorationData;
|
public DecorationData Data => _decorationData;
|
||||||
public bool IsPlacedOnStatue => _isPlacedOnStatue;
|
public bool IsPlacedOnStatue => _isPlacedOnStatue;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the actual displayed size of the sprite after aspect ratio preservation
|
||||||
|
/// This accounts for preserveAspect = true on the Image component
|
||||||
|
/// </summary>
|
||||||
|
public Vector2 GetActualDisplayedSize()
|
||||||
|
{
|
||||||
|
if (decorationImage == null || decorationImage.sprite == null || _rectTransform == null)
|
||||||
|
{
|
||||||
|
return Vector2.zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If not preserving aspect, the displayed size is the same as sizeDelta
|
||||||
|
if (!decorationImage.preserveAspect)
|
||||||
|
{
|
||||||
|
return _rectTransform.sizeDelta;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get sprite dimensions
|
||||||
|
Sprite sprite = decorationImage.sprite;
|
||||||
|
float spriteWidth = sprite.rect.width;
|
||||||
|
float spriteHeight = sprite.rect.height;
|
||||||
|
float spriteAspect = spriteWidth / spriteHeight;
|
||||||
|
|
||||||
|
// Get container dimensions
|
||||||
|
Vector2 containerSize = _rectTransform.sizeDelta;
|
||||||
|
float containerAspect = containerSize.x / containerSize.y;
|
||||||
|
|
||||||
|
// Calculate actual displayed size based on which dimension is limiting
|
||||||
|
Vector2 displayedSize;
|
||||||
|
if (spriteAspect > containerAspect)
|
||||||
|
{
|
||||||
|
// Sprite is wider - width is constrained by container width
|
||||||
|
displayedSize.x = containerSize.x;
|
||||||
|
displayedSize.y = containerSize.x / spriteAspect;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Sprite is taller - height is constrained by container height
|
||||||
|
displayedSize.y = containerSize.y;
|
||||||
|
displayedSize.x = containerSize.y * spriteAspect;
|
||||||
|
}
|
||||||
|
|
||||||
|
return displayedSize;
|
||||||
|
}
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
_rectTransform = GetComponent<RectTransform>();
|
_rectTransform = GetComponent<RectTransform>();
|
||||||
@@ -102,6 +147,7 @@ namespace Minigames.StatueDressup.DragDrop
|
|||||||
if (decorationImage != null && context.Data != null && context.Data.DecorationSprite != null)
|
if (decorationImage != null && context.Data != null && context.Data.DecorationSprite != null)
|
||||||
{
|
{
|
||||||
decorationImage.sprite = context.Data.DecorationSprite;
|
decorationImage.sprite = context.Data.DecorationSprite;
|
||||||
|
decorationImage.preserveAspect = true; // Maintain sprite aspect ratio
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set authored size
|
// Set authored size
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace Minigames.StatueDressup.DragDrop
|
|||||||
if (iconImage != null && data != null && data.DecorationSprite != null)
|
if (iconImage != null && data != null && data.DecorationSprite != null)
|
||||||
{
|
{
|
||||||
iconImage.sprite = data.DecorationSprite;
|
iconImage.sprite = data.DecorationSprite;
|
||||||
|
iconImage.preserveAspect = true; // Maintain sprite aspect ratio within grid cell
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user