SimpleAnimation exposes mix

This commit is contained in:
Matt Sullivan
2020-12-11 13:10:21 -08:00
parent 931bb4ecdb
commit 66305cb511
2 changed files with 52 additions and 2 deletions

View File

@ -7,9 +7,16 @@ import 'package:rive/src/runtime_artboard.dart';
/// by an artist. All playback parameters (looping, speed, keyframes) are artist /// by an artist. All playback parameters (looping, speed, keyframes) are artist
/// defined in the Rive editor. /// defined in the Rive editor.
class SimpleAnimation extends RiveAnimationController<RuntimeArtboard> { class SimpleAnimation extends RiveAnimationController<RuntimeArtboard> {
SimpleAnimation(this.animationName, {double mix})
: _mix = mix?.clamp(0, 1)?.toDouble() ?? 1.0;
LinearAnimationInstance _instance; LinearAnimationInstance _instance;
final String animationName; final String animationName;
SimpleAnimation(this.animationName);
// Controls the level of mix for the animation, clamped between 0 and 1
double _mix;
double get mix => _mix;
set mix(double value) => _mix = value?.clamp(0, 1)?.toDouble() ?? 1;
LinearAnimationInstance get instance => _instance; LinearAnimationInstance get instance => _instance;
@ -29,7 +36,7 @@ class SimpleAnimation extends RiveAnimationController<RuntimeArtboard> {
@override @override
void apply(RuntimeArtboard artboard, double elapsedSeconds) { void apply(RuntimeArtboard artboard, double elapsedSeconds) {
_instance.animation.apply(_instance.time, coreContext: artboard); _instance.animation.apply(_instance.time, coreContext: artboard, mix: mix);
if (!_instance.advance(elapsedSeconds)) { if (!_instance.advance(elapsedSeconds)) {
isActive = false; isActive = false;
} }

View File

@ -0,0 +1,43 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter_test/flutter_test.dart';
import 'package:rive/rive.dart';
void main() {
ByteData riveData;
void loadTestAssets() {
riveData = ByteData.sublistView(
File('assets/animations_0_6_2.riv').readAsBytesSync(),
);
}
setUp(loadTestAssets);
test('SimpleAnimation exposes mix', () {
// Load a Rive file
final riveFile = RiveFile();
expect(riveFile.import(riveData), true);
expect(riveFile.mainArtboard.name, 'My Artboard');
final firstController =
SimpleAnimation(riveFile.mainArtboard.animations.first.name);
expect(firstController.animationName, 'First');
expect(firstController.mix, 1.0);
firstController.mix = 0.5;
expect(firstController.mix, 0.5);
firstController.mix = 2.5;
expect(firstController.mix, 1.0);
firstController.mix = -1;
expect(firstController.mix, 0.0);
final secondController =
SimpleAnimation(riveFile.mainArtboard.animations.last.name, mix: 0.8);
expect(secondController.animationName, 'Second');
expect(secondController.mix, 0.8);
});
}