refactor: pr suggestions

pull/196/head
Allison Ryan 3 years ago
parent 1e048ecb27
commit 482215d36b

@ -4,6 +4,7 @@ import 'dart:ui';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/widgets.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
/// {@template ball} /// {@template ball}
@ -84,10 +85,10 @@ class Ball<T extends Forge2DGame> extends BodyComponent<T>
body.gravityScale = Vector2(0, 1); body.gravityScale = Vector2(0, 1);
} }
/// Applies a boost and [_FlameEffect] on this [Ball]. /// Applies a boost and [_TurboChargeSpriteAnimation] on this [Ball].
Future<void> boost(Vector2 impulse) async { Future<void> boost(Vector2 impulse) async {
body.linearVelocity = impulse; body.linearVelocity = impulse;
await add(_FlameEffect()); await add(_TurboChargeSpriteAnimation());
} }
@override @override
@ -146,14 +147,15 @@ class _BallSpriteComponent extends SpriteComponent with HasGameRef {
} }
} }
class _FlameEffect extends SpriteAnimationComponent with HasGameRef { class _TurboChargeSpriteAnimation extends SpriteAnimationComponent
_FlameEffect() with HasGameRef {
_TurboChargeSpriteAnimation()
: super( : super(
anchor: const Anchor(0.53, 0.72), anchor: const Anchor(0.53, 0.72),
priority: Ball.boardPriority + 1, priority: Ball.boardPriority + 1,
removeOnFinish: true,
); );
var _duration = 2.0;
late final Vector2 _textureSize; late final Vector2 _textureSize;
@override @override
@ -178,6 +180,7 @@ class _FlameEffect extends SpriteAnimationComponent with HasGameRef {
amountPerRow: amountPerRow, amountPerRow: amountPerRow,
stepTime: 1 / 24, stepTime: 1 / 24,
textureSize: _textureSize, textureSize: _textureSize,
loop: false,
), ),
); );
} }
@ -192,11 +195,5 @@ class _FlameEffect extends SpriteAnimationComponent with HasGameRef {
angle = math.atan2(direction.x, -direction.y); angle = math.atan2(direction.x, -direction.y);
size = (_textureSize / 45) * body.fixtures.first.shape.radius; size = (_textureSize / 45) * body.fixtures.first.shape.radius;
} }
_duration -= dt;
if (_duration < 0) {
removeFromParent();
}
} }
} }

@ -175,7 +175,7 @@ void main() {
expect(ball.body.linearVelocity.y, greaterThan(0)); expect(ball.body.linearVelocity.y, greaterThan(0));
}); });
flameTester.test('adds FlameEffect', (game) async { flameTester.test('adds TurboChargeSpriteAnimation', (game) async {
final ball = Ball(baseColor: Colors.blue); final ball = Ball(baseColor: Colors.blue);
await game.ensureAdd(ball); await game.ensureAdd(ball);
@ -188,22 +188,23 @@ void main() {
); );
}); });
flameTester.test('removes FlameEffect after a duration', (game) async { flameTester.test('removes TurboChargeSpriteAnimation after it finishes',
(game) async {
final ball = Ball(baseColor: Colors.blue); final ball = Ball(baseColor: Colors.blue);
await game.ensureAdd(ball); await game.ensureAdd(ball);
await ball.boost(Vector2.all(10)); await ball.boost(Vector2.all(10));
game.update(0); game.update(0);
final flameEffect = final turboChargeSpriteAnimation =
ball.children.whereType<SpriteAnimationComponent>().single; ball.children.whereType<SpriteAnimationComponent>().single;
expect(ball.contains(flameEffect), isTrue); expect(ball.contains(turboChargeSpriteAnimation), isTrue);
game.update(3); game.update(turboChargeSpriteAnimation.animation!.totalDuration());
await game.ready(); game.update(0.1);
expect(ball.contains(flameEffect), isFalse); expect(ball.contains(turboChargeSpriteAnimation), isFalse);
}); });
}); });
}); });

Loading…
Cancel
Save