diff --git a/lib/src/asset_list.dart b/lib/src/asset_list.dart new file mode 100644 index 0000000..d442088 --- /dev/null +++ b/lib/src/asset_list.dart @@ -0,0 +1,20 @@ +import 'dart:collection'; +import 'package:rive/src/rive_core/asset.dart'; + +// List of assets used by the backboard. +class AssetList extends ListBase<Asset> { + final List<Asset?> _values = []; + List<Asset> get values => _values.cast<Asset>(); + + @override + int get length => _values.length; + + @override + set length(int value) => _values.length = value; + + @override + Asset operator [](int index) => _values[index]!; + + @override + void operator []=(int index, Asset value) => _values[index] = value; +} diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index efa7fd8..a12d881 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:rive/src/rive_core/runtime/exceptions/rive_format_error_exception.dart'; export 'package:rive/src/animation_list.dart'; +export 'package:rive/src/asset_list.dart'; export 'package:rive/src/blend_animations.dart'; export 'package:rive/src/container_children.dart'; export 'package:rive/src/core/importers/artboard_importer.dart'; diff --git a/lib/src/generated/asset_base.dart b/lib/src/generated/asset_base.dart new file mode 100644 index 0000000..b8e34d5 --- /dev/null +++ b/lib/src/generated/asset_base.dart @@ -0,0 +1,12 @@ +/// Core automatically generated lib/src/generated/asset_base.dart. +/// Do not modify manually. + +import 'package:rive/src/core/core.dart'; + +abstract class AssetBase<T extends CoreContext> extends Core<T> { + static const int typeKey = 99; + @override + int get coreType => AssetBase.typeKey; + @override + Set<int> get coreTypes => {AssetBase.typeKey}; +} diff --git a/lib/src/generated/rive_core_context.dart b/lib/src/generated/rive_core_context.dart index 1989b9a..b15f918 100644 --- a/lib/src/generated/rive_core_context.dart +++ b/lib/src/generated/rive_core_context.dart @@ -42,6 +42,7 @@ import 'package:rive/src/generated/animation/transition_number_condition_base.da import 'package:rive/src/generated/animation/transition_trigger_condition_base.dart'; import 'package:rive/src/generated/animation/transition_value_condition_base.dart'; import 'package:rive/src/generated/artboard_base.dart'; +import 'package:rive/src/generated/asset_base.dart'; import 'package:rive/src/generated/backboard_base.dart'; import 'package:rive/src/generated/bones/bone_base.dart'; import 'package:rive/src/generated/bones/cubic_weight_base.dart'; @@ -123,6 +124,7 @@ import 'package:rive/src/rive_core/animation/transition_bool_condition.dart'; import 'package:rive/src/rive_core/animation/transition_number_condition.dart'; import 'package:rive/src/rive_core/animation/transition_trigger_condition.dart'; import 'package:rive/src/rive_core/artboard.dart'; +import 'package:rive/src/rive_core/asset.dart'; import 'package:rive/src/rive_core/backboard.dart'; import 'package:rive/src/rive_core/bones/bone.dart'; import 'package:rive/src/rive_core/bones/cubic_weight.dart'; @@ -298,6 +300,8 @@ class RiveCoreContext { return Skin(); case TendonBase.typeKey: return Tendon(); + case AssetBase.typeKey: + return Asset(); default: return null; } diff --git a/lib/src/rive_core/asset.dart b/lib/src/rive_core/asset.dart new file mode 100644 index 0000000..56cc3c3 --- /dev/null +++ b/lib/src/rive_core/asset.dart @@ -0,0 +1,25 @@ +import 'package:rive/src/core/core.dart'; +import 'package:rive/src/generated/asset_base.dart'; +import 'package:rive/src/rive_core/backboard.dart'; + +class Asset extends AssetBase { + Backboard? _backboard; + Backboard? get backboard => _backboard; + set backboard(Backboard? value) { + if (_backboard == value) { + return; + } + _backboard = value; + } + + @override + void onAdded() {} + + @override + void onAddedDirty() {} + + @override + bool import(ImportStack stack) { + return super.import(stack); + } +} diff --git a/lib/src/rive_core/backboard.dart b/lib/src/rive_core/backboard.dart index 5b3607a..a90f220 100644 --- a/lib/src/rive_core/backboard.dart +++ b/lib/src/rive_core/backboard.dart @@ -1,9 +1,30 @@ +import 'package:rive/src/core/core.dart'; import 'package:rive/src/generated/backboard_base.dart'; +import 'package:rive/src/rive_core/asset.dart'; + export 'package:rive/src/generated/backboard_base.dart'; class Backboard extends BackboardBase { static final Backboard unknown = Backboard(); + final AssetList _assets = AssetList(); + AssetList get assets => _assets; + + bool internalAddAsset(Asset asset) { + if (_assets.contains(asset)) { + return false; + } + _assets.add(asset); + + return true; + } + + bool internalRemoveAsset(Asset asset) { + bool removed = _assets.remove(asset); + + return removed; + } + @override void onAdded() {} diff --git a/lib/src/rive_core/nested_animation.dart b/lib/src/rive_core/nested_animation.dart index cca682d..417d9bd 100644 --- a/lib/src/rive_core/nested_animation.dart +++ b/lib/src/rive_core/nested_animation.dart @@ -16,18 +16,6 @@ abstract class NestedAnimation<T extends Animation> bool get isEnabled; void advance(double elapsedSeconds, MountedArtboard mountedArtboard); - // @override - // bool import(ImportStack stack) { - // var backboardImporter = - // stack.latest<BackboardImporter>(BackboardBase.typeKey); - // if (backboardImporter == null) { - // return false; - // } - // backboardImporter.addNestedArtboard(this); - - // return super.import(stack); - // } - @override void update(int dirt) {} } diff --git a/lib/src/rive_core/nested_artboard.dart b/lib/src/rive_core/nested_artboard.dart index 4255d2c..307764e 100644 --- a/lib/src/rive_core/nested_artboard.dart +++ b/lib/src/rive_core/nested_artboard.dart @@ -22,6 +22,7 @@ abstract class MountedArtboard { AABB get bounds; double get renderOpacity; set renderOpacity(double value); + void advance(double seconds); } class NestedArtboard extends NestedArtboardBase { @@ -83,6 +84,7 @@ class NestedArtboard extends NestedArtboardBase { animation.advance(elapsedSeconds, mountedArtboard!); } } + mountedArtboard!.advance(elapsedSeconds); } @override diff --git a/lib/src/rive_core/state_machine_controller.dart b/lib/src/rive_core/state_machine_controller.dart index 2cd63b4..dfaa82d 100644 --- a/lib/src/rive_core/state_machine_controller.dart +++ b/lib/src/rive_core/state_machine_controller.dart @@ -220,7 +220,6 @@ class StateMachineController extends RiveAnimationController<CoreContext> { void _onStateChange(LayerState layerState) => SchedulerBinding.instance?.addPostFrameCallback((_) { String stateName = 'unknown'; - print('Layer state type ${layerState.runtimeType}'); if (layerState is AnimationState && layerState.animation != null) { stateName = layerState.animation!.name; } else if (layerState is EntryState) { diff --git a/lib/src/runtime_nested_artboard.dart b/lib/src/runtime_nested_artboard.dart index f469624..7a49682 100644 --- a/lib/src/runtime_nested_artboard.dart +++ b/lib/src/runtime_nested_artboard.dart @@ -116,4 +116,8 @@ class RuntimeMountedArtboard extends MountedArtboard { set renderOpacity(double value) { artboardInstance.opacity = value; } + + @override + void advance(double seconds) => + artboardInstance.advance(seconds, nested: true); }