mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-26 01:18:13 +08:00
Fixing import order issue with state machines.
This commit is contained in:
@ -1,7 +1,6 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:rive/src/rive_core/runtime/exceptions/rive_format_error_exception.dart';
|
||||
|
||||
export 'package:rive/src/animation_list.dart';
|
||||
export 'package:rive/src/state_machine_components.dart';
|
||||
export 'package:rive/src/state_transition_conditions.dart';
|
||||
@ -61,7 +60,40 @@ abstract class CoreContext {
|
||||
|
||||
// ignore: one_member_abstracts
|
||||
abstract class ImportStackObject {
|
||||
bool resolve();
|
||||
final _resolveBefore = <ImportStackObject>{};
|
||||
bool _resolved = false;
|
||||
|
||||
bool initStack(ImportStack stack) {
|
||||
var type = resolvesBefore;
|
||||
if (type == -1) {
|
||||
return true;
|
||||
}
|
||||
var importer = stack.latest<ImportStackObject>(type);
|
||||
if (importer == null) {
|
||||
return false;
|
||||
}
|
||||
importer._resolveBefore.add(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
int get resolvesBefore => -1;
|
||||
|
||||
bool _internalResolve() {
|
||||
if (_resolved) {
|
||||
return true;
|
||||
}
|
||||
_resolved = true;
|
||||
if (_resolveBefore.isNotEmpty) {
|
||||
for (final before in _resolveBefore) {
|
||||
if (!before._internalResolve()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return resolve();
|
||||
}
|
||||
|
||||
bool resolve() => true;
|
||||
}
|
||||
|
||||
/// Stack to help the RiveFile locate latest ImportStackObject created of a
|
||||
@ -89,11 +121,11 @@ class ImportStack {
|
||||
bool makeLatest(int coreType, ImportStackObject? importObject) {
|
||||
var latest = _latests[coreType];
|
||||
if (latest != null) {
|
||||
if (!latest.resolve()) {
|
||||
if (!latest._internalResolve()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (importObject != null) {
|
||||
if (importObject != null && importObject.initStack(this)) {
|
||||
_latests[coreType] = importObject;
|
||||
} else {
|
||||
_latests.remove(coreType);
|
||||
@ -103,7 +135,7 @@ class ImportStack {
|
||||
|
||||
bool resolve() {
|
||||
for (final object in _latests.values) {
|
||||
if (!object.resolve()) {
|
||||
if (!object._internalResolve()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
8
lib/src/core/importers/artboard_import_stack_object.dart
Normal file
8
lib/src/core/importers/artboard_import_stack_object.dart
Normal file
@ -0,0 +1,8 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/rive_core/artboard.dart';
|
||||
|
||||
/// An importer that will always resolve with the artboard importer.
|
||||
abstract class ArtboardImportStackObject extends ImportStackObject {
|
||||
@override
|
||||
int get resolvesBefore => ArtboardBase.typeKey;
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyed_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyed_property.dart';
|
||||
|
||||
class KeyedObjectImporter extends ImportStackObject {
|
||||
class KeyedObjectImporter extends ArtboardImportStackObject {
|
||||
final KeyedObject keyedObject;
|
||||
|
||||
KeyedObjectImporter(this.keyedObject);
|
||||
@ -11,7 +11,4 @@ class KeyedObjectImporter extends ImportStackObject {
|
||||
keyedObject.context.addObject(property);
|
||||
keyedObject.internalAddKeyedProperty(property);
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolve() => true;
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyed_property.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyframe.dart';
|
||||
import 'package:rive/src/rive_core/animation/linear_animation.dart';
|
||||
|
||||
class KeyedPropertyImporter extends ImportStackObject {
|
||||
class KeyedPropertyImporter extends ArtboardImportStackObject {
|
||||
final KeyedProperty keyedProperty;
|
||||
final LinearAnimation animation;
|
||||
|
||||
@ -14,7 +14,4 @@ class KeyedPropertyImporter extends ImportStackObject {
|
||||
keyedProperty.internalAddKeyFrame(keyFrame);
|
||||
keyFrame.computeSeconds(animation);
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolve() => true;
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/layer_state.dart';
|
||||
import 'package:rive/src/rive_core/animation/state_transition.dart';
|
||||
|
||||
class LayerStateImporter extends ImportStackObject {
|
||||
class LayerStateImporter extends ArtboardImportStackObject {
|
||||
final LayerState state;
|
||||
LayerStateImporter(this.state);
|
||||
|
||||
@ -10,7 +10,4 @@ class LayerStateImporter extends ImportStackObject {
|
||||
state.context.addObject(transition);
|
||||
state.internalAddTransition(transition);
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolve() => true;
|
||||
}
|
||||
|
@ -1,25 +1,13 @@
|
||||
import 'package:rive/rive.dart';
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/keyed_object.dart';
|
||||
|
||||
class LinearAnimationImporter extends ImportStackObject {
|
||||
class LinearAnimationImporter extends ArtboardImportStackObject {
|
||||
final LinearAnimation linearAnimation;
|
||||
// final keyedObjects = <KeyedObject>[];
|
||||
|
||||
LinearAnimationImporter(this.linearAnimation);
|
||||
|
||||
void addKeyedObject(KeyedObject object) {
|
||||
linearAnimation.context.addObject(object);
|
||||
|
||||
// keyedObjects.add(object);
|
||||
linearAnimation.internalAddKeyedObject(object);
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolve() {
|
||||
// for (final keyedObject in keyedObjects) {
|
||||
// keyedObject.objectId ??= linearAnimation.artboard.id;
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/state_machine.dart';
|
||||
import 'package:rive/src/rive_core/animation/state_machine_component.dart';
|
||||
|
||||
class StateMachineImporter extends ImportStackObject {
|
||||
class StateMachineImporter extends ArtboardImportStackObject {
|
||||
final StateMachine machine;
|
||||
StateMachineImporter(this.machine);
|
||||
|
||||
@ -10,7 +10,4 @@ class StateMachineImporter extends ImportStackObject {
|
||||
machine.context.addObject(object);
|
||||
object.stateMachine = machine;
|
||||
}
|
||||
|
||||
@override
|
||||
bool resolve() => true;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:rive/rive.dart';
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/rive_core/animation/animation_state.dart';
|
||||
import 'package:rive/src/rive_core/animation/layer_state.dart';
|
||||
@ -17,6 +18,9 @@ class StateMachineLayerImporter extends ImportStackObject {
|
||||
layer.internalAddState(state);
|
||||
}
|
||||
|
||||
@override
|
||||
int get resolvesBefore => StateMachineBase.typeKey;
|
||||
|
||||
bool _resolved = false;
|
||||
@override
|
||||
bool resolve() {
|
||||
@ -36,7 +40,6 @@ class StateMachineLayerImporter extends ImportStackObject {
|
||||
// entire artboard imports.
|
||||
assert(transition.stateToId >= 0 &&
|
||||
transition.stateToId < importedStates.length);
|
||||
// transition.stateToId = importedStates[transition.stateToId].id;
|
||||
transition.stateTo = importedStates[transition.stateToId];
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
||||
import 'package:rive/src/rive_core/animation/state_transition.dart';
|
||||
import 'package:rive/src/rive_core/animation/transition_condition.dart';
|
||||
|
||||
class StateTransitionImporter extends ImportStackObject {
|
||||
class StateTransitionImporter extends ArtboardImportStackObject {
|
||||
final StateMachineImporter stateMachineImporter;
|
||||
final StateTransition transition;
|
||||
StateTransitionImporter(this.transition, this.stateMachineImporter);
|
||||
|
Reference in New Issue
Block a user