Fix scaling issues in the statue minigame sprites
This commit is contained in:
@@ -43,6 +43,51 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
public DecorationData Data => _decorationData;
|
||||
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()
|
||||
{
|
||||
_rectTransform = GetComponent<RectTransform>();
|
||||
@@ -102,6 +147,7 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
if (decorationImage != null && context.Data != null && context.Data.DecorationSprite != null)
|
||||
{
|
||||
decorationImage.sprite = context.Data.DecorationSprite;
|
||||
decorationImage.preserveAspect = true; // Maintain sprite aspect ratio
|
||||
}
|
||||
|
||||
// Set authored size
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace Minigames.StatueDressup.DragDrop
|
||||
if (iconImage != null && data != null && data.DecorationSprite != null)
|
||||
{
|
||||
iconImage.sprite = data.DecorationSprite;
|
||||
iconImage.preserveAspect = true; // Maintain sprite aspect ratio within grid cell
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user