From 058549cd39359ce198f7a5831ab4bc39cc4936bc Mon Sep 17 00:00:00 2001 From: alestiago Date: Sat, 30 Apr 2022 16:59:39 +0100 Subject: [PATCH] refactor: simplified Fixtures creation --- .../kicker/behaviors/behaviors.dart | 0 .../kicker_ball_contact_behavior.dart | 1 + .../behaviors/kicker_blinking_behavior.dart | 1 + .../components/kicker/cubit/kicker_cubit.dart | 17 ++++++++++++ .../components/kicker/cubit/kicker_state.dart | 8 ++++++ .../src/components/{ => kicker}/kicker.dart | 27 +++++++------------ .../lib/stories/bottom_group/kicker_game.dart | 4 +-- .../lib/stories/plunger/plunger_game.dart | 2 +- 8 files changed, 39 insertions(+), 21 deletions(-) create mode 100644 packages/pinball_components/lib/src/components/kicker/behaviors/behaviors.dart create mode 100644 packages/pinball_components/lib/src/components/kicker/behaviors/kicker_ball_contact_behavior.dart create mode 100644 packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart create mode 100644 packages/pinball_components/lib/src/components/kicker/cubit/kicker_cubit.dart create mode 100644 packages/pinball_components/lib/src/components/kicker/cubit/kicker_state.dart rename packages/pinball_components/lib/src/components/{ => kicker}/kicker.dart (84%) diff --git a/packages/pinball_components/lib/src/components/kicker/behaviors/behaviors.dart b/packages/pinball_components/lib/src/components/kicker/behaviors/behaviors.dart new file mode 100644 index 00000000..e69de29b diff --git a/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_ball_contact_behavior.dart b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_ball_contact_behavior.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_ball_contact_behavior.dart @@ -0,0 +1 @@ + diff --git a/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart @@ -0,0 +1 @@ + diff --git a/packages/pinball_components/lib/src/components/kicker/cubit/kicker_cubit.dart b/packages/pinball_components/lib/src/components/kicker/cubit/kicker_cubit.dart new file mode 100644 index 00000000..8428a64f --- /dev/null +++ b/packages/pinball_components/lib/src/components/kicker/cubit/kicker_cubit.dart @@ -0,0 +1,17 @@ +// ignore_for_file: public_member_api_docs + +import 'package:bloc/bloc.dart'; + +part 'kicker_state.dart'; + +class KickerCubit extends Cubit { + KickerCubit() : super(KickerState.dimmed); + + void onBallContacted() { + emit(KickerState.lit); + } + + void onBlinked() { + emit(KickerState.dimmed); + } +} diff --git a/packages/pinball_components/lib/src/components/kicker/cubit/kicker_state.dart b/packages/pinball_components/lib/src/components/kicker/cubit/kicker_state.dart new file mode 100644 index 00000000..08d52709 --- /dev/null +++ b/packages/pinball_components/lib/src/components/kicker/cubit/kicker_state.dart @@ -0,0 +1,8 @@ +// ignore_for_file: public_member_api_docs + +part of 'kicker_cubit.dart'; + +enum KickerState { + lit, + dimmed, +} diff --git a/packages/pinball_components/lib/src/components/kicker.dart b/packages/pinball_components/lib/src/components/kicker/kicker.dart similarity index 84% rename from packages/pinball_components/lib/src/components/kicker.dart rename to packages/pinball_components/lib/src/components/kicker/kicker.dart index 527ffde4..e0ac87ee 100644 --- a/packages/pinball_components/lib/src/components/kicker.dart +++ b/packages/pinball_components/lib/src/components/kicker/kicker.dart @@ -26,9 +26,6 @@ class Kicker extends BodyComponent with InitialPosition { renderBody: false, ); - /// The size of the [Kicker] body. - static final Vector2 size = Vector2(4.4, 15); - /// Whether the [Kicker] is on the left or right side of the board. /// /// A [Kicker] with [BoardSide.left] propels the [Ball] to the right, @@ -37,22 +34,18 @@ class Kicker extends BodyComponent with InitialPosition { final BoardSide _side; List _createFixtureDefs() { - final fixturesDefs = []; final direction = _side.direction; const quarterPi = math.pi / 4; + final size = Vector2(4.4, 15); final upperCircle = CircleShape()..radius = 1.6; upperCircle.position.setValues(0, upperCircle.radius / 2); - final upperCircleFixtureDef = FixtureDef(upperCircle); - fixturesDefs.add(upperCircleFixtureDef); final lowerCircle = CircleShape()..radius = 1.6; lowerCircle.position.setValues( size.x * -direction, size.y + 0.8, ); - final lowerCircleFixtureDef = FixtureDef(lowerCircle); - fixturesDefs.add(lowerCircleFixtureDef); final wallFacingEdge = EdgeShape() ..set( @@ -63,8 +56,6 @@ class Kicker extends BodyComponent with InitialPosition { ), Vector2(2.5 * direction, size.y - 2), ); - final wallFacingLineFixtureDef = FixtureDef(wallFacingEdge); - fixturesDefs.add(wallFacingLineFixtureDef); final bottomEdge = EdgeShape() ..set( @@ -75,8 +66,6 @@ class Kicker extends BodyComponent with InitialPosition { lowerCircle.radius * math.sin(quarterPi), ), ); - final bottomLineFixtureDef = FixtureDef(bottomEdge); - fixturesDefs.add(bottomLineFixtureDef); final bouncyEdge = EdgeShape() ..set( @@ -92,12 +81,14 @@ class Kicker extends BodyComponent with InitialPosition { ), ); - final bouncyFixtureDef = FixtureDef( - bouncyEdge, - // TODO(alestiago): Play with restitution value once game is bundled. - restitution: 10, - ); - fixturesDefs.add(bouncyFixtureDef); + final fixturesDefs = [ + FixtureDef(upperCircle), + FixtureDef(lowerCircle), + FixtureDef(wallFacingEdge), + FixtureDef(bottomEdge), + // TODO(alestiago): Add BumpingBehaviour. + FixtureDef(bouncyEdge), + ]; // TODO(alestiago): Evaluate if there is value on centering the fixtures. final centroid = geometry.centroid( diff --git a/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart b/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart index 9b7d96cc..42e21912 100644 --- a/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart @@ -18,9 +18,9 @@ class KickerGame extends BallGame { await addAll( [ Kicker(side: BoardSide.left) - ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), + ..initialPosition = Vector2(center.x - 8.8, center.y), Kicker(side: BoardSide.right) - ..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y), + ..initialPosition = Vector2(center.x + 8.8, center.y), ], ); diff --git a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart index 29eded8c..0f1ec2e4 100644 --- a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart @@ -29,7 +29,7 @@ class PlungerGame extends BallGame with KeyboardEvents, Traceable { final center = screenToWorld(camera.viewport.canvasSize! / 2); await add( plunger = Plunger(compressionDistance: 29) - ..initialPosition = Vector2(center.x - (Kicker.size.x * 2), center.y), + ..initialPosition = Vector2(center.x - 8.8, center.y), ); await traceAllBodies(); }