From 611470ba4c4c2b3ad0ca6637a64bd562326284c5 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Mon, 25 Apr 2022 14:10:41 +0200 Subject: [PATCH] feat: added multipliers to sandbox --- .../pinball_components/sandbox/lib/main.dart | 1 + .../stories/multipliers/multipliers_game.dart | 111 ++++++++++++++++++ .../lib/stories/multipliers/stories.dart | 15 +++ .../sandbox/lib/stories/stories.dart | 1 + test/game/pinball_game_test.dart | 10 ++ 5 files changed, 138 insertions(+) create mode 100644 packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart create mode 100644 packages/pinball_components/sandbox/lib/stories/multipliers/stories.dart diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 73ae296c..729ddba2 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -33,6 +33,7 @@ void main() { addLaunchRampStories(dashbook); addScoreTextStories(dashbook); addBackboardStories(dashbook); + addMultipliersStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart new file mode 100644 index 00000000..6f885928 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart @@ -0,0 +1,111 @@ +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 MultipliersGame extends BasicBallGame with KeyboardEvents { + MultipliersGame() : super(color: const Color(0xFF009900)); + + static const info = ''' + Shows how the Multipliers are rendered. + + - Tap anywhere on the screen to spawn a ball into the game. + - Press digits 2 to 6 for toggle state multipliers 2 to 6. +'''; + + late final MultiplierSpriteGroupComponent x2; + late final MultiplierSpriteGroupComponent x3; + late final MultiplierSpriteGroupComponent x4; + late final MultiplierSpriteGroupComponent x5; + late final MultiplierSpriteGroupComponent x6; + + @override + Future onLoad() async { + await super.onLoad(); + + await images.loadAll([ + Assets.images.multiplier.x2.active.keyName, + Assets.images.multiplier.x2.inactive.keyName, + Assets.images.multiplier.x3.active.keyName, + Assets.images.multiplier.x3.inactive.keyName, + Assets.images.multiplier.x4.active.keyName, + Assets.images.multiplier.x4.inactive.keyName, + Assets.images.multiplier.x5.active.keyName, + Assets.images.multiplier.x5.inactive.keyName, + Assets.images.multiplier.x6.active.keyName, + Assets.images.multiplier.x6.inactive.keyName, + ]); + + camera.followVector2(Vector2.zero()); + x2 = MultiplierSpriteGroupComponent( + position: Vector2(-20, 0), + onAssetPath: Assets.images.multiplier.x2.active.keyName, + offAssetPath: Assets.images.multiplier.x2.inactive.keyName, + ); + + x3 = MultiplierSpriteGroupComponent( + position: Vector2(20, -5), + onAssetPath: Assets.images.multiplier.x3.active.keyName, + offAssetPath: Assets.images.multiplier.x3.inactive.keyName, + ); + + x4 = MultiplierSpriteGroupComponent( + position: Vector2(0, -15), + onAssetPath: Assets.images.multiplier.x4.active.keyName, + offAssetPath: Assets.images.multiplier.x4.inactive.keyName, + ); + + x5 = MultiplierSpriteGroupComponent( + position: Vector2(-10, -25), + onAssetPath: Assets.images.multiplier.x5.active.keyName, + offAssetPath: Assets.images.multiplier.x5.inactive.keyName, + ); + + x6 = MultiplierSpriteGroupComponent( + position: Vector2(10, -35), + onAssetPath: Assets.images.multiplier.x6.active.keyName, + offAssetPath: Assets.images.multiplier.x6.inactive.keyName, + ); + + await addAll([x2, x3, x4, x5, x6]); + await traceAllBodies(); + } + + @override + KeyEventResult onKeyEvent( + RawKeyEvent event, + Set keysPressed, + ) { + if (event is RawKeyDownEvent) { + if (event.logicalKey == LogicalKeyboardKey.digit2) { + x2.toggle(); + } + if (event.logicalKey == LogicalKeyboardKey.digit3) { + x3.toggle(); + } + if (event.logicalKey == LogicalKeyboardKey.digit4) { + x4.toggle(); + } + if (event.logicalKey == LogicalKeyboardKey.digit5) { + x5.toggle(); + } + if (event.logicalKey == LogicalKeyboardKey.digit6) { + x6.toggle(); + } + + return KeyEventResult.handled; + } + return KeyEventResult.ignored; + } +} + +extension on MultiplierSpriteGroupComponent { + void toggle() { + if (current == MultiplierSpriteState.active) { + current = MultiplierSpriteState.inactive; + } else { + current = MultiplierSpriteState.active; + } + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/multipliers/stories.dart b/packages/pinball_components/sandbox/lib/stories/multipliers/stories.dart new file mode 100644 index 00000000..6117577c --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/multipliers/stories.dart @@ -0,0 +1,15 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/multipliers/multipliers_game.dart'; + +void addMultipliersStories(Dashbook dashbook) { + dashbook.storiesOf('Multipliers').add( + 'Basic', + (context) => GameWidget( + game: MultipliersGame()..trace = context.boolProperty('Trace', true), + ), + codeLink: buildSourceLink('multiplier/basic.dart'), + info: MultipliersGame.info, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 338ca384..73aeaff7 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -10,6 +10,7 @@ export 'flutter_forest/stories.dart'; export 'google_word/stories.dart'; export 'launch_ramp/stories.dart'; export 'layer/stories.dart'; +export 'multipliers/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 aebb31f9..2ec7ef50 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -54,6 +54,16 @@ void main() { Assets.images.boundary.bottom.keyName, Assets.images.slingshot.upper.keyName, Assets.images.slingshot.lower.keyName, + Assets.images.multiplier.x2.active.keyName, + Assets.images.multiplier.x2.inactive.keyName, + Assets.images.multiplier.x3.active.keyName, + Assets.images.multiplier.x3.inactive.keyName, + Assets.images.multiplier.x4.active.keyName, + Assets.images.multiplier.x4.inactive.keyName, + Assets.images.multiplier.x5.active.keyName, + Assets.images.multiplier.x5.inactive.keyName, + Assets.images.multiplier.x6.active.keyName, + Assets.images.multiplier.x6.inactive.keyName, ]; final flameTester = FlameTester(() => PinballTestGame(assets)); final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets));