diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 2ccf8fe8..a1054e83 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -5,6 +5,7 @@ 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'; @@ -91,7 +92,10 @@ class PinballGame extends Forge2DGame } class _GameBallsController extends ComponentController - with BlocComponent, HasGameRef { + with + BlocComponent, + HasGameRef, + KeyboardHandler { _GameBallsController(PinballGame game) : super(game); late final Plunger _plunger; @@ -132,6 +136,27 @@ 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 { diff --git a/packages/pinball_components/lib/src/components/plunger.dart b/packages/pinball_components/lib/src/components/plunger.dart index d8aa6e23..a528c267 100644 --- a/packages/pinball_components/lib/src/components/plunger.dart +++ b/packages/pinball_components/lib/src/components/plunger.dart @@ -74,6 +74,7 @@ class Plunger extends BodyComponent with InitialPosition { Future onLoad() async { await super.onLoad(); await _anchorToJoint(); + renderBody = false; await add(_PlungerSpriteComponent()); } }