refactor: renamed behaviours

pull/234/head
alestiago 3 years ago
parent cf8727e8d8
commit 99689ea4da

@ -1 +1 @@
export 'bonus_behaviour.dart'; export 'google_word_bonus_behaviour.dart';

@ -3,21 +3,18 @@ import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart';
class BonusBehaviour extends Component with HasGameRef<PinballGame> { class GoogleWordBonusBehaviour extends Component
BonusBehaviour( with HasGameRef<PinballGame>, ParentIsA<GoogleWord> {
Iterable<GoogleLetter> googleLetters,
) : _googleLetters = googleLetters;
Iterable<GoogleLetter> _googleLetters;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
final googleLetters = parent.children.whereType<GoogleLetter>();
for (final letter in _googleLetters) { for (final letter in googleLetters) {
letter.bloc.stream.listen((_) { letter.bloc.stream.listen((_) {
final achievedBonus = _googleLetters final achievedBonus = googleLetters
.every((letter) => letter.bloc.state == GoogleLetterState.active); .every((letter) => letter.bloc.state == GoogleLetterState.active);
if (achievedBonus) { if (achievedBonus) {
@ -25,7 +22,7 @@ class BonusBehaviour extends Component with HasGameRef<PinballGame> {
gameRef gameRef
.read<GameBloc>() .read<GameBloc>()
.add(const BonusActivated(GameBonus.googleWord)); .add(const BonusActivated(GameBonus.googleWord));
for (final letter in _googleLetters) { for (final letter in googleLetters) {
letter.bloc.onReset(); letter.bloc.onReset();
} }
} }

@ -4,35 +4,29 @@ import 'dart:async';
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:pinball/game/components/google_word/behaviors/behaviors.dart'; import 'package:pinball/game/components/google_word/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
/// {@template google_word} /// {@template google_word}
/// Loads all [GoogleLetter]s to compose a [GoogleWord]. /// Loads all [GoogleLetter]s to compose a [GoogleWord].
/// {@endtemplate} /// {@endtemplate}
class GoogleWord extends Component with HasGameRef<PinballGame> { class GoogleWord extends Component {
/// {@macro google_word} /// {@macro google_word}
GoogleWord({ GoogleWord({
required Vector2 position, required Vector2 position,
}) : _position = position; }) : super(
children: [
final Vector2 _position; 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 @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
await add(GoogleWordBonusBehaviour());
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),
]);
} }
} }

@ -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<AlienBumper> {
@override
void beginContact(Object other, Contact contact) {
super.beginContact(other, contact);
if (other is! Ball) return;
parent.bloc.onBallContacted();
}
}

@ -1,2 +1,2 @@
export 'contact_behavior.dart'; export 'alien_bumper_ball_contact_behaviour.dart';
export 'sprite_behavior.dart'; export 'sprite_behavior.dart';

@ -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<AlienBumper> {
@override
Future<void> 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();
}
}

@ -7,9 +7,6 @@ class AlienBumperCubit extends Cubit<AlienBumperState> {
void onBallContacted() { void onBallContacted() {
emit(AlienBumperState.inactive); emit(AlienBumperState.inactive);
// Future<void>.delayed(const Duration(milliseconds: 500)).whenComplete(
// () => emit(AlienBumperState.active),
// );
} }
void onAnimated() { void onAnimated() {

@ -1 +1 @@
export 'contact_behavior.dart'; export 'google_letter_ball_contact_behavior.dart';

@ -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<GoogleLetter> {
@override
Future<void> 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();
}
}

@ -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<GoogleLetter> {
@override
void beginContact(Object other, Contact contact) {
super.beginContact(other, contact);
if (other is! Ball) return;
parent.bloc.onBallContacted();
}
}

@ -1,2 +1,2 @@
export 'contact_behavior.dart'; export 'sparky_bumper_ball_contact_behaviour.dart';
export 'sprite_behavior.dart'; export 'sprite_behavior.dart';

@ -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<SparkyBumper> {
@override
Future<void> 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();
}
}

@ -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<SparkyBumper> {
@override
void beginContact(Object other, Contact contact) {
super.beginContact(other, contact);
if (other is! Ball) return;
parent.bloc.onBallContacted();
}
}

@ -2,7 +2,7 @@ library pinball_flame;
export 'src/blueprint.dart'; export 'src/blueprint.dart';
export 'src/component_controller.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/keyboard_input_controller.dart';
export 'src/parent_is_a.dart'; export 'src/parent_is_a.dart';
export 'src/sprite_animation.dart'; export 'src/sprite_animation.dart';

@ -1,5 +1,26 @@
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pinball_flame/pinball_flame.dart';
class ContactBehavior<T extends BodyComponent> extends Component
with ContactCallbacks, ParentIsA<T> {
@override
@mustCallSuper
Future<void> 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 { class ContactCallbacksGroup implements ContactCallbacks {
final List<ContactCallbacks> _contactCallbacks = []; final List<ContactCallbacks> _contactCallbacks = [];
Loading…
Cancel
Save