Merge branch 'main' into fix/remove_geometry_flutter_dep

pull/27/head
Rui Miguel Alonso 4 years ago committed by GitHub
commit cd4a5e14e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

@ -13,24 +13,26 @@ class Ball extends PositionBodyComponent<PinballGame, SpriteComponent>
Ball({
required Vector2 position,
}) : _position = position,
super(size: ballSize);
static final ballSize = Vector2.all(2);
super(size: Vector2.all(2));
/// The initial position of the [Ball] body.
final Vector2 _position;
/// Asset location of the sprite that renders with the [Ball].
///
/// Sprite is preloaded by [PinballGameAssetsX].
static const spritePath = 'components/ball.png';
@override
Future<void> onLoad() async {
await super.onLoad();
final sprite = await gameRef.loadSprite(spritePath);
positionComponent = SpriteComponent(sprite: sprite, size: ballSize);
positionComponent = SpriteComponent(sprite: sprite, size: size);
}
@override
Body createBody() {
final shape = CircleShape()..radius = ballSize.x / 2;
final shape = CircleShape()..radius = size.x / 2;
final fixtureDef = FixtureDef(shape)..density = 1;
@ -42,6 +44,11 @@ class Ball extends PositionBodyComponent<PinballGame, SpriteComponent>
return world.createBody(bodyDef)..createFixture(fixtureDef);
}
/// Removes the [Ball] from a [PinballGame]; spawning a new [Ball] if
/// any are left.
///
/// Triggered by [BottomWallBallContactCallback] when the [Ball] falls into
/// a [BottomWall].
void lost() {
shouldRemove = true;

@ -1,9 +1,9 @@
import 'dart:async';
import 'dart:math' as math;
import 'package:flame/components.dart' show SpriteComponent;
import 'package:flame/input.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:pinball/game/game.dart';
@ -12,19 +12,15 @@ import 'package:pinball/game/game.dart';
///
/// [Flipper] can be controlled by the player in an arc motion.
/// {@endtemplate flipper}
class Flipper extends BodyComponent with KeyboardHandler {
class Flipper extends PositionBodyComponent with KeyboardHandler {
/// {@macro flipper}
Flipper._({
required Vector2 position,
required this.side,
required List<LogicalKeyboardKey> keys,
}) : _position = position,
_keys = keys {
// TODO(alestiago): Use sprite instead of color when provided.
paint = Paint()
..color = const Color(0xFF00FF00)
..style = PaintingStyle.fill;
}
_keys = keys,
super(size: Vector2(width, height));
/// A left positioned [Flipper].
Flipper.left({
@ -50,6 +46,11 @@ class Flipper extends BodyComponent with KeyboardHandler {
],
);
/// Asset location of the sprite that renders with the [Flipper].
///
/// Sprite is preloaded by [PinballGameAssetsX].
static const spritePath = 'components/flipper.png';
/// The width of the [Flipper].
static const width = 12.0;
@ -75,6 +76,20 @@ class Flipper extends BodyComponent with KeyboardHandler {
/// [onKeyEvent] method listens to when one of these keys is pressed.
final List<LogicalKeyboardKey> _keys;
@override
Future<void> onLoad() async {
await super.onLoad();
final sprite = await gameRef.loadSprite(spritePath);
positionComponent = SpriteComponent(
sprite: sprite,
size: size,
);
if (side == BoardSide.right) {
positionComponent?.flipHorizontally();
}
}
/// Applies downward linear velocity to the [Flipper], moving it to its
/// resting position.
void _moveDown() {
@ -148,6 +163,7 @@ class Flipper extends BodyComponent with KeyboardHandler {
// TODO(erickzanardo): Remove this once the issue is solved:
// https://github.com/flame-engine/flame/issues/1417
// ignore: public_member_api_docs
final Completer hasMounted = Completer<void>();
@override

@ -6,13 +6,18 @@ import 'package:pinball/game/components/components.dart';
/// {@template wall}
/// A continuos generic and [BodyType.static] barrier that divides a game area.
/// {@endtemplate}
// TODO(alestiago): Remove [Wall] for [Pathway.straight].
class Wall extends BodyComponent {
/// {@macro wall}
Wall({
required this.start,
required this.end,
});
/// The [start] of the [Wall].
final Vector2 start;
/// The [end] of the [Wall].
final Vector2 end;
@override
@ -39,6 +44,7 @@ class Wall extends BodyComponent {
/// [BottomWallBallContactCallback].
/// {@endtemplate}
class BottomWall extends Wall {
/// {@macro bottom_wall}
BottomWall(Forge2DGame game)
: super(
start: game.screenToWorld(game.camera.viewport.effectiveSize),

@ -6,6 +6,7 @@ extension PinballGameAssetsX on PinballGame {
Future<void> preLoadAssets() async {
await Future.wait([
images.load(Ball.spritePath),
images.load(Flipper.spritePath),
]);
}
}

@ -1,6 +1,11 @@
import 'package:flutter/material.dart';
import 'package:pinball/game/game.dart';
/// {@template game_over_dialog}
/// [Dialog] displayed when the [PinballGame] is over.
/// {@endtemplate}
class GameOverDialog extends StatelessWidget {
/// {@macro game_over_dialog}
const GameOverDialog({Key? key}) : super(key: key);
@override

@ -1,3 +1,6 @@
// ignore_for_file: public_member_api_docs
// TODO(allisonryan0002): Document this section when the API is stable.
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:pinball_theme/pinball_theme.dart';

@ -1,3 +1,6 @@
// ignore_for_file: public_member_api_docs
// TODO(allisonryan0002): Document this section when the API is stable.
part of 'theme_cubit.dart';
class ThemeState extends Equatable {

@ -15,6 +15,7 @@ void main() {
'loads correctly',
(game) async {
final anchor = Anchor(position: Vector2.zero());
await game.ready();
await game.ensureAdd(anchor);
expect(game.contains(anchor), isTrue);
@ -25,6 +26,7 @@ void main() {
flameTester.test(
'positions correctly',
(game) async {
await game.ready();
final position = Vector2.all(10);
final anchor = Anchor(position: position);
await game.ensureAdd(anchor);
@ -37,6 +39,7 @@ void main() {
flameTester.test(
'is static',
(game) async {
await game.ready();
final anchor = Anchor(position: Vector2.zero());
await game.ensureAdd(anchor);

@ -18,6 +18,7 @@ void main() {
flameTester.test(
'has transparent color by default when no color is specified',
(game) async {
await game.ready();
final pathway = Pathway.straight(
position: Vector2.zero(),
start: Vector2(10, 10),
@ -38,6 +39,7 @@ void main() {
flameTester.test(
'has a color when is specified',
(game) async {
await game.ready();
const defaultColor = Colors.blue;
final pathway = Pathway.straight(
@ -59,6 +61,7 @@ void main() {
flameTester.test(
'loads correctly',
(game) async {
await game.ready();
final pathway = Pathway.straight(
position: Vector2.zero(),
start: Vector2(10, 10),
@ -75,6 +78,7 @@ void main() {
flameTester.test(
'positions correctly',
(game) async {
await game.ready();
final position = Vector2.all(10);
final pathway = Pathway.straight(
position: position,
@ -92,6 +96,7 @@ void main() {
flameTester.test(
'is static',
(game) async {
await game.ready();
final pathway = Pathway.straight(
position: Vector2.zero(),
start: Vector2(10, 10),
@ -109,6 +114,7 @@ void main() {
flameTester.test(
'has only one ChainShape when singleWall is true',
(game) async {
await game.ready();
final pathway = Pathway.straight(
position: Vector2.zero(),
start: Vector2(10, 10),
@ -128,6 +134,7 @@ void main() {
flameTester.test(
'has two ChainShape when singleWall is false (default)',
(game) async {
await game.ready();
final pathway = Pathway.straight(
position: Vector2.zero(),
start: Vector2(10, 10),
@ -150,6 +157,7 @@ void main() {
flameTester.test(
'loads correctly',
(game) async {
await game.ready();
final pathway = Pathway.arc(
position: Vector2.zero(),
width: width,
@ -166,6 +174,7 @@ void main() {
flameTester.test(
'positions correctly',
(game) async {
await game.ready();
final position = Vector2.all(10);
final pathway = Pathway.arc(
position: position,
@ -183,6 +192,7 @@ void main() {
flameTester.test(
'is static',
(game) async {
await game.ready();
final pathway = Pathway.arc(
position: Vector2.zero(),
width: width,
@ -208,6 +218,7 @@ void main() {
flameTester.test(
'loads correctly',
(game) async {
await game.ready();
final pathway = Pathway.bezierCurve(
position: Vector2.zero(),
controlPoints: controlPoints,
@ -223,6 +234,7 @@ void main() {
flameTester.test(
'positions correctly',
(game) async {
await game.ready();
final position = Vector2.all(10);
final pathway = Pathway.bezierCurve(
position: position,
@ -239,6 +251,7 @@ void main() {
flameTester.test(
'is static',
(game) async {
await game.ready();
final pathway = Pathway.bezierCurve(
position: Vector2.zero(),
controlPoints: controlPoints,

@ -16,6 +16,7 @@ void main() {
flameTester.test(
'loads correctly',
(game) async {
await game.ready();
final plunger = Plunger(position: Vector2.zero());
await game.ensureAdd(plunger);

@ -37,6 +37,7 @@ void main() {
flameTester.test(
'loads correctly',
(game) async {
await game.ready();
final wall = Wall(
start: Vector2.zero(),
end: Vector2(100, 0),

Loading…
Cancel
Save