From 124af6b603a01a72788fe12bad0a2ec7c1b23d6d Mon Sep 17 00:00:00 2001 From: Alejandro Santiago Date: Mon, 4 Apr 2022 15:35:54 +0100 Subject: [PATCH] feat(sandbox): implemented BigDashNestBumper example (#137) --- .../sandbox/lib/common/common.dart | 1 + .../sandbox/lib/common/trace.dart | 19 ++++++++++++ .../pinball_components/sandbox/lib/main.dart | 1 + .../lib/stories/dash_nest_bumper/big.dart | 31 +++++++++++++++++++ .../dash_nest_bumper/dash_nest_bumper.dart | 18 +++++++++++ .../sandbox/lib/stories/flipper/tracing.dart | 24 +++++--------- .../sandbox/lib/stories/stories.dart | 1 + 7 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 packages/pinball_components/sandbox/lib/common/trace.dart create mode 100644 packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big.dart create mode 100644 packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/dash_nest_bumper.dart diff --git a/packages/pinball_components/sandbox/lib/common/common.dart b/packages/pinball_components/sandbox/lib/common/common.dart index 578c9b38..bb232e24 100644 --- a/packages/pinball_components/sandbox/lib/common/common.dart +++ b/packages/pinball_components/sandbox/lib/common/common.dart @@ -1,2 +1,3 @@ export 'games.dart'; export 'methods.dart'; +export 'trace.dart'; diff --git a/packages/pinball_components/sandbox/lib/common/trace.dart b/packages/pinball_components/sandbox/lib/common/trace.dart new file mode 100644 index 00000000..d64a5c6c --- /dev/null +++ b/packages/pinball_components/sandbox/lib/common/trace.dart @@ -0,0 +1,19 @@ +import 'dart:async'; + +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flutter/material.dart'; + +extension BodyTrace on BodyComponent { + void trace({Color color = const Color(0xFFFF0000)}) { + paint = Paint()..color = color; + renderBody = true; + + unawaited( + mounted.whenComplete(() { + final sprite = children.whereType().first; + sprite.paint.color = sprite.paint.color.withOpacity(0.5); + }), + ); + } +} diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 62ff7022..c9e0c978 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -18,5 +18,6 @@ void main() { addFlipperStories(dashbook); addSpaceshipStories(dashbook); addBaseboardStories(dashbook); + addDashNestBumperStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big.dart b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big.dart new file mode 100644 index 00000000..cfab1013 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/big.dart @@ -0,0 +1,31 @@ +import 'dart:async'; +import 'dart:ui'; + +import 'package:pinball_components/pinball_components.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/ball/basic.dart'; + +class BigDashNestBumperGame extends BasicBallGame { + BigDashNestBumperGame({ + required this.trace, + }) : super(color: const Color(0xFF0000FF)); + + static const info = ''' + Shows how a BigDashNestBumper is rendered. + + Activate the trace to see the body shape. +'''; + + final bool trace; + + @override + Future onLoad() async { + await super.onLoad(); + + final center = screenToWorld(camera.viewport.canvasSize! / 2); + final bigDashNestBumper = BigDashNestBumper()..initialPosition = center; + await add(bigDashNestBumper); + + if (trace) bigDashNestBumper.trace(); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/dash_nest_bumper.dart b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/dash_nest_bumper.dart new file mode 100644 index 00000000..f53bec40 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dash_nest_bumper/dash_nest_bumper.dart @@ -0,0 +1,18 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/ball/basic.dart'; +import 'package:sandbox/stories/dash_nest_bumper/big.dart'; + +void addDashNestBumperStories(Dashbook dashbook) { + dashbook.storiesOf('Dash Nest Bumpers').add( + 'Big', + (context) => GameWidget( + game: BigDashNestBumperGame( + trace: context.boolProperty('Trace', true), + ), + ), + codeLink: buildSourceLink('dash_nest_bumper/big.dart'), + info: BasicBallGame.info, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart b/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart index 9b5802f8..10f11c82 100644 --- a/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart +++ b/packages/pinball_components/sandbox/lib/stories/flipper/tracing.dart @@ -1,8 +1,7 @@ import 'dart:async'; -import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/material.dart'; +import 'package:sandbox/common/common.dart'; import 'package:sandbox/stories/flipper/basic.dart'; class FlipperTracingGame extends BasicFlipperGame { @@ -13,24 +12,15 @@ class FlipperTracingGame extends BasicFlipperGame { @override Future onLoad() async { await super.onLoad(); - leftFlipper.trace(); - rightFlipper.trace(); - } -} -extension on BodyComponent { - void trace({Color color = Colors.red}) { - paint = Paint()..color = color; - renderBody = true; - body.joints.whereType().forEach( + leftFlipper.trace(); + leftFlipper.body.joints.whereType().forEach( (joint) => joint.setLimits(0, 0), ); - unawaited( - mounted.whenComplete(() { - final sprite = children.whereType().first; - sprite.paint.color = sprite.paint.color.withOpacity(0.5); - }), - ); + rightFlipper.trace(); + rightFlipper.body.joints.whereType().forEach( + (joint) => joint.setLimits(0, 0), + ); } } diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 90b93723..496f87e8 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -1,5 +1,6 @@ export 'ball/ball.dart'; export 'baseboard/baseboard.dart'; +export 'dash_nest_bumper/dash_nest_bumper.dart'; export 'effects/effects.dart'; export 'flipper/flipper.dart'; export 'layer/layer.dart';