refactor: baseboard shape and position

pull/85/head
Allison Ryan 4 years ago
parent baab7f65c4
commit 0e013bb8d2

@ -4,7 +4,7 @@ import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
/// {@template baseboard} /// {@template baseboard}
/// Straight, angled board piece to corral the [Ball] towards the [Flipper]s. /// Wing-shaped board piece to corral the [Ball] towards the [Flipper]s.
/// {@endtemplate} /// {@endtemplate}
class Baseboard extends BodyComponent with InitialPosition { class Baseboard extends BodyComponent with InitialPosition {
/// {@macro baseboard} /// {@macro baseboard}
@ -12,41 +12,68 @@ class Baseboard extends BodyComponent with InitialPosition {
required BoardSide side, required BoardSide side,
}) : _side = side; }) : _side = side;
/// The width of the [Baseboard]. /// The size of the [Baseboard].
static const width = 10.0; static final size = Vector2(24.2, 13.5);
/// The height of the [Baseboard].
static const height = 2.0;
/// 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;
List<FixtureDef> _createFixtureDefs() { List<FixtureDef> _createFixtureDefs() {
final fixturesDef = <FixtureDef>[]; final fixturesDef = <FixtureDef>[];
final direction = _side.direction;
final arcsAngle = -1.11 * direction;
const arcsRotation = math.pi / 2.08;
final circleShape1 = CircleShape()..radius = Baseboard.height / 2; final topCircleShape = CircleShape()..radius = 0.7;
circleShape1.position.setValues( topCircleShape.position.setValues(11.39 * direction, 6.05);
-(Baseboard.width / 2) + circleShape1.radius, final topCircleFixtureDef = FixtureDef(topCircleShape);
0, fixturesDef.add(topCircleFixtureDef);
final innerEdgeShape = EdgeShape()
..set(
Vector2(10.86 * direction, 6.45),
Vector2(6.96 * direction, 0.25),
); );
final circle1FixtureDef = FixtureDef(circleShape1); final innerEdgeShapeFixtureDef = FixtureDef(innerEdgeShape);
fixturesDef.add(circle1FixtureDef); fixturesDef.add(innerEdgeShapeFixtureDef);
final circleShape2 = CircleShape()..radius = Baseboard.height / 2; final outerEdgeShape = EdgeShape()
circleShape2.position.setValues( ..set(
(Baseboard.width / 2) - circleShape2.radius, Vector2(11.96 * direction, 5.85),
0, Vector2(5.48 * direction, -4.85),
); );
final circle2FixtureDef = FixtureDef(circleShape2); final outerEdgeShapeFixtureDef = FixtureDef(outerEdgeShape);
fixturesDef.add(circle2FixtureDef); fixturesDef.add(outerEdgeShapeFixtureDef);
final rectangle = PolygonShape() final upperArcFixtureDefs = Pathway.arc(
..setAsBoxXY( center: Vector2(1.76 * direction, 3.25),
(Baseboard.width - Baseboard.height) / 2, width: 0,
Baseboard.height / 2, radius: 6.1,
angle: arcsAngle,
rotation: arcsRotation,
singleWall: true,
).createFixtureDefs();
fixturesDef.addAll(upperArcFixtureDefs);
final lowerArcFixtureDefs = Pathway.arc(
center: Vector2(1.85 * direction, -2.15),
width: 0,
radius: 4.5,
angle: arcsAngle,
rotation: arcsRotation,
singleWall: true,
).createFixtureDefs();
fixturesDef.addAll(lowerArcFixtureDefs);
final bottomRectangle = PolygonShape()
..setAsBox(
7,
2,
Vector2(-5.14 * direction, -4.75),
0,
); );
final rectangleFixtureDef = FixtureDef(rectangle); final bottomRectangleFixtureDef = FixtureDef(bottomRectangle);
fixturesDef.add(rectangleFixtureDef); fixturesDef.add(bottomRectangleFixtureDef);
return fixturesDef; return fixturesDef;
} }
@ -55,7 +82,7 @@ class Baseboard extends BodyComponent with InitialPosition {
Body createBody() { Body createBody() {
// TODO(allisonryan0002): share sweeping angle with flipper when components // TODO(allisonryan0002): share sweeping angle with flipper when components
// are grouped. // are grouped.
const angle = math.pi / 7; const angle = math.pi / 5;
final bodyDef = BodyDef() final bodyDef = BodyDef()
..position = initialPosition ..position = initialPosition

@ -133,8 +133,8 @@ class _BottomGroupSide extends Component {
final baseboard = Baseboard(side: _side) final baseboard = Baseboard(side: _side)
..initialPosition = _position + ..initialPosition = _position +
Vector2( Vector2(
(Flipper.size.x * direction) - direction, (Baseboard.size.x / 1.6 * direction),
Flipper.size.y, Baseboard.size.y - 2,
); );
final kicker = Kicker( final kicker = Kicker(
side: _side, side: _side,

Loading…
Cancel
Save