From da1cea10691497083f78f8e33833b92bf4b34a2b Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Tue, 26 Apr 2022 20:42:23 +0200 Subject: [PATCH] feat: added sandbox for multiball --- .../pinball_components/sandbox/lib/main.dart | 1 + .../lib/stories/multiball/multiball_game.dart | 66 +++++++++++++++++++ .../lib/stories/multiball/stories.dart | 11 ++++ .../sandbox/lib/stories/stories.dart | 1 + test/game/pinball_game_test.dart | 12 ++++ 5 files changed, 91 insertions(+) create mode 100644 packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart create mode 100644 packages/pinball_components/sandbox/lib/stories/multiball/stories.dart diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index e5f7f177..e24fe115 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -30,6 +30,7 @@ void main() { addScoreTextStories(dashbook); addBackboardStories(dashbook); addDinoWallStories(dashbook); + addMultiballStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart b/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart new file mode 100644 index 00000000..f3802ed3 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart @@ -0,0 +1,66 @@ +import 'package:flame/input.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:sandbox/stories/ball/basic_ball_game.dart'; + +class MultiballGame extends BallGame with KeyboardEvents { + MultiballGame() + : super( + imagesFileNames: [ + Assets.images.multiball.a.active.keyName, + Assets.images.multiball.a.inactive.keyName, + Assets.images.multiball.b.active.keyName, + Assets.images.multiball.b.inactive.keyName, + Assets.images.multiball.c.active.keyName, + Assets.images.multiball.c.inactive.keyName, + Assets.images.multiball.d.active.keyName, + Assets.images.multiball.d.inactive.keyName, + ], + ); + + static const description = ''' + Shows how the Multiball are rendered. + + - Tap anywhere on the screen to spawn a ball into the game. + - Press space bar for animate state multiballs. +'''; + + late final Multiball _multiballA; + late final Multiball _multiballB; + late final Multiball _multiballC; + late final Multiball _multiballD; + + @override + Future onLoad() async { + await super.onLoad(); + + camera.followVector2(Vector2.zero()); + + await addAll([ + _multiballA = Multiball.a(), + _multiballB = Multiball.b(), + _multiballC = Multiball.c(), + _multiballD = Multiball.d(), + ]); + await traceAllBodies(); + } + + @override + KeyEventResult onKeyEvent( + RawKeyEvent event, + Set keysPressed, + ) { + if (event is RawKeyDownEvent && + event.logicalKey == LogicalKeyboardKey.space) { + _multiballA.animate(); + _multiballB.animate(); + _multiballC.animate(); + _multiballD.animate(); + + return KeyEventResult.handled; + } + + return KeyEventResult.ignored; + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/multiball/stories.dart b/packages/pinball_components/sandbox/lib/stories/multiball/stories.dart new file mode 100644 index 00000000..6993ed92 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/multiball/stories.dart @@ -0,0 +1,11 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/multiball/multiball_game.dart'; + +void addMultiballStories(Dashbook dashbook) { + dashbook.storiesOf('Multiball').addGame( + title: 'Assets', + description: MultiballGame.description, + gameBuilder: (_) => MultiballGame(), + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index d8103b4d..a0b3737a 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -11,6 +11,7 @@ export 'flutter_forest/stories.dart'; export 'google_word/stories.dart'; export 'launch_ramp/stories.dart'; export 'layer/stories.dart'; +export 'multiball/stories.dart'; export 'plunger/stories.dart'; export 'score_text/stories.dart'; export 'slingshot/stories.dart'; diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index e4035afe..f6a763e8 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -112,6 +112,18 @@ void main() { }, ); + flameTester.test( + 'has only one Multiball', + (game) async { + await game.ready(); + + expect( + game.children.whereType().length, + equals(1), + ); + }, + ); + group('controller', () { // TODO(alestiago): Write test to be controller agnostic. group('listenWhen', () {