Merge pull request #26 from VGVentures/feat/flipper-placeholder-art

feat: adding placeholder art for the flippers
pull/31/head
Erick 4 years ago committed by GitHub
commit ff938a26ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

@ -1,9 +1,9 @@
import 'dart:async'; import 'dart:async';
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flame/components.dart' show SpriteComponent;
import 'package:flame/input.dart'; import 'package:flame/input.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:pinball/game/game.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. /// [Flipper] can be controlled by the player in an arc motion.
/// {@endtemplate flipper} /// {@endtemplate flipper}
class Flipper extends BodyComponent with KeyboardHandler { class Flipper extends PositionBodyComponent with KeyboardHandler {
/// {@macro flipper} /// {@macro flipper}
Flipper._({ Flipper._({
required Vector2 position, required Vector2 position,
required this.side, required this.side,
required List<LogicalKeyboardKey> keys, required List<LogicalKeyboardKey> keys,
}) : _position = position, }) : _position = position,
_keys = keys { _keys = keys,
// TODO(alestiago): Use sprite instead of color when provided. super(size: Vector2(width, height));
paint = Paint()
..color = const Color(0xFF00FF00)
..style = PaintingStyle.fill;
}
/// A left positioned [Flipper]. /// A left positioned [Flipper].
Flipper.left({ 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]. /// The width of the [Flipper].
static const width = 12.0; 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. /// [onKeyEvent] method listens to when one of these keys is pressed.
final List<LogicalKeyboardKey> _keys; 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 /// Applies downward linear velocity to the [Flipper], moving it to its
/// resting position. /// resting position.
void _moveDown() { void _moveDown() {

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

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

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

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

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

Loading…
Cancel
Save