fix: enable auto-pulling for all devices

pull/455/head
alestiago 3 years ago
parent e90de8dedd
commit 6da4564d53

@ -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<PlatformHelper>();
const pullingStrength = 7.0;
final provider =
plunger.firstChild<FlameBlocProvider<PlungerCubit, PlungerState>>()!;
if (platformHelper.isMobile) {
provider.add(
plunger.firstChild<FlameBlocProvider<PlungerCubit, PlungerState>>()!.addAll(
[
PlungerPullingBehavior(strength: pullingStrength),
PlungerAutoPullingBehavior(strength: pullingStrength),
);
} else {
provider.addAll(
[
PlungerKeyControllingBehavior(),
PlungerPullingBehavior(strength: pullingStrength),
],
);
}
PlungerKeyControllingBehavior()
],
);
}
void _removePlungerBehaviors(Plunger plunger) {

@ -167,7 +167,7 @@ class PinballGame extends PinballForge2DGame
.whereType<FlameBlocProvider<PlungerCubit, PlungerState>>()
.first
.bloc
.pulled();
.autopulled();
} else {
final tappedLeftSide = info.eventPosition.widget.x < canvasSize.x / 2;
focusedBoardSide[pointerId] =

@ -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<PrismaticJoint>().single;
final reachedBottom = joint.getJointTranslation() <= joint.getLowerLimit();

@ -8,4 +8,6 @@ class PlungerCubit extends Cubit<PlungerState> {
void pulled() => emit(PlungerState.pulling);
void released() => emit(PlungerState.releasing);
void autopulled() => emit(PlungerState.autopulling);
}

@ -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;
}

@ -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<PlungerCubit, PlungerState>().state;

@ -102,8 +102,8 @@ void main() {
final plungerBloc = _MockPlungerCubit();
whenListen<PlungerState>(
plungerBloc,
Stream.value(PlungerState.pulling),
initialState: PlungerState.pulling,
Stream.value(PlungerState.autopulling),
initialState: PlungerState.autopulling,
);
const strength = 2.0;

@ -36,7 +36,6 @@ class _TestGame extends Forge2DGame with HasTappables {
Future<void> pump(
Iterable<Component> children, {
PinballAudioPlayer? pinballAudioPlayer,
PlatformHelper? platformHelper,
GoogleWordCubit? googleWordBloc,
}) async {
return ensureAdd(
@ -62,7 +61,7 @@ class _TestGame extends Forge2DGame with HasTappables {
_MockAppLocalizations(),
),
FlameProvider<PlatformHelper>.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<PlungerCubit, PlungerState>(
@ -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<PlungerCubit, PlungerState>(
@ -542,17 +533,19 @@ void main() {
await game.ready();
expect(
plunger.descendants().whereType<PlungerPullingBehavior>().length,
plunger
.descendants()
.whereType<PlungerPullingBehavior>()
.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<PlungerCubit, PlungerState>(

@ -434,7 +434,7 @@ void main() {
.single
.bloc;
expect(plungerBloc.state, PlungerState.pulling);
expect(plungerBloc.state, PlungerState.autopulling);
});
});
});

Loading…
Cancel
Save