diff --git a/lib/game/components/bonus_letter.dart b/lib/game/components/bonus_letter.dart new file mode 100644 index 00000000..c8735f4f --- /dev/null +++ b/lib/game/components/bonus_letter.dart @@ -0,0 +1,54 @@ +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flutter/material.dart'; +import 'package:pinball/game/game.dart'; + +class BonusLetter extends BodyComponent { + BonusLetter({ + required Vector2 position, + required String letter, + required int index, + }) : _position = position, + _letter = letter, + _index = index { + paint = _disablePaint; + } + + static final areaSize = Vector2.all(4); + + static final _activePaint = Paint()..color = Colors.green; + static final _disablePaint = Paint()..color = Colors.red; + + final Vector2 _position; + final String _letter; + final int _index; + + @override + Future onLoad() async { + await super.onLoad(); + + await add( + TextComponent( + position: Vector2(-1, 1), + text: _letter, + textRenderer: TextPaint( + style: const TextStyle(fontSize: 2, color: Colors.white), + ), + )..flipVertically(), + ); + } + + @override + Body createBody() { + final shape = CircleShape()..radius = areaSize.x / 2; + + final fixtureDef = FixtureDef(shape)..isSensor = true; + + final bodyDef = BodyDef() + ..userData = this + ..position = _position + ..type = BodyType.static; + + return world.createBody(bodyDef)..createFixture(fixtureDef); + } +} diff --git a/lib/game/components/components.dart b/lib/game/components/components.dart index 89f60343..c1502fbb 100644 --- a/lib/game/components/components.dart +++ b/lib/game/components/components.dart @@ -1,6 +1,7 @@ export 'anchor.dart'; export 'ball.dart'; export 'board_side.dart'; +export 'bonus_letter.dart'; export 'flipper.dart'; export 'pathway.dart'; export 'plunger.dart'; diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 2ae945b2..6a864489 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -43,6 +43,21 @@ class PinballGame extends Forge2DGame addContactCallback(BottomWallBallContactCallback()); unawaited(_addFlippers()); + _addBonusLetters(); + } + + void _addBonusLetters() { + final letters = 'GOOGLE'.split(''); + + for (var i = 0; i < letters.length; i++) { + add( + BonusLetter( + position: ballStartingPosition - Vector2(16 - (i * 6), -10), + letter: letters[i], + index: i, + ), + ); + } } Future _addFlippers() async { diff --git a/pubspec.lock b/pubspec.lock index 4b375ff7..ff33bc7e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -140,7 +140,7 @@ packages: name: flame url: "https://pub.dartlang.org" source: hosted - version: "1.1.0-releasecandidate.2" + version: "1.1.0-releasecandidate.3" flame_bloc: dependency: "direct main" description: @@ -151,10 +151,12 @@ packages: flame_forge2d: dependency: "direct main" description: - name: flame_forge2d - url: "https://pub.dartlang.org" - source: hosted - version: "0.9.0-releasecandidate.2" + path: "packages/flame_forge2d" + ref: "spydon.body-component-no-debug-render" + resolved-ref: d54a9269ab60e1d4dfec15f4660217c124ab86af + url: "git@github.com:flame-engine/flame.git" + source: git + version: "0.9.0-releasecandidate.3" flame_test: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 41b0d081..7b02eede 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,12 @@ dependencies: equatable: ^2.0.3 flame: ^1.1.0-releasecandidate.2 flame_bloc: ^1.2.0-releasecandidate.2 - flame_forge2d: ^0.9.0-releasecandidate.2 + #flame_forge2d: ^0.9.0-releasecandidate.2 + flame_forge2d: + git: + url: git@github.com:flame-engine/flame.git + path: packages/flame_forge2d + ref: spydon.body-component-no-debug-render flutter: sdk: flutter flutter_bloc: ^8.0.1