diff --git a/packages/pinball_components/assets/images/boundary/bottom.png b/packages/pinball_components/assets/images/boundary/bottom.png index 90bfa493..806f7051 100644 Binary files a/packages/pinball_components/assets/images/boundary/bottom.png and b/packages/pinball_components/assets/images/boundary/bottom.png differ diff --git a/packages/pinball_components/assets/images/dino/dino-land-bottom.png b/packages/pinball_components/assets/images/dino/dino-land-bottom.png index 9aa42e12..6a20f1a7 100644 Binary files a/packages/pinball_components/assets/images/dino/dino-land-bottom.png and b/packages/pinball_components/assets/images/dino/dino-land-bottom.png differ diff --git a/packages/pinball_components/assets/images/dino/dino-land-top.png b/packages/pinball_components/assets/images/dino/dino-land-top.png index 18b92541..cb4c82f2 100644 Binary files a/packages/pinball_components/assets/images/dino/dino-land-top.png and b/packages/pinball_components/assets/images/dino/dino-land-top.png differ diff --git a/packages/pinball_components/lib/src/components/dino_walls.dart b/packages/pinball_components/lib/src/components/dino_walls.dart index 9ce5a523..0654d038 100644 --- a/packages/pinball_components/lib/src/components/dino_walls.dart +++ b/packages/pinball_components/lib/src/components/dino_walls.dart @@ -34,24 +34,21 @@ class _DinoTopWall extends BodyComponent with InitialPosition { } List _createFixtureDefs() { - final fixturesDef = []; - final topStraightShape = EdgeShape() ..set( Vector2(28.65, -35.1), Vector2(29.5, -35.1), ); final topStraightFixtureDef = FixtureDef(topStraightShape); - fixturesDef.add(topStraightFixtureDef); final topCurveShape = BezierCurveShape( controlPoints: [ topStraightShape.vertex1, - Vector2(17.4, -26.38), - Vector2(25.5, -20.7), + Vector2(18.8, -27), + Vector2(26.6, -21), ], ); - fixturesDef.add(FixtureDef(topCurveShape)); + final topCurveFixtureDef = FixtureDef(topCurveShape); final middleCurveShape = BezierCurveShape( controlPoints: [ @@ -60,16 +57,16 @@ class _DinoTopWall extends BodyComponent with InitialPosition { Vector2(26.8, -19.5), ], ); - fixturesDef.add(FixtureDef(middleCurveShape)); + final middleCurveFixtureDef = FixtureDef(middleCurveShape); final bottomCurveShape = BezierCurveShape( controlPoints: [ middleCurveShape.vertices.last, - Vector2(21.5, -15.8), - Vector2(25.8, -14.8), + Vector2(23, -15), + Vector2(27, -15), ], ); - fixturesDef.add(FixtureDef(bottomCurveShape)); + final bottomCurveFixtureDef = FixtureDef(bottomCurveShape); final bottomStraightShape = EdgeShape() ..set( @@ -77,9 +74,14 @@ class _DinoTopWall extends BodyComponent with InitialPosition { Vector2(31, -14.5), ); final bottomStraightFixtureDef = FixtureDef(bottomStraightShape); - fixturesDef.add(bottomStraightFixtureDef); - return fixturesDef; + return [ + topStraightFixtureDef, + topCurveFixtureDef, + middleCurveFixtureDef, + bottomCurveFixtureDef, + bottomStraightFixtureDef, + ]; } @override @@ -106,12 +108,14 @@ class _DinoTopWallSpriteComponent extends SpriteComponent with HasGameRef { @override Future onLoad() async { await super.onLoad(); - final sprite = await gameRef.loadSprite( - Assets.images.dino.dinoLandTop.keyName, + final sprite = Sprite( + gameRef.images.fromCache( + Assets.images.dino.dinoLandTop.keyName, + ), ); this.sprite = sprite; size = sprite.originalSize / 10; - position = Vector2(22, -41.8); + position = Vector2(22.8, -38.9); } } @@ -129,69 +133,56 @@ class _DinoBottomWall extends BodyComponent with InitialPosition { } List _createFixtureDefs() { - final fixturesDef = []; const restitution = 1.0; - final topStraightControlPoints = [ - Vector2(32.4, -8.8), - Vector2(25, -7.7), - ]; final topStraightShape = EdgeShape() ..set( - topStraightControlPoints.first, - topStraightControlPoints.last, + Vector2(32.4, -8.8), + Vector2(25, -7.7), ); final topStraightFixtureDef = FixtureDef( topStraightShape, restitution: restitution, ); - fixturesDef.add(topStraightFixtureDef); - final topLeftCurveControlPoints = [ - topStraightControlPoints.last, - Vector2(21.8, -7), - Vector2(29.5, 13.8), - ]; final topLeftCurveShape = BezierCurveShape( - controlPoints: topLeftCurveControlPoints, + controlPoints: [ + topStraightShape.vertex2, + Vector2(21.8, -7), + Vector2(29.8, 13.8), + ], ); final topLeftCurveFixtureDef = FixtureDef( topLeftCurveShape, restitution: restitution, ); - fixturesDef.add(topLeftCurveFixtureDef); - final bottomLeftStraightControlPoints = [ - topLeftCurveControlPoints.last, - Vector2(31.8, 44.1), - ]; final bottomLeftStraightShape = EdgeShape() ..set( - bottomLeftStraightControlPoints.first, - bottomLeftStraightControlPoints.last, + topLeftCurveShape.vertices.last, + Vector2(31.9, 44.1), ); final bottomLeftStraightFixtureDef = FixtureDef( bottomLeftStraightShape, restitution: restitution, ); - fixturesDef.add(bottomLeftStraightFixtureDef); - final bottomStraightControlPoints = [ - bottomLeftStraightControlPoints.last, - Vector2(37.8, 44.1), - ]; final bottomStraightShape = EdgeShape() ..set( - bottomStraightControlPoints.first, - bottomStraightControlPoints.last, + bottomLeftStraightShape.vertex2, + Vector2(37.8, 44.1), ); final bottomStraightFixtureDef = FixtureDef( bottomStraightShape, restitution: restitution, ); - fixturesDef.add(bottomStraightFixtureDef); - return fixturesDef; + return [ + topStraightFixtureDef, + topLeftCurveFixtureDef, + bottomLeftStraightFixtureDef, + bottomStraightFixtureDef, + ]; } @override @@ -212,8 +203,10 @@ class _DinoBottomWallSpriteComponent extends SpriteComponent with HasGameRef { @override Future onLoad() async { await super.onLoad(); - final sprite = await gameRef.loadSprite( - Assets.images.dino.dinoLandBottom.keyName, + final sprite = Sprite( + gameRef.images.fromCache( + Assets.images.dino.dinoLandBottom.keyName, + ), ); this.sprite = sprite; size = sprite.originalSize / 10; diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 8709d694..e5f7f177 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -29,6 +29,7 @@ void main() { addLaunchRampStories(dashbook); addScoreTextStories(dashbook); addBackboardStories(dashbook); + addDinoWallStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart new file mode 100644 index 00000000..b491d64b --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart @@ -0,0 +1,31 @@ +import 'dart:async'; + +import 'package:flame/input.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; + +class DinoWallGame extends BallGame { + DinoWallGame() : super(); + + static const description = ''' + Shows how DinoWalls are rendered. + + - Activate the "trace" parameter to overlay the body. + - Tap anywhere on the screen to spawn a ball into the game. +'''; + + @override + Future onLoad() async { + await super.onLoad(); + + await images.loadAll([ + Assets.images.dino.dinoLandTop.keyName, + Assets.images.dino.dinoLandBottom.keyName, + ]); + + await addFromBlueprint(DinoWalls()); + camera.followVector2(Vector2.zero()); + await traceAllBodies(); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart b/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart new file mode 100644 index 00000000..e24d26cc --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart @@ -0,0 +1,11 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/dino_wall/dino_wall_game.dart'; + +void addDinoWallStories(Dashbook dashbook) { + dashbook.storiesOf('DinoWall').addGame( + title: 'Traced', + description: DinoWallGame.description, + gameBuilder: (_) => DinoWallGame(), + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 90c38150..d8103b4d 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -4,6 +4,7 @@ export 'ball/stories.dart'; export 'baseboard/stories.dart'; export 'boundaries/stories.dart'; export 'chrome_dino/stories.dart'; +export 'dino_wall/stories.dart'; export 'effects/stories.dart'; export 'flipper/stories.dart'; export 'flutter_forest/stories.dart'; diff --git a/packages/pinball_components/test/src/components/dino_walls_test.dart b/packages/pinball_components/test/src/components/dino_walls_test.dart index b3a58264..7ed97248 100644 --- a/packages/pinball_components/test/src/components/dino_walls_test.dart +++ b/packages/pinball_components/test/src/components/dino_walls_test.dart @@ -11,15 +11,23 @@ import '../../helpers/helpers.dart'; void main() { group('DinoWalls', () { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); + final assets = [ + Assets.images.dino.dinoLandTop.keyName, + Assets.images.dino.dinoLandBottom.keyName, + ]; + final flameTester = FlameTester(() => TestGame(assets)); flameTester.testGameWidget( 'renders correctly', setUp: (game, tester) async { + await game.images.loadAll(assets); await game.addFromBlueprint(DinoWalls()); + await game.ready(); + game.camera.followVector2(Vector2.zero()); game.camera.zoom = 6.5; - await game.ready(); + + await tester.pump(); }, verify: (game, tester) async { await expectLater( diff --git a/packages/pinball_components/test/src/components/golden/boundaries.png b/packages/pinball_components/test/src/components/golden/boundaries.png index 6cb24bbd..2612679a 100644 Binary files a/packages/pinball_components/test/src/components/golden/boundaries.png and b/packages/pinball_components/test/src/components/golden/boundaries.png differ diff --git a/packages/pinball_components/test/src/components/golden/dino-walls.png b/packages/pinball_components/test/src/components/golden/dino-walls.png index 8c2ee569..5956b43b 100644 Binary files a/packages/pinball_components/test/src/components/golden/dino-walls.png and b/packages/pinball_components/test/src/components/golden/dino-walls.png differ diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index aebb31f9..d6bbb099 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -54,6 +54,8 @@ void main() { Assets.images.boundary.bottom.keyName, Assets.images.slingshot.upper.keyName, Assets.images.slingshot.lower.keyName, + Assets.images.dino.dinoLandTop.keyName, + Assets.images.dino.dinoLandBottom.keyName, ]; final flameTester = FlameTester(() => PinballTestGame(assets)); final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets));