diff --git a/lib/game/components/dino_desert.dart b/lib/game/components/dino_desert.dart index 2bb23e77..090fa324 100644 --- a/lib/game/components/dino_desert.dart +++ b/lib/game/components/dino_desert.dart @@ -30,7 +30,7 @@ class _BarrierBehindDino extends BodyComponent { Body createBody() { final shape = EdgeShape() ..set( - Vector2(27, -14.2), + Vector2(25, -14.2), Vector2(25, -7.7), ); diff --git a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart index 68dd9c44..23a6ef37 100644 --- a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart +++ b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart @@ -34,7 +34,7 @@ class ChromeDinoSpittingBehavior extends Component void _spit() { parent.bloc.state.ball! ..firstChild()!.setOpacity(1) - ..body.linearVelocity = Vector2(-50, 3); + ..body.linearVelocity = Vector2(-50, 0); parent.bloc.onSpit(); } diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart index ff13f690..ebc759b8 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart @@ -28,31 +28,47 @@ void main() { ); }); - flameTester.test( - 'creates a RevoluteJoint', - (game) async { - final behavior = ChromeDinoSpittingBehavior(); - final bloc = MockChromeDinoCubit(); - whenListen( - bloc, - const Stream.empty(), - initialState: const ChromeDinoState.inital(), - ); + group('on the next time the mouth opens and status is chomping', () { + flameTester.test( + 'sets ball sprite to visible and sets a linear velocity', + (game) async { + final ball = Ball(baseColor: Colors.red); + final behavior = ChromeDinoSpittingBehavior(); + final bloc = MockChromeDinoCubit(); + final streamController = StreamController(); + final chompingState = ChromeDinoState( + status: ChromeDinoStatus.chomping, + isMouthOpen: true, + ball: ball, + ); + whenListen( + bloc, + streamController.stream, + initialState: chompingState, + ); - final chromeDino = ChromeDino.test(bloc: bloc); - await chromeDino.add(behavior); - await game.ensureAdd(chromeDino); + final chromeDino = ChromeDino.test(bloc: bloc); + await chromeDino.add(behavior); + await game.ensureAddAll([chromeDino, ball]); + + streamController.add(chompingState.copyWith(isMouthOpen: false)); + streamController.add(chompingState.copyWith(isMouthOpen: true)); + await game.ready(); + + game + .descendants() + .whereType() + .single + .timer + .onTick!(); - expect( - game.world.joints.whereType().single, - isNotNull, - ); - }, - ); + expect(ball.firstChild()!.getOpacity(), equals(1)); + expect(ball.body.linearVelocity, equals(Vector2(-50, 0))); + }, + ); - group('calls', () { flameTester.test( - 'onSpit the next time the mouth opens and status is chomping', + 'calls onSpit', (game) async { final ball = Ball(baseColor: Colors.red); final behavior = ChromeDinoSpittingBehavior();