diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 0cfd6f7f..2aa3fe59 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -12,5 +12,6 @@ void main() { final dashbook = Dashbook(theme: ThemeData.dark()); addBallStories(dashbook); + addLayerStories(dashbook); runApp(dashbook); } diff --git a/packages/pinball_components/sandbox/lib/stories/ball/basic.dart b/packages/pinball_components/sandbox/lib/stories/ball/basic.dart index 78948666..58e1b1e1 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/basic.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/basic.dart @@ -1,10 +1,11 @@ import 'package:flame/input.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; class BasicBallGame extends BasicGame with TapDetector { - BasicBallGame({ required this.color }); + BasicBallGame({required this.color}); static const info = ''' Basic example of how a Ball works, tap anywhere on the @@ -13,10 +14,63 @@ class BasicBallGame extends BasicGame with TapDetector { final Color color; + @override + Future onLoad() async { + await add(BigSquare()..initialPosition = Vector2(30, -40)); + await add(SmallSquare()..initialPosition = Vector2(50, -40)); + } + @override void onTapUp(TapUpInfo info) { - add(Ball(baseColor: color) - ..initialPosition = info.eventPosition.game, + add( + Ball(baseColor: color)..initialPosition = info.eventPosition.game, + ); + } +} + +class BigSquare extends BodyComponent with InitialPosition, Layered { + BigSquare() { + paint = Paint() + ..color = const Color.fromARGB(255, 8, 218, 241) + ..style = PaintingStyle.stroke; + layer = Layer.jetpack; + } + + @override + Body createBody() { + final shape = PolygonShape()..setAsBoxXY(8, 8); + final fixtureDef = FixtureDef(shape); + + final bodyDef = BodyDef()..position = initialPosition; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } + + @override + Future onLoad() async { + await super.onLoad(); + + await add( + SmallSquare()..initialPosition = Vector2.zero(), ); } } + +class SmallSquare extends BodyComponent with InitialPosition, Layered { + SmallSquare() { + paint = Paint() + ..color = Color.fromARGB(255, 27, 241, 8) + ..style = PaintingStyle.stroke; + layer = Layer.board; + } + + @override + Body createBody() { + final shape = PolygonShape()..setAsBoxXY(3, 3); + final fixtureDef = FixtureDef(shape); + + final bodyDef = BodyDef()..position = initialPosition; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/layer/basic.dart b/packages/pinball_components/sandbox/lib/stories/layer/basic.dart new file mode 100644 index 00000000..d8f1d6fe --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/layer/basic.dart @@ -0,0 +1,76 @@ +import 'package:flame/input.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flutter/material.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:sandbox/common/common.dart'; + +class BasicLayerGame extends BasicGame with TapDetector { + BasicLayerGame({required this.color}); + + static const info = ''' + Basic example of how layers work with a Ball hitting other components, + tap anywhere on the screen to spawn a ball into the game. +'''; + + final Color color; + + @override + Future onLoad() async { + await add(BigSquare()..initialPosition = Vector2(30, -40)); + await add(SmallSquare()..initialPosition = Vector2(50, -40)); + } + + @override + void onTapUp(TapUpInfo info) { + add( + Ball(baseColor: color)..initialPosition = info.eventPosition.game, + ); + } +} + +class BigSquare extends BodyComponent with InitialPosition, Layered { + BigSquare() { + paint = Paint() + ..color = const Color.fromARGB(255, 8, 218, 241) + ..style = PaintingStyle.stroke; + layer = Layer.jetpack; + } + + @override + Body createBody() { + final shape = PolygonShape()..setAsBoxXY(8, 8); + final fixtureDef = FixtureDef(shape); + + final bodyDef = BodyDef()..position = initialPosition; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } + + @override + Future onLoad() async { + await super.onLoad(); + + await add( + SmallSquare()..initialPosition = Vector2.zero(), + ); + } +} + +class SmallSquare extends BodyComponent with InitialPosition, Layered { + SmallSquare() { + paint = Paint() + ..color = Color.fromARGB(255, 27, 241, 8) + ..style = PaintingStyle.stroke; + layer = Layer.board; + } + + @override + Body createBody() { + final shape = PolygonShape()..setAsBoxXY(3, 3); + final fixtureDef = FixtureDef(shape); + + final bodyDef = BodyDef()..position = initialPosition; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } +} diff --git a/packages/pinball_components/sandbox/lib/stories/layer/layer.dart b/packages/pinball_components/sandbox/lib/stories/layer/layer.dart new file mode 100644 index 00000000..6d3538dd --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/layer/layer.dart @@ -0,0 +1,18 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:flame/game.dart'; +import 'package:flutter/material.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/layer/basic.dart'; + +void addLayerStories(Dashbook dashbook) { + dashbook.storiesOf('Layer').add( + 'Layer', + (context) => GameWidget( + game: BasicLayerGame( + color: context.colorProperty('color', Colors.blue), + ), + ), + codeLink: buildSourceLink('layer/basic.dart'), + info: BasicLayerGame.info, + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 6070319c..1135fbaf 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -1 +1,2 @@ export 'ball/ball.dart'; +export 'layer/layer.dart'; diff --git a/packages/pinball_components/sandbox/pubspec.lock b/packages/pinball_components/sandbox/pubspec.lock index 7452ccf4..bb132da7 100644 --- a/packages/pinball_components/sandbox/pubspec.lock +++ b/packages/pinball_components/sandbox/pubspec.lock @@ -142,6 +142,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" + geometry: + dependency: transitive + description: + path: "../../geometry" + relative: true + source: path + version: "1.0.0+1" js: dependency: transitive description: