Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion packages/flame/lib/src/effects/move_by_effect.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flame/src/effects/controllers/effect_controller.dart';
import 'package:flame/src/effects/move_effect.dart';
import 'package:flame/src/effects/provider_interfaces.dart';
import 'package:meta/meta.dart';
import 'package:vector_math/vector_math.dart';

/// A [MoveEffect] that moves its target by the specified offset vector.
Expand Down Expand Up @@ -28,11 +29,19 @@ class MoveByEffect extends MoveEffect {
super(controller, target, onComplete: onComplete);

final Vector2 _offset;
final Vector2 _scaledOffset = Vector2.zero();

@override
void apply(double progress) {
final dProgress = progress - previousProgress;
target.position += _offset * dProgress;
_scaledOffset.setFrom(_offset);
_scaledOffset.scale(dProgress);
target.position.add(_scaledOffset);
}

@mustCallSuper
void updateOffset(Vector2 newOffset) {
_offset.setFrom(newOffset);
}

@override
Expand Down
21 changes: 16 additions & 5 deletions packages/flame/lib/src/effects/move_to_effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,40 @@ class MoveToEffect extends MoveEffect {
void Function()? onComplete,
super.key,
}) : _destination = destination.clone(),
_offset = Vector2.zero(),
super(controller, target, onComplete: onComplete);

final Vector2 _destination;
final Vector2 _offset;
final Vector2 _offset = Vector2.zero();
final Vector2 _scaledOffset = Vector2.zero();

@override
@mustCallSuper
void onMount() {
super.onMount();
_offset.setFrom(_destination - target.position);
_offset.setFrom(_destination);
_offset.sub(target.position);
}

@override
@mustCallSuper
void onStart() {
_offset.setFrom(_destination - target.position);
_offset.setFrom(_destination);
_offset.sub(target.position);
}

@mustCallSuper
void updateDestination(Vector2 newDestination) {
_destination.setFrom(newDestination);
_offset.setFrom(_destination);
_offset.sub(target.position);
}

@override
void apply(double progress) {
final dProgress = progress - previousProgress;
target.position += _offset * dProgress;
_scaledOffset.setFrom(_offset);
_scaledOffset.scale(dProgress);
target.position.add(_scaledOffset);
}

@override
Expand Down
8 changes: 6 additions & 2 deletions packages/flame/lib/src/effects/scale_effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class ScaleEffect extends Effect with EffectTarget<ScaleProvider> {

final Vector2 _scaleFactor;
late Vector2 _scaleDelta;
final Vector2 _scaledScaleDelta = Vector2.zero();

@override
void onStart() {
Expand All @@ -49,7 +50,9 @@ class ScaleEffect extends Effect with EffectTarget<ScaleProvider> {
@override
void apply(double progress) {
final dProgress = progress - previousProgress;
target.scale += _scaleDelta * dProgress;
_scaledScaleDelta.setFrom(_scaleDelta);
_scaledScaleDelta.scale(dProgress);
target.scale.add(_scaledScaleDelta);
}
}

Expand All @@ -71,6 +74,7 @@ class _ScaleToEffect extends ScaleEffect {

@override
void onStart() {
_scaleDelta = _targetScale - target.scale;
_scaleDelta = _targetScale;
_scaleDelta.sub(target.scale);
}
}
10 changes: 7 additions & 3 deletions packages/flame/lib/src/effects/size_effect.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,15 @@ class SizeEffect extends Effect with EffectTarget<SizeProvider> {
key: key,
);

Vector2 _offset;
final Vector2 _offset;
final Vector2 _scaledOffset = Vector2.zero();

@override
void apply(double progress) {
final dProgress = progress - previousProgress;
target.size += _offset * dProgress;
_scaledOffset.setFrom(_offset);
_scaledOffset.scale(dProgress);
target.size.add(_scaledOffset);
target.size.clampScalar(0, double.infinity);
}
}
Expand All @@ -72,6 +75,7 @@ class _SizeToEffect extends SizeEffect {

@override
void onStart() {
_offset = _targetSize - target.size;
_offset.setFrom(_targetSize);
_offset.sub(target.size);
}
}
Loading