Skip to content

Commit ce7272f

Browse files
committed
Fix cards stretches if texture is not rectangular
1 parent 229e363 commit ce7272f

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

app/lib/board/cell.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,10 +276,12 @@ class GameCell extends PositionComponent
276276
}
277277
if (top != null) {
278278
final component = _cardComponent ??= SpriteComponent(
279-
size: size,
280279
paint: paint,
281280
priority: 1,
282281
);
282+
component
283+
..anchor = Anchor.center
284+
..position = size / 2;
283285
component.sprite =
284286
await state.assetManager.loadFigureSprite(
285287
top.asset,
@@ -288,6 +290,13 @@ class GameCell extends PositionComponent
288290
: top.variation,
289291
) ??
290292
game.blankSprite;
293+
final sprite = component.sprite;
294+
if (sprite != null) {
295+
final scale = (size.x / sprite.srcSize.x) < (size.y / sprite.srcSize.y)
296+
? (size.x / sprite.srcSize.x)
297+
: (size.y / sprite.srcSize.y);
298+
component.size = sprite.srcSize * scale;
299+
}
291300
if (!component.isMounted) {
292301
add(component);
293302
}

app/lib/board/hand/item.dart

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ abstract class HandItem<T> extends PositionComponent
155155
),
156156
);
157157
_sprite.sprite = await loadIcon(state) ?? game.blankSprite;
158+
_updateSpriteSize();
158159
}
159160

160161
TextPaint _buildPaint(ClientWorldState state) => TextPaint(
@@ -179,17 +180,26 @@ abstract class HandItem<T> extends PositionComponent
179180
}
180181

181182
void _updateSpriteSize() {
182-
final spriteSize = _sprite.sprite?.srcSize ?? Vector2.zero();
183-
var spriteHeight = height - labelHeight;
184-
var spriteWidth = spriteSize.x * (spriteHeight / spriteSize.y);
185-
var yOffset = 0.0;
186-
if (spriteWidth > width) {
187-
spriteWidth = width;
188-
spriteHeight = spriteSize.y * (spriteWidth / spriteSize.x);
189-
yOffset = (height - spriteHeight - labelHeight) / 2;
190-
}
191-
_sprite.size = Vector2(spriteWidth, spriteHeight);
192-
_sprite.y = labelHeight + yOffset;
183+
final sprite = _sprite.sprite;
184+
if (sprite == null) return;
185+
final spriteSize = sprite.srcSize;
186+
if (spriteSize.x == 0 || spriteSize.y == 0) return;
187+
188+
final availableWidth = width;
189+
final availableHeight = height - labelHeight;
190+
191+
final scaleX = availableWidth / spriteSize.x;
192+
final scaleY = availableHeight / spriteSize.y;
193+
final scale = scaleX < scaleY ? scaleX : scaleY;
194+
195+
final newWidth = spriteSize.x * scale;
196+
final newHeight = spriteSize.y * scale;
197+
198+
_sprite.size = Vector2(newWidth, newHeight);
199+
_sprite.position = Vector2(
200+
(availableWidth - newWidth) / 2,
201+
labelHeight + (availableHeight - newHeight) / 2,
202+
);
193203
}
194204

195205
HandItemDragCursorHitbox? _cursorHitbox;

metadata/en-US/changelogs/10.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* Fix released server archives have no core pack
1212
* Fix design name
1313
* Fix kick command usage
14+
* Fix cards stretches if texture is not rectangular
1415
* Improve message author display
1516
* Rebuild event system
1617

0 commit comments

Comments
 (0)