From ac0aca5f8f6e157932dbf106b6303880a4401336 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Mon, 7 Mar 2022 19:13:36 -0300 Subject: [PATCH] feat: adding placeholder sprite for the ball component --- assets/images/components/ball.png | Bin 0 -> 27915 bytes lib/game/components/ball.dart | 27 ++++++++++++++++++--------- lib/game/game.dart | 1 + lib/game/game_assets.dart | 12 ++++++++++++ lib/game/pinball_game.dart | 9 ++++++++- pubspec.lock | 8 +++++--- pubspec.yaml | 9 ++++++++- 7 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 assets/images/components/ball.png create mode 100644 lib/game/game_assets.dart diff --git a/assets/images/components/ball.png b/assets/images/components/ball.png new file mode 100644 index 0000000000000000000000000000000000000000..af80811b138b9834be6812cbc44e277639d0be51 GIT binary patch literal 27915 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 literal 0 HcmV?d00001 diff --git a/lib/game/components/ball.dart b/lib/game/components/ball.dart index e285b14b..65a0bffc 100644 --- a/lib/game/components/ball.dart +++ b/lib/game/components/ball.dart @@ -1,23 +1,32 @@ +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; -import 'package:flame_forge2d/body_component.dart'; -import 'package:flutter/material.dart'; -import 'package:forge2d/forge2d.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball/game/game.dart'; -class Ball extends BodyComponent +class Ball extends PositionBodyComponent with BlocComponent { Ball({ required Vector2 position, - }) : _position = position { - // TODO(alestiago): Use asset instead of color when provided. - paint = Paint()..color = const Color(0xFFFFFFFF); - } + required Vector2 size, + }) : _position = position, + _size = size, + super(size: size); final Vector2 _position; + final Vector2 _size; + + static const spritePath = 'components/ball.png'; + + @override + Future onLoad() async { + await super.onLoad(); + final sprite = await gameRef.loadSprite(spritePath); + positionComponent = SpriteComponent(sprite: sprite, size: _size); + } @override Body createBody() { - final shape = CircleShape()..radius = 2; + final shape = CircleShape()..radius = _size.x / 2; final fixtureDef = FixtureDef(shape)..density = 1; diff --git a/lib/game/game.dart b/lib/game/game.dart index 253dcc9f..ad02533d 100644 --- a/lib/game/game.dart +++ b/lib/game/game.dart @@ -1,4 +1,5 @@ export 'bloc/game_bloc.dart'; export 'components/components.dart'; +export 'game_assets.dart'; export 'pinball_game.dart'; export 'view/view.dart'; diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart new file mode 100644 index 00000000..8a889ab7 --- /dev/null +++ b/lib/game/game_assets.dart @@ -0,0 +1,12 @@ +import 'package:pinball/game/game.dart'; + +/// Add methods to help loading and caching game assets +extension PinballGameAssetsX on PinballGame { + + /// Pre load the initial assets of the game + Future preLoadAssets() async { + await Future.wait([ + images.load(Ball.spritePath), + ]); + } +} diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 5b5d7885..72c8f66a 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -4,7 +4,12 @@ import 'package:pinball/game/game.dart'; class PinballGame extends Forge2DGame with FlameBloc { void spawnBall() { - add(Ball(position: ballStartingPosition)); + add( + Ball( + position: ballStartingPosition, + size: Vector2.all(4), + ), + ); } // TODO(erickzanardo): Change to the plumber position @@ -18,6 +23,8 @@ class PinballGame extends Forge2DGame with FlameBloc { @override Future onLoad() async { + await preLoadAssets(); + addContactCallback(BallScorePointsCallback()); await add(BottomWall(this)); diff --git a/pubspec.lock b/pubspec.lock index 7bf08da4..d4678cdc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -151,9 +151,11 @@ packages: flame_forge2d: dependency: "direct main" description: - name: flame_forge2d - url: "https://pub.dartlang.org" - source: hosted + path: "packages/flame_forge2d" + ref: "erick.fix_position_body_component_on_mount" + resolved-ref: cccdfe0054743400ad4262aecac54f89e43be944 + url: "git@github.com:flame-engine/flame.git" + source: git version: "0.9.0-releasecandidate.1" flame_test: dependency: "direct dev" diff --git a/pubspec.yaml b/pubspec.yaml index 6c3bd98e..683eee81 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,11 @@ dependencies: equatable: ^2.0.3 flame: ^1.1.0-releasecandidate.1 flame_bloc: ^1.2.0-releasecandidate.1 - flame_forge2d: ^0.9.0-releasecandidate.1 + flame_forge2d: + git: + url: git@github.com:flame-engine/flame.git + path: packages/flame_forge2d + ref: erick.fix_position_body_component_on_mount flutter: sdk: flutter flutter_bloc: ^8.0.1 @@ -33,3 +37,6 @@ dev_dependencies: flutter: uses-material-design: true generate: true + + assets: + - assets/images/components/