feat: implemented ScorePoints mixin

pull/7/head
alestiago 4 years ago
parent 18e1f950ad
commit fbf9b39ee3

@ -1,8 +1,11 @@
import 'package:flame_bloc/flame_bloc.dart';
import 'package:flame_forge2d/body_component.dart';
import 'package:flutter/material.dart';
import 'package:forge2d/forge2d.dart';
import 'package:pinball/game/game.dart';
class Ball extends BodyComponent {
class Ball extends BodyComponent<PinballGame>
with BlocComponent<GameBloc, GameState> {
Ball({
required Vector2 position,
}) : _position = position {

@ -1 +1,2 @@
export 'ball.dart';
export 'score_points.dart';

@ -0,0 +1,22 @@
// ignore_for_file: avoid_renaming_method_parameters
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/game/game.dart';
mixin ScorePoints {
int get points;
}
class BallHasScoreCallback extends ContactCallback<Ball, ScorePoints> {
@override
void begin(
Ball ball,
ScorePoints hasPoints,
Contact _,
) {
ball.gameRef.read<GameBloc>().add(Scored(points: hasPoints.points));
}
@override
void end(Ball _, ScorePoints __, Contact ___) {}
}

@ -0,0 +1,60 @@
import 'package:flame/components.dart';
import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/game.dart';
class MockHasScore extends Mock with ScorePoints {}
class MockBall extends Mock implements Ball {}
class MockGameBloc extends Mock implements GameBloc {}
class MockPinballGame extends Mock implements PinballGame {}
class FakeContact extends Fake implements Contact {}
void main() {
group('BallHasScoreCallback', () {
late MockPinballGame game;
late MockGameBloc bloc;
late MockBall ball;
late MockHasScore hasScore;
setUp(() {
game = MockPinballGame();
bloc = MockGameBloc();
ball = MockBall();
hasScore = MockHasScore();
});
group('begin', () {
test(
'emits Scored event with points',
() {
const points = 2;
when<PinballGame>(() => ball.gameRef).thenReturn(game);
when<GameBloc>(game.read).thenReturn(bloc);
when<int>(() => hasScore.points).thenReturn(points);
BallHasScoreCallback().begin(
ball,
hasScore,
FakeContact(),
);
verify(
() => bloc.add(const Scored(points: points)),
).called(1);
},
);
});
group('end', () {
test('does nothing', () {
// TODO(alestiago): Write test.
});
});
});
}
Loading…
Cancel
Save