feat: add baseboard assets

pull/106/head
Allison Ryan 4 years ago
parent 6f32c4f2b8
commit 4db897196a

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

@ -1,8 +1,10 @@
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball/gen/assets.gen.dart';
import 'package:pinball_components/pinball_components.dart' hide Assets;
/// {@template baseboard} /// {@template baseboard}
/// Wing-shaped board piece to corral the [Ball] towards the [Flipper]s. /// Wing-shaped board piece to corral the [Ball] towards the [Flipper]s.
@ -14,7 +16,7 @@ class Baseboard extends BodyComponent with InitialPosition {
}) : _side = side; }) : _side = side;
/// The size of the [Baseboard]. /// The size of the [Baseboard].
static final size = Vector2(24.2, 13.5); static final size = Vector2(24.79, 15.5);
/// Whether the [Baseboard] is on the left or right side of the board. /// Whether the [Baseboard] is on the left or right side of the board.
final BoardSide _side; final BoardSide _side;
@ -25,50 +27,55 @@ class Baseboard extends BodyComponent with InitialPosition {
final arcsAngle = -1.11 * direction; final arcsAngle = -1.11 * direction;
const arcsRotation = math.pi / 2.08; 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; 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); final topCircleFixtureDef = FixtureDef(topCircleShape);
fixturesDef.add(topCircleFixtureDef); fixturesDef.add(topCircleFixtureDef);
final innerEdgeShape = EdgeShape() final innerEdgeShape = EdgeShape()
..set( ..set(
Vector2(10.86 * direction, 6.45), Vector2(9.01 * direction, 5.35),
Vector2(6.96 * direction, 0.25), Vector2(5.29 * direction, -0.95),
); );
final innerEdgeShapeFixtureDef = FixtureDef(innerEdgeShape); final innerEdgeShapeFixtureDef = FixtureDef(innerEdgeShape);
fixturesDef.add(innerEdgeShapeFixtureDef); fixturesDef.add(innerEdgeShapeFixtureDef);
final outerEdgeShape = EdgeShape() final outerEdgeShape = EdgeShape()
..set( ..set(
Vector2(11.96 * direction, 5.85), Vector2(10.41 * direction, 4.75),
Vector2(5.48 * direction, -4.85), Vector2(3.79 * direction, -5.95),
); );
final outerEdgeShapeFixtureDef = FixtureDef(outerEdgeShape); final outerEdgeShapeFixtureDef = FixtureDef(outerEdgeShape);
fixturesDef.add(outerEdgeShapeFixtureDef); fixturesDef.add(outerEdgeShapeFixtureDef);
final upperArcShape = ArcShape( final upperArcShape = ArcShape(
center: Vector2(1.76 * direction, 3.25), center: Vector2(0.09 * direction, 2.15),
arcRadius: 6.1, arcRadius: 6.1,
angle: arcsAngle, angle: arcsAngle,
rotation: arcsRotation, rotation: arcsRotation,
); );
final upperArcFixtureDefs = FixtureDef(upperArcShape); final upperArcFixtureDef = FixtureDef(upperArcShape);
fixturesDef.add(upperArcFixtureDefs); fixturesDef.add(upperArcFixtureDef);
final lowerArcShape = ArcShape( final lowerArcShape = ArcShape(
center: Vector2(1.85 * direction, -2.15), center: Vector2(0.09 * direction, -3.35),
arcRadius: 4.5, arcRadius: 4.5,
angle: arcsAngle, angle: arcsAngle,
rotation: arcsRotation, rotation: arcsRotation,
); );
final lowerArcFixtureDefs = FixtureDef(lowerArcShape); final lowerArcFixtureDef = FixtureDef(lowerArcShape);
fixturesDef.add(lowerArcFixtureDefs); fixturesDef.add(lowerArcFixtureDef);
final bottomRectangle = PolygonShape() final bottomRectangle = PolygonShape()
..setAsBox( ..setAsBox(
7, 7,
2, 2,
Vector2(-5.14 * direction, -4.75), Vector2(-6.81 * direction, -5.85),
0, 0,
); );
final bottomRectangleFixtureDef = FixtureDef(bottomRectangle); final bottomRectangleFixtureDef = FixtureDef(bottomRectangle);
@ -77,11 +84,31 @@ class Baseboard extends BodyComponent with InitialPosition {
return fixturesDef; return fixturesDef;
} }
@override
Future<void> onLoad() async {
await super.onLoad();
final sprite = await gameRef.loadSprite(
(_side.isLeft)
? Assets.images.components.baseboards.leftBaseboard.path
: Assets.images.components.baseboards.rightBaseboard.path,
);
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 @override
Body createBody() { Body createBody() {
// TODO(allisonryan0002): share sweeping angle with flipper when components const angle = 0.6475;
// are grouped.
const angle = math.pi / 5;
final bodyDef = BodyDef() final bodyDef = BodyDef()
..position = initialPosition ..position = initialPosition

@ -6,18 +6,11 @@ import 'package:pinball/game/game.dart';
/// {endtemplate} /// {endtemplate}
class Board extends Component { class Board extends Component {
/// {@macro board} /// {@macro board}
Board(); Board() : super(priority: 5);
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
// TODO(alestiago): adjust positioning once sprites are added. final bottomGroup = _BottomGroup();
final bottomGroup = _BottomGroup(
position: Vector2(
PinballGame.boardBounds.center.dx,
PinballGame.boardBounds.bottom + 10,
),
spacing: 2,
);
final flutterForest = FlutterForest(); final flutterForest = FlutterForest();
@ -44,27 +37,15 @@ class Board extends Component {
// TODO(alestiago): Consider renaming once entire Board is defined. // TODO(alestiago): Consider renaming once entire Board is defined.
class _BottomGroup extends Component { class _BottomGroup extends Component {
/// {@macro bottom_group} /// {@macro bottom_group}
_BottomGroup({ _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;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
final spacing = this.spacing + Flipper.size.x / 2;
final rightSide = _BottomGroupSide( final rightSide = _BottomGroupSide(
side: BoardSide.right, side: BoardSide.right,
position: position + Vector2(spacing, 0),
); );
final leftSide = _BottomGroupSide( final leftSide = _BottomGroupSide(
side: BoardSide.left, side: BoardSide.left,
position: position + Vector2(-spacing, 0),
); );
await addAll([rightSide, leftSide]); await addAll([rightSide, leftSide]);
@ -80,33 +61,28 @@ class _BottomGroupSide extends Component {
/// {@macro bottom_group_side} /// {@macro bottom_group_side}
_BottomGroupSide({ _BottomGroupSide({
required BoardSide side, required BoardSide side,
required Vector2 position, }) : _side = side;
}) : _side = side,
_position = position;
final BoardSide _side; final BoardSide _side;
final Vector2 _position;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
final direction = _side.direction; final direction = _side.direction;
final centerXAdjustment = _side.isLeft ? 0 : -6.5;
final flipper = Flipper( final flipper = Flipper(
side: _side, side: _side,
)..initialPosition = _position; )..initialPosition = Vector2((11.0 * direction) + centerXAdjustment, -42.4);
final baseboard = Baseboard(side: _side) final baseboard = Baseboard(side: _side)
..initialPosition = _position + ..initialPosition = Vector2(
Vector2( (25.58 * direction) + centerXAdjustment,
(Baseboard.size.x / 1.6 * direction), -28.69,
Baseboard.size.y - 2,
); );
final kicker = Kicker( final kicker = Kicker(
side: _side, side: _side,
)..initialPosition = _position + )..initialPosition = Vector2(
Vector2( (22.0 * direction) + centerXAdjustment,
(Flipper.size.x) * direction, -26,
Flipper.size.y + Kicker.size.y,
); );
await addAll([flipper, baseboard, kicker]); await addAll([flipper, baseboard, kicker]);

@ -10,6 +10,8 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.ball.keyName), images.load(components.Assets.images.ball.keyName),
images.load(Assets.images.components.flipper.path), images.load(Assets.images.components.flipper.path),
images.load(Assets.images.components.background.path), images.load(Assets.images.components.background.path),
images.load(Assets.images.components.baseboards.leftBaseboard.path),
images.load(Assets.images.components.baseboards.rightBaseboard.path),
images.load(Assets.images.components.spaceship.androidTop.path), images.load(Assets.images.components.spaceship.androidTop.path),
images.load(Assets.images.components.spaceship.androidBottom.path), images.load(Assets.images.components.spaceship.androidBottom.path),
images.load(Assets.images.components.spaceship.lower.path), images.load(Assets.images.components.spaceship.lower.path),

@ -21,6 +21,9 @@ class $AssetsImagesComponentsGen {
AssetGenImage get background => AssetGenImage get background =>
const AssetGenImage('assets/images/components/background.png'); const AssetGenImage('assets/images/components/background.png');
$AssetsImagesComponentsBaseboardsGen get baseboards =>
const $AssetsImagesComponentsBaseboardsGen();
/// File path: assets/images/components/flipper.png /// File path: assets/images/components/flipper.png
AssetGenImage get flipper => AssetGenImage get flipper =>
const AssetGenImage('assets/images/components/flipper.png'); const AssetGenImage('assets/images/components/flipper.png');
@ -29,6 +32,18 @@ class $AssetsImagesComponentsGen {
const $AssetsImagesComponentsSpaceshipGen(); const $AssetsImagesComponentsSpaceshipGen();
} }
class $AssetsImagesComponentsBaseboardsGen {
const $AssetsImagesComponentsBaseboardsGen();
/// File path: assets/images/components/baseboards/left-baseboard.png
AssetGenImage get leftBaseboard => const AssetGenImage(
'assets/images/components/baseboards/left-baseboard.png');
/// File path: assets/images/components/baseboards/right-baseboard.png
AssetGenImage get rightBaseboard => const AssetGenImage(
'assets/images/components/baseboards/right-baseboard.png');
}
class $AssetsImagesComponentsSpaceshipGen { class $AssetsImagesComponentsSpaceshipGen {
const $AssetsImagesComponentsSpaceshipGen(); const $AssetsImagesComponentsSpaceshipGen();

@ -43,6 +43,7 @@ flutter:
assets: assets:
- assets/images/components/ - assets/images/components/
- assets/images/components/baseboards/
- assets/images/components/spaceship/ - assets/images/components/spaceship/
flutter_gen: flutter_gen:

Loading…
Cancel
Save