mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-24 07:58:59 +08:00
Adding support for align listener action.
This commit is contained in:
@ -23,7 +23,7 @@ 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_machine_listener_importer.dart';
|
||||||
export 'package:rive/src/core/importers/state_transition_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/generated/rive_core_context.dart';
|
||||||
export 'package:rive/src/input_changes.dart';
|
export 'package:rive/src/listener_actions.dart';
|
||||||
export 'package:rive/src/runtime_artboard.dart';
|
export 'package:rive/src/runtime_artboard.dart';
|
||||||
export 'package:rive/src/state_machine_components.dart';
|
export 'package:rive/src/state_machine_components.dart';
|
||||||
export 'package:rive/src/state_transition_conditions.dart';
|
export 'package:rive/src/state_transition_conditions.dart';
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import 'package:rive/src/core/importers/artboard_import_stack_object.dart';
|
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/listener_action.dart';
|
||||||
import 'package:rive/src/rive_core/animation/state_machine_listener.dart';
|
import 'package:rive/src/rive_core/animation/state_machine_listener.dart';
|
||||||
|
|
||||||
class StateMachineListenerImporter extends ArtboardImportStackObject {
|
class StateMachineListenerImporter extends ArtboardImportStackObject {
|
||||||
final StateMachineListener event;
|
final StateMachineListener listener;
|
||||||
StateMachineListenerImporter(this.event);
|
StateMachineListenerImporter(this.listener);
|
||||||
|
|
||||||
void addInputChange(ListenerInputChange change) {
|
void addAction(ListenerAction change) {
|
||||||
// Other state machine importers do this, do we really need it?
|
// listener.context.addObject(change);
|
||||||
// event.context.addObject(change);
|
listener.internalAddAction(change);
|
||||||
event.internalAddInputChange(change);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
lib/src/generated/animation/listener_action_base.dart
Normal file
13
lib/src/generated/animation/listener_action_base.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/// Core automatically generated
|
||||||
|
/// lib/src/generated/animation/listener_action_base.dart.
|
||||||
|
/// Do not modify manually.
|
||||||
|
|
||||||
|
import 'package:rive/src/core/core.dart';
|
||||||
|
|
||||||
|
abstract class ListenerActionBase<T extends CoreContext> extends Core<T> {
|
||||||
|
static const int typeKey = 125;
|
||||||
|
@override
|
||||||
|
int get coreType => ListenerActionBase.typeKey;
|
||||||
|
@override
|
||||||
|
Set<int> get coreTypes => {ListenerActionBase.typeKey};
|
||||||
|
}
|
45
lib/src/generated/animation/listener_align_target_base.dart
Normal file
45
lib/src/generated/animation/listener_align_target_base.dart
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/// Core automatically generated
|
||||||
|
/// lib/src/generated/animation/listener_align_target_base.dart.
|
||||||
|
/// Do not modify manually.
|
||||||
|
|
||||||
|
import 'package:rive/src/rive_core/animation/listener_action.dart';
|
||||||
|
|
||||||
|
abstract class ListenerAlignTargetBase extends ListenerAction {
|
||||||
|
static const int typeKey = 126;
|
||||||
|
@override
|
||||||
|
int get coreType => ListenerAlignTargetBase.typeKey;
|
||||||
|
@override
|
||||||
|
Set<int> get coreTypes =>
|
||||||
|
{ListenerAlignTargetBase.typeKey, ListenerActionBase.typeKey};
|
||||||
|
|
||||||
|
/// --------------------------------------------------------------------------
|
||||||
|
/// TargetId field with key 240.
|
||||||
|
static const int targetIdInitialValue = 0;
|
||||||
|
int _targetId = targetIdInitialValue;
|
||||||
|
static const int targetIdPropertyKey = 240;
|
||||||
|
|
||||||
|
/// Identifier used to track the object use as a target fo this listener
|
||||||
|
/// action.
|
||||||
|
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);
|
||||||
|
|
||||||
|
@override
|
||||||
|
void copy(covariant ListenerAlignTargetBase source) {
|
||||||
|
super.copy(source);
|
||||||
|
_targetId = source._targetId;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
/// lib/src/generated/animation/listener_bool_change_base.dart.
|
/// lib/src/generated/animation/listener_bool_change_base.dart.
|
||||||
/// Do not modify manually.
|
/// Do not modify manually.
|
||||||
|
|
||||||
|
import 'package:rive/src/generated/animation/listener_action_base.dart';
|
||||||
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
||||||
|
|
||||||
abstract class ListenerBoolChangeBase extends ListenerInputChange {
|
abstract class ListenerBoolChangeBase extends ListenerInputChange {
|
||||||
@ -9,8 +10,11 @@ abstract class ListenerBoolChangeBase extends ListenerInputChange {
|
|||||||
@override
|
@override
|
||||||
int get coreType => ListenerBoolChangeBase.typeKey;
|
int get coreType => ListenerBoolChangeBase.typeKey;
|
||||||
@override
|
@override
|
||||||
Set<int> get coreTypes =>
|
Set<int> get coreTypes => {
|
||||||
{ListenerBoolChangeBase.typeKey, ListenerInputChangeBase.typeKey};
|
ListenerBoolChangeBase.typeKey,
|
||||||
|
ListenerInputChangeBase.typeKey,
|
||||||
|
ListenerActionBase.typeKey
|
||||||
|
};
|
||||||
|
|
||||||
/// --------------------------------------------------------------------------
|
/// --------------------------------------------------------------------------
|
||||||
/// Value field with key 228.
|
/// Value field with key 228.
|
||||||
|
@ -2,14 +2,15 @@
|
|||||||
/// lib/src/generated/animation/listener_input_change_base.dart.
|
/// lib/src/generated/animation/listener_input_change_base.dart.
|
||||||
/// Do not modify manually.
|
/// Do not modify manually.
|
||||||
|
|
||||||
import 'package:rive/src/core/core.dart';
|
import 'package:rive/src/rive_core/animation/listener_action.dart';
|
||||||
|
|
||||||
abstract class ListenerInputChangeBase<T extends CoreContext> extends Core<T> {
|
abstract class ListenerInputChangeBase extends ListenerAction {
|
||||||
static const int typeKey = 116;
|
static const int typeKey = 116;
|
||||||
@override
|
@override
|
||||||
int get coreType => ListenerInputChangeBase.typeKey;
|
int get coreType => ListenerInputChangeBase.typeKey;
|
||||||
@override
|
@override
|
||||||
Set<int> get coreTypes => {ListenerInputChangeBase.typeKey};
|
Set<int> get coreTypes =>
|
||||||
|
{ListenerInputChangeBase.typeKey, ListenerActionBase.typeKey};
|
||||||
|
|
||||||
/// --------------------------------------------------------------------------
|
/// --------------------------------------------------------------------------
|
||||||
/// InputId field with key 227.
|
/// InputId field with key 227.
|
||||||
@ -37,6 +38,7 @@ abstract class ListenerInputChangeBase<T extends CoreContext> extends Core<T> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void copy(covariant ListenerInputChangeBase source) {
|
void copy(covariant ListenerInputChangeBase source) {
|
||||||
|
super.copy(source);
|
||||||
_inputId = source._inputId;
|
_inputId = source._inputId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
/// lib/src/generated/animation/listener_number_change_base.dart.
|
/// lib/src/generated/animation/listener_number_change_base.dart.
|
||||||
/// Do not modify manually.
|
/// Do not modify manually.
|
||||||
|
|
||||||
|
import 'package:rive/src/generated/animation/listener_action_base.dart';
|
||||||
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
||||||
|
|
||||||
abstract class ListenerNumberChangeBase extends ListenerInputChange {
|
abstract class ListenerNumberChangeBase extends ListenerInputChange {
|
||||||
@ -9,8 +10,11 @@ abstract class ListenerNumberChangeBase extends ListenerInputChange {
|
|||||||
@override
|
@override
|
||||||
int get coreType => ListenerNumberChangeBase.typeKey;
|
int get coreType => ListenerNumberChangeBase.typeKey;
|
||||||
@override
|
@override
|
||||||
Set<int> get coreTypes =>
|
Set<int> get coreTypes => {
|
||||||
{ListenerNumberChangeBase.typeKey, ListenerInputChangeBase.typeKey};
|
ListenerNumberChangeBase.typeKey,
|
||||||
|
ListenerInputChangeBase.typeKey,
|
||||||
|
ListenerActionBase.typeKey
|
||||||
|
};
|
||||||
|
|
||||||
/// --------------------------------------------------------------------------
|
/// --------------------------------------------------------------------------
|
||||||
/// Value field with key 229.
|
/// Value field with key 229.
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
/// lib/src/generated/animation/listener_trigger_change_base.dart.
|
/// lib/src/generated/animation/listener_trigger_change_base.dart.
|
||||||
/// Do not modify manually.
|
/// Do not modify manually.
|
||||||
|
|
||||||
|
import 'package:rive/src/generated/animation/listener_action_base.dart';
|
||||||
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
||||||
|
|
||||||
abstract class ListenerTriggerChangeBase extends ListenerInputChange {
|
abstract class ListenerTriggerChangeBase extends ListenerInputChange {
|
||||||
@ -9,6 +10,9 @@ abstract class ListenerTriggerChangeBase extends ListenerInputChange {
|
|||||||
@override
|
@override
|
||||||
int get coreType => ListenerTriggerChangeBase.typeKey;
|
int get coreType => ListenerTriggerChangeBase.typeKey;
|
||||||
@override
|
@override
|
||||||
Set<int> get coreTypes =>
|
Set<int> get coreTypes => {
|
||||||
{ListenerTriggerChangeBase.typeKey, ListenerInputChangeBase.typeKey};
|
ListenerTriggerChangeBase.typeKey,
|
||||||
|
ListenerInputChangeBase.typeKey,
|
||||||
|
ListenerActionBase.typeKey
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,7 @@ 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_double.dart';
|
||||||
import 'package:rive/src/rive_core/animation/keyframe_id.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/linear_animation.dart';
|
||||||
|
import 'package:rive/src/rive_core/animation/listener_align_target.dart';
|
||||||
import 'package:rive/src/rive_core/animation/listener_bool_change.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_number_change.dart';
|
||||||
import 'package:rive/src/rive_core/animation/listener_trigger_change.dart';
|
import 'package:rive/src/rive_core/animation/listener_trigger_change.dart';
|
||||||
@ -164,6 +165,8 @@ class RiveCoreContext {
|
|||||||
return KeyFrameBool();
|
return KeyFrameBool();
|
||||||
case ListenerBoolChangeBase.typeKey:
|
case ListenerBoolChangeBase.typeKey:
|
||||||
return ListenerBoolChange();
|
return ListenerBoolChange();
|
||||||
|
case ListenerAlignTargetBase.typeKey:
|
||||||
|
return ListenerAlignTarget();
|
||||||
case TransitionNumberConditionBase.typeKey:
|
case TransitionNumberConditionBase.typeKey:
|
||||||
return TransitionNumberCondition();
|
return TransitionNumberCondition();
|
||||||
case AnyStateBase.typeKey:
|
case AnyStateBase.typeKey:
|
||||||
@ -612,6 +615,11 @@ class RiveCoreContext {
|
|||||||
object.value = value;
|
object.value = value;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ListenerAlignTargetBase.targetIdPropertyKey:
|
||||||
|
if (object is ListenerAlignTargetBase && value is int) {
|
||||||
|
object.targetId = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TransitionValueConditionBase.opValuePropertyKey:
|
case TransitionValueConditionBase.opValuePropertyKey:
|
||||||
if (object is TransitionValueConditionBase && value is int) {
|
if (object is TransitionValueConditionBase && value is int) {
|
||||||
object.opValue = value;
|
object.opValue = value;
|
||||||
@ -1196,6 +1204,7 @@ class RiveCoreContext {
|
|||||||
case KeyFrameBase.interpolatorIdPropertyKey:
|
case KeyFrameBase.interpolatorIdPropertyKey:
|
||||||
case KeyFrameIdBase.valuePropertyKey:
|
case KeyFrameIdBase.valuePropertyKey:
|
||||||
case ListenerBoolChangeBase.valuePropertyKey:
|
case ListenerBoolChangeBase.valuePropertyKey:
|
||||||
|
case ListenerAlignTargetBase.targetIdPropertyKey:
|
||||||
case TransitionValueConditionBase.opValuePropertyKey:
|
case TransitionValueConditionBase.opValuePropertyKey:
|
||||||
case StateTransitionBase.stateToIdPropertyKey:
|
case StateTransitionBase.stateToIdPropertyKey:
|
||||||
case StateTransitionBase.flagsPropertyKey:
|
case StateTransitionBase.flagsPropertyKey:
|
||||||
@ -1423,6 +1432,8 @@ class RiveCoreContext {
|
|||||||
return (object as KeyFrameIdBase).value;
|
return (object as KeyFrameIdBase).value;
|
||||||
case ListenerBoolChangeBase.valuePropertyKey:
|
case ListenerBoolChangeBase.valuePropertyKey:
|
||||||
return (object as ListenerBoolChangeBase).value;
|
return (object as ListenerBoolChangeBase).value;
|
||||||
|
case ListenerAlignTargetBase.targetIdPropertyKey:
|
||||||
|
return (object as ListenerAlignTargetBase).targetId;
|
||||||
case TransitionValueConditionBase.opValuePropertyKey:
|
case TransitionValueConditionBase.opValuePropertyKey:
|
||||||
return (object as TransitionValueConditionBase).opValue;
|
return (object as TransitionValueConditionBase).opValue;
|
||||||
case StateTransitionBase.stateToIdPropertyKey:
|
case StateTransitionBase.stateToIdPropertyKey:
|
||||||
@ -1913,6 +1924,11 @@ class RiveCoreContext {
|
|||||||
object.value = value;
|
object.value = value;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ListenerAlignTargetBase.targetIdPropertyKey:
|
||||||
|
if (object is ListenerAlignTargetBase) {
|
||||||
|
object.targetId = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TransitionValueConditionBase.opValuePropertyKey:
|
case TransitionValueConditionBase.opValuePropertyKey:
|
||||||
if (object is TransitionValueConditionBase) {
|
if (object is TransitionValueConditionBase) {
|
||||||
object.opValue = value;
|
object.opValue = value;
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
import 'dart:collection';
|
|
||||||
|
|
||||||
import 'package:rive/src/rive_core/animation/listener_input_change.dart';
|
|
||||||
|
|
||||||
class InputChanges extends ListBase<ListenerInputChange> {
|
|
||||||
final List<ListenerInputChange?> _values = [];
|
|
||||||
List<ListenerInputChange> get values => _values.cast<ListenerInputChange>();
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get length => _values.length;
|
|
||||||
|
|
||||||
@override
|
|
||||||
set length(int value) => _values.length = value;
|
|
||||||
|
|
||||||
@override
|
|
||||||
ListenerInputChange operator [](int index) => _values[index]!;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void operator []=(int index, ListenerInputChange value) =>
|
|
||||||
_values[index] = value;
|
|
||||||
}
|
|
20
lib/src/listener_actions.dart
Normal file
20
lib/src/listener_actions.dart
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import 'dart:collection';
|
||||||
|
|
||||||
|
import 'package:rive/src/rive_core/animation/listener_action.dart';
|
||||||
|
|
||||||
|
class ListenerActions extends ListBase<ListenerAction> {
|
||||||
|
final List<ListenerAction?> _values = [];
|
||||||
|
List<ListenerAction> get values => _values.cast<ListenerAction>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get length => _values.length;
|
||||||
|
|
||||||
|
@override
|
||||||
|
set length(int value) => _values.length = value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
ListenerAction operator [](int index) => _values[index]!;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void operator []=(int index, ListenerAction value) => _values[index] = value;
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
abstract class Interpolator {
|
abstract class Interpolator {
|
||||||
int get id;
|
int get id;
|
||||||
|
|
||||||
|
30
lib/src/rive_core/animation/listener_action.dart
Normal file
30
lib/src/rive_core/animation/listener_action.dart
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import 'package:rive/src/core/core.dart';
|
||||||
|
import 'package:rive/src/generated/animation/listener_action_base.dart';
|
||||||
|
import 'package:rive/src/rive_core/animation/state_machine_listener.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||||
|
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
||||||
|
|
||||||
|
export 'package:rive/src/generated/animation/listener_action_base.dart';
|
||||||
|
|
||||||
|
abstract class ListenerAction extends ListenerActionBase {
|
||||||
|
@override
|
||||||
|
void onAdded() {}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onAddedDirty() {}
|
||||||
|
|
||||||
|
/// Perform the action.
|
||||||
|
void perform(StateMachineController controller, Vec2D position);
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool import(ImportStack importStack) {
|
||||||
|
var importer = importStack
|
||||||
|
.latest<StateMachineListenerImporter>(StateMachineListenerBase.typeKey);
|
||||||
|
if (importer == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
importer.addAction(this);
|
||||||
|
|
||||||
|
return super.import(importStack);
|
||||||
|
}
|
||||||
|
}
|
31
lib/src/rive_core/animation/listener_align_target.dart
Normal file
31
lib/src/rive_core/animation/listener_align_target.dart
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import 'package:rive/src/generated/animation/listener_align_target_base.dart';
|
||||||
|
import 'package:rive/src/rive_core/constraints/constraint.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/mat2d.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.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/listener_align_target_base.dart';
|
||||||
|
|
||||||
|
class ListenerAlignTarget extends ListenerAlignTargetBase {
|
||||||
|
@override
|
||||||
|
void perform(StateMachineController controller, Vec2D position) {
|
||||||
|
Node? target = controller.core.resolve(targetId);
|
||||||
|
|
||||||
|
if (target == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var targetParentWorld = parentWorld(target);
|
||||||
|
var inverse = Mat2D();
|
||||||
|
if (!Mat2D.invert(inverse, targetParentWorld)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var localPosition = inverse * position;
|
||||||
|
target.x = localPosition.x;
|
||||||
|
target.y = localPosition.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void targetIdChanged(int from, int to) {}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:rive/src/generated/animation/listener_bool_change_base.dart';
|
import 'package:rive/src/generated/animation/listener_bool_change_base.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||||
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
||||||
|
|
||||||
export 'package:rive/src/generated/animation/listener_bool_change_base.dart';
|
export 'package:rive/src/generated/animation/listener_bool_change_base.dart';
|
||||||
@ -8,7 +9,7 @@ class ListenerBoolChange extends ListenerBoolChangeBase {
|
|||||||
void valueChanged(int from, int to) {}
|
void valueChanged(int from, int to) {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void perform(StateMachineController controller) {
|
void perform(StateMachineController controller, Vec2D position) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case 0:
|
case 0:
|
||||||
controller.setInputValue(inputId, false);
|
controller.setInputValue(inputId, false);
|
||||||
|
@ -2,8 +2,6 @@ import 'package:rive/src/core/core.dart';
|
|||||||
import 'package:rive/src/generated/animation/listener_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.dart';
|
||||||
import 'package:rive/src/rive_core/animation/state_machine_input.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/listener_input_change_base.dart';
|
export 'package:rive/src/generated/animation/listener_input_change_base.dart';
|
||||||
|
|
||||||
@ -25,25 +23,17 @@ abstract class ListenerInputChange extends ListenerInputChangeBase {
|
|||||||
input = context.resolveWithDefault(to, StateMachineInput.unknown);
|
input = context.resolveWithDefault(to, StateMachineInput.unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void onAdded() {}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onAddedDirty() {
|
void onAddedDirty() {
|
||||||
|
super.onAddedDirty();
|
||||||
input = context.resolveWithDefault(inputId, StateMachineInput.unknown);
|
input = context.resolveWithDefault(inputId, StateMachineInput.unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Make the change to the input values.
|
|
||||||
void perform(StateMachineController controller);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool import(ImportStack importStack) {
|
bool import(ImportStack importStack) {
|
||||||
var importer = importStack
|
if (!super.import(importStack)) {
|
||||||
.latest<StateMachineListenerImporter>(StateMachineListenerBase.typeKey);
|
|
||||||
if (importer == null) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
importer.addInputChange(this);
|
|
||||||
|
|
||||||
var stateMachineImporter =
|
var stateMachineImporter =
|
||||||
importStack.latest<StateMachineImporter>(StateMachineBase.typeKey);
|
importStack.latest<StateMachineImporter>(StateMachineBase.typeKey);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:rive/src/generated/animation/listener_number_change_base.dart';
|
import 'package:rive/src/generated/animation/listener_number_change_base.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||||
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
||||||
|
|
||||||
export 'package:rive/src/generated/animation/listener_number_change_base.dart';
|
export 'package:rive/src/generated/animation/listener_number_change_base.dart';
|
||||||
@ -8,6 +9,6 @@ class ListenerNumberChange extends ListenerNumberChangeBase {
|
|||||||
void valueChanged(double from, double to) {}
|
void valueChanged(double from, double to) {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void perform(StateMachineController controller) =>
|
void perform(StateMachineController controller, Vec2D position) =>
|
||||||
controller.setInputValue(inputId, value);
|
controller.setInputValue(inputId, value);
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import 'package:rive/src/generated/animation/listener_trigger_change_base.dart';
|
import 'package:rive/src/generated/animation/listener_trigger_change_base.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||||
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
||||||
|
|
||||||
export 'package:rive/src/generated/animation/listener_trigger_change_base.dart';
|
export 'package:rive/src/generated/animation/listener_trigger_change_base.dart';
|
||||||
|
|
||||||
class ListenerTriggerChange extends ListenerTriggerChangeBase {
|
class ListenerTriggerChange extends ListenerTriggerChangeBase {
|
||||||
@override
|
@override
|
||||||
void perform(StateMachineController controller) =>
|
void perform(StateMachineController controller, Vec2D position) =>
|
||||||
controller.setInputValue(inputId, true);
|
controller.setInputValue(inputId, true);
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,19 @@ import 'dart:collection';
|
|||||||
|
|
||||||
import 'package:rive/src/core/core.dart';
|
import 'package:rive/src/core/core.dart';
|
||||||
import 'package:rive/src/generated/animation/state_machine_listener_base.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/listener_action.dart';
|
||||||
import 'package:rive/src/rive_core/animation/state_machine.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/animation/state_machine_component.dart';
|
||||||
|
import 'package:rive/src/rive_core/math/vec2d.dart';
|
||||||
import 'package:rive/src/rive_core/node.dart';
|
import 'package:rive/src/rive_core/node.dart';
|
||||||
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
import 'package:rive/src/rive_core/state_machine_controller.dart';
|
||||||
|
|
||||||
export 'package:rive/src/generated/animation/state_machine_listener_base.dart';
|
export 'package:rive/src/generated/animation/state_machine_listener_base.dart';
|
||||||
|
|
||||||
enum ListenerType { enter, exit, down, up }
|
enum ListenerType { enter, exit, down, up, move }
|
||||||
|
|
||||||
class StateMachineListener extends StateMachineListenerBase {
|
class StateMachineListener extends StateMachineListenerBase {
|
||||||
final InputChanges inputChanges = InputChanges();
|
final ListenerActions actions = ListenerActions();
|
||||||
|
|
||||||
Node? _target;
|
Node? _target;
|
||||||
Node? get target => _target;
|
Node? get target => _target;
|
||||||
@ -43,28 +44,28 @@ class StateMachineListener extends StateMachineListenerBase {
|
|||||||
@override
|
@override
|
||||||
void targetIdChanged(int from, int to) => target = context.resolve(to);
|
void targetIdChanged(int from, int to) => target = context.resolve(to);
|
||||||
|
|
||||||
/// Called by rive_core to add an [ListenerInputChange] to this
|
/// Called by rive_core to add an [ListenerAction] to this
|
||||||
/// [StateMachineListener]. This should be @internal when it's supported.
|
/// [StateMachineListener]. This should be @internal when it's supported.
|
||||||
bool internalAddInputChange(ListenerInputChange change) {
|
bool internalAddAction(ListenerAction action) {
|
||||||
if (inputChanges.contains(change)) {
|
if (actions.contains(action)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
inputChanges.add(change);
|
actions.add(action);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called by rive_core to remove an [ListenerInputChange] from this
|
/// Called by rive_core to remove an [ListenerAction] from this
|
||||||
/// [StateMachineListener]. This should be @internal when it's supported.
|
/// [StateMachineListener]. This should be @internal when it's supported.
|
||||||
bool internalRemoveInputChange(ListenerInputChange change) {
|
bool internalRemoveAction(ListenerAction action) {
|
||||||
var removed = inputChanges.remove(change);
|
var removed = actions.remove(action);
|
||||||
|
|
||||||
return removed;
|
return removed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void performChanges(StateMachineController controller) {
|
void performChanges(StateMachineController controller, Vec2D position) {
|
||||||
for (final change in inputChanges) {
|
for (final action in actions) {
|
||||||
change.perform(controller);
|
action.perform(controller, position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,8 +254,12 @@ class StateMachineController extends RiveAnimationController<CoreContext> {
|
|||||||
/// The artboard that this state machine controller is manipulating.
|
/// The artboard that this state machine controller is manipulating.
|
||||||
Artboard? get artboard => _artboard;
|
Artboard? get artboard => _artboard;
|
||||||
|
|
||||||
|
late CoreContext core;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool init(CoreContext core) {
|
bool init(CoreContext core) {
|
||||||
|
this.core = core;
|
||||||
|
|
||||||
_clearLayerControllers();
|
_clearLayerControllers();
|
||||||
|
|
||||||
for (final layer in stateMachine.layers) {
|
for (final layer in stateMachine.layers) {
|
||||||
@ -391,15 +395,15 @@ class StateMachineController extends RiveAnimationController<CoreContext> {
|
|||||||
// we're trying to trigger.
|
// we're trying to trigger.
|
||||||
if (hoverChange) {
|
if (hoverChange) {
|
||||||
if (isOver && event.listenerType == ListenerType.enter) {
|
if (isOver && event.listenerType == ListenerType.enter) {
|
||||||
event.performChanges(this);
|
event.performChanges(this, position);
|
||||||
isActive = true;
|
isActive = true;
|
||||||
} else if (!isOver && event.listenerType == ListenerType.exit) {
|
} else if (!isOver && event.listenerType == ListenerType.exit) {
|
||||||
event.performChanges(this);
|
event.performChanges(this, position);
|
||||||
isActive = true;
|
isActive = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isOver && hitEvent == event.listenerType) {
|
if (isOver && hitEvent == event.listenerType) {
|
||||||
event.performChanges(this);
|
event.performChanges(this, position);
|
||||||
isActive = true;
|
isActive = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -427,7 +431,10 @@ class StateMachineController extends RiveAnimationController<CoreContext> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointerMove(Vec2D position) => _processEvent(position);
|
void pointerMove(Vec2D position) => _processEvent(
|
||||||
|
position,
|
||||||
|
hitEvent: ListenerType.move,
|
||||||
|
);
|
||||||
|
|
||||||
void pointerDown(Vec2D position) => _processEvent(
|
void pointerDown(Vec2D position) => _processEvent(
|
||||||
position,
|
position,
|
||||||
|
Reference in New Issue
Block a user