From 23ad66ed7839aafe315ece7ab3f3cfb71d6735bc Mon Sep 17 00:00:00 2001 From: alestiago Date: Tue, 3 May 2022 18:16:39 +0100 Subject: [PATCH] refactor: moved scaling to `BallScalingBehavior` --- .../lib/src/components/ball/ball.dart | 11 +++++++- .../ball/behaviors/ball_scaling_behavior.dart | 4 ++- .../src/components/{ => ball}/ball_test.dart | 25 ++++++++----------- 3 files changed, 24 insertions(+), 16 deletions(-) rename packages/pinball_components/test/src/components/{ => ball}/ball_test.dart (91%) diff --git a/packages/pinball_components/lib/src/components/ball/ball.dart b/packages/pinball_components/lib/src/components/ball/ball.dart index fb8d02af..175d8343 100644 --- a/packages/pinball_components/lib/src/components/ball/ball.dart +++ b/packages/pinball_components/lib/src/components/ball/ball.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:math' as math; -import 'dart:ui'; import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; @@ -32,6 +31,16 @@ class Ball extends BodyComponent layer = Layer.board; } + /// Creates a [Ball] without any behaviors. + /// + /// This can be used for testing [Ball]'s behaviors in isolation. + @visibleForTesting + Ball.test() + : baseColor = const Color(0xFFFFFFFF), + super( + children: [_BallSpriteComponent()], + ); + /// The size of the [Ball]. static final Vector2 size = Vector2.all(4.13); diff --git a/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart b/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart index 56abad69..6bf71add 100644 --- a/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart +++ b/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart @@ -16,6 +16,8 @@ class BallScalingBehavior extends Component with ParentIsA { parent.body.fixtures.first.shape.radius = (Ball.size.x / 2) * scaleFactor; - parent.firstChild()!.scale = Vector2.all(scaleFactor); + parent.firstChild()!.scale.setFrom( + Vector2.all(scaleFactor), + ); } } diff --git a/packages/pinball_components/test/src/components/ball_test.dart b/packages/pinball_components/test/src/components/ball/ball_test.dart similarity index 91% rename from packages/pinball_components/test/src/components/ball_test.dart rename to packages/pinball_components/test/src/components/ball/ball_test.dart index 26a03886..2e4b9abb 100644 --- a/packages/pinball_components/test/src/components/ball_test.dart +++ b/packages/pinball_components/test/src/components/ball/ball_test.dart @@ -6,8 +6,9 @@ import 'package:flame_test/flame_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/ball/behaviors/behaviors.dart'; -import '../../helpers/helpers.dart'; +import '../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -25,6 +26,15 @@ void main() { }, ); + flameTester.test('add a BallScalingBehavior', (game) async { + final ball = Ball(baseColor: Colors.blue); + await game.ensureAdd(ball); + expect( + ball.descendants().whereType().length, + equals(1), + ); + }); + group('body', () { flameTester.test( 'is dynamic', @@ -116,19 +126,6 @@ void main() { expect(ball.body.position, equals(ball.initialPosition)); }); }); - - // TODO(allisonryan0002): delete or retest this if/when solution is added - // to prevent forces on a ball while stopped. - - // flameTester.test('by applying velocity', (game) async { - // final ball = Ball(baseColor: Colors.blue); - // await game.ensureAdd(ball); - // ball.stop(); - - // ball.body.linearVelocity.setValues(10, 10); - // game.update(1); - // expect(ball.body.position, equals(ball.initialPosition)); - // }); }); group('resume', () {