From 6da4564d538bfe8795963e8e1d57641f397f6186 Mon Sep 17 00:00:00 2001 From: alestiago Date: Tue, 10 May 2022 09:09:39 +0100 Subject: [PATCH] fix: enable auto-pulling for all devices --- .../components/game_bloc_status_listener.dart | 22 +++++----------- lib/game/pinball_game.dart | 2 +- .../behaviors/plunger_pulling_behavior.dart | 4 ++- .../plunger/cubit/plunger_cubit.dart | 2 ++ .../plunger/cubit/plunger_state.dart | 3 +++ .../lib/src/components/plunger/plunger.dart | 4 ++- .../plunger_pulling_behavior_test.dart | 4 +-- .../game_bloc_status_listener_test.dart | 26 +++++++------------ test/game/pinball_game_test.dart | 2 +- 9 files changed, 30 insertions(+), 39 deletions(-) diff --git a/lib/game/components/game_bloc_status_listener.dart b/lib/game/components/game_bloc_status_listener.dart index 6ffd2ad3..3cc99e94 100644 --- a/lib/game/components/game_bloc_status_listener.dart +++ b/lib/game/components/game_bloc_status_listener.dart @@ -5,7 +5,6 @@ import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; -import 'package:platform_helper/platform_helper.dart'; /// Listens to the [GameBloc] and updates the game accordingly. class GameBlocStatusListener extends Component @@ -69,23 +68,14 @@ class GameBlocStatusListener extends Component } void _addPlungerBehaviors(Plunger plunger) { - final platformHelper = readProvider(); const pullingStrength = 7.0; - final provider = - plunger.firstChild>()!; - - if (platformHelper.isMobile) { - provider.add( + plunger.firstChild>()!.addAll( + [ + PlungerPullingBehavior(strength: pullingStrength), PlungerAutoPullingBehavior(strength: pullingStrength), - ); - } else { - provider.addAll( - [ - PlungerKeyControllingBehavior(), - PlungerPullingBehavior(strength: pullingStrength), - ], - ); - } + PlungerKeyControllingBehavior() + ], + ); } void _removePlungerBehaviors(Plunger plunger) { diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index ad81425f..eecbfe01 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -167,7 +167,7 @@ class PinballGame extends PinballForge2DGame .whereType>() .first .bloc - .pulled(); + .autopulled(); } else { final tappedLeftSide = info.eventPosition.widget.x < canvasSize.x / 2; focusedBoardSide[pointerId] = diff --git a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_pulling_behavior.dart b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_pulling_behavior.dart index db6bcaa3..2361e6dc 100644 --- a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_pulling_behavior.dart +++ b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_pulling_behavior.dart @@ -35,7 +35,9 @@ class PlungerAutoPullingBehavior extends PlungerPullingBehavior { @override void update(double dt) { - super.update(dt); + if (bloc.state.isAutopulling) { + _plunger.body.linearVelocity = Vector2(0, _strength); + } final joint = _plunger.body.joints.whereType().single; final reachedBottom = joint.getJointTranslation() <= joint.getLowerLimit(); diff --git a/packages/pinball_components/lib/src/components/plunger/cubit/plunger_cubit.dart b/packages/pinball_components/lib/src/components/plunger/cubit/plunger_cubit.dart index ce845197..b8fce467 100644 --- a/packages/pinball_components/lib/src/components/plunger/cubit/plunger_cubit.dart +++ b/packages/pinball_components/lib/src/components/plunger/cubit/plunger_cubit.dart @@ -8,4 +8,6 @@ class PlungerCubit extends Cubit { void pulled() => emit(PlungerState.pulling); void released() => emit(PlungerState.releasing); + + void autopulled() => emit(PlungerState.autopulling); } diff --git a/packages/pinball_components/lib/src/components/plunger/cubit/plunger_state.dart b/packages/pinball_components/lib/src/components/plunger/cubit/plunger_state.dart index 8b82ef96..be082445 100644 --- a/packages/pinball_components/lib/src/components/plunger/cubit/plunger_state.dart +++ b/packages/pinball_components/lib/src/components/plunger/cubit/plunger_state.dart @@ -4,9 +4,12 @@ enum PlungerState { pulling, releasing, + + autopulling, } extension PlungerStateX on PlungerState { bool get isPulling => this == PlungerState.pulling; bool get isReleasing => this == PlungerState.releasing; + bool get isAutopulling => this == PlungerState.autopulling; } diff --git a/packages/pinball_components/lib/src/components/plunger/plunger.dart b/packages/pinball_components/lib/src/components/plunger/plunger.dart index fbb7a437..062bfb6b 100644 --- a/packages/pinball_components/lib/src/components/plunger/plunger.dart +++ b/packages/pinball_components/lib/src/components/plunger/plunger.dart @@ -97,7 +97,8 @@ class _PlungerSpriteAnimationGroupComponent void onNewState(PlungerState state) { super.onNewState(state); final startedReleasing = state.isReleasing && !current!.isReleasing; - final startedPulling = state.isPulling && !current!.isPulling; + final startedPulling = + (state.isPulling || state.isAutopulling) && !current!.isPulling; if (startedReleasing || startedPulling) { animation?.reset(); } @@ -132,6 +133,7 @@ class _PlungerSpriteAnimationGroupComponent animations = { PlungerState.releasing: pullAnimation.reversed(), PlungerState.pulling: pullAnimation, + PlungerState.autopulling: pullAnimation, }; current = readBloc().state; diff --git a/packages/pinball_components/test/src/components/plunger/behaviors/plunger_pulling_behavior_test.dart b/packages/pinball_components/test/src/components/plunger/behaviors/plunger_pulling_behavior_test.dart index 4eec7029..4dbd5eb9 100644 --- a/packages/pinball_components/test/src/components/plunger/behaviors/plunger_pulling_behavior_test.dart +++ b/packages/pinball_components/test/src/components/plunger/behaviors/plunger_pulling_behavior_test.dart @@ -102,8 +102,8 @@ void main() { final plungerBloc = _MockPlungerCubit(); whenListen( plungerBloc, - Stream.value(PlungerState.pulling), - initialState: PlungerState.pulling, + Stream.value(PlungerState.autopulling), + initialState: PlungerState.autopulling, ); const strength = 2.0; diff --git a/test/game/components/game_bloc_status_listener_test.dart b/test/game/components/game_bloc_status_listener_test.dart index 069731fd..04532bbd 100644 --- a/test/game/components/game_bloc_status_listener_test.dart +++ b/test/game/components/game_bloc_status_listener_test.dart @@ -36,7 +36,6 @@ class _TestGame extends Forge2DGame with HasTappables { Future pump( Iterable children, { PinballAudioPlayer? pinballAudioPlayer, - PlatformHelper? platformHelper, GoogleWordCubit? googleWordBloc, }) async { return ensureAdd( @@ -62,7 +61,7 @@ class _TestGame extends Forge2DGame with HasTappables { _MockAppLocalizations(), ), FlameProvider.value( - platformHelper ?? PlatformHelper(), + PlatformHelper(), ), ], children: children, @@ -80,8 +79,6 @@ class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { class _MockShareRepository extends Mock implements ShareRepository {} -class _MockPlatformHelper extends Mock implements PlatformHelper {} - class _MockPlungerCubit extends Mock implements PlungerCubit {} class _MockGoogleWordCubit extends Mock implements GoogleWordCubit {} @@ -460,10 +457,8 @@ void main() { ); flameTester.test( - 'adds PlungerKeyControllingBehavior to Plunger when on desktop', + 'adds PlungerKeyControllingBehavior to Plunger', (game) async { - final platformHelper = _MockPlatformHelper(); - when(() => platformHelper.isMobile).thenReturn(false); final component = GameBlocStatusListener(); final leaderboardRepository = _MockLeaderboardRepository(); final shareRepository = _MockShareRepository(); @@ -482,7 +477,6 @@ void main() { bloc: _MockSignpostCubit(), ), ], - platformHelper: platformHelper, ); await plunger.ensureAdd( FlameBlocProvider( @@ -506,10 +500,8 @@ void main() { ); flameTester.test( - 'adds PlungerPullingBehavior to Plunger when on desktop', + 'adds PlungerPullingBehavior to Plunger', (game) async { - final platformHelper = _MockPlatformHelper(); - when(() => platformHelper.isMobile).thenReturn(false); final component = GameBlocStatusListener(); final leaderboardRepository = _MockLeaderboardRepository(); final shareRepository = _MockShareRepository(); @@ -528,7 +520,6 @@ void main() { bloc: _MockSignpostCubit(), ), ], - platformHelper: platformHelper, ); await plunger.ensureAdd( FlameBlocProvider( @@ -542,17 +533,19 @@ void main() { await game.ready(); expect( - plunger.descendants().whereType().length, + plunger + .descendants() + .whereType() + .where((behavior) => behavior is! PlungerAutoPullingBehavior) + .length, equals(1), ); }, ); flameTester.test( - 'adds PlungerAutoPullingBehavior to Plunger when on mobile', + 'adds PlungerAutoPullingBehavior to Plunger', (game) async { - final platformHelper = _MockPlatformHelper(); - when(() => platformHelper.isMobile).thenReturn(true); final component = GameBlocStatusListener(); final leaderboardRepository = _MockLeaderboardRepository(); final shareRepository = _MockShareRepository(); @@ -571,7 +564,6 @@ void main() { bloc: _MockSignpostCubit(), ), ], - platformHelper: platformHelper, ); await plunger.ensureAdd( FlameBlocProvider( diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index 05b9442c..c8cd8a8c 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -434,7 +434,7 @@ void main() { .single .bloc; - expect(plungerBloc.state, PlungerState.pulling); + expect(plungerBloc.state, PlungerState.autopulling); }); }); });