Line data Source code
1 : import 'dart:ui'; 2 : 3 : import 'package:flame/sprite.dart'; 4 : import 'package:mini_sprite/mini_sprite.dart'; 5 : 6 : /// Adds Flame methods to [MiniSprite]. 7 : extension FlameMiniSpriteX on MiniSprite { 8 : /// Returns a [Sprite] representation of the [MiniSprite]. 9 1 : Future<Sprite> toSprite({ 10 : required double pixelSize, 11 : required Color color, 12 : Color? blankColor, 13 : }) async { 14 1 : final recorder = PictureRecorder(); 15 1 : final canvas = Canvas(recorder); 16 : 17 2 : final paint = Paint()..color = color; 18 : final blankPaint = 19 2 : blankColor != null ? (Paint()..color = blankColor) : null; 20 : 21 4 : for (var y = 0; y < pixels.length; y++) { 22 5 : for (var x = 0; x < pixels[y].length; x++) { 23 1 : final rect = Rect.fromLTWH( 24 1 : x * pixelSize, 25 1 : y * pixelSize, 26 : pixelSize, 27 : pixelSize, 28 : ); 29 3 : if (pixels[y][x]) { 30 1 : canvas.drawRect(rect, paint); 31 : } else if (blankPaint != null) { 32 1 : canvas.drawRect(rect, blankPaint); 33 : } 34 : } 35 : } 36 : 37 3 : final image = await recorder.endRecording().toImage( 38 4 : pixels.length * pixelSize.toInt(), 39 5 : pixels[0].length * pixelSize.toInt(), 40 : ); 41 : 42 1 : return Sprite(image); 43 : } 44 : }