mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-28 02:37:16 +08:00
Trigger input resetting between state changes.
This commit is contained in:
@ -5,6 +5,7 @@ import 'package:rive/src/rive_core/runtime/exceptions/rive_format_error_exceptio
|
||||
export 'package:rive/src/animation_list.dart';
|
||||
export 'package:rive/src/state_machine_components.dart';
|
||||
export 'package:rive/src/state_transition_conditions.dart';
|
||||
export 'package:rive/src/state_transitions.dart';
|
||||
export 'package:rive/src/container_children.dart';
|
||||
export 'package:rive/src/runtime_artboard.dart';
|
||||
export 'package:rive/src/generated/rive_core_context.dart';
|
||||
|
@ -5,8 +5,8 @@ import 'package:rive/src/generated/animation/layer_state_base.dart';
|
||||
export 'package:rive/src/generated/animation/layer_state_base.dart';
|
||||
|
||||
abstract class LayerState extends LayerStateBase {
|
||||
final Set<StateTransition> _transitions = {};
|
||||
Iterable<StateTransition> get transitions => _transitions;
|
||||
final StateTransitions _transitions = StateTransitions();
|
||||
StateTransitions get transitions => _transitions;
|
||||
@override
|
||||
void onAdded() {}
|
||||
@override
|
||||
|
@ -18,7 +18,6 @@ class TransitionTriggerCondition extends TransitionTriggerConditionBase {
|
||||
}
|
||||
var triggerInput = input as StateMachineTrigger;
|
||||
if (triggerInput.triggered) {
|
||||
triggerInput.reset();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'dart:collection';
|
||||
import 'package:rive/src/core/core.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:rive/src/rive_core/animation/animation_state.dart';
|
||||
import 'package:rive/src/rive_core/animation/layer_state.dart';
|
||||
import 'package:rive/src/rive_core/animation/linear_animation_instance.dart';
|
||||
@ -32,8 +33,8 @@ class LayerController {
|
||||
_changeState(null);
|
||||
}
|
||||
|
||||
bool apply(CoreContext core, double elapsedSeconds,
|
||||
HashMap<int, dynamic> inputValues) {
|
||||
bool apply(StateMachineController machineController, CoreContext core,
|
||||
double elapsedSeconds, HashMap<int, dynamic> inputValues) {
|
||||
if (_animationInstance != null) {
|
||||
_animationInstance!.advance(elapsedSeconds);
|
||||
}
|
||||
@ -53,6 +54,7 @@ class LayerController {
|
||||
}
|
||||
for (int i = 0; updateState(inputValues); i++) {
|
||||
if (i == 100) {
|
||||
machineController.advanceInputs();
|
||||
print('StateMachineController.apply exceeded max iterations.');
|
||||
return false;
|
||||
}
|
||||
@ -167,11 +169,13 @@ class StateMachineController extends RiveAnimationController<CoreContext> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@protected
|
||||
void advanceInputs() {}
|
||||
@override
|
||||
void apply(CoreContext core, double elapsedSeconds) {
|
||||
bool keepGoing = false;
|
||||
for (final layerController in layerControllers) {
|
||||
if (layerController.apply(core, elapsedSeconds, inputValues)) {
|
||||
if (layerController.apply(this, core, elapsedSeconds, inputValues)) {
|
||||
keepGoing = true;
|
||||
}
|
||||
}
|
||||
|
@ -167,4 +167,11 @@ class StateMachineController extends core.StateMachineController {
|
||||
input.advance();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void advanceInputs() {
|
||||
for (final input in _inputs) {
|
||||
input.advance();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
lib/src/state_transitions.dart
Normal file
19
lib/src/state_transitions.dart
Normal file
@ -0,0 +1,19 @@
|
||||
import 'dart:collection';
|
||||
import 'package:rive/src/rive_core/animation/state_transition.dart';
|
||||
|
||||
class StateTransitions extends ListBase<StateTransition> {
|
||||
final List<StateTransition?> _values = [];
|
||||
List<StateTransition> get values => _values.cast<StateTransition>();
|
||||
|
||||
@override
|
||||
int get length => _values.length;
|
||||
|
||||
@override
|
||||
set length(int value) => _values.length = value;
|
||||
|
||||
@override
|
||||
StateTransition operator [](int index) => _values[index]!;
|
||||
|
||||
@override
|
||||
void operator []=(int index, StateTransition value) => _values[index] = value;
|
||||
}
|
Reference in New Issue
Block a user