diff --git a/CHANGELOG.md b/CHANGELOG.md index bf70b6d..3c9825f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## [0.6.0+1] - 2020-09-30 11:55:07 + +- Fixing a mixing issue with double keyframes. + ## [0.6.0] - 2020-09-28 16:22:43 - Adding a ToC to files indicating included core properties and their backing field types so that they may be skipped by runtimes that do not understand those properties. This will allow newer minor version files to be read by older minor version runtimes. diff --git a/lib/src/rive_core/animation/keyframe_color.dart b/lib/src/rive_core/animation/keyframe_color.dart index 8345368..39a905c 100644 --- a/lib/src/rive_core/animation/keyframe_color.dart +++ b/lib/src/rive_core/animation/keyframe_color.dart @@ -5,20 +5,22 @@ import 'package:rive/src/generated/animation/keyframe_color_base.dart'; import 'package:rive/src/generated/rive_core_context.dart'; export 'package:rive/src/generated/animation/keyframe_color_base.dart'; +void _apply(Core object, int propertyKey, double mix, int value) { + if (mix == 1) { + RiveCoreContext.setColor(object, propertyKey, value); + } else { + var mixedColor = Color.lerp( + Color(RiveCoreContext.getColor(object, propertyKey)), + Color(value), + mix); + RiveCoreContext.setColor(object, propertyKey, mixedColor.value); + } +} + class KeyFrameColor extends KeyFrameColorBase { @override - void apply(Core object, int propertyKey, double mix) { - if (mix == 1) { - RiveCoreContext.setColor(object, propertyKey, value); - } else { - var mixedColor = Color.lerp( - Color(RiveCoreContext.getColor(object, propertyKey)), - Color(value), - mix); - RiveCoreContext.setColor(object, propertyKey, mixedColor.value); - } - } - + void apply(Core object, int propertyKey, double mix) => + _apply(object, propertyKey, mix, value); @override void onAdded() { super.onAdded(); @@ -32,16 +34,8 @@ class KeyFrameColor extends KeyFrameColorBase { if (interpolator != null) { f = interpolator.transform(f); } - var interpolatedValue = Color.lerp(Color(value), Color(nextFrame.value), f); - if (mix == 1) { - RiveCoreContext.setColor(object, propertyKey, interpolatedValue.value); - } else { - var mixedColor = Color.lerp( - Color(RiveCoreContext.getColor(object, propertyKey)), - interpolatedValue, - mix); - RiveCoreContext.setColor(object, propertyKey, mixedColor.value); - } + _apply(object, propertyKey, mix, + Color.lerp(Color(value), Color(nextFrame.value), f).value); } @override diff --git a/lib/src/rive_core/animation/keyframe_double.dart b/lib/src/rive_core/animation/keyframe_double.dart index 5ec7611..0e7dac3 100644 --- a/lib/src/rive_core/animation/keyframe_double.dart +++ b/lib/src/rive_core/animation/keyframe_double.dart @@ -4,12 +4,21 @@ import 'package:rive/src/generated/animation/keyframe_double_base.dart'; import 'package:rive/src/generated/rive_core_context.dart'; export 'package:rive/src/generated/animation/keyframe_double_base.dart'; +void _apply( + Core object, int propertyKey, double mix, double value) { + if (mix == 1) { + RiveCoreContext.setDouble(object, propertyKey, value); + } else { + var mixi = 1.0 - mix; + RiveCoreContext.setDouble(object, propertyKey, + RiveCoreContext.getDouble(object, propertyKey) * mixi + value * mix); + } +} + class KeyFrameDouble extends KeyFrameDoubleBase { @override - void apply(Core object, int propertyKey, double mix) { - RiveCoreContext.setDouble(object, propertyKey, value * mix); - } - + void apply(Core object, int propertyKey, double mix) => + _apply(object, propertyKey, mix, value); @override void onAdded() { super.onAdded(); @@ -23,17 +32,7 @@ class KeyFrameDouble extends KeyFrameDoubleBase { if (interpolator != null) { f = interpolator.transform(f); } - var interpolatedValue = value + (nextFrame.value - value) * f; - if (mix == 1) { - RiveCoreContext.setDouble(object, propertyKey, interpolatedValue); - } else { - var mixi = 1.0 - mix; - RiveCoreContext.setDouble( - object, - propertyKey, - RiveCoreContext.getDouble(object, propertyKey) * mixi + - interpolatedValue * mix); - } + _apply(object, propertyKey, mix, value + (nextFrame.value - value) * f); } @override diff --git a/lib/src/rive_core/component.dart b/lib/src/rive_core/component.dart index 1229cd1..f8240d9 100644 --- a/lib/src/rive_core/component.dart +++ b/lib/src/rive_core/component.dart @@ -43,6 +43,7 @@ abstract class Component extends ComponentBase _artboard?.addComponent(this); } + @mustCallSuper void visitAncestor(Component ancestor) {} bool resolveArtboard() { int sanity = maxTreeDepth; diff --git a/lib/src/rive_core/math/aabb.dart b/lib/src/rive_core/math/aabb.dart index 60586c7..8d0698a 100644 --- a/lib/src/rive_core/math/aabb.dart +++ b/lib/src/rive_core/math/aabb.dart @@ -44,6 +44,7 @@ class AABB { -double.maxFinite ]); } + double get area => width * height; bool get isEmpty { return _buffer[0] == double.maxFinite && _buffer[1] == double.maxFinite && @@ -162,6 +163,12 @@ class AABB { return true; } + static bool testOverlapPoint(AABB a, Vec2D b) { + var x = b[0]; + var y = b[1]; + return x >= a[0] && x <= a[2] && y >= a[1] && y <= a[3]; + } + AABB translate(Vec2D vec) => AABB.fromValues(_buffer[0] + vec[0], _buffer[1] + vec[1], _buffer[2] + vec[0], _buffer[3] + vec[1]); @override diff --git a/lib/src/rive_core/shapes/path.dart b/lib/src/rive_core/shapes/path.dart index 57df4bb..9be6849 100644 --- a/lib/src/rive_core/shapes/path.dart +++ b/lib/src/rive_core/shapes/path.dart @@ -37,6 +37,7 @@ abstract class Path extends PathBase { @override void visitAncestor(Component ancestor) { + super.visitAncestor(ancestor); if (_shape == null && ancestor is Shape) { _changeShape(ancestor); } diff --git a/lib/src/rive_core/shapes/path_composer.dart b/lib/src/rive_core/shapes/path_composer.dart index 5d8a24d..d775468 100644 --- a/lib/src/rive_core/shapes/path_composer.dart +++ b/lib/src/rive_core/shapes/path_composer.dart @@ -80,6 +80,7 @@ class PathComposer extends PathComposerBase { @override void visitAncestor(Component ancestor) { + super.visitAncestor(ancestor); if (_shape == null && ancestor is Shape) { _changeShape(ancestor); } diff --git a/pubspec.yaml b/pubspec.yaml index 3c72cf2..9a62e07 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: rive description: Rive 2 Flutter Runtime -version: 0.6.0 +version: 0.6.0+1 repository: https://github.com/rive-app/rive-flutter homepage: https://rive.app