revert: looping animatronics

pull/458/head
Allison Ryan 3 years ago
parent d2dd83ff66
commit 8a63b100e8

@ -21,6 +21,7 @@ class FlutterForestBonusBehavior extends Component
final bumpers = parent.children.whereType<DashBumper>(); final bumpers = parent.children.whereType<DashBumper>();
final signpost = parent.firstChild<Signpost>()!; final signpost = parent.firstChild<Signpost>()!;
final animatronic = parent.firstChild<DashAnimatronic>()!;
for (final bumper in bumpers) { for (final bumper in bumpers) {
bumper.bloc.stream.listen((state) { bumper.bloc.stream.listen((state) {
@ -37,6 +38,7 @@ class FlutterForestBonusBehavior extends Component
if (signpost.bloc.isFullyProgressed()) { if (signpost.bloc.isFullyProgressed()) {
bloc.add(const BonusActivated(GameBonus.dashNest)); bloc.add(const BonusActivated(GameBonus.dashNest));
add(BonusBallSpawningBehavior()); add(BonusBallSpawningBehavior());
animatronic.playing = true;
signpost.bloc.onProgressed(); signpost.bloc.onProgressed();
} }
} }

@ -40,11 +40,7 @@ class FlutterForest extends Component with ZIndex {
BumperNoiseBehavior(), BumperNoiseBehavior(),
], ],
)..initialPosition = Vector2(21.8, -46.75), )..initialPosition = Vector2(21.8, -46.75),
DashAnimatronic( DashAnimatronic()..position = Vector2(20, -66),
children: [
AnimatronicLoopingBehavior(animationCoolDown: 4),
],
)..position = Vector2(20, -66),
FlutterForestBonusBehavior(), FlutterForestBonusBehavior(),
], ],
) { ) {

@ -12,11 +12,13 @@ class SparkyComputerBonusBehavior extends Component
void onMount() { void onMount() {
super.onMount(); super.onMount();
final sparkyComputer = parent.firstChild<SparkyComputer>()!; final sparkyComputer = parent.firstChild<SparkyComputer>()!;
final animatronic = parent.firstChild<SparkyAnimatronic>()!;
sparkyComputer.bloc.stream.listen((state) async { sparkyComputer.bloc.stream.listen((state) async {
final listenWhen = state == SparkyComputerState.withBall; final listenWhen = state == SparkyComputerState.withBall;
if (!listenWhen) return; if (!listenWhen) return;
bloc.add(const BonusActivated(GameBonus.sparkyTurboCharge)); bloc.add(const BonusActivated(GameBonus.sparkyTurboCharge));
animatronic.playing = true;
}); });
} }
} }

@ -33,11 +33,7 @@ class SparkyScorch extends Component {
BumperNoiseBehavior(), BumperNoiseBehavior(),
], ],
)..initialPosition = Vector2(-3.3, -52.55), )..initialPosition = Vector2(-3.3, -52.55),
SparkyAnimatronic( SparkyAnimatronic()..position = Vector2(-14, -58.2),
children: [
AnimatronicLoopingBehavior(animationCoolDown: 3),
],
)..position = Vector2(-14, -58.2),
SparkyComputer( SparkyComputer(
children: [ children: [
ScoringContactBehavior(points: Points.twoHundredThousand) ScoringContactBehavior(points: Points.twoHundredThousand)

@ -6,11 +6,10 @@ import 'package:pinball_components/pinball_components.dart';
/// {@endtemplate} /// {@endtemplate}
class DashAnimatronic extends SpriteAnimationComponent with HasGameRef { class DashAnimatronic extends SpriteAnimationComponent with HasGameRef {
/// {@macro dash_animatronic} /// {@macro dash_animatronic}
DashAnimatronic({Iterable<Component>? children}) DashAnimatronic()
: super( : super(
anchor: Anchor.center, anchor: Anchor.center,
playing: false, playing: false,
children: children,
); );
@override @override
@ -38,6 +37,9 @@ class DashAnimatronic extends SpriteAnimationComponent with HasGameRef {
textureSize: textureSize, textureSize: textureSize,
loop: false, loop: false,
), ),
); )..onComplete = () {
animation?.reset();
playing = false;
};
} }
} }

