diff --git a/lib/game/components/alien_zone/alien_bumper/behaviors/alien_bumper_contact_behavior.dart b/lib/game/components/alien_zone/alien_bumper/behaviors/alien_bumper_contact_behavior.dart index ce4b8e0a..f01d45c7 100644 --- a/lib/game/components/alien_zone/alien_bumper/behaviors/alien_bumper_contact_behavior.dart +++ b/lib/game/components/alien_zone/alien_bumper/behaviors/alien_bumper_contact_behavior.dart @@ -10,8 +10,13 @@ class AlienBumperContactBehavior extends Component await super.onLoad(); final userData = parent.body.userData; - if (userData is ContactCallbacksNotifer) { - userData.addCallback(this); + 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; } diff --git a/lib/game/components/scoring_behaviour.dart b/lib/game/components/scoring_behaviour.dart index ba57578e..0f2f497e 100644 --- a/lib/game/components/scoring_behaviour.dart +++ b/lib/game/components/scoring_behaviour.dart @@ -10,10 +10,7 @@ import 'package:pinball_flame/pinball_flame.dart'; /// /// {@endtemplate} class ScoringBehaviour extends Component - with - ContactCallbacksNotifer, - HasGameRef, - ParentIsA { + with ContactCallbacks, HasGameRef, ParentIsA { /// {@macro scoring_behaviour} ScoringBehaviour({ required int points, @@ -26,8 +23,13 @@ class ScoringBehaviour extends Component await super.onLoad(); final userData = parent.body.userData; - if (userData is ContactCallbacksNotifer) { - userData.addCallback(this); + 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; } diff --git a/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart b/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart index c0029883..35b07a76 100644 --- a/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart +++ b/packages/pinball_flame/lib/src/contacts_callbacks_adder.dart @@ -1,14 +1,14 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; -class ContactCallbacksNotifer implements ContactCallbacks { - final List _callbacks = []; +class ContactCallbacksGroup implements ContactCallbacks { + final List _contactCallbacks = []; @override @mustCallSuper void beginContact(Object other, Contact contact) { onBeginContact?.call(other, contact); - for (final callback in _callbacks) { + for (final callback in _contactCallbacks) { callback.beginContact(other, contact); } } @@ -17,7 +17,7 @@ class ContactCallbacksNotifer implements ContactCallbacks { @mustCallSuper void endContact(Object other, Contact contact) { onEndContact?.call(other, contact); - for (final callback in _callbacks) { + for (final callback in _contactCallbacks) { callback.endContact(other, contact); } } @@ -26,7 +26,7 @@ class ContactCallbacksNotifer implements ContactCallbacks { @mustCallSuper void preSolve(Object other, Contact contact, Manifold oldManifold) { onPreSolve?.call(other, contact, oldManifold); - for (final callback in _callbacks) { + for (final callback in _contactCallbacks) { callback.preSolve(other, contact, oldManifold); } } @@ -35,13 +35,13 @@ class ContactCallbacksNotifer implements ContactCallbacks { @mustCallSuper void postSolve(Object other, Contact contact, ContactImpulse impulse) { onPostSolve?.call(other, contact, impulse); - for (final callback in _callbacks) { + for (final callback in _contactCallbacks) { callback.postSolve(other, contact, impulse); } } - void addCallback(ContactCallbacks callback) { - _callbacks.add(callback); + void addContactCallbacks(ContactCallbacks callback) { + _contactCallbacks.add(callback); } @override