From 05bca49561742654583e43afb31863af2d75e86b Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Fri, 8 Apr 2022 17:58:04 +0200 Subject: [PATCH] feat: added plunger controller --- lib/game/components/components.dart | 1 + lib/game/components/controlled_plunger.dart | 52 +++++++++++++++++++++ lib/game/pinball_game.dart | 24 +--------- 3 files changed, 54 insertions(+), 23 deletions(-) create mode 100644 lib/game/components/controlled_plunger.dart diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 1e59ddfe..09975087 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -3,6 +3,7 @@ export 'bonus_word.dart'; export 'camera_controller.dart'; export 'controlled_ball.dart'; export 'controlled_flipper.dart'; +export 'controlled_plunger.dart'; export 'flutter_forest.dart'; export 'game_flow_controller.dart'; export 'score_points.dart'; diff --git a/lib/game/components/controlled_plunger.dart b/lib/game/components/controlled_plunger.dart new file mode 100644 index 00000000..187ae940 --- /dev/null +++ b/lib/game/components/controlled_plunger.dart @@ -0,0 +1,52 @@ +import 'package:flame/components.dart'; +import 'package:flutter/services.dart'; +import 'package:pinball/flame/flame.dart'; +import 'package:pinball_components/pinball_components.dart'; + +/// {@template controlled_plunger} +/// A [Plunger] with a [PlungerController] attached. +/// {@endtemplate} +class ControlledPlunger extends Plunger with Controls { + /// {@macro controlled_plunger} + ControlledPlunger({required double compressionDistance}) + : super(compressionDistance: compressionDistance) { + controller = PlungerController(this); + } +} + +/// {@template plunger_controller} +/// A [ComponentController] that controls a [Plunger]s movement. +/// {@endtemplate} + +class PlungerController extends ComponentController + with KeyboardHandler { + /// {@macro plunger_controller} + PlungerController(Plunger plunger) + : _keys = [ + LogicalKeyboardKey.arrowDown, + LogicalKeyboardKey.space, + LogicalKeyboardKey.keyS, + ], + super(plunger); + + /// The [LogicalKeyboardKey]s that will control the [Flipper]. + /// + /// [onKeyEvent] method listens to when one of these keys is pressed. + final List _keys; + + @override + bool onKeyEvent( + RawKeyEvent event, + Set keysPressed, + ) { + if (!_keys.contains(event.logicalKey)) return true; + + if (event is RawKeyDownEvent) { + component.pull(); + } else if (event is RawKeyUpEvent) { + component.release(); + } + + return false; + } +} diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index ec0a665c..0ec9052b 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -5,7 +5,6 @@ import 'package:flame/components.dart'; import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/services.dart'; import 'package:pinball/flame/flame.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/gen/assets.gen.dart'; @@ -47,7 +46,7 @@ class PinballGame extends Forge2DGame unawaited(addFromBlueprint(Boundaries())); unawaited(addFromBlueprint(LaunchRamp())); - final plunger = Plunger(compressionDistance: 29) + final plunger = ControlledPlunger(compressionDistance: 29) ..initialPosition = Vector2(38, -19); await add(plunger); @@ -141,27 +140,6 @@ class _GameBallsController extends ComponentController void attachTo(Plunger plunger) { _plunger = plunger; } - - @override - bool onKeyEvent( - RawKeyEvent event, - Set keysPressed, - ) { - final keys = [ - LogicalKeyboardKey.space, - LogicalKeyboardKey.arrowDown, - LogicalKeyboardKey.keyS, - ]; - if (!keys.contains(event.logicalKey)) return true; - - if (event is RawKeyDownEvent) { - _plunger.pull(); - } else if (event is RawKeyUpEvent) { - _plunger.release(); - } - - return false; - } } class DebugPinballGame extends PinballGame with TapDetector {