@ -8,11 +8,10 @@ import 'package:pinball_flame/pinball_flame.dart';
class SparkyAnimatronic extends SpriteAnimationComponent class SparkyAnimatronic extends SpriteAnimationComponent
with HasGameRef, ZIndex { with HasGameRef, ZIndex {
/// {@macro sparky_animatronic} /// {@macro sparky_animatronic}
SparkyAnimatronic({Iterable<Component>? children}) SparkyAnimatronic()
: super( : super(
anchor: Anchor.center, anchor: Anchor.center,
playing: false, playing: false,
children: children,
) { ) {
zIndex = ZIndexes.sparkyAnimatronic; zIndex = ZIndexes.sparkyAnimatronic;
} }
@ -42,6 +41,9 @@ class SparkyAnimatronic extends SpriteAnimationComponent
textureSize: textureSize, textureSize: textureSize,
loop: false, loop: false,
), ),
); )..onComplete = () {
animation?.reset();
playing = false;
};
} }
} }

@ -56,13 +56,17 @@ void main() {
}, },
); );
flameTester.test('adds new children', (game) async { flameTester.test(
final component = Component(); 'stops animating after animation completes',
final dashAnimatronic = DashAnimatronic( (game) async {
children: [component], final dashAnimatronic = DashAnimatronic();
); await game.ensureAdd(dashAnimatronic);
await game.ensureAdd(dashAnimatronic);
expect(dashAnimatronic.children, contains(component)); dashAnimatronic.playing = true;
}); game.update(4);
expect(dashAnimatronic.playing, isFalse);
},
);
}); });
} }

@ -58,13 +58,19 @@ void main() {
}, },
); );
flameTester.test('adds new children', (game) async { flameTester.test(
final component = Component(); 'stops animating after animation completes',
final sparkyAnimatronic = SparkyAnimatronic( (game) async {
children: [component], final sparkyAnimatronic = SparkyAnimatronic();
); await game.ensureAdd(sparkyAnimatronic);
await game.ensureAdd(sparkyAnimatronic);
expect(sparkyAnimatronic.children, contains(component)); sparkyAnimatronic.playing = true;
}); final animationDuration =
game.firstChild<SparkyAnimatronic>()!.animation!.totalDuration();
game.update(animationDuration);
expect(sparkyAnimatronic.playing, isFalse);
},
);
}); });
} }

