Line data Source code
1 : import 'dart:ui'; 2 : 3 : import 'package:meta/meta.dart'; 4 : 5 : import '../extensions/image.dart'; 6 : import '../extensions/vector2.dart'; 7 : import '../sprite.dart'; 8 : import 'component.dart'; 9 : import 'mixins/has_paint.dart'; 10 : import 'position_component.dart'; 11 : 12 : export '../sprite.dart'; 13 : 14 : /// A [PositionComponent] that renders a single [Sprite] at the designated 15 : /// position, scaled to have the designated size and rotated to the specified 16 : /// angle. 17 : /// 18 : /// This a commonly used subclass of [Component]. 19 : class SpriteComponent extends PositionComponent with HasPaint { 20 : /// The [sprite] to be rendered by this component. 21 : Sprite? sprite; 22 : 23 : /// Creates a component with an empty sprite which can be set later 24 3 : SpriteComponent({ 25 : Vector2? position, 26 : Vector2? size, 27 : int? priority, 28 : this.sprite, 29 : Paint? paint, 30 3 : }) : super(position: position, size: size, priority: priority) { 31 : if (paint != null) { 32 0 : this.paint = paint; 33 : } 34 : } 35 : 36 1 : factory SpriteComponent.fromImage( 37 : Image image, { 38 : Vector2? position, 39 : Vector2? size, 40 : Vector2? srcPosition, 41 : Vector2? srcSize, 42 : }) => 43 1 : SpriteComponent( 44 : position: position, 45 1 : size: size ?? srcSize ?? image.size, 46 1 : sprite: Sprite( 47 : image, 48 : srcPosition: srcPosition, 49 : srcSize: srcSize, 50 : ), 51 : ); 52 : 53 0 : @mustCallSuper 54 : @override 55 : void render(Canvas canvas) { 56 0 : super.render(canvas); 57 0 : sprite?.render( 58 : canvas, 59 0 : size: size, 60 0 : overridePaint: paint, 61 : ); 62 : } 63 : }