Joystick updates

- Adds invert x/y to joystick (Thanks @alxgibsn)
- Adds the invert to Flutter and C++ runtimes.
- Updates Cpp core generator to latest Flutter+NNBD.
- Fixes warnings and errors from latest Flutter (Dart SDK really).

Diffs=
a4fb3dc7d Joystick updates (#5261)
8f8e06b9e Attempt fixing the builds with new Docker images (#5253)
7768798a7 Update to Flutter 3.10.0 (#5247)
This commit is contained in:
luigi-rosso
2023-05-20 18:07:35 +00:00
parent 0d010f0191
commit a0e536a331
12 changed files with 95 additions and 18 deletions

View File

@ -1 +1 @@
7acff50d4632d9e88b1474d6f23b3b1c8d7f7334
a4fb3dc7decb50f6965e21ebced098cbdc35883d

View File

@ -2,6 +2,7 @@
- Joysticks!
- Bumping to latest rive_common with some changes to AABB math api.
- Bumping Dart SDK requirements.
## 0.10.4

View File

@ -78,7 +78,6 @@ linter:
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_final_fields
- prefer_final_in_for_each
- prefer_foreach

View File

@ -79,6 +79,30 @@ abstract class JoystickBase extends Component {
void xIdChanged(int from, int to);
/// --------------------------------------------------------------------------
/// XInvert field with key 310.
static const bool xInvertInitialValue = false;
bool _xInvert = xInvertInitialValue;
static const int xInvertPropertyKey = 310;
/// Whether to invert the application of the x axis.
bool get xInvert => _xInvert;
/// Change the [_xInvert] field value.
/// [xInvertChanged] will be invoked only if the field's value has changed.
set xInvert(bool value) {
if (_xInvert == value) {
return;
}
bool from = _xInvert;
_xInvert = value;
if (hasValidated) {
xInvertChanged(from, value);
}
}
void xInvertChanged(bool from, bool to);
/// --------------------------------------------------------------------------
/// YId field with key 302.
static const int yIdInitialValue = -1;
@ -104,12 +128,38 @@ abstract class JoystickBase extends Component {
void yIdChanged(int from, int to);
/// --------------------------------------------------------------------------
/// YInvert field with key 311.
static const bool yInvertInitialValue = false;
bool _yInvert = yInvertInitialValue;
static const int yInvertPropertyKey = 311;
/// Whether to invert the application of the y axis.
bool get yInvert => _yInvert;
/// Change the [_yInvert] field value.
/// [yInvertChanged] will be invoked only if the field's value has changed.
set yInvert(bool value) {
if (_yInvert == value) {
return;
}
bool from = _yInvert;
_yInvert = value;
if (hasValidated) {
yInvertChanged(from, value);
}
}
void yInvertChanged(bool from, bool to);
@override
void copy(covariant JoystickBase source) {
super.copy(source);
_x = source._x;
_y = source._y;
_xId = source._xId;
_xInvert = source._xInvert;
_yId = source._yId;
_yInvert = source._yInvert;
}
}

View File

@ -1139,11 +1139,21 @@ class RiveCoreContext {
object.xId = value;
}
break;
case JoystickBase.xInvertPropertyKey:
if (object is JoystickBase && value is bool) {
object.xInvert = value;
}
break;
case JoystickBase.yIdPropertyKey:
if (object is JoystickBase && value is int) {
object.yId = value;
}
break;
case JoystickBase.yInvertPropertyKey:
if (object is JoystickBase && value is bool) {
object.yInvert = value;
}
break;
case BoneBase.lengthPropertyKey:
if (object is BoneBase && value is double) {
object.length = value;
@ -1514,6 +1524,8 @@ class RiveCoreContext {
case ClippingShapeBase.isVisiblePropertyKey:
case CustomPropertyBooleanBase.propertyValuePropertyKey:
case ArtboardBase.clipPropertyKey:
case JoystickBase.xInvertPropertyKey:
case JoystickBase.yInvertPropertyKey:
return boolType;
case KeyFrameColorBase.valuePropertyKey:
case SolidColorBase.colorValuePropertyKey:
@ -1929,6 +1941,10 @@ class RiveCoreContext {
return (object as CustomPropertyBooleanBase).propertyValue;
case ArtboardBase.clipPropertyKey:
return (object as ArtboardBase).clip;
case JoystickBase.xInvertPropertyKey:
return (object as JoystickBase).xInvert;
case JoystickBase.yInvertPropertyKey:
return (object as JoystickBase).yInvert;
}
return false;
}
@ -2927,6 +2943,16 @@ class RiveCoreContext {
object.clip = value;
}
break;
case JoystickBase.xInvertPropertyKey:
if (object is JoystickBase) {
object.xInvert = value;
}
break;
case JoystickBase.yInvertPropertyKey:
if (object is JoystickBase) {
object.yInvert = value;
}
break;
}
}

View File

@ -85,7 +85,4 @@ class KeyedObject extends KeyedObjectBase<RuntimeArtboard> {
return super.import(stack);
}
@override
List<Core<CoreContext>> get referees => keyedProperties.toList();
}

View File

@ -194,7 +194,4 @@ class KeyedProperty extends KeyedPropertyBase<RuntimeArtboard>
return super.import(stack);
}
@override
List<Core<CoreContext>> get referees => keyframes.toList();
}

View File

@ -102,7 +102,4 @@ abstract class KeyFrame extends KeyFrameBase<RuntimeArtboard>
@override
String toString() => '${super.toString()} id: ($id)';
@override
List<Core<CoreContext>> get referees => [];
}

View File

@ -181,6 +181,7 @@ abstract class Component extends ComponentBase<RuntimeArtboard>
// no context, or already dirty.
return;
}
for (final dependent in _dependents) {
dependent.markRebuildDependencies();
}

View File

@ -13,16 +13,19 @@ class Joystick extends JoystickBase {
void apply(CoreContext context) {
var animation = _xAnimation;
if (animation != null) {
var value = xInvert ? -x : x;
animation.apply(
(x + 1) / 2 * animation.durationSeconds,
(value + 1) / 2 * animation.durationSeconds,
coreContext: context,
);
}
animation = _yAnimation;
if (animation != null) {
var value = yInvert ? -y : y;
animation.apply(
(y + 1) / 2 * animation.durationSeconds,
(value + 1) / 2 * animation.durationSeconds,
coreContext: context,
);
}
@ -86,4 +89,14 @@ class Joystick extends JoystickBase {
}
}
}
@override
void xInvertChanged(bool from, bool to) {
context.markNeedsAdvance();
}
@override
void yInvertChanged(bool from, bool to) {
context.markNeedsAdvance();
}
}

View File

@ -51,13 +51,9 @@ abstract class TransformComponent extends TransformComponentBase {
Vec2D get worldTranslation =>
Vec2D.fromValues(worldTransform[4], worldTransform[5]);
@override
double get x;
@override
double get y;
@override
set x(double value);
@override
set y(double value);
@override

View File

@ -4,7 +4,7 @@ homepage: https://rive.app
description: Rive 2 Flutter Runtime. This package provides runtime functionality for playing back and interacting with animations built with the Rive editor available at https://rive.app.
repository: https://github.com/rive-app/rive-flutter
environment:
sdk: ">=2.12.0 <3.0.0"
sdk: ">=2.14.0 <4.0.0"
flutter: ">=2.5.0"
dependencies:
collection: ^1.15.0