From 99689ea4da0ea27e4ec8f672f8a61355ca4d377f Mon Sep 17 00:00:00 2001 From: alestiago Date: Tue, 26 Apr 2022 13:34:57 +0100 Subject: [PATCH] refactor: renamed behaviours --- .../google_word/behaviors/behaviors.dart | 2 +- ....dart => google_word_bonus_behaviour.dart} | 17 ++++------ .../components/google_word/google_word.dart | 30 +++++++---------- .../alien_bumper_ball_contact_behaviour.dart | 13 ++++++++ .../alien_bumper/behaviors/behaviors.dart | 2 +- .../behaviors/contact_behavior.dart | 33 ------------------- .../cubit/alien_bumper_cubit.dart | 3 -- .../google_letter/behaviors/behaviors.dart | 2 +- .../behaviors/contact_behavior.dart | 33 ------------------- .../google_letter_ball_contact_behavior.dart | 12 +++++++ .../sparky_bumper/behaviors/behaviors.dart | 2 +- .../behaviors/contact_behavior.dart | 31 ----------------- .../sparky_bumper_ball_contact_behaviour.dart | 12 +++++++ packages/pinball_flame/lib/pinball_flame.dart | 2 +- ...backs_adder.dart => contact_behavior.dart} | 21 ++++++++++++ 15 files changed, 82 insertions(+), 133 deletions(-) rename lib/game/components/google_word/behaviors/{bonus_behaviour.dart => google_word_bonus_behaviour.dart} (63%) create mode 100644 packages/pinball_components/lib/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behaviour.dart delete mode 100644 packages/pinball_components/lib/src/components/alien_bumper/behaviors/contact_behavior.dart delete mode 100644 packages/pinball_components/lib/src/components/google_letter/behaviors/contact_behavior.dart create mode 100644 packages/pinball_components/lib/src/components/google_letter/behaviors/google_letter_ball_contact_behavior.dart delete mode 100644 packages/pinball_components/lib/src/components/sparky_bumper/behaviors/contact_behavior.dart create mode 100644 packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behaviour.dart rename packages/pinball_flame/lib/src/{contacts_callbacks_adder.dart => contact_behavior.dart} (71%) diff --git a/lib/game/components/google_word/behaviors/behaviors.dart b/lib/game/components/google_word/behaviors/behaviors.dart index d7ab6146..54b9d64f 100644 --- a/lib/game/components/google_word/behaviors/behaviors.dart +++ b/lib/game/components/google_word/behaviors/behaviors.dart @@ -1 +1 @@ -export 'bonus_behaviour.dart'; +export 'google_word_bonus_behaviour.dart'; diff --git a/lib/game/components/google_word/behaviors/bonus_behaviour.dart b/lib/game/components/google_word/behaviors/google_word_bonus_behaviour.dart similarity index 63% rename from lib/game/components/google_word/behaviors/bonus_behaviour.dart rename to lib/game/components/google_word/behaviors/google_word_bonus_behaviour.dart index 6957ac6f..435a0911 100644 --- a/lib/game/components/google_word/behaviors/bonus_behaviour.dart +++ b/lib/game/components/google_word/behaviors/google_word_bonus_behaviour.dart @@ -3,21 +3,18 @@ import 'dart:async'; import 'package:flame/components.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; -class BonusBehaviour extends Component with HasGameRef { - BonusBehaviour( - Iterable googleLetters, - ) : _googleLetters = googleLetters; - - Iterable _googleLetters; - +class GoogleWordBonusBehaviour extends Component + with HasGameRef, ParentIsA { @override Future onLoad() async { await super.onLoad(); + final googleLetters = parent.children.whereType(); - for (final letter in _googleLetters) { + for (final letter in googleLetters) { letter.bloc.stream.listen((_) { - final achievedBonus = _googleLetters + final achievedBonus = googleLetters .every((letter) => letter.bloc.state == GoogleLetterState.active); if (achievedBonus) { @@ -25,7 +22,7 @@ class BonusBehaviour extends Component with HasGameRef { gameRef .read() .add(const BonusActivated(GameBonus.googleWord)); - for (final letter in _googleLetters) { + for (final letter in googleLetters) { letter.bloc.onReset(); } } diff --git a/lib/game/components/google_word/google_word.dart b/lib/game/components/google_word/google_word.dart index 07ca845c..b86d5db6 100644 --- a/lib/game/components/google_word/google_word.dart +++ b/lib/game/components/google_word/google_word.dart @@ -4,35 +4,29 @@ import 'dart:async'; import 'package:flame/components.dart'; import 'package:pinball/game/components/google_word/behaviors/behaviors.dart'; -import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; /// {@template google_word} /// Loads all [GoogleLetter]s to compose a [GoogleWord]. /// {@endtemplate} -class GoogleWord extends Component with HasGameRef { +class GoogleWord extends Component { /// {@macro google_word} GoogleWord({ required Vector2 position, - }) : _position = position; - - final Vector2 _position; + }) : super( + children: [ + GoogleLetter(0)..initialPosition = position + Vector2(-12.92, 1.82), + GoogleLetter(1)..initialPosition = position + Vector2(-8.33, -0.65), + GoogleLetter(2)..initialPosition = position + Vector2(-2.88, -1.75), + GoogleLetter(3)..initialPosition = position + Vector2(2.88, -1.75), + GoogleLetter(4)..initialPosition = position + Vector2(8.33, -0.65), + GoogleLetter(5)..initialPosition = position + Vector2(12.92, 1.82), + ], + ); @override Future onLoad() async { await super.onLoad(); - - final letters = [ - GoogleLetter(0)..initialPosition = _position + Vector2(-12.92, 1.82), - GoogleLetter(1)..initialPosition = _position + Vector2(-8.33, -0.65), - GoogleLetter(2)..initialPosition = _position + Vector2(-2.88, -1.75), - GoogleLetter(3)..initialPosition = _position + Vector2(2.88, -1.75), - GoogleLetter(4)..initialPosition = _position + Vector2(8.33, -0.65), - GoogleLetter(5)..initialPosition = _position + Vector2(12.92, 1.82) - ]; - await addAll([ - ...letters, - BonusBehaviour(letters), - ]); + await add(GoogleWordBonusBehaviour()); } } diff --git a/packages/pinball_components/lib/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behaviour.dart b/packages/pinball_components/lib/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behaviour.dart new file mode 100644 index 00000000..0d0242fa --- /dev/null +++ b/packages/pinball_components/lib/src/components/alien_bumper/behaviors/alien_bumper_ball_contact_behaviour.dart @@ -0,0 +1,13 @@ +import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; + +class AlienBumperBallContactBehavior extends ContactBehavior { + @override + void beginContact(Object other, Contact contact) { + super.beginContact(other, contact); + if (other is! Ball) return; + parent.bloc.onBallContacted(); + } +} diff --git a/packages/pinball_components/lib/src/components/alien_bumper/behaviors/behaviors.dart b/packages/pinball_components/lib/src/components/alien_bumper/behaviors/behaviors.dart index cfedb092..b06d1639 100644 --- a/packages/pinball_components/lib/src/components/alien_bumper/behaviors/behaviors.dart +++ b/packages/pinball_components/lib/src/components/alien_bumper/behaviors/behaviors.dart @@ -1,2 +1,2 @@ -export 'contact_behavior.dart'; +export 'alien_bumper_ball_contact_behaviour.dart'; export 'sprite_behavior.dart'; diff --git a/packages/pinball_components/lib/src/components/alien_bumper/behaviors/contact_behavior.dart b/packages/pinball_components/lib/src/components/alien_bumper/behaviors/contact_behavior.dart deleted file mode 100644 index 3396284e..00000000 --- a/packages/pinball_components/lib/src/components/alien_bumper/behaviors/contact_behavior.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; - -class ContactBehavior extends Component - with ContactCallbacks, ParentIsA { - @override - Future onLoad() async { - await super.onLoad(); - - // TODO(alestiago): Consider defining a generic ContactBehaviour to get - // rid of this repeated logic. - final userData = parent.body.userData; - if (userData is ContactCallbacksGroup) { - userData.addContactCallbacks(this); - } else if (userData is ContactCallbacks) { - final notifier = ContactCallbacksGroup() - ..addContactCallbacks(userData) - ..addContactCallbacks(this); - parent.body.userData = notifier; - } else { - parent.body.userData = this; - } - } - - @override - void beginContact(Object other, Contact contact) { - super.beginContact(other, contact); - if (other is! Ball) return; - parent.bloc.onBallContacted(); - } -} diff --git a/packages/pinball_components/lib/src/components/alien_bumper/cubit/alien_bumper_cubit.dart b/packages/pinball_components/lib/src/components/alien_bumper/cubit/alien_bumper_cubit.dart index 291626eb..ddcd0e4e 100644 --- a/packages/pinball_components/lib/src/components/alien_bumper/cubit/alien_bumper_cubit.dart +++ b/packages/pinball_components/lib/src/components/alien_bumper/cubit/alien_bumper_cubit.dart @@ -7,9 +7,6 @@ class AlienBumperCubit extends Cubit { void onBallContacted() { emit(AlienBumperState.inactive); - // Future.delayed(const Duration(milliseconds: 500)).whenComplete( - // () => emit(AlienBumperState.active), - // ); } void onAnimated() { diff --git a/packages/pinball_components/lib/src/components/google_letter/behaviors/behaviors.dart b/packages/pinball_components/lib/src/components/google_letter/behaviors/behaviors.dart index 57638e17..df54c1f4 100644 --- a/packages/pinball_components/lib/src/components/google_letter/behaviors/behaviors.dart +++ b/packages/pinball_components/lib/src/components/google_letter/behaviors/behaviors.dart @@ -1 +1 @@ -export 'contact_behavior.dart'; +export 'google_letter_ball_contact_behavior.dart'; diff --git a/packages/pinball_components/lib/src/components/google_letter/behaviors/contact_behavior.dart b/packages/pinball_components/lib/src/components/google_letter/behaviors/contact_behavior.dart deleted file mode 100644 index c5193a95..00000000 --- a/packages/pinball_components/lib/src/components/google_letter/behaviors/contact_behavior.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; - -class ContactBehavior extends Component - with ContactCallbacks, ParentIsA { - @override - Future onLoad() async { - await super.onLoad(); - - // TODO(alestiago): Consider defining a generic ContactBehaviour to get - // rid of this repeated logic. - final userData = parent.body.userData; - if (userData is ContactCallbacksGroup) { - userData.addContactCallbacks(this); - } else if (userData is ContactCallbacks) { - final notifier = ContactCallbacksGroup() - ..addContactCallbacks(userData) - ..addContactCallbacks(this); - parent.body.userData = notifier; - } else { - parent.body.userData = this; - } - } - - @override - void beginContact(Object other, Contact contact) { - super.beginContact(other, contact); - if (other is! Ball) return; - parent.bloc.onBallContacted(); - } -} diff --git a/packages/pinball_components/lib/src/components/google_letter/behaviors/google_letter_ball_contact_behavior.dart b/packages/pinball_components/lib/src/components/google_letter/behaviors/google_letter_ball_contact_behavior.dart new file mode 100644 index 00000000..84a210ef --- /dev/null +++ b/packages/pinball_components/lib/src/components/google_letter/behaviors/google_letter_ball_contact_behavior.dart @@ -0,0 +1,12 @@ +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; + +class GoogleLetterBallContactBehavior extends ContactBehavior { + @override + void beginContact(Object other, Contact contact) { + super.beginContact(other, contact); + if (other is! Ball) return; + parent.bloc.onBallContacted(); + } +} diff --git a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/behaviors.dart b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/behaviors.dart index cfedb092..58b46e41 100644 --- a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/behaviors.dart +++ b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/behaviors.dart @@ -1,2 +1,2 @@ -export 'contact_behavior.dart'; +export 'sparky_bumper_ball_contact_behaviour.dart'; export 'sprite_behavior.dart'; diff --git a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/contact_behavior.dart b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/contact_behavior.dart deleted file mode 100644 index 7fa05529..00000000 --- a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/contact_behavior.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; - -class ContactBehavior extends Component - with ContactCallbacks, ParentIsA { - @override - Future onLoad() async { - await super.onLoad(); - - final userData = parent.body.userData; - if (userData is ContactCallbacksGroup) { - userData.addContactCallbacks(this); - } else if (userData is ContactCallbacks) { - final notifier = ContactCallbacksGroup() - ..addContactCallbacks(userData) - ..addContactCallbacks(this); - parent.body.userData = notifier; - } else { - parent.body.userData = this; - } - } - - @override - void beginContact(Object other, Contact contact) { - super.beginContact(other, contact); - if (other is! Ball) return; - parent.bloc.onBallContacted(); - } -} diff --git a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behaviour.dart b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behaviour.dart new file mode 100644 index 00000000..bfdba4a0 --- /dev/null +++ b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behaviour.dart @@ -0,0 +1,12 @@ +import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_flame/pinball_flame.dart'; + +class SparkyBumperBallContactBehavior extends ContactBehavior { + @override + void beginContact(Object other, Contact contact) { + super.beginContact(other, contact); + if (other is! Ball) return; + parent.bloc.onBallContacted(); + } +} diff --git a/packages/pinball_flame/lib/pinball_flame.dart b/packages/pinball_flame/lib/pinball_flame.dart index cdda47b7..7eb4c3a9 100644 --- a/packages/pinball_flame/lib/pinball_flame.dart +++ b/packages/pinball_flame/lib/pinball_flame.dart @@ -2,7 +2,7 @@ library pinball_flame; export 'src/blueprint.dart'; export 'src/component_controller.dart'; -export 'src/contacts_callbacks_adder.dart'; +export 'src/contact_behavior.dart'; export 'src/keyboard_input_controller.dart'; export 'src/parent_is_a.dart'; export 'src/sprite_animation.dart'; diff --git a/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart b/packages/pinball_flame/lib/src/contact_behavior.dart similarity index 71% rename from packages/pinball_flame/lib/src/contacts_callbacks_adder.dart rename to packages/pinball_flame/lib/src/contact_behavior.dart index 35b07a76..a081d3df 100644 --- a/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart +++ b/packages/pinball_flame/lib/src/contact_behavior.dart @@ -1,5 +1,26 @@ +import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; +import 'package:pinball_flame/pinball_flame.dart'; + +class ContactBehavior extends Component + with ContactCallbacks, ParentIsA { + @override + @mustCallSuper + Future onLoad() async { + final userData = parent.body.userData; + if (userData is ContactCallbacksGroup) { + userData.addContactCallbacks(this); + } else if (userData is ContactCallbacks) { + final notifier = ContactCallbacksGroup() + ..addContactCallbacks(userData) + ..addContactCallbacks(this); + parent.body.userData = notifier; + } else { + parent.body.userData = this; + } + } +} class ContactCallbacksGroup implements ContactCallbacks { final List _contactCallbacks = [];