Files
flame/lib/components/sprite_animation_component.dart
2020-12-09 10:10:12 +00:00

64 lines
1.7 KiB
Dart

import 'dart:ui';
import 'package:flutter/foundation.dart';
import '../extensions/vector2.dart';
import '../sprite_animation.dart';
import 'position_component.dart';
class SpriteAnimationComponent extends PositionComponent {
SpriteAnimation animation;
Paint overridePaint;
bool removeOnFinish = false;
/// Creates an [SpriteAnimationComponent] from an [animation] and a [size]
///
/// Optionally [removeOnFinish] can be set to true to have this component be auto removed from the [BaseGame] when the animation is finished.
SpriteAnimationComponent(
Vector2 size,
this.animation, {
this.removeOnFinish = false,
}) : assert(animation != null) {
super.size.setFrom(size);
}
/// Creates a component with an empty animation which can be set later
SpriteAnimationComponent.empty();
/// Creates a SpriteAnimationComponent from a [size], an [image] and [data], check [SpriteAnimationData] for more info on the available options.
///
/// Optionally [removeOnFinish] can be set to true to have this component be auto removed from the [BaseGame] when the animation is finished.
SpriteAnimationComponent.fromFrameData(
Vector2 size,
Image image,
SpriteAnimationData data, {
this.removeOnFinish = false,
}) {
super.size.setFrom(size);
animation = SpriteAnimation.fromFrameData(
image,
data,
);
}
@override
bool get shouldRemove => removeOnFinish && (animation?.isLastFrame ?? false);
@mustCallSuper
@override
void render(Canvas canvas) {
super.render(canvas);
animation?.getSprite()?.render(
canvas,
size: size,
overridePaint: overridePaint,
);
}
@override
void update(double t) {
super.update(t);
animation?.update(t);
}
}