refactor: removed ids from Bumpers

pull/190/head
alestiago 3 years ago
parent 9ece8fea94
commit 1207a51df9

@ -13,8 +13,6 @@ import 'package:pinball_flame/pinball_flame.dart';
/// When all [DashNestBumper]s are hit at least once, the [GameBonus.dashNest]
/// is awarded, and the [BigDashNestBumper] releases a new [Ball].
/// {@endtemplate}
// TODO(alestiago): Make a [Blueprint] once [Blueprint] inherits from
// [Component].
class FlutterForest extends Component
with Controls<_FlutterForestController>, HasGameRef<PinballGame> {
/// {@macro flutter_forest}
@ -25,17 +23,16 @@ class FlutterForest extends Component
@override
Future<void> onLoad() async {
await super.onLoad();
gameRef.addContactCallback(_DashNestBumperBallContactCallback());
final signPost = FlutterSignPost()..initialPosition = Vector2(8.35, 58.3);
final bigNest = _ControlledBigDashNestBumper(
id: 'big_nest_bumper',
)..initialPosition = Vector2(18.55, -59.35);
final smallLeftNest = _ControlledSmallDashNestBumper.a(
id: 'small_nest_bumper_a',
)..initialPosition = Vector2(8.95, -51.95);
final smallRightNest = _ControlledSmallDashNestBumper.b(
id: 'small_nest_bumper_b',
)..initialPosition = Vector2(23.3, -46.75);
final bigNest = _BigDashNestBumper()
..initialPosition = Vector2(18.55, 59.35);
final smallLeftNest = _SmallDashNestBumper.a()
..initialPosition = Vector2(8.95, 51.95);
final smallRightNest = _SmallDashNestBumper.b()
..initialPosition = Vector2(23.3, 46.75);
final dashAnimatronic = DashAnimatronic()..position = Vector2(20, -66);
await addAll([
@ -52,13 +49,18 @@ class _FlutterForestController extends ComponentController<FlutterForest>
with HasGameRef<PinballGame> {
_FlutterForestController(FlutterForest flutterForest) : super(flutterForest);
final _activatedBumpers = <String>{};
final _activatedBumpers = <DashNestBumper>{};
void activateBumper(DashNestBumper dashNestBumper) {
if (!_activatedBumpers.add(dashNestBumper)) return;
void activateBumper(String id) {
if (!_activatedBumpers.add(id)) return;
dashNestBumper.activate();
final activatedBonus = _activatedBumpers.length == 3;
if (activatedBonus) {
children.whereType<DashNestBumper>().forEach(
(dashNestBumper) => dashNestBumper.deactivate(),
);
// gameRef.read<GameBloc>().add(const BonusActivated(GameBonus.dashNest));
_addBonusBall();
_activatedBumpers.clear();
@ -74,53 +76,29 @@ class _FlutterForestController extends ComponentController<FlutterForest>
}
}
class _ControlledBigDashNestBumper extends BigDashNestBumper with ScorePoints {
_ControlledBigDashNestBumper({
required this.id,
});
final String id;
// TODO(alestiago): Revisit ScorePoints logic once the FlameForge2D
// ContactCallback process is enhanced.
class _BigDashNestBumper extends BigDashNestBumper with ScorePoints {
@override
int get points => 20;
}
class _ControlledBigDashNestBumperBallContactCallback
extends ContactCallback<_ControlledBigDashNestBumper, Ball> {
@override
void begin(_ControlledBigDashNestBumper controlledBigDashNestBumper, _, __) {
(controlledBigDashNestBumper.parent! as FlutterForest)
.controller
.activateBumper(controlledBigDashNestBumper.id);
}
}
class _ControlledSmallDashNestBumper extends SmallDashNestBumper
with ScorePoints {
_ControlledSmallDashNestBumper.a({
required this.id,
}) : super.a();
class _SmallDashNestBumper extends SmallDashNestBumper with ScorePoints {
_SmallDashNestBumper.a() : super.a();
_ControlledSmallDashNestBumper.b({
required this.id,
}) : super.b();
final String id;
_SmallDashNestBumper.b() : super.b();
@override
int get points => 20;
}
class _ControlledSmallDashNestBumperBallContactCallback
extends ContactCallback<_ControlledSmallDashNestBumper, Ball> {
class _DashNestBumperBallContactCallback
extends ContactCallback<DashNestBumper, Ball> {
@override
void begin(
_ControlledSmallDashNestBumper controlledSmallDashNestBumper,
_,
__,
) {
(controlledSmallDashNestBumper.parent! as FlutterForest)
.controller
.activateBumper(controlledSmallDashNestBumper.id);
void begin(DashNestBumper dashNestBumper, _, __) {
if (dashNestBumper.parent is FlutterForest) return;
final parent = dashNestBumper.parent! as FlutterForest;
parent.controller.activateBumper(dashNestBumper);
}
}

@ -34,10 +34,7 @@ class BallScorePointsCallback extends ContactCallback<Ball, ScorePoints> {
ScorePoints scorePoints,
Contact __,
) {
_gameRef.read<GameBloc>().add(
Scored(points: scorePoints.points),
);
_gameRef.read<GameBloc>().add(Scored(points: scorePoints.points));
_gameRef.audio.score();
}
}

@ -96,14 +96,13 @@ void main() {
'add Scored event',
setUp: (game, tester) async {
final flutterForest = FlutterForest();
await game.ensureAdd(flutterForest);
await game.ensureAdd(ball);
await game.ensureAddAll([
flutterForest,
ball,
]);
game.addContactCallback(BallScorePointsCallback(game));
final bumpers = flutterForest
.descendants()
.whereType<DashNestBumper>()
.whereType<ScorePoints>();
final bumpers = flutterForest.descendants().whereType<ScorePoints>();
for (final bumper in bumpers) {
beginContact(game, bumper, ball);

Loading…
Cancel
Save