From a41da445870306304df33c7beb9d0c0084f904e9 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Wed, 4 May 2022 17:10:59 +0200 Subject: [PATCH] feat: debug feature for turbocharging at DebugPinballGame --- lib/game/pinball_game.dart | 56 +++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 0cd130ca..d103f3db 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -163,7 +163,8 @@ class _GameBallsController extends ComponentController } } -class DebugPinballGame extends PinballGame with FPSCounter { +// coverage:ignore-start +class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { DebugPinballGame({ required CharacterTheme characterTheme, required PinballAudio audio, @@ -174,9 +175,14 @@ class DebugPinballGame extends PinballGame with FPSCounter { controller = _GameBallsController(this); } + Vector2? lineStart; + Vector2? lineEnd; + @override Future onLoad() async { await super.onLoad(); + await add(_PreviewLine()); + await add(_DebugInformation()); } @@ -190,6 +196,54 @@ class DebugPinballGame extends PinballGame with FPSCounter { firstChild()?.add(ball); } } + + @override + void onPanStart(DragStartInfo info) { + lineStart = info.eventPosition.game; + } + + @override + void onPanUpdate(DragUpdateInfo info) { + lineEnd = info.eventPosition.game; + } + + @override + void onPanEnd(DragEndInfo info) { + if (lineEnd != null) { + final line = lineEnd! - lineStart!; + onLine(line); + lineEnd = null; + lineStart = null; + } + } + + void onLine(Vector2 line) { + final ball = ControlledBall.debug()..initialPosition = lineStart!; + final impulse = line * -1 * 10; + ball.add(BallTurboChargingBehavior(impulse: impulse)); + firstChild()?.add(ball); + } +} + +// coverage:ignore-start +class _PreviewLine extends PositionComponent with HasGameRef { + static final _previewLinePaint = Paint() + ..color = Colors.pink + ..strokeWidth = 0.4 + ..style = PaintingStyle.stroke; + + @override + void render(Canvas canvas) { + super.render(canvas); + + if (gameRef.lineEnd != null) { + canvas.drawLine( + gameRef.lineStart!.toOffset(), + gameRef.lineEnd!.toOffset(), + _previewLinePaint, + ); + } + } } // TODO(wolfenrain): investigate this CI failure.