diff --git a/lib/src/core/core.dart b/lib/src/core/core.dart index 8573afe..6fa2bd7 100644 --- a/lib/src/core/core.dart +++ b/lib/src/core/core.dart @@ -17,9 +17,9 @@ export 'package:rive/src/core/importers/keyed_object_importer.dart'; export 'package:rive/src/core/importers/keyed_property_importer.dart'; export 'package:rive/src/core/importers/layer_state_importer.dart'; export 'package:rive/src/core/importers/linear_animation_importer.dart'; -export 'package:rive/src/core/importers/state_machine_event_importer.dart'; export 'package:rive/src/core/importers/state_machine_importer.dart'; export 'package:rive/src/core/importers/state_machine_layer_importer.dart'; +export 'package:rive/src/core/importers/state_machine_listener_importer.dart'; export 'package:rive/src/core/importers/state_transition_importer.dart'; export 'package:rive/src/generated/rive_core_context.dart'; export 'package:rive/src/input_changes.dart'; diff --git a/lib/src/core/importers/state_machine_event_importer.dart b/lib/src/core/importers/state_machine_event_importer.dart deleted file mode 100644 index c0e65d6..0000000 --- a/lib/src/core/importers/state_machine_event_importer.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:rive/src/core/importers/artboard_import_stack_object.dart'; -import 'package:rive/src/rive_core/animation/event_input_change.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; - -class StateMachineEventImporter extends ArtboardImportStackObject { - final StateMachineEvent event; - StateMachineEventImporter(this.event); - - void addInputChange(EventInputChange change) { - // Other state machine importers do this, do we really need it? - // event.context.addObject(change); - event.internalAddInputChange(change); - } -} diff --git a/lib/src/core/importers/state_machine_listener_importer.dart b/lib/src/core/importers/state_machine_listener_importer.dart new file mode 100644 index 0000000..388a52f --- /dev/null +++ b/lib/src/core/importers/state_machine_listener_importer.dart @@ -0,0 +1,14 @@ +import 'package:rive/src/core/importers/artboard_import_stack_object.dart'; +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; + +class StateMachineListenerImporter extends ArtboardImportStackObject { + final StateMachineListener event; + StateMachineListenerImporter(this.event); + + void addInputChange(ListenerInputChange change) { + // Other state machine importers do this, do we really need it? + // event.context.addObject(change); + event.internalAddInputChange(change); + } +} diff --git a/lib/src/generated/animation/event_trigger_change_base.dart b/lib/src/generated/animation/event_trigger_change_base.dart deleted file mode 100644 index e00874e..0000000 --- a/lib/src/generated/animation/event_trigger_change_base.dart +++ /dev/null @@ -1,14 +0,0 @@ -/// Core automatically generated -/// lib/src/generated/animation/event_trigger_change_base.dart. -/// Do not modify manually. - -import 'package:rive/src/rive_core/animation/event_input_change.dart'; - -abstract class EventTriggerChangeBase extends EventInputChange { - static const int typeKey = 115; - @override - int get coreType => EventTriggerChangeBase.typeKey; - @override - Set get coreTypes => - {EventTriggerChangeBase.typeKey, EventInputChangeBase.typeKey}; -} diff --git a/lib/src/generated/animation/event_bool_change_base.dart b/lib/src/generated/animation/listener_bool_change_base.dart similarity index 64% rename from lib/src/generated/animation/event_bool_change_base.dart rename to lib/src/generated/animation/listener_bool_change_base.dart index e9eba7c..a6103dd 100644 --- a/lib/src/generated/animation/event_bool_change_base.dart +++ b/lib/src/generated/animation/listener_bool_change_base.dart @@ -1,16 +1,16 @@ /// Core automatically generated -/// lib/src/generated/animation/event_bool_change_base.dart. +/// lib/src/generated/animation/listener_bool_change_base.dart. /// Do not modify manually. -import 'package:rive/src/rive_core/animation/event_input_change.dart'; +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; -abstract class EventBoolChangeBase extends EventInputChange { +abstract class ListenerBoolChangeBase extends ListenerInputChange { static const int typeKey = 117; @override - int get coreType => EventBoolChangeBase.typeKey; + int get coreType => ListenerBoolChangeBase.typeKey; @override Set get coreTypes => - {EventBoolChangeBase.typeKey, EventInputChangeBase.typeKey}; + {ListenerBoolChangeBase.typeKey, ListenerInputChangeBase.typeKey}; /// -------------------------------------------------------------------------- /// Value field with key 228. @@ -18,7 +18,7 @@ abstract class EventBoolChangeBase extends EventInputChange { int _value = valueInitialValue; static const int valuePropertyKey = 228; - /// Value to set the input to when the event occurs. + /// Value to set the input to when the listener occurs. int get value => _value; /// Change the [_value] field value. @@ -37,7 +37,7 @@ abstract class EventBoolChangeBase extends EventInputChange { void valueChanged(int from, int to); @override - void copy(covariant EventBoolChangeBase source) { + void copy(covariant ListenerBoolChangeBase source) { super.copy(source); _value = source._value; } diff --git a/lib/src/generated/animation/event_input_change_base.dart b/lib/src/generated/animation/listener_input_change_base.dart similarity index 73% rename from lib/src/generated/animation/event_input_change_base.dart rename to lib/src/generated/animation/listener_input_change_base.dart index 78bf9ac..41efba5 100644 --- a/lib/src/generated/animation/event_input_change_base.dart +++ b/lib/src/generated/animation/listener_input_change_base.dart @@ -1,15 +1,15 @@ /// Core automatically generated -/// lib/src/generated/animation/event_input_change_base.dart. +/// lib/src/generated/animation/listener_input_change_base.dart. /// Do not modify manually. import 'package:rive/src/core/core.dart'; -abstract class EventInputChangeBase extends Core { +abstract class ListenerInputChangeBase extends Core { static const int typeKey = 116; @override - int get coreType => EventInputChangeBase.typeKey; + int get coreType => ListenerInputChangeBase.typeKey; @override - Set get coreTypes => {EventInputChangeBase.typeKey}; + Set get coreTypes => {ListenerInputChangeBase.typeKey}; /// -------------------------------------------------------------------------- /// InputId field with key 227. @@ -36,7 +36,7 @@ abstract class EventInputChangeBase extends Core { void inputIdChanged(int from, int to); @override - void copy(covariant EventInputChangeBase source) { + void copy(covariant ListenerInputChangeBase source) { _inputId = source._inputId; } } diff --git a/lib/src/generated/animation/event_number_change_base.dart b/lib/src/generated/animation/listener_number_change_base.dart similarity index 64% rename from lib/src/generated/animation/event_number_change_base.dart rename to lib/src/generated/animation/listener_number_change_base.dart index 97dda95..da53ed2 100644 --- a/lib/src/generated/animation/event_number_change_base.dart +++ b/lib/src/generated/animation/listener_number_change_base.dart @@ -1,16 +1,16 @@ /// Core automatically generated -/// lib/src/generated/animation/event_number_change_base.dart. +/// lib/src/generated/animation/listener_number_change_base.dart. /// Do not modify manually. -import 'package:rive/src/rive_core/animation/event_input_change.dart'; +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; -abstract class EventNumberChangeBase extends EventInputChange { +abstract class ListenerNumberChangeBase extends ListenerInputChange { static const int typeKey = 118; @override - int get coreType => EventNumberChangeBase.typeKey; + int get coreType => ListenerNumberChangeBase.typeKey; @override Set get coreTypes => - {EventNumberChangeBase.typeKey, EventInputChangeBase.typeKey}; + {ListenerNumberChangeBase.typeKey, ListenerInputChangeBase.typeKey}; /// -------------------------------------------------------------------------- /// Value field with key 229. @@ -18,7 +18,7 @@ abstract class EventNumberChangeBase extends EventInputChange { double _value = valueInitialValue; static const int valuePropertyKey = 229; - /// Value to set the input to when the event occurs. + /// Value to set the input to when the listener occurs. double get value => _value; /// Change the [_value] field value. @@ -37,7 +37,7 @@ abstract class EventNumberChangeBase extends EventInputChange { void valueChanged(double from, double to); @override - void copy(covariant EventNumberChangeBase source) { + void copy(covariant ListenerNumberChangeBase source) { super.copy(source); _value = source._value; } diff --git a/lib/src/generated/animation/listener_trigger_change_base.dart b/lib/src/generated/animation/listener_trigger_change_base.dart new file mode 100644 index 0000000..a347e7b --- /dev/null +++ b/lib/src/generated/animation/listener_trigger_change_base.dart @@ -0,0 +1,14 @@ +/// Core automatically generated +/// lib/src/generated/animation/listener_trigger_change_base.dart. +/// Do not modify manually. + +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; + +abstract class ListenerTriggerChangeBase extends ListenerInputChange { + static const int typeKey = 115; + @override + int get coreType => ListenerTriggerChangeBase.typeKey; + @override + Set get coreTypes => + {ListenerTriggerChangeBase.typeKey, ListenerInputChangeBase.typeKey}; +} diff --git a/lib/src/generated/animation/state_machine_listener_base.dart b/lib/src/generated/animation/state_machine_listener_base.dart new file mode 100644 index 0000000..5306612 --- /dev/null +++ b/lib/src/generated/animation/state_machine_listener_base.dart @@ -0,0 +1,70 @@ +/// Core automatically generated +/// lib/src/generated/animation/state_machine_listener_base.dart. +/// Do not modify manually. + +import 'package:rive/src/rive_core/animation/state_machine_component.dart'; + +abstract class StateMachineListenerBase extends StateMachineComponent { + static const int typeKey = 114; + @override + int get coreType => StateMachineListenerBase.typeKey; + @override + Set get coreTypes => + {StateMachineListenerBase.typeKey, StateMachineComponentBase.typeKey}; + + /// -------------------------------------------------------------------------- + /// TargetId field with key 224. + static const int targetIdInitialValue = 0; + int _targetId = targetIdInitialValue; + static const int targetIdPropertyKey = 224; + + /// Identifier used to track the object use as a target fo this listener. + int get targetId => _targetId; + + /// Change the [_targetId] field value. + /// [targetIdChanged] will be invoked only if the field's value has changed. + set targetId(int value) { + if (_targetId == value) { + return; + } + int from = _targetId; + _targetId = value; + if (hasValidated) { + targetIdChanged(from, value); + } + } + + void targetIdChanged(int from, int to); + + /// -------------------------------------------------------------------------- + /// ListenerTypeValue field with key 225. + static const int listenerTypeValueInitialValue = 0; + int _listenerTypeValue = listenerTypeValueInitialValue; + static const int listenerTypeValuePropertyKey = 225; + + /// Listener type (hover, click, etc). + int get listenerTypeValue => _listenerTypeValue; + + /// Change the [_listenerTypeValue] field value. + /// [listenerTypeValueChanged] will be invoked only if the field's value has + /// changed. + set listenerTypeValue(int value) { + if (_listenerTypeValue == value) { + return; + } + int from = _listenerTypeValue; + _listenerTypeValue = value; + if (hasValidated) { + listenerTypeValueChanged(from, value); + } + } + + void listenerTypeValueChanged(int from, int to); + + @override + void copy(covariant StateMachineListenerBase source) { + super.copy(source); + _targetId = source._targetId; + _listenerTypeValue = source._listenerTypeValue; + } +} diff --git a/lib/src/generated/rive_core_context.dart b/lib/src/generated/rive_core_context.dart index dabd4c4..d886d59 100644 --- a/lib/src/generated/rive_core_context.dart +++ b/lib/src/generated/rive_core_context.dart @@ -8,8 +8,8 @@ import 'package:rive/src/core/field_types/core_string_type.dart'; import 'package:rive/src/core/field_types/core_uint_type.dart'; import 'package:rive/src/generated/animation/blend_animation_base.dart'; import 'package:rive/src/generated/animation/cubic_interpolator_base.dart'; -import 'package:rive/src/generated/animation/event_input_change_base.dart'; import 'package:rive/src/generated/animation/keyframe_base.dart'; +import 'package:rive/src/generated/animation/listener_input_change_base.dart'; import 'package:rive/src/generated/animation/nested_linear_animation_base.dart'; import 'package:rive/src/generated/animation/state_machine_component_base.dart'; import 'package:rive/src/generated/animation/transition_condition_base.dart'; @@ -41,9 +41,6 @@ import 'package:rive/src/rive_core/animation/blend_state_direct.dart'; import 'package:rive/src/rive_core/animation/blend_state_transition.dart'; import 'package:rive/src/rive_core/animation/cubic_interpolator.dart'; import 'package:rive/src/rive_core/animation/entry_state.dart'; -import 'package:rive/src/rive_core/animation/event_bool_change.dart'; -import 'package:rive/src/rive_core/animation/event_number_change.dart'; -import 'package:rive/src/rive_core/animation/event_trigger_change.dart'; import 'package:rive/src/rive_core/animation/exit_state.dart'; import 'package:rive/src/rive_core/animation/keyed_object.dart'; import 'package:rive/src/rive_core/animation/keyed_property.dart'; @@ -52,13 +49,16 @@ import 'package:rive/src/rive_core/animation/keyframe_color.dart'; import 'package:rive/src/rive_core/animation/keyframe_double.dart'; import 'package:rive/src/rive_core/animation/keyframe_id.dart'; import 'package:rive/src/rive_core/animation/linear_animation.dart'; +import 'package:rive/src/rive_core/animation/listener_bool_change.dart'; +import 'package:rive/src/rive_core/animation/listener_number_change.dart'; +import 'package:rive/src/rive_core/animation/listener_trigger_change.dart'; import 'package:rive/src/rive_core/animation/nested_remap_animation.dart'; import 'package:rive/src/rive_core/animation/nested_simple_animation.dart'; import 'package:rive/src/rive_core/animation/nested_state_machine.dart'; import 'package:rive/src/rive_core/animation/state_machine.dart'; import 'package:rive/src/rive_core/animation/state_machine_bool.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; import 'package:rive/src/rive_core/animation/state_machine_layer.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; import 'package:rive/src/rive_core/animation/state_machine_number.dart'; import 'package:rive/src/rive_core/animation/state_machine_trigger.dart'; import 'package:rive/src/rive_core/animation/state_transition.dart'; @@ -132,8 +132,6 @@ class RiveCoreContext { return Node(); case NestedArtboardBase.typeKey: return NestedArtboard(); - case EventNumberChangeBase.typeKey: - return EventNumberChange(); case AnimationBase.typeKey: return Animation(); case LinearAnimationBase.typeKey: @@ -142,8 +140,6 @@ class RiveCoreContext { return NestedSimpleAnimation(); case AnimationStateBase.typeKey: return AnimationState(); - case StateMachineEventBase.typeKey: - return StateMachineEvent(); case KeyedObjectBase.typeKey: return KeyedObject(); case BlendAnimationDirectBase.typeKey: @@ -154,20 +150,22 @@ class RiveCoreContext { return TransitionTriggerCondition(); case KeyedPropertyBase.typeKey: return KeyedProperty(); + case StateMachineListenerBase.typeKey: + return StateMachineListener(); case KeyFrameIdBase.typeKey: return KeyFrameId(); case KeyFrameBoolBase.typeKey: return KeyFrameBool(); + case ListenerBoolChangeBase.typeKey: + return ListenerBoolChange(); case TransitionNumberConditionBase.typeKey: return TransitionNumberCondition(); - case EventBoolChangeBase.typeKey: - return EventBoolChange(); case AnyStateBase.typeKey: return AnyState(); - case EventTriggerChangeBase.typeKey: - return EventTriggerChange(); case StateMachineLayerBase.typeKey: return StateMachineLayer(); + case ListenerNumberChangeBase.typeKey: + return ListenerNumberChange(); case CubicInterpolatorBase.typeKey: return CubicInterpolator(); case StateTransitionBase.typeKey: @@ -182,6 +180,8 @@ class RiveCoreContext { return EntryState(); case StateMachineTriggerBase.typeKey: return StateMachineTrigger(); + case ListenerTriggerChangeBase.typeKey: + return ListenerTriggerChange(); case BlendStateDirectBase.typeKey: return BlendStateDirect(); case NestedStateMachineBase.typeKey: @@ -457,16 +457,6 @@ class RiveCoreContext { object.animationId = value; } break; - case EventInputChangeBase.inputIdPropertyKey: - if (object is EventInputChangeBase && value is int) { - object.inputId = value; - } - break; - case EventNumberChangeBase.valuePropertyKey: - if (object is EventNumberChangeBase && value is double) { - object.value = value; - } - break; case AnimationBase.namePropertyKey: if (object is AnimationBase && value is String) { object.name = value; @@ -522,26 +512,16 @@ class RiveCoreContext { object.isPlaying = value; } break; + case ListenerInputChangeBase.inputIdPropertyKey: + if (object is ListenerInputChangeBase && value is int) { + object.inputId = value; + } + break; case AnimationStateBase.animationIdPropertyKey: if (object is AnimationStateBase && value is int) { object.animationId = value; } break; - case StateMachineComponentBase.namePropertyKey: - if (object is StateMachineComponentBase && value is String) { - object.name = value; - } - break; - case StateMachineEventBase.targetIdPropertyKey: - if (object is StateMachineEventBase && value is int) { - object.targetId = value; - } - break; - case StateMachineEventBase.eventTypeValuePropertyKey: - if (object is StateMachineEventBase && value is int) { - object.eventTypeValue = value; - } - break; case KeyedObjectBase.objectIdPropertyKey: if (object is KeyedObjectBase && value is int) { object.objectId = value; @@ -557,6 +537,11 @@ class RiveCoreContext { object.inputId = value; } break; + case StateMachineComponentBase.namePropertyKey: + if (object is StateMachineComponentBase && value is String) { + object.name = value; + } + break; case StateMachineNumberBase.valuePropertyKey: if (object is StateMachineNumberBase && value is double) { object.value = value; @@ -572,6 +557,16 @@ class RiveCoreContext { object.propertyKey = value; } break; + case StateMachineListenerBase.targetIdPropertyKey: + if (object is StateMachineListenerBase && value is int) { + object.targetId = value; + } + break; + case StateMachineListenerBase.listenerTypeValuePropertyKey: + if (object is StateMachineListenerBase && value is int) { + object.listenerTypeValue = value; + } + break; case KeyFrameBase.framePropertyKey: if (object is KeyFrameBase && value is int) { object.frame = value; @@ -597,6 +592,11 @@ class RiveCoreContext { object.value = value; } break; + case ListenerBoolChangeBase.valuePropertyKey: + if (object is ListenerBoolChangeBase && value is int) { + object.value = value; + } + break; case TransitionValueConditionBase.opValuePropertyKey: if (object is TransitionValueConditionBase && value is int) { object.opValue = value; @@ -607,8 +607,8 @@ class RiveCoreContext { object.value = value; } break; - case EventBoolChangeBase.valuePropertyKey: - if (object is EventBoolChangeBase && value is int) { + case ListenerNumberChangeBase.valuePropertyKey: + if (object is ListenerNumberChangeBase && value is double) { object.value = value; } break; @@ -1151,26 +1151,26 @@ class RiveCoreContext { case DrawableBase.drawableFlagsPropertyKey: case NestedArtboardBase.artboardIdPropertyKey: case NestedAnimationBase.animationIdPropertyKey: - case EventInputChangeBase.inputIdPropertyKey: case LinearAnimationBase.fpsPropertyKey: case LinearAnimationBase.durationPropertyKey: case LinearAnimationBase.loopValuePropertyKey: case LinearAnimationBase.workStartPropertyKey: case LinearAnimationBase.workEndPropertyKey: + case ListenerInputChangeBase.inputIdPropertyKey: case AnimationStateBase.animationIdPropertyKey: - case StateMachineEventBase.targetIdPropertyKey: - case StateMachineEventBase.eventTypeValuePropertyKey: case KeyedObjectBase.objectIdPropertyKey: case BlendAnimationBase.animationIdPropertyKey: case BlendAnimationDirectBase.inputIdPropertyKey: case TransitionConditionBase.inputIdPropertyKey: case KeyedPropertyBase.propertyKeyPropertyKey: + case StateMachineListenerBase.targetIdPropertyKey: + case StateMachineListenerBase.listenerTypeValuePropertyKey: case KeyFrameBase.framePropertyKey: case KeyFrameBase.interpolationTypePropertyKey: case KeyFrameBase.interpolatorIdPropertyKey: case KeyFrameIdBase.valuePropertyKey: + case ListenerBoolChangeBase.valuePropertyKey: case TransitionValueConditionBase.opValuePropertyKey: - case EventBoolChangeBase.valuePropertyKey: case StateTransitionBase.stateToIdPropertyKey: case StateTransitionBase.flagsPropertyKey: case StateTransitionBase.durationPropertyKey: @@ -1211,12 +1211,12 @@ class RiveCoreContext { case TransformComponentBase.scaleYPropertyKey: case NodeBase.xPropertyKey: case NodeBase.yPropertyKey: - case EventNumberChangeBase.valuePropertyKey: case LinearAnimationBase.speedPropertyKey: case NestedLinearAnimationBase.mixPropertyKey: case NestedSimpleAnimationBase.speedPropertyKey: case StateMachineNumberBase.valuePropertyKey: case TransitionNumberConditionBase.valuePropertyKey: + case ListenerNumberChangeBase.valuePropertyKey: case CubicInterpolatorBase.x1PropertyKey: case CubicInterpolatorBase.y1PropertyKey: case CubicInterpolatorBase.x2PropertyKey: @@ -1355,8 +1355,6 @@ class RiveCoreContext { return (object as NestedArtboardBase).artboardId; case NestedAnimationBase.animationIdPropertyKey: return (object as NestedAnimationBase).animationId; - case EventInputChangeBase.inputIdPropertyKey: - return (object as EventInputChangeBase).inputId; case LinearAnimationBase.fpsPropertyKey: return (object as LinearAnimationBase).fps; case LinearAnimationBase.durationPropertyKey: @@ -1367,12 +1365,10 @@ class RiveCoreContext { return (object as LinearAnimationBase).workStart; case LinearAnimationBase.workEndPropertyKey: return (object as LinearAnimationBase).workEnd; + case ListenerInputChangeBase.inputIdPropertyKey: + return (object as ListenerInputChangeBase).inputId; case AnimationStateBase.animationIdPropertyKey: return (object as AnimationStateBase).animationId; - case StateMachineEventBase.targetIdPropertyKey: - return (object as StateMachineEventBase).targetId; - case StateMachineEventBase.eventTypeValuePropertyKey: - return (object as StateMachineEventBase).eventTypeValue; case KeyedObjectBase.objectIdPropertyKey: return (object as KeyedObjectBase).objectId; case BlendAnimationBase.animationIdPropertyKey: @@ -1383,6 +1379,10 @@ class RiveCoreContext { return (object as TransitionConditionBase).inputId; case KeyedPropertyBase.propertyKeyPropertyKey: return (object as KeyedPropertyBase).propertyKey; + case StateMachineListenerBase.targetIdPropertyKey: + return (object as StateMachineListenerBase).targetId; + case StateMachineListenerBase.listenerTypeValuePropertyKey: + return (object as StateMachineListenerBase).listenerTypeValue; case KeyFrameBase.framePropertyKey: return (object as KeyFrameBase).frame; case KeyFrameBase.interpolationTypePropertyKey: @@ -1391,10 +1391,10 @@ class RiveCoreContext { return (object as KeyFrameBase).interpolatorId; case KeyFrameIdBase.valuePropertyKey: return (object as KeyFrameIdBase).value; + case ListenerBoolChangeBase.valuePropertyKey: + return (object as ListenerBoolChangeBase).value; case TransitionValueConditionBase.opValuePropertyKey: return (object as TransitionValueConditionBase).opValue; - case EventBoolChangeBase.valuePropertyKey: - return (object as EventBoolChangeBase).value; case StateTransitionBase.stateToIdPropertyKey: return (object as StateTransitionBase).stateToId; case StateTransitionBase.flagsPropertyKey: @@ -1479,8 +1479,6 @@ class RiveCoreContext { return (object as NodeBase).x; case NodeBase.yPropertyKey: return (object as NodeBase).y; - case EventNumberChangeBase.valuePropertyKey: - return (object as EventNumberChangeBase).value; case LinearAnimationBase.speedPropertyKey: return (object as LinearAnimationBase).speed; case NestedLinearAnimationBase.mixPropertyKey: @@ -1491,6 +1489,8 @@ class RiveCoreContext { return (object as StateMachineNumberBase).value; case TransitionNumberConditionBase.valuePropertyKey: return (object as TransitionNumberConditionBase).value; + case ListenerNumberChangeBase.valuePropertyKey: + return (object as ListenerNumberChangeBase).value; case CubicInterpolatorBase.x1PropertyKey: return (object as CubicInterpolatorBase).x1; case CubicInterpolatorBase.y1PropertyKey: @@ -1779,11 +1779,6 @@ class RiveCoreContext { object.animationId = value; } break; - case EventInputChangeBase.inputIdPropertyKey: - if (object is EventInputChangeBase) { - object.inputId = value; - } - break; case LinearAnimationBase.fpsPropertyKey: if (object is LinearAnimationBase) { object.fps = value; @@ -1809,21 +1804,16 @@ class RiveCoreContext { object.workEnd = value; } break; + case ListenerInputChangeBase.inputIdPropertyKey: + if (object is ListenerInputChangeBase) { + object.inputId = value; + } + break; case AnimationStateBase.animationIdPropertyKey: if (object is AnimationStateBase) { object.animationId = value; } break; - case StateMachineEventBase.targetIdPropertyKey: - if (object is StateMachineEventBase) { - object.targetId = value; - } - break; - case StateMachineEventBase.eventTypeValuePropertyKey: - if (object is StateMachineEventBase) { - object.eventTypeValue = value; - } - break; case KeyedObjectBase.objectIdPropertyKey: if (object is KeyedObjectBase) { object.objectId = value; @@ -1849,6 +1839,16 @@ class RiveCoreContext { object.propertyKey = value; } break; + case StateMachineListenerBase.targetIdPropertyKey: + if (object is StateMachineListenerBase) { + object.targetId = value; + } + break; + case StateMachineListenerBase.listenerTypeValuePropertyKey: + if (object is StateMachineListenerBase) { + object.listenerTypeValue = value; + } + break; case KeyFrameBase.framePropertyKey: if (object is KeyFrameBase) { object.frame = value; @@ -1869,16 +1869,16 @@ class RiveCoreContext { object.value = value; } break; + case ListenerBoolChangeBase.valuePropertyKey: + if (object is ListenerBoolChangeBase) { + object.value = value; + } + break; case TransitionValueConditionBase.opValuePropertyKey: if (object is TransitionValueConditionBase) { object.opValue = value; } break; - case EventBoolChangeBase.valuePropertyKey: - if (object is EventBoolChangeBase) { - object.value = value; - } - break; case StateTransitionBase.stateToIdPropertyKey: if (object is StateTransitionBase) { object.stateToId = value; @@ -2079,11 +2079,6 @@ class RiveCoreContext { object.y = value; } break; - case EventNumberChangeBase.valuePropertyKey: - if (object is EventNumberChangeBase) { - object.value = value; - } - break; case LinearAnimationBase.speedPropertyKey: if (object is LinearAnimationBase) { object.speed = value; @@ -2109,6 +2104,11 @@ class RiveCoreContext { object.value = value; } break; + case ListenerNumberChangeBase.valuePropertyKey: + if (object is ListenerNumberChangeBase) { + object.value = value; + } + break; case CubicInterpolatorBase.x1PropertyKey: if (object is CubicInterpolatorBase) { object.x1 = value; diff --git a/lib/src/input_changes.dart b/lib/src/input_changes.dart index fcbf264..525f2e9 100644 --- a/lib/src/input_changes.dart +++ b/lib/src/input_changes.dart @@ -1,9 +1,10 @@ import 'dart:collection'; -import 'package:rive/src/rive_core/animation/event_input_change.dart'; -class InputChanges extends ListBase { - final List _values = []; - List get values => _values.cast(); +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; + +class InputChanges extends ListBase { + final List _values = []; + List get values => _values.cast(); @override int get length => _values.length; @@ -12,9 +13,9 @@ class InputChanges extends ListBase { set length(int value) => _values.length = value; @override - EventInputChange operator [](int index) => _values[index]!; + ListenerInputChange operator [](int index) => _values[index]!; @override - void operator []=(int index, EventInputChange value) => + void operator []=(int index, ListenerInputChange value) => _values[index] = value; } diff --git a/lib/src/rive_core/animation/event_trigger_change.dart b/lib/src/rive_core/animation/event_trigger_change.dart deleted file mode 100644 index 9368bb4..0000000 --- a/lib/src/rive_core/animation/event_trigger_change.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:rive/src/generated/animation/event_trigger_change_base.dart'; -import 'package:rive/src/rive_core/state_machine_controller.dart'; - -export 'package:rive/src/generated/animation/event_trigger_change_base.dart'; - -class EventTriggerChange extends EventTriggerChangeBase { - @override - void perform(StateMachineController controller) => - controller.setInputValue(inputId, true); -} diff --git a/lib/src/rive_core/animation/event_bool_change.dart b/lib/src/rive_core/animation/listener_bool_change.dart similarity index 75% rename from lib/src/rive_core/animation/event_bool_change.dart rename to lib/src/rive_core/animation/listener_bool_change.dart index 24743c4..c6abcdc 100644 --- a/lib/src/rive_core/animation/event_bool_change.dart +++ b/lib/src/rive_core/animation/listener_bool_change.dart @@ -1,9 +1,9 @@ -import 'package:rive/src/generated/animation/event_bool_change_base.dart'; +import 'package:rive/src/generated/animation/listener_bool_change_base.dart'; import 'package:rive/src/rive_core/state_machine_controller.dart'; -export 'package:rive/src/generated/animation/event_bool_change_base.dart'; +export 'package:rive/src/generated/animation/listener_bool_change_base.dart'; -class EventBoolChange extends EventBoolChangeBase { +class ListenerBoolChange extends ListenerBoolChangeBase { @override void valueChanged(int from, int to) {} diff --git a/lib/src/rive_core/animation/event_input_change.dart b/lib/src/rive_core/animation/listener_input_change.dart similarity index 79% rename from lib/src/rive_core/animation/event_input_change.dart rename to lib/src/rive_core/animation/listener_input_change.dart index 6a4941a..0cc82c2 100644 --- a/lib/src/rive_core/animation/event_input_change.dart +++ b/lib/src/rive_core/animation/listener_input_change.dart @@ -1,13 +1,13 @@ import 'package:rive/src/core/core.dart'; -import 'package:rive/src/generated/animation/event_input_change_base.dart'; +import 'package:rive/src/generated/animation/listener_input_change_base.dart'; import 'package:rive/src/rive_core/animation/state_machine.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; import 'package:rive/src/rive_core/animation/state_machine_input.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; import 'package:rive/src/rive_core/state_machine_controller.dart'; -export 'package:rive/src/generated/animation/event_input_change_base.dart'; +export 'package:rive/src/generated/animation/listener_input_change_base.dart'; -abstract class EventInputChange extends EventInputChangeBase { +abstract class ListenerInputChange extends ListenerInputChangeBase { StateMachineInput _input = StateMachineInput.unknown; StateMachineInput get input => _input; set input(StateMachineInput value) { @@ -39,7 +39,7 @@ abstract class EventInputChange extends EventInputChangeBase { @override bool import(ImportStack importStack) { var importer = importStack - .latest(StateMachineEventBase.typeKey); + .latest(StateMachineListenerBase.typeKey); if (importer == null) { return false; } diff --git a/lib/src/rive_core/animation/event_number_change.dart b/lib/src/rive_core/animation/listener_number_change.dart similarity index 52% rename from lib/src/rive_core/animation/event_number_change.dart rename to lib/src/rive_core/animation/listener_number_change.dart index 407e42d..0709d58 100644 --- a/lib/src/rive_core/animation/event_number_change.dart +++ b/lib/src/rive_core/animation/listener_number_change.dart @@ -1,9 +1,9 @@ -import 'package:rive/src/generated/animation/event_number_change_base.dart'; +import 'package:rive/src/generated/animation/listener_number_change_base.dart'; import 'package:rive/src/rive_core/state_machine_controller.dart'; -export 'package:rive/src/generated/animation/event_number_change_base.dart'; +export 'package:rive/src/generated/animation/listener_number_change_base.dart'; -class EventNumberChange extends EventNumberChangeBase { +class ListenerNumberChange extends ListenerNumberChangeBase { @override void valueChanged(double from, double to) {} diff --git a/lib/src/rive_core/animation/listener_trigger_change.dart b/lib/src/rive_core/animation/listener_trigger_change.dart new file mode 100644 index 0000000..3619b45 --- /dev/null +++ b/lib/src/rive_core/animation/listener_trigger_change.dart @@ -0,0 +1,10 @@ +import 'package:rive/src/generated/animation/listener_trigger_change_base.dart'; +import 'package:rive/src/rive_core/state_machine_controller.dart'; + +export 'package:rive/src/generated/animation/listener_trigger_change_base.dart'; + +class ListenerTriggerChange extends ListenerTriggerChangeBase { + @override + void perform(StateMachineController controller) => + controller.setInputValue(inputId, true); +} diff --git a/lib/src/rive_core/animation/state_machine.dart b/lib/src/rive_core/animation/state_machine.dart index b957eb2..1acc950 100644 --- a/lib/src/rive_core/animation/state_machine.dart +++ b/lib/src/rive_core/animation/state_machine.dart @@ -1,8 +1,8 @@ import 'package:rive/src/core/core.dart'; import 'package:rive/src/generated/animation/state_machine_base.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; import 'package:rive/src/rive_core/animation/state_machine_input.dart'; import 'package:rive/src/rive_core/animation/state_machine_layer.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; import 'package:rive/src/rive_core/artboard.dart'; export 'package:rive/src/generated/animation/state_machine_base.dart'; @@ -12,8 +12,8 @@ class StateMachine extends StateMachineBase { StateMachineComponents(); final StateMachineComponents layers = StateMachineComponents(); - final StateMachineComponents events = - StateMachineComponents(); + final StateMachineComponents listeners = + StateMachineComponents(); @override bool import(ImportStack stack) { diff --git a/lib/src/rive_core/animation/state_machine_event.dart b/lib/src/rive_core/animation/state_machine_listener.dart similarity index 52% rename from lib/src/rive_core/animation/state_machine_event.dart rename to lib/src/rive_core/animation/state_machine_listener.dart index 996fdca..fa0dc6d 100644 --- a/lib/src/rive_core/animation/state_machine_event.dart +++ b/lib/src/rive_core/animation/state_machine_listener.dart @@ -1,18 +1,18 @@ import 'dart:collection'; import 'package:rive/src/core/core.dart'; -import 'package:rive/src/generated/animation/state_machine_event_base.dart'; -import 'package:rive/src/rive_core/animation/event_input_change.dart'; +import 'package:rive/src/generated/animation/state_machine_listener_base.dart'; +import 'package:rive/src/rive_core/animation/listener_input_change.dart'; import 'package:rive/src/rive_core/animation/state_machine.dart'; import 'package:rive/src/rive_core/animation/state_machine_component.dart'; import 'package:rive/src/rive_core/node.dart'; import 'package:rive/src/rive_core/state_machine_controller.dart'; -export 'package:rive/src/generated/animation/state_machine_event_base.dart'; +export 'package:rive/src/generated/animation/state_machine_listener_base.dart'; -enum EventType { enter, exit, down, up } +enum ListenerType { enter, exit, down, up } -class StateMachineEvent extends StateMachineEventBase { +class StateMachineListener extends StateMachineListenerBase { final InputChanges inputChanges = InputChanges(); Node? _target; @@ -29,23 +29,23 @@ class StateMachineEvent extends StateMachineEventBase { @override String get name => - super.name.isEmpty ? (_target?.name ?? 'Event') : super.name; + super.name.isEmpty ? (_target?.name ?? 'Listener') : super.name; @override - void eventTypeValueChanged(int from, int to) {} + void listenerTypeValueChanged(int from, int to) {} - EventType get eventType => EventType.values[eventTypeValue]; - set eventType(EventType value) => eventTypeValue = value.index; + ListenerType get listenerType => ListenerType.values[listenerTypeValue]; + set listenerType(ListenerType value) => listenerTypeValue = value.index; @override ListBase machineComponentList(StateMachine machine) => - machine.events; + machine.listeners; @override void targetIdChanged(int from, int to) => target = context.resolve(to); - /// Called by rive_core to add an [EventInputChange] to this - /// [StateMachineEvent]. This should be @internal when it's supported. - bool internalAddInputChange(EventInputChange change) { + /// Called by rive_core to add an [ListenerInputChange] to this + /// [StateMachineListener]. This should be @internal when it's supported. + bool internalAddInputChange(ListenerInputChange change) { if (inputChanges.contains(change)) { return false; } @@ -54,9 +54,9 @@ class StateMachineEvent extends StateMachineEventBase { return true; } - /// Called by rive_core to remove an [EventInputChange] from this - /// [StateMachineEvent]. This should be @internal when it's supported. - bool internalRemoveInputChange(EventInputChange change) { + /// Called by rive_core to remove an [ListenerInputChange] from this + /// [StateMachineListener]. This should be @internal when it's supported. + bool internalRemoveInputChange(ListenerInputChange change) { var removed = inputChanges.remove(change); return removed; diff --git a/lib/src/rive_core/assets/image_asset.dart b/lib/src/rive_core/assets/image_asset.dart index 9094082..56bf6c4 100644 --- a/lib/src/rive_core/assets/image_asset.dart +++ b/lib/src/rive_core/assets/image_asset.dart @@ -12,36 +12,24 @@ class ImageAsset extends ImageAssetBase { ui.Image? _image; ui.Image? get image => _image; - /// A list of Images that need to know when the underlying bytes have been - /// successfully decoded. - List? _decodeListeners; - ImageAsset(); @visibleForTesting ImageAsset.fromTestImage(this._image); - @visibleForTesting set image(ui.Image? image) { + if (_image == image) { + return; + } _image = image; } - /// Registers [asset] to know when these image bytes have been decoded. - void addDecodeListener(Image asset) { - (_decodeListeners ??= []).add(asset); - } - @override Future decode(Uint8List bytes) { final completer = Completer(); ui.decodeImageFromList(bytes, (value) { _image = value; completer.complete(); - - // Tell listeners that the image is ready to be drawn: mark them dirty. - _decodeListeners - ?..forEach((e) => e.context.markNeedsAdvance()) - ..clear(); }); return completer.future; } diff --git a/lib/src/rive_core/shapes/image.dart b/lib/src/rive_core/shapes/image.dart index 4fdea3a..7b213f7 100644 --- a/lib/src/rive_core/shapes/image.dart +++ b/lib/src/rive_core/shapes/image.dart @@ -37,7 +37,7 @@ class Image extends ImageBase @override void draw(ui.Canvas canvas) { - final uiImage = asset?.image; + var uiImage = asset?.image; if (uiImage == null) { return; } @@ -84,6 +84,7 @@ class Image extends ImageBase } } + @override int get assetIdPropertyKey => ImageBase.assetIdPropertyKey; @@ -99,9 +100,6 @@ class Image extends ImageBase void copy(covariant Image source) { super.copy(source); asset = source.asset; - if (asset?.image == null) { - asset?.addDecodeListener(this); - } } @override diff --git a/lib/src/rive_core/state_machine_controller.dart b/lib/src/rive_core/state_machine_controller.dart index dc52290..8ca242c 100644 --- a/lib/src/rive_core/state_machine_controller.dart +++ b/lib/src/rive_core/state_machine_controller.dart @@ -12,8 +12,8 @@ import 'package:rive/src/rive_core/animation/linear_animation.dart'; import 'package:rive/src/rive_core/animation/nested_state_machine.dart'; import 'package:rive/src/rive_core/animation/state_instance.dart'; import 'package:rive/src/rive_core/animation/state_machine.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; import 'package:rive/src/rive_core/animation/state_machine_layer.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; import 'package:rive/src/rive_core/animation/state_machine_trigger.dart'; import 'package:rive/src/rive_core/animation/state_transition.dart'; import 'package:rive/src/rive_core/artboard.dart'; @@ -25,7 +25,7 @@ import 'package:rive/src/rive_core/node.dart'; import 'package:rive/src/rive_core/rive_animation_controller.dart'; import 'package:rive/src/rive_core/shapes/shape.dart'; -/// Callback signature for state machine state changes +/// Callback signature for satate machine state changes typedef OnStateChange = void Function(String, String); /// Callback signature for layer state changes @@ -209,14 +209,6 @@ class LayerController { } } -/// This allows a value of type T or T? -/// to be treated as a value of type T?. -/// -/// We use this so that APIs that have become -/// non-nullable can still be used with `!` and `?` -/// to support older versions of the API as well. -T? _ambiguate(T? value) => value; - class StateMachineController extends RiveAnimationController { final StateMachine stateMachine; final _inputValues = HashMap(); @@ -237,6 +229,8 @@ class StateMachineController extends RiveAnimationController { /// Handles state change callbacks void _onStateChange(LayerState layerState) => + + /// See https://github.com/flutter/flutter/issues/103561#issuecomment-1129356149 _ambiguate(SchedulerBinding.instance)?.addPostFrameCallback((_) { String stateName = 'unknown'; if (layerState is AnimationState && layerState.animation != null) { @@ -278,7 +272,7 @@ class StateMachineController extends RiveAnimationController { // Initialize all events. HashMap hitShapeLookup = HashMap(); - for (final event in stateMachine.events) { + for (final event in stateMachine.listeners) { // Resolve target on this artboard instance. var node = core.resolve(event.targetId); if (node == null) { @@ -346,7 +340,7 @@ class StateMachineController extends RiveAnimationController { isActive = keepGoing; } - void _processEvent(Vec2D position, {EventType? hitEvent}) { + void _processEvent(Vec2D position, {ListenerType? hitEvent}) { var artboard = this.artboard; if (artboard == null) { return; @@ -396,15 +390,15 @@ class StateMachineController extends RiveAnimationController { // Always update hover states regardless of which specific event type // we're trying to trigger. if (hoverChange) { - if (isOver && event.eventType == EventType.enter) { + if (isOver && event.listenerType == ListenerType.enter) { event.performChanges(this); isActive = true; - } else if (!isOver && event.eventType == EventType.exit) { + } else if (!isOver && event.listenerType == ListenerType.exit) { event.performChanges(this); isActive = true; } } - if (isOver && hitEvent == event.eventType) { + if (isOver && hitEvent == event.listenerType) { event.performChanges(this); isActive = true; } @@ -419,10 +413,10 @@ class StateMachineController extends RiveAnimationController { for (final nestedStateMachine in nestedArtboard.animations.whereType()) { switch (hitEvent) { - case EventType.down: + case ListenerType.down: nestedStateMachine.pointerDown(nestedPosition); break; - case EventType.up: + case ListenerType.up: nestedStateMachine.pointerUp(nestedPosition); break; default: @@ -437,12 +431,12 @@ class StateMachineController extends RiveAnimationController { void pointerDown(Vec2D position) => _processEvent( position, - hitEvent: EventType.down, + hitEvent: ListenerType.down, ); void pointerUp(Vec2D position) => _processEvent( position, - hitEvent: EventType.up, + hitEvent: ListenerType.up, ); } @@ -452,6 +446,14 @@ class StateMachineController extends RiveAnimationController { class _HitShape { Shape shape; bool isHovered = false; - List events = []; + List events = []; _HitShape(this.shape); } + +/// This allows a value of type T or T? +/// to be treated as a value of type T?. +/// +/// We use this so that APIs that have become +/// non-nullable can still be used with `!` and `?` +/// to support older versions of the API as well. +T? _ambiguate(T? value) => value; diff --git a/lib/src/rive_file.dart b/lib/src/rive_file.dart index fb85bb7..83789ed 100644 --- a/lib/src/rive_file.dart +++ b/lib/src/rive_file.dart @@ -20,8 +20,8 @@ import 'package:rive/src/rive_core/animation/keyed_property.dart'; import 'package:rive/src/rive_core/animation/layer_state.dart'; import 'package:rive/src/rive_core/animation/linear_animation.dart'; import 'package:rive/src/rive_core/animation/state_machine.dart'; -import 'package:rive/src/rive_core/animation/state_machine_event.dart'; import 'package:rive/src/rive_core/animation/state_machine_layer.dart'; +import 'package:rive/src/rive_core/animation/state_machine_listener.dart'; import 'package:rive/src/rive_core/animation/state_transition.dart'; import 'package:rive/src/rive_core/artboard.dart'; import 'package:rive/src/rive_core/assets/file_asset.dart'; @@ -159,8 +159,9 @@ class RiveFile { case StateMachineLayerBase.typeKey: stackObject = StateMachineLayerImporter(object as StateMachineLayer); break; - case StateMachineEventBase.typeKey: - stackObject = StateMachineEventImporter(object as StateMachineEvent); + case StateMachineListenerBase.typeKey: + stackObject = + StateMachineListenerImporter(object as StateMachineListener); break; case EntryStateBase.typeKey: case AnyStateBase.typeKey: