chore: trace all bodies in sandbox (#157)

* feat: add traceAllBodies method

* chore: update tracing stories

* refactor: use for each

* refactor: convert to mixin

* refactor: simplify mixin
pull/162/head
Allison Ryan 4 years ago committed by GitHub
parent d86ef40cb9
commit 9d2e9dd243
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -24,3 +24,18 @@ extension BodyTrace on BodyComponent {
); );
} }
} }
mixin Traceable on Forge2DGame {
late final bool trace;
Future<void> traceAllBodies({
Color color = const Color(0xFFFF0000),
}) async {
if (trace) {
await ready();
children
.whereType<BodyComponent>()
.forEach((bodyComponent) => bodyComponent.trace());
}
}
}

@ -5,10 +5,8 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class BigDashNestBumperGame extends BasicBallGame { class BigDashNestBumperGame extends BasicBallGame with Traceable {
BigDashNestBumperGame({ BigDashNestBumperGame() : super(color: const Color(0xFF0000FF));
required this.trace,
}) : super(color: const Color(0xFF0000FF));
static const info = ''' static const info = '''
Shows how a BigDashNestBumper is rendered. Shows how a BigDashNestBumper is rendered.
@ -16,8 +14,6 @@ class BigDashNestBumperGame extends BasicBallGame {
Activate the "trace" parameter to overlay the body. Activate the "trace" parameter to overlay the body.
'''; ''';
final bool trace;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -28,6 +24,6 @@ class BigDashNestBumperGame extends BasicBallGame {
..priority = 1; ..priority = 1;
await add(bigDashNestBumper); await add(bigDashNestBumper);
if (trace) bigDashNestBumper.trace(); await traceAllBodies();
} }
} }

@ -8,9 +8,8 @@ void addDashNestBumperStories(Dashbook dashbook) {
dashbook.storiesOf('Dash Nest Bumpers').add( dashbook.storiesOf('Dash Nest Bumpers').add(
'Big', 'Big',
(context) => GameWidget( (context) => GameWidget(
game: BigDashNestBumperGame( game: BigDashNestBumperGame()
trace: context.boolProperty('Trace', true), ..trace = context.boolProperty('Trace', true),
),
), ),
codeLink: buildSourceLink('dash_nest_bumper/big.dart'), codeLink: buildSourceLink('dash_nest_bumper/big.dart'),
info: BasicBallGame.info, info: BasicBallGame.info,

@ -6,10 +6,8 @@ import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class FlipperGame extends BasicBallGame with KeyboardEvents { class FlipperGame extends BasicBallGame with KeyboardEvents, Traceable {
FlipperGame({ FlipperGame() : super(color: Colors.blue);
required this.trace,
}) : super(color: Colors.blue);
static const info = ''' static const info = '''
Shows how Flippers are rendered. Shows how Flippers are rendered.
@ -30,8 +28,6 @@ class FlipperGame extends BasicBallGame with KeyboardEvents {
LogicalKeyboardKey.keyD, LogicalKeyboardKey.keyD,
]; ];
final bool trace;
late Flipper leftFlipper; late Flipper leftFlipper;
late Flipper rightFlipper; late Flipper rightFlipper;
@ -51,10 +47,7 @@ class FlipperGame extends BasicBallGame with KeyboardEvents {
rightFlipper, rightFlipper,
]); ]);
if (trace) { await traceAllBodies();
leftFlipper.trace();
rightFlipper.trace();
}
} }
@override @override

