diff --git a/doc/examples/animation_widget/lib/main.dart b/doc/examples/animation_widget/lib/main.dart index 75b74dbf4..82182360a 100644 --- a/doc/examples/animation_widget/lib/main.dart +++ b/doc/examples/animation_widget/lib/main.dart @@ -15,7 +15,7 @@ SpriteAnimation _animation; void main() async { WidgetsFlutterBinding.ensureInitialized(); final image = await Flame.images.load('minotaur.png'); - _sprite = Sprite(image, size: Vector2.all(96)); + _sprite = Sprite(image, srcSize: Vector2.all(96)); final _animationSpriteSheet = SpriteSheet( image: image, diff --git a/doc/examples/isometric/lib/main.dart b/doc/examples/isometric/lib/main.dart index 10b47c48e..1a3fbc35a 100644 --- a/doc/examples/isometric/lib/main.dart +++ b/doc/examples/isometric/lib/main.dart @@ -25,7 +25,7 @@ class Selector extends SpriteComponent { Selector(double s, Image image) : super.fromSprite( - Vector2.all(s), Sprite(image, size: Vector2.all(32.0))); + Vector2.all(s), Sprite(image, srcSize: Vector2.all(32.0))); @override void render(Canvas canvas) { diff --git a/lib/components/isometric_tile_map_component.dart b/lib/components/isometric_tile_map_component.dart index 3f8eee357..f95f6758d 100644 --- a/lib/components/isometric_tile_map_component.dart +++ b/lib/components/isometric_tile_map_component.dart @@ -46,7 +46,7 @@ class IsometricTileset { final j = tileId ~/ columns; final s = size.toDouble(); return Sprite(tileset, - srcPosition: Vector2(s * i, s * j), size: Vector2.all(s)); + srcPosition: Vector2(s * i, s * j), srcSize: Vector2.all(s)); } } diff --git a/lib/sprite.dart b/lib/sprite.dart index 171686f1c..9bcc84335 100644 --- a/lib/sprite.dart +++ b/lib/sprite.dart @@ -12,9 +12,9 @@ class Sprite { Sprite( this.image, { Vector2 srcPosition, - Vector2 size, + Vector2 srcSize, }) : assert(image != null, "image can't be null") { - size ??= Vector2(image.width.toDouble(), image.height.toDouble()); + this.srcSize = srcSize; this.srcPosition = srcPosition; } @@ -26,7 +26,12 @@ class Sprite { Vector2 get srcSize => Vector2(src.width, src.height); - Vector2 get srcPosition => src.topLeft.toVector2(); + set srcSize(Vector2 size) { + size ??= Vector2(image.width.toDouble(), image.height.toDouble()); + src = (srcPosition ?? Vector2.zero()).toPositionedRect(size); + } + + Vector2 get srcPosition => (src?.topLeft ?? Offset.zero).toVector2(); set srcPosition(Vector2 position) { src = (position ?? Vector2.zero()).toPositionedRect(srcSize); @@ -43,8 +48,12 @@ class Sprite { double scale = 1.0, Paint overridePaint, }) { - renderPosition(canvas, p, - size: srcSize * scale, overridePaint: overridePaint); + renderPosition( + canvas, + p, + size: srcSize * scale, + overridePaint: overridePaint, + ); } void renderPosition( @@ -53,7 +62,7 @@ class Sprite { Vector2 size, Paint overridePaint, }) { - size ??= this.srcSize; + size ??= srcSize; renderRect(canvas, p.toPositionedRect(size), overridePaint: overridePaint); } @@ -62,7 +71,7 @@ class Sprite { Vector2 size, Paint overridePaint, }) { - size ??= this.srcSize; + size ??= srcSize; renderRect(canvas, size.toRect(), overridePaint: overridePaint); } @@ -76,7 +85,7 @@ class Sprite { Vector2 size, Paint overridePaint, }) { - size ??= this.srcSize; + size ??= srcSize; renderRect( canvas, (p - size / 2).toPositionedRect(size), diff --git a/lib/sprite_animation.dart b/lib/sprite_animation.dart index 22be1a38f..ccfc6d832 100644 --- a/lib/sprite_animation.dart +++ b/lib/sprite_animation.dart @@ -109,7 +109,7 @@ class SpriteAnimation { final Sprite sprite = Sprite( image, srcPosition: position, - size: textureSize, + srcSize: textureSize, ); frames[i] = SpriteAnimationFrame(sprite, stepTimes[i]); } @@ -138,7 +138,7 @@ class SpriteAnimation { final Sprite sprite = Sprite( image, srcPosition: Vector2Extension.fromInts(x, y), - size: Vector2Extension.fromInts(width, height), + srcSize: Vector2Extension.fromInts(width, height), ); return SpriteAnimationFrame(sprite, stepTime); diff --git a/lib/spritesheet.dart b/lib/spritesheet.dart index 7dab3703f..ead49b04b 100644 --- a/lib/spritesheet.dart +++ b/lib/spritesheet.dart @@ -42,7 +42,7 @@ class SpriteSheet { return Sprite( image, srcPosition: Vector2(x.toDouble(), y.toDouble())..multiply(size), - size: size, + srcSize: size, ); } diff --git a/lib/widgets/nine_tile_box.dart b/lib/widgets/nine_tile_box.dart index a7544f502..a2c173930 100644 --- a/lib/widgets/nine_tile_box.dart +++ b/lib/widgets/nine_tile_box.dart @@ -19,7 +19,7 @@ class _Painter extends widgets.CustomPainter { }); Sprite _getSpriteTile(double x, double y) => - Sprite(image, srcPosition: Vector2(x, y), size: Vector2.all(tileSize)); + Sprite(image, srcPosition: Vector2(x, y), srcSize: Vector2.all(tileSize)); @override void paint(Canvas canvas, Size size) {