From d798fdf9fe6d61bbde33789f485db1fcf5992559 Mon Sep 17 00:00:00 2001 From: Rui Miguel Alonso Date: Wed, 6 Apr 2022 15:12:00 +0200 Subject: [PATCH] feat: plunger asset (#145) * feat: added plunger asset and move * feat: fixed plunger assets and position * fix: set limits to plunger compression correctly * chore: unused import * fix: placed plunger correctly * test: refactor test game * refactor: changed spawnBall initialPosition * chore: plunger golden test --- assets/images/components/plunger.png | Bin 0 -> 11655 bytes lib/game/components/plunger.dart | 46 +++++++++++++++++++++---- lib/game/pinball_game.dart | 14 ++------ lib/gen/assets.gen.dart | 4 +++ test/game/components/plunger_test.dart | 23 ++++++++++++- 5 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 assets/images/components/plunger.png diff --git a/assets/images/components/plunger.png b/assets/images/components/plunger.png new file mode 100644 index 0000000000000000000000000000000000000000..f3cbdf0f004f617615e882c44d3522b3a2d88bd9 GIT binary patch literal 11655 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 G?Ee5&CbES9 literal 0 HcmV?d00001 diff --git a/lib/game/components/plunger.dart b/lib/game/components/plunger.dart index 9b7eec39..b319af80 100644 --- a/lib/game/components/plunger.dart +++ b/lib/game/components/plunger.dart @@ -1,8 +1,8 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball/gen/assets.gen.dart'; +import 'package:pinball_components/pinball_components.dart' hide Assets; /// {@template plunger} /// [Plunger] serves as a spring, that shoots the ball on the right side of the @@ -14,10 +14,9 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { /// {@macro plunger} Plunger({ required this.compressionDistance, - }) : super( - // TODO(allisonryan0002): remove paint after asset is added. - paint: Paint()..color = const Color.fromARGB(255, 241, 8, 8), - ); + // TODO(ruimiguel): set to priority +1 over LaunchRamp once all priorities + // are fixed. + }) : super(priority: 0); /// Distance the plunger can lower. final double compressionDistance; @@ -88,13 +87,36 @@ class Plunger extends BodyComponent with KeyboardHandler, InitialPosition { plunger: this, anchor: anchor, ); - world.createJoint(PrismaticJoint(jointDef)); + + world.createJoint( + PrismaticJoint(jointDef)..setLimits(-compressionDistance, 0), + ); } @override Future onLoad() async { await super.onLoad(); await _anchorToJoint(); + + renderBody = false; + + await _loadSprite(); + } + + Future _loadSprite() async { + final sprite = await gameRef.loadSprite( + Assets.images.components.plunger.path, + ); + + await add( + SpriteComponent( + sprite: sprite, + size: Vector2(5.5, 40), + anchor: Anchor.center, + position: Vector2(2, 19), + angle: -0.033, + ), + ); } } @@ -111,6 +133,16 @@ class PlungerAnchor extends JointAnchor { plunger.body.position.y - plunger.compressionDistance, ); } + + @override + Body createBody() { + final shape = CircleShape()..radius = 0.5; + final fixtureDef = FixtureDef(shape); + final bodyDef = BodyDef() + ..position = initialPosition + ..type = BodyType.static; + return world.createBody(bodyDef)..createFixture(fixtureDef); + } } /// {@template plunger_anchor_prismatic_joint_def} diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 3c99fbca..a6eb0884 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'package:flame/components.dart'; -import 'package:flame/extensions.dart'; import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; @@ -72,8 +71,7 @@ class PinballGame extends Forge2DGame Future _addPlunger() async { final plunger = Plunger(compressionDistance: 29) - ..initialPosition = - BoardDimensions.bounds.center.toVector2() + Vector2(41.5, -49); + ..initialPosition = Vector2(38, -19); await add(plunger); } @@ -90,17 +88,9 @@ class PinballGame extends Forge2DGame Future spawnBall() async { // TODO(alestiago): Remove once this logic is moved to controller. - var plunger = firstChild(); - if (plunger == null) { - await add(plunger = Plunger(compressionDistance: 1)); - } - final ball = ControlledBall.launch( theme: theme, - )..initialPosition = Vector2( - plunger.body.position.x, - plunger.body.position.y + Ball.size.y, - ); + )..initialPosition = Vector2(38, -19 + Ball.size.y); await add(ball); } } diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 370d8fcf..5c2a87c2 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -17,6 +17,10 @@ class $AssetsImagesComponentsGen { AssetGenImage get background => const AssetGenImage('assets/images/components/background.png'); + + /// File path: assets/images/components/plunger.png + AssetGenImage get plunger => + const AssetGenImage('assets/images/components/plunger.png'); } class Assets { diff --git a/test/game/components/plunger_test.dart b/test/game/components/plunger_test.dart index 2a49ae2d..65789ae0 100644 --- a/test/game/components/plunger_test.dart +++ b/test/game/components/plunger_test.dart @@ -12,11 +12,32 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(Forge2DGame.new); + final flameTester = FlameTester(TestGame.new); group('Plunger', () { const compressionDistance = 0.0; + flameTester.testGameWidget( + 'renders correctly', + setUp: (game, tester) async { + await game.add( + Plunger( + compressionDistance: compressionDistance, + ), + ); + await game.ready(); + game.camera.followVector2(Vector2.zero()); + game.camera.zoom = 4.1; + }, + // TODO(ruimiguel): enable test when workflows are fixed. + // verify: (game, tester) async { + // await expectLater( + // find.byGame(), + // matchesGoldenFile('golden/plunger.png'), + // ); + // }, + ); + flameTester.test( 'loads correctly', (game) async {