@ -7,9 +7,7 @@ void addFlipperStories(Dashbook dashbook) {
dashbook.storiesOf('Flipper').add( dashbook.storiesOf('Flipper').add(
'Basic', 'Basic',
(context) => GameWidget( (context) => GameWidget(
game: FlipperGame( game: FlipperGame()..trace = context.boolProperty('Trace', true),
trace: context.boolProperty('Trace', true),
),
), ),
codeLink: buildSourceLink('flipper/basic.dart'), codeLink: buildSourceLink('flipper/basic.dart'),
info: FlipperGame.info, info: FlipperGame.info,

@ -3,10 +3,8 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class KickerGame extends BasicBallGame { class KickerGame extends BasicBallGame with Traceable {
KickerGame({ KickerGame() : super(color: const Color(0xFFFF0000));
required this.trace,
}) : super(color: const Color(0xFFFF0000));
static const info = ''' static const info = '''
Shows how Kickers are rendered. Shows how Kickers are rendered.
@ -15,8 +13,6 @@ class KickerGame extends BasicBallGame {
- Tap anywhere on the screen to spawn a ball into the game. - Tap anywhere on the screen to spawn a ball into the game.
'''; ''';
final bool trace;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -31,9 +27,6 @@ class KickerGame extends BasicBallGame {
..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y); ..initialPosition = Vector2(center.x + (Kicker.size.x * 2), center.y);
await add(rightKicker); await add(rightKicker);
if (trace) { await traceAllBodies();
leftKicker.trace();
rightKicker.trace();
}
} }
} }

@ -7,9 +7,7 @@ void addKickerStories(Dashbook dashbook) {
dashbook.storiesOf('Kickers').add( dashbook.storiesOf('Kickers').add(
'Basic', 'Basic',
(context) => GameWidget( (context) => GameWidget(
game: KickerGame( game: KickerGame()..trace = context.boolProperty('Trace', true),
trace: context.boolProperty('Trace', true),
),
), ),
codeLink: buildSourceLink('kicker_game/basic.dart'), codeLink: buildSourceLink('kicker_game/basic.dart'),
info: KickerGame.info, info: KickerGame.info,

@ -1,14 +1,10 @@
import 'dart:math' as math;
import 'package:flame/extensions.dart'; import 'package:flame/extensions.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class SlingshotGame extends BasicBallGame { class SlingshotGame extends BasicBallGame with Traceable {
SlingshotGame({ SlingshotGame() : super(color: const Color(0xFFFF0000));
required this.trace,
}) : super(color: const Color(0xFFFF0000));
static const info = ''' static const info = '''
Shows how Slingshots are rendered. Shows how Slingshots are rendered.
@ -17,50 +13,11 @@ class SlingshotGame extends BasicBallGame {
- Tap anywhere on the screen to spawn a ball into the game. - Tap anywhere on the screen to spawn a ball into the game.
'''; ''';
final bool trace;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
await addFromBlueprint(Slingshots());
final center = screenToWorld(camera.viewport.canvasSize! / 2); camera.followVector2(Vector2.zero());
await traceAllBodies();
final leftUpperSlingshot = Slingshot(
length: 5.66,
angle: -1.5 * (math.pi / 180),
spritePath: Assets.images.slingshot.leftUpper.keyName,
)..initialPosition = center + Vector2(-29, 1.5);
final leftLowerSlingshot = Slingshot(
length: 3.54,
angle: -29.1 * (math.pi / 180),
spritePath: Assets.images.slingshot.leftLower.keyName,
)..initialPosition = center + Vector2(-31, -6.2);
final rightUpperSlingshot = Slingshot(
length: 5.64,
angle: 1 * (math.pi / 180),
spritePath: Assets.images.slingshot.rightUpper.keyName,
)..initialPosition = center + Vector2(22.3, 1.58);
final rightLowerSlingshot = Slingshot(
length: 3.46,
angle: 26.8 * (math.pi / 180),
spritePath: Assets.images.slingshot.rightLower.keyName,
)..initialPosition = center + Vector2(24.7, -6.2);
await addAll([
leftUpperSlingshot,
leftLowerSlingshot,
rightUpperSlingshot,
rightLowerSlingshot,
]);
if (trace) {
leftUpperSlingshot.trace();
leftLowerSlingshot.trace();
rightUpperSlingshot.trace();
rightLowerSlingshot.trace();
}
} }
} }

@ -7,9 +7,7 @@ void addSlingshotStories(Dashbook dashbook) {
dashbook.storiesOf('Slingshots').add( dashbook.storiesOf('Slingshots').add(
'Basic', 'Basic',
(context) => GameWidget( (context) => GameWidget(
game: SlingshotGame( game: SlingshotGame()..trace = context.boolProperty('Trace', true),
trace: context.boolProperty('Trace', true),
),
), ),
codeLink: buildSourceLink('slingshot_game/basic.dart'), codeLink: buildSourceLink('slingshot_game/basic.dart'),
info: SlingshotGame.info, info: SlingshotGame.info,

@ -5,10 +5,8 @@ import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart'; import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/ball/basic_ball_game.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart';
class SparkyBumperGame extends BasicBallGame { class SparkyBumperGame extends BasicBallGame with Traceable {
SparkyBumperGame({ SparkyBumperGame() : super(color: const Color(0xFF0000FF));
required this.trace,
}) : super(color: const Color(0xFF0000FF));
static const info = ''' static const info = '''
Shows how a SparkyBumper is rendered. Shows how a SparkyBumper is rendered.
@ -16,8 +14,6 @@ class SparkyBumperGame extends BasicBallGame {
Activate the "trace" parameter to overlay the body. Activate the "trace" parameter to overlay the body.
'''; ''';
final bool trace;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -38,10 +34,6 @@ class SparkyBumperGame extends BasicBallGame {
sparkyBumperC, sparkyBumperC,
]); ]);
if (trace) { await traceAllBodies();
sparkyBumperA.trace();
sparkyBumperB.trace();
sparkyBumperC.trace();
}
} }
} }

@ -7,9 +7,7 @@ void addSparkyBumperStories(Dashbook dashbook) {
dashbook.storiesOf('Sparky Bumpers').add( dashbook.storiesOf('Sparky Bumpers').add(
'Basic', 'Basic',
(context) => GameWidget( (context) => GameWidget(
game: SparkyBumperGame( game: SparkyBumperGame()..trace = context.boolProperty('Trace', true),
trace: context.boolProperty('Trace', true),
),
), ),
codeLink: buildSourceLink('sparky_bumper/basic.dart'), codeLink: buildSourceLink('sparky_bumper/basic.dart'),
info: SparkyBumperGame.info, info: SparkyBumperGame.info,

Loading…
Cancel
Save