@ -16,7 +16,10 @@ class _TestGame extends Forge2DGame {
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
images.prefix = ''; images.prefix = '';
await images.load(theme.Assets.images.dash.ball.keyName); await images.loadAll([
Assets.images.dash.animatronic.keyName,
theme.Assets.images.dash.ball.keyName,
]);
} }
Future<void> pump( Future<void> pump(
@ -53,7 +56,7 @@ void main() {
void _contactedBumper(DashBumper bumper) => bumper.bloc.onBallContacted(); void _contactedBumper(DashBumper bumper) => bumper.bloc.onBallContacted();
flameTester.testGameWidget( flameTester.testGameWidget(
'adds GameBonus.dashNest to the game ' 'adds GameBonus.dashNest to the game and plays animatronic '
'when bumpers are activated three times', 'when bumpers are activated three times',
setUp: (game, tester) async { setUp: (game, tester) async {
await game.onLoad(); await game.onLoad();
@ -64,9 +67,10 @@ void main() {
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
]; ];
final animatronic = DashAnimatronic();
final signpost = Signpost.test(bloc: SignpostCubit()); final signpost = Signpost.test(bloc: SignpostCubit());
await game.pump(parent, gameBloc: gameBloc); await game.pump(parent, gameBloc: gameBloc);
await parent.ensureAddAll([...bumpers, signpost]); await parent.ensureAddAll([...bumpers, animatronic, signpost]);
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
expect(game.descendants().whereType<DashBumper>(), equals(bumpers)); expect(game.descendants().whereType<DashBumper>(), equals(bumpers));
@ -80,6 +84,7 @@ void main() {
verify( verify(
() => gameBloc.add(const BonusActivated(GameBonus.dashNest)), () => gameBloc.add(const BonusActivated(GameBonus.dashNest)),
).called(1); ).called(1);
expect(animatronic.playing, isTrue);
}, },
); );
@ -95,9 +100,10 @@ void main() {
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
]; ];
final animatronic = DashAnimatronic();
final signpost = Signpost.test(bloc: SignpostCubit()); final signpost = Signpost.test(bloc: SignpostCubit());
await game.pump(parent, gameBloc: gameBloc); await game.pump(parent, gameBloc: gameBloc);
await parent.ensureAddAll([...bumpers, signpost]); await parent.ensureAddAll([...bumpers, animatronic, signpost]);
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
expect(game.descendants().whereType<DashBumper>(), equals(bumpers)); expect(game.descendants().whereType<DashBumper>(), equals(bumpers));
@ -128,9 +134,10 @@ void main() {
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
DashBumper.test(bloc: DashBumperCubit()), DashBumper.test(bloc: DashBumperCubit()),
]; ];
final animatronic = DashAnimatronic();
final signpost = Signpost.test(bloc: SignpostCubit()); final signpost = Signpost.test(bloc: SignpostCubit());
await game.pump(parent, gameBloc: gameBloc); await game.pump(parent, gameBloc: gameBloc);
await parent.ensureAddAll([...bumpers, signpost]); await parent.ensureAddAll([...bumpers, animatronic, signpost]);
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
expect(game.descendants().whereType<DashBumper>(), equals(bumpers)); expect(game.descendants().whereType<DashBumper>(), equals(bumpers));

@ -17,6 +17,7 @@ class _TestGame extends Forge2DGame {
Assets.images.sparky.computer.top.keyName, Assets.images.sparky.computer.top.keyName,
Assets.images.sparky.computer.base.keyName, Assets.images.sparky.computer.base.keyName,
Assets.images.sparky.computer.glow.keyName, Assets.images.sparky.computer.glow.keyName,
Assets.images.sparky.animatronic.keyName,
Assets.images.sparky.bumper.a.lit.keyName, Assets.images.sparky.bumper.a.lit.keyName,
Assets.images.sparky.bumper.a.dimmed.keyName, Assets.images.sparky.bumper.a.dimmed.keyName,
Assets.images.sparky.bumper.b.lit.keyName, Assets.images.sparky.bumper.b.lit.keyName,
@ -57,14 +58,15 @@ void main() {
final flameTester = FlameTester(_TestGame.new); final flameTester = FlameTester(_TestGame.new);
flameTester.testGameWidget( flameTester.testGameWidget(
'adds GameBonus.sparkyTurboCharge to the game ' 'adds GameBonus.sparkyTurboCharge to the game and plays animatronic '
'when SparkyComputerState.withBall is emitted', 'when SparkyComputerState.withBall is emitted',
setUp: (game, tester) async { setUp: (game, tester) async {
final behavior = SparkyComputerBonusBehavior(); final behavior = SparkyComputerBonusBehavior();
final parent = SparkyScorch.test(); final parent = SparkyScorch.test();
final sparkyComputer = SparkyComputer(); final sparkyComputer = SparkyComputer();
final animatronic = SparkyAnimatronic();
await parent.add(sparkyComputer); await parent.addAll([sparkyComputer, animatronic]);
await game.pump(parent, gameBloc: gameBloc); await game.pump(parent, gameBloc: gameBloc);
await parent.ensureAdd(behavior); await parent.ensureAdd(behavior);
@ -74,6 +76,7 @@ void main() {
verify( verify(
() => gameBloc.add(const BonusActivated(GameBonus.sparkyTurboCharge)), () => gameBloc.add(const BonusActivated(GameBonus.sparkyTurboCharge)),
).called(1); ).called(1);
expect(animatronic.playing, isTrue);
}, },
); );
}); });

Loading…
Cancel
Save