From 64dfcaf35b94ed5a922da8228c9e07864e59003b Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Fri, 29 Apr 2022 14:47:53 +0200 Subject: [PATCH] refactor: refactored multipliers and coverage --- .../components/multipliers/multipliers.dart | 16 ++--- .../multiplier/cubit/multiplier_cubit.dart | 7 +-- .../multiplier/cubit/multiplier_state.dart | 6 ++ .../src/components/multiplier/multiplier.dart | 63 +++++++++++++++++-- .../multiplier/multiplier_test.dart | 53 ++++++++++++++++ 5 files changed, 125 insertions(+), 20 deletions(-) diff --git a/lib/game/components/multipliers/multipliers.dart b/lib/game/components/multipliers/multipliers.dart index be5579f2..cb9eb579 100644 --- a/lib/game/components/multipliers/multipliers.dart +++ b/lib/game/components/multipliers/multipliers.dart @@ -12,27 +12,23 @@ class Multipliers extends Component { Multipliers() : super( children: [ - Multiplier( - value: MultiplierValue.x2, + Multiplier.x3( position: Vector2(-19.5, -2), rotation: -15 * math.pi / 180, ), - Multiplier( - value: MultiplierValue.x3, + Multiplier.x3( position: Vector2(13, -9.4), rotation: 15 * math.pi / 180, ), - Multiplier( - value: MultiplierValue.x4, + Multiplier.x4( position: Vector2(0, -21.2), + rotation: 0, ), - Multiplier( - value: MultiplierValue.x5, + Multiplier.x5( position: Vector2(-8.5, -28), rotation: -3 * math.pi / 180, ), - Multiplier( - value: MultiplierValue.x6, + Multiplier.x6( position: Vector2(10, -30.7), rotation: 8 * math.pi / 180, ), diff --git a/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_cubit.dart b/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_cubit.dart index 35c565f3..ee56cbe6 100644 --- a/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_cubit.dart +++ b/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_cubit.dart @@ -8,12 +8,7 @@ part 'multiplier_state.dart'; class MultiplierCubit extends Cubit { MultiplierCubit(MultiplierValue multiplierValue) - : super( - MultiplierState( - value: multiplierValue, - spriteState: MultiplierSpriteState.dimmed, - ), - ); + : super(MultiplierState.initial(multiplierValue)); /// Event added when the game current multiplier changes. void next(int multiplier) { diff --git a/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_state.dart b/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_state.dart index 67ab0c87..b3133387 100644 --- a/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_state.dart +++ b/packages/pinball_components/lib/src/components/multiplier/cubit/multiplier_state.dart @@ -15,6 +15,12 @@ class MultiplierState extends Equatable { required this.spriteState, }); + const MultiplierState.initial(MultiplierValue multiplierValue) + : this( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ); + /// Current value for the [Multiplier] final MultiplierValue value; diff --git a/packages/pinball_components/lib/src/components/multiplier/multiplier.dart b/packages/pinball_components/lib/src/components/multiplier/multiplier.dart index a5bf0349..c1a18773 100644 --- a/packages/pinball_components/lib/src/components/multiplier/multiplier.dart +++ b/packages/pinball_components/lib/src/components/multiplier/multiplier.dart @@ -1,5 +1,5 @@ // ignore_for_file: public_member_api_docs - +import 'dart:math' as math; import 'package:flame/components.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/gen/assets.gen.dart'; @@ -13,16 +13,71 @@ export 'cubit/multiplier_cubit.dart'; /// {@endtemplate} class Multiplier extends Component { /// {@macro multiplier} - Multiplier({ + Multiplier._({ required MultiplierValue value, required Vector2 position, - double rotation = 0, + required double rotation, + required this.bloc, }) : _value = value, _position = position, _rotation = rotation, - bloc = MultiplierCubit(value), super(); + /// {@macro multiplier} + Multiplier.x2({ + required Vector2 position, + required double rotation, + }) : this._( + value: MultiplierValue.x2, + position: position, + rotation: rotation, + bloc: MultiplierCubit(MultiplierValue.x2), + ); + + /// {@macro multiplier} + Multiplier.x3({ + required Vector2 position, + required double rotation, + }) : this._( + value: MultiplierValue.x3, + position: position, + rotation: rotation, + bloc: MultiplierCubit(MultiplierValue.x3), + ); + + /// {@macro multiplier} + Multiplier.x4({ + required Vector2 position, + required double rotation, + }) : this._( + value: MultiplierValue.x4, + position: position, + rotation: rotation, + bloc: MultiplierCubit(MultiplierValue.x4), + ); + + /// {@macro multiplier} + Multiplier.x5({ + required Vector2 position, + required double rotation, + }) : this._( + value: MultiplierValue.x5, + position: position, + rotation: rotation, + bloc: MultiplierCubit(MultiplierValue.x5), + ); + + /// {@macro multiplier} + Multiplier.x6({ + required Vector2 position, + required double rotation, + }) : this._( + value: MultiplierValue.x6, + position: position, + rotation: rotation, + bloc: MultiplierCubit(MultiplierValue.x6), + ); + /// Creates a [Multiplier] without any children. /// /// This can be used for testing [Multiplier]'s behaviors in isolation. diff --git a/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart index 85134b54..3d130023 100644 --- a/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart +++ b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart @@ -28,6 +28,59 @@ void main() { ]; final flameTester = FlameTester(() => TestGame(assets)); + flameTester.test('"x2" loads correctly', (game) async { + final multiplier = Multiplier.x2( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + flameTester.test('"x2" loads correctly', (game) async { + final multiplier = Multiplier.x2( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + + flameTester.test('"x3" loads correctly', (game) async { + final multiplier = Multiplier.x3( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + + flameTester.test('"x4" loads correctly', (game) async { + final multiplier = Multiplier.x4( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + + flameTester.test('"x5" loads correctly', (game) async { + final multiplier = Multiplier.x5( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + + flameTester.test('"x6" loads correctly', (game) async { + final multiplier = Multiplier.x6( + position: Vector2.zero(), + rotation: 0, + ); + await game.ensureAdd(multiplier); + expect(game.contains(multiplier), isTrue); + }); + group('renders correctly', () { group('x2', () { const multiplierValue = MultiplierValue.x2;