feat: add `Baseboard` assets (#106)

* feat: add baseboard assets

* refactor: move to components package

* test: coverage fix

* chore: small suggestions

* refactor: adjust size

* style: make angle readable
pull/133/head
Allison Ryan 4 years ago committed by GitHub
parent 83e6cb892b
commit 90588d95c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,14 +12,7 @@ class Board extends Component {
@override
Future<void> onLoad() async {
// TODO(alestiago): adjust positioning once sprites are added.
final bottomGroup = _BottomGroup(
position: Vector2(
BoardDimensions.bounds.center.dx,
BoardDimensions.bounds.bottom + 10,
),
spacing: 2,
);
final bottomGroup = _BottomGroup();
final flutterForest = FlutterForest();
@ -46,27 +39,15 @@ class Board extends Component {
// TODO(alestiago): Consider renaming once entire Board is defined.
class _BottomGroup extends Component {
/// {@macro bottom_group}
_BottomGroup({
required this.position,
required this.spacing,
});
/// The amount of space between the line of symmetry.
final double spacing;
/// The position of this [_BottomGroup].
final Vector2 position;
_BottomGroup();
@override
Future<void> onLoad() async {
final spacing = this.spacing + Flipper.size.x / 2;
final rightSide = _BottomGroupSide(
side: BoardSide.right,
position: position + Vector2(spacing, 0),
);
final leftSide = _BottomGroupSide(
side: BoardSide.left,
position: position + Vector2(-spacing, 0),
);
await addAll([rightSide, leftSide]);
@ -82,35 +63,28 @@ class _BottomGroupSide extends Component {
/// {@macro bottom_group_side}
_BottomGroupSide({
required BoardSide side,
required Vector2 position,
}) : _side = side,
_position = position;
}) : _side = side;
final BoardSide _side;
final Vector2 _position;
@override
Future<void> onLoad() async {
final direction = _side.direction;
final centerXAdjustment = _side.isLeft ? 0 : -6.5;
final flipper = ControlledFlipper(
side: _side,
)..initialPosition = _position;
)..initialPosition = Vector2((11.0 * direction) + centerXAdjustment, -42.4);
final baseboard = Baseboard(side: _side)
..initialPosition = _position +
Vector2(
(Baseboard.size.x / 1.6 * direction),
Baseboard.size.y - 2,
..initialPosition = Vector2(
(25.58 * direction) + centerXAdjustment,
-28.69,
);
final kicker = Kicker(
side: _side,
)..initialPosition = _position +
Vector2(
(Flipper.size.x) * direction,
Flipper.size.y + Kicker.size.y,
)..initialPosition = Vector2(
(22.0 * direction) + centerXAdjustment,
-26,
);
await addAll([flipper, baseboard, kicker]);

@ -1,4 +1,3 @@
export 'baseboard.dart';
export 'board.dart';
export 'bonus_word.dart';
export 'chrome_dino.dart';

@ -11,6 +11,8 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.flutterSignPost.keyName),
images.load(components.Assets.images.flipper.left.keyName),
images.load(components.Assets.images.flipper.right.keyName),
images.load(components.Assets.images.baseboard.left.keyName),
images.load(components.Assets.images.baseboard.right.keyName),
images.load(Assets.images.components.background.path),
]);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

@ -13,6 +13,8 @@ class $AssetsImagesGen {
/// File path: assets/images/ball.png
AssetGenImage get ball => const AssetGenImage('assets/images/ball.png');
$AssetsImagesBaseboardGen get baseboard => const $AssetsImagesBaseboardGen();
$AssetsImagesFlipperGen get flipper => const $AssetsImagesFlipperGen();
/// File path: assets/images/flutter_sign_post.png
@ -28,6 +30,18 @@ class $AssetsImagesGen {
const AssetGenImage('assets/images/spaceship_saucer.png');
}
class $AssetsImagesBaseboardGen {
const $AssetsImagesBaseboardGen();
/// File path: assets/images/baseboard/left.png
AssetGenImage get left =>
const AssetGenImage('assets/images/baseboard/left.png');
/// File path: assets/images/baseboard/right.png
AssetGenImage get right =>
const AssetGenImage('assets/images/baseboard/right.png');
}
class $AssetsImagesFlipperGen {
const $AssetsImagesFlipperGen();

@ -1,5 +1,6 @@
import 'dart:math' as math;
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball_components/pinball_components.dart';
@ -12,9 +13,6 @@ class Baseboard extends BodyComponent with InitialPosition {
required BoardSide side,
}) : _side = side;
/// The size of the [Baseboard].
static final size = Vector2(24.2, 13.5);
/// Whether the [Baseboard] is on the left or right side of the board.
final BoardSide _side;
@ -24,50 +22,55 @@ class Baseboard extends BodyComponent with InitialPosition {
final arcsAngle = -1.11 * direction;
const arcsRotation = math.pi / 2.08;
final pegBumperShape = CircleShape()..radius = 0.7;
pegBumperShape.position.setValues(11.11 * direction, 7.15);
final pegBumperFixtureDef = FixtureDef(pegBumperShape);
fixturesDef.add(pegBumperFixtureDef);
final topCircleShape = CircleShape()..radius = 0.7;
topCircleShape.position.setValues(11.39 * direction, 6.05);
topCircleShape.position.setValues(9.71 * direction, 4.95);
final topCircleFixtureDef = FixtureDef(topCircleShape);
fixturesDef.add(topCircleFixtureDef);
final innerEdgeShape = EdgeShape()
..set(
Vector2(10.86 * direction, 6.45),
Vector2(6.96 * direction, 0.25),
Vector2(9.01 * direction, 5.35),
Vector2(5.29 * direction, -0.95),
);
final innerEdgeShapeFixtureDef = FixtureDef(innerEdgeShape);
fixturesDef.add(innerEdgeShapeFixtureDef);
final outerEdgeShape = EdgeShape()
..set(
Vector2(11.96 * direction, 5.85),
Vector2(5.48 * direction, -4.85),
Vector2(10.41 * direction, 4.75),
Vector2(3.79 * direction, -5.95),
);
final outerEdgeShapeFixtureDef = FixtureDef(outerEdgeShape);
fixturesDef.add(outerEdgeShapeFixtureDef);
final upperArcShape = ArcShape(
center: Vector2(1.76 * direction, 3.25),
center: Vector2(0.09 * direction, 2.15),
arcRadius: 6.1,
angle: arcsAngle,
rotation: arcsRotation,
);
final upperArcFixtureDefs = FixtureDef(upperArcShape);
fixturesDef.add(upperArcFixtureDefs);
final upperArcFixtureDef = FixtureDef(upperArcShape);
fixturesDef.add(upperArcFixtureDef);
final lowerArcShape = ArcShape(
center: Vector2(1.85 * direction, -2.15),
center: Vector2(0.09 * direction, -3.35),
arcRadius: 4.5,
angle: arcsAngle,
rotation: arcsRotation,
);
final lowerArcFixtureDefs = FixtureDef(lowerArcShape);
fixturesDef.add(lowerArcFixtureDefs);
final lowerArcFixtureDef = FixtureDef(lowerArcShape);
fixturesDef.add(lowerArcFixtureDef);
final bottomRectangle = PolygonShape()
..setAsBox(
7,
6.8,
2,
Vector2(-5.14 * direction, -4.75),
Vector2(-6.3 * direction, -5.85),
0,
);
final bottomRectangleFixtureDef = FixtureDef(bottomRectangle);
@ -76,11 +79,31 @@ class Baseboard extends BodyComponent with InitialPosition {
return fixturesDef;
}
@override
Future<void> onLoad() async {
await super.onLoad();
final sprite = await gameRef.loadSprite(
(_side.isLeft)
? Assets.images.baseboard.left.keyName
: Assets.images.baseboard.right.keyName,
);
await add(
SpriteComponent(
sprite: sprite,
size: Vector2(27.5, 17.9),
anchor: Anchor.center,
position: Vector2(_side.isLeft ? 0.4 : -0.4, 0),
),
);
renderBody = false;
}
@override
Body createBody() {
// TODO(allisonryan0002): share sweeping angle with flipper when components
// are grouped.
const angle = math.pi / 5;
const angle = 37.1 * (math.pi / 180);
final bodyDef = BodyDef()
..position = initialPosition

@ -1,4 +1,5 @@
export 'ball.dart';
export 'baseboard.dart';
export 'board_dimensions.dart';
export 'board_side.dart';
export 'fire_effect.dart';

@ -26,6 +26,7 @@ flutter:
generate: true
assets:
- assets/images/
- assets/images/baseboard/
- assets/images/flipper/
flutter_gen:

@ -6,7 +6,6 @@
// https://opensource.org/licenses/MIT.
import 'package:dashbook/dashbook.dart';
import 'package:flutter/material.dart';
import 'package:sandbox/stories/effects/effects.dart';
import 'package:sandbox/stories/spaceship/spaceship.dart';
import 'package:sandbox/stories/stories.dart';
@ -18,5 +17,6 @@ void main() {
addEffectsStories(dashbook);
addFlipperStories(dashbook);
addSpaceshipStories(dashbook);
addBaseboardStories(dashbook);
runApp(dashbook);
}

@ -0,0 +1,15 @@
import 'package:dashbook/dashbook.dart';
import 'package:flame/game.dart';
import 'package:sandbox/common/common.dart';
import 'package:sandbox/stories/baseboard/basic.dart';
void addBaseboardStories(Dashbook dashbook) {
dashbook.storiesOf('Baseboard').add(
'Basic',
(context) => GameWidget(
game: BasicBaseboardGame(),
),
codeLink: buildSourceLink('baseboard/basic.dart'),
info: BasicBaseboardGame.info,
);
}

@ -0,0 +1,26 @@
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:sandbox/common/common.dart';
class BasicBaseboardGame extends BasicGame {
static const info = '''
Basic example of how a Baseboard works.
''';
@override
Future<void> onLoad() async {
await super.onLoad();
final center = screenToWorld(camera.viewport.canvasSize! / 2);
final leftBaseboard = Baseboard(side: BoardSide.left)
..initialPosition = center - Vector2(25, 0);
final rightBaseboard = Baseboard(side: BoardSide.right)
..initialPosition = center + Vector2(25, 0);
await addAll([
leftBaseboard,
rightBaseboard,
]);
}
}

@ -1,3 +1,5 @@
export 'ball/ball.dart';
export 'baseboard/baseboard.dart';
export 'effects/effects.dart';
export 'flipper/flipper.dart';
export 'layer/layer.dart';

@ -3,13 +3,16 @@
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart';
import '../../helpers/helpers.dart';
void main() {
group('Baseboard', () {
// TODO(allisonryan0002): Add golden tests.
TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(Forge2DGame.new);
final flameTester = FlameTester(TestGame.new);
flameTester.test(
'loads correctly',
@ -62,14 +65,14 @@ void main() {
group('fixtures', () {
flameTester.test(
'has six',
'has seven',
(game) async {
final baseboard = Baseboard(
side: BoardSide.left,
);
await game.ensureAdd(baseboard);
expect(baseboard.body.fixtures.length, equals(6));
expect(baseboard.body.fixtures.length, equals(7));
},
);
});
Loading…
Cancel
Save