chore: remove PinballTheme and use CharacterTheme

pull/233/head
arturplaczek 3 years ago
parent 4887ebd79f
commit 464b786760

@ -15,8 +15,8 @@ class ControlledBall extends Ball with Controls<BallController> {
/// When a launched [Ball] is lost, it will decrease the [GameState.balls] /// When a launched [Ball] is lost, it will decrease the [GameState.balls]
/// count, and a new [Ball] is spawned. /// count, and a new [Ball] is spawned.
ControlledBall.launch({ ControlledBall.launch({
required PinballTheme theme, required CharacterTheme characterTheme,
}) : super(baseColor: theme.characterTheme.ballColor) { }) : super(baseColor: characterTheme.ballColor) {
controller = BallController(this); controller = BallController(this);
priority = RenderPriority.ballOnLaunchRamp; priority = RenderPriority.ballOnLaunchRamp;
layer = Layer.launcher; layer = Layer.launcher;
@ -28,8 +28,8 @@ class ControlledBall extends Ball with Controls<BallController> {
/// When a bonus [Ball] is lost, the [GameState.balls] doesn't change. /// When a bonus [Ball] is lost, the [GameState.balls] doesn't change.
/// {@endtemplate} /// {@endtemplate}
ControlledBall.bonus({ ControlledBall.bonus({
required PinballTheme theme, required CharacterTheme characterTheme,
}) : super(baseColor: theme.characterTheme.ballColor) { }) : super(baseColor: characterTheme.ballColor) {
controller = BallController(this); controller = BallController(this);
priority = RenderPriority.ballOnBoard; priority = RenderPriority.ballOnBoard;
} }

@ -71,7 +71,7 @@ class _FlutterForestController extends ComponentController<FlutterForest>
Future<void> _addBonusBall() async { Future<void> _addBonusBall() async {
await gameRef.add( await gameRef.add(
ControlledBall.bonus(theme: gameRef.theme) ControlledBall.bonus(characterTheme: gameRef.characterTheme)
..initialPosition = Vector2(17.2, -52.7), ..initialPosition = Vector2(17.2, -52.7),
); );
} }

@ -32,8 +32,7 @@ class GameFlowController extends ComponentController<PinballGame>
// next page // next page
component.firstChild<Backboard>()?.gameOverMode( component.firstChild<Backboard>()?.gameOverMode(
score: state?.score ?? 0, score: state?.score ?? 0,
characterIconPath: characterIconPath: component.characterTheme.leaderboardIcon.keyName,
component.theme.characterTheme.leaderboardIcon.keyName,
); );
component.firstChild<CameraController>()?.focusOnBackboard(); component.firstChild<CameraController>()?.focusOnBackboard();
} }

@ -20,7 +20,7 @@ class PinballGame extends Forge2DGame
HasKeyboardHandlerComponents, HasKeyboardHandlerComponents,
Controls<_GameBallsController> { Controls<_GameBallsController> {
PinballGame({ PinballGame({
required this.theme, required this.characterTheme,
required this.audio, required this.audio,
}) { }) {
images.prefix = ''; images.prefix = '';
@ -33,7 +33,7 @@ class PinballGame extends Forge2DGame
@override @override
Color backgroundColor() => Colors.transparent; Color backgroundColor() => Colors.transparent;
final PinballTheme theme; final CharacterTheme characterTheme;
final PinballAudio audio; final PinballAudio audio;
@ -119,7 +119,7 @@ class _GameBallsController extends ComponentController<PinballGame>
void _spawnBall() { void _spawnBall() {
final ball = ControlledBall.launch( final ball = ControlledBall.launch(
theme: gameRef.theme, characterTheme: gameRef.characterTheme,
)..initialPosition = Vector2( )..initialPosition = Vector2(
_plunger.body.position.x, _plunger.body.position.x,
_plunger.body.position.y - Ball.size.y, _plunger.body.position.y - Ball.size.y,
@ -137,10 +137,10 @@ class _GameBallsController extends ComponentController<PinballGame>
class DebugPinballGame extends PinballGame with FPSCounter, TapDetector { class DebugPinballGame extends PinballGame with FPSCounter, TapDetector {
DebugPinballGame({ DebugPinballGame({
required PinballTheme theme, required CharacterTheme characterTheme,
required PinballAudio audio, required PinballAudio audio,
}) : super( }) : super(
theme: theme, characterTheme: characterTheme,
audio: audio, audio: audio,
) { ) {
controller = _DebugGameBallsController(this); controller = _DebugGameBallsController(this);

@ -37,8 +37,8 @@ class PinballGamePage extends StatelessWidget {
final pinballAudio = context.read<PinballAudio>(); final pinballAudio = context.read<PinballAudio>();
final game = isDebugMode final game = isDebugMode
? DebugPinballGame(theme: selectedCharacter, audio: audio) ? DebugPinballGame(characterTheme: selectedCharacter, audio: audio)
: PinballGame(theme: selectedCharacter, audio: audio); : PinballGame(characterTheme: selectedCharacter, audio: audio);
final loadables = [ final loadables = [
...game.preLoadAssets(), ...game.preLoadAssets(),

@ -11,6 +11,6 @@ class SelectCharacterCubit extends Cubit<SelectCharacterState> {
SelectCharacterCubit() : super(const SelectCharacterState.initial()); SelectCharacterCubit() : super(const SelectCharacterState.initial());
void characterSelected(CharacterTheme characterTheme) { void characterSelected(CharacterTheme characterTheme) {
emit(SelectCharacterState(PinballTheme(characterTheme: characterTheme))); emit(SelectCharacterState(characterTheme));
} }
} }

@ -6,10 +6,9 @@ part of 'select_character_cubit.dart';
class SelectCharacterState extends Equatable { class SelectCharacterState extends Equatable {
const SelectCharacterState(this.selectedCharacter); const SelectCharacterState(this.selectedCharacter);
const SelectCharacterState.initial() const SelectCharacterState.initial() : selectedCharacter = const DashTheme();
: selectedCharacter = const PinballTheme(characterTheme: DashTheme());
final PinballTheme selectedCharacter; final CharacterTheme selectedCharacter;
@override @override
List<Object> get props => [selectedCharacter]; List<Object> get props => [selectedCharacter];

@ -111,7 +111,7 @@ class CharacterImageButton extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final currentCharacterTheme = final currentCharacterTheme =
context.select<SelectCharacterCubit, CharacterTheme>( context.select<SelectCharacterCubit, CharacterTheme>(
(cubit) => cubit.state.selectedCharacter.characterTheme, (cubit) => cubit.state.selectedCharacter,
); );
return GestureDetector( return GestureDetector(

@ -1,5 +1,4 @@
library pinball_theme; library pinball_theme;
export 'src/generated/generated.dart'; export 'src/generated/generated.dart';
export 'src/pinball_theme.dart';
export 'src/themes/themes.dart'; export 'src/themes/themes.dart';

@ -1,23 +0,0 @@
import 'package:equatable/equatable.dart';
import 'package:pinball_theme/pinball_theme.dart';
/// {@template pinball_theme}
/// Defines all theme assets and attributes.
///
/// Game components should have a getter specified here to load their
/// corresponding assets for the game.
/// {@endtemplate}
class PinballTheme extends Equatable {
/// {@macro pinball_theme}
const PinballTheme({
required CharacterTheme characterTheme,
}) : _characterTheme = characterTheme;
final CharacterTheme _characterTheme;
/// [CharacterTheme] for the chosen character.
CharacterTheme get characterTheme => _characterTheme;
@override
List<Object?> get props => [_characterTheme];
}

@ -1,28 +0,0 @@
// ignore_for_file: prefer_const_constructors
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_theme/pinball_theme.dart';
void main() {
group('PinballTheme', () {
const characterTheme = SparkyTheme();
test('can be instantiated', () {
expect(PinballTheme(characterTheme: characterTheme), isNotNull);
});
test('supports value equality', () {
expect(
PinballTheme(characterTheme: characterTheme),
equals(PinballTheme(characterTheme: characterTheme)),
);
});
test('characterTheme is correct', () {
expect(
PinballTheme(characterTheme: characterTheme).characterTheme,
equals(characterTheme),
);
});
});
}

@ -57,8 +57,7 @@ void main() {
when(game.firstChild<Backboard>).thenReturn(backboard); when(game.firstChild<Backboard>).thenReturn(backboard);
when(game.firstChild<CameraController>).thenReturn(cameraController); when(game.firstChild<CameraController>).thenReturn(cameraController);
when(() => game.overlays).thenReturn(overlays); when(() => game.overlays).thenReturn(overlays);
when(() => game.theme) when(() => game.characterTheme).thenReturn(DashTheme());
.thenReturn(PinballTheme(characterTheme: DashTheme()));
}); });
test( test(

@ -117,7 +117,9 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'when ball is launch', 'when ball is launch',
setUp: (game, tester) async { setUp: (game, tester) async {
final ball = ControlledBall.launch(theme: game.theme); final ball = ControlledBall.launch(
characterTheme: game.characterTheme,
);
final wall = BottomWall(); final wall = BottomWall();
await game.ensureAddAll([ball, wall]); await game.ensureAddAll([ball, wall]);
game.addContactCallback(BottomWallBallContactCallback()); game.addContactCallback(BottomWallBallContactCallback());
@ -132,7 +134,9 @@ void main() {
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'when ball is bonus', 'when ball is bonus',
setUp: (game, tester) async { setUp: (game, tester) async {
final ball = ControlledBall.bonus(theme: game.theme); final ball = ControlledBall.bonus(
characterTheme: game.characterTheme,
);
final wall = BottomWall(); final wall = BottomWall();
await game.ensureAddAll([ball, wall]); await game.ensureAddAll([ball, wall]);
game.addContactCallback(BottomWallBallContactCallback()); game.addContactCallback(BottomWallBallContactCallback());

@ -20,9 +20,7 @@ class PinballTestGame extends PinballGame {
: _assets = assets, : _assets = assets,
super( super(
audio: MockPinballAudio(), audio: MockPinballAudio(),
theme: const PinballTheme( characterTheme: const DashTheme(),
characterTheme: DashTheme(),
),
); );
final List<String>? _assets; final List<String>? _assets;
@ -40,9 +38,7 @@ class DebugPinballTestGame extends DebugPinballGame {
: _assets = assets, : _assets = assets,
super( super(
audio: MockPinballAudio(), audio: MockPinballAudio(),
theme: const PinballTheme( characterTheme: const DashTheme(),
characterTheme: DashTheme(),
),
); );
final List<String>? _assets; final List<String>? _assets;

@ -8,7 +8,7 @@ void main() {
test('initial state has Dash character theme', () { test('initial state has Dash character theme', () {
final selectCharacterCubit = SelectCharacterCubit(); final selectCharacterCubit = SelectCharacterCubit();
expect( expect(
selectCharacterCubit.state.selectedCharacter.characterTheme, selectCharacterCubit.state.selectedCharacter,
equals(const DashTheme()), equals(const DashTheme()),
); );
}); });
@ -18,7 +18,7 @@ void main() {
build: SelectCharacterCubit.new, build: SelectCharacterCubit.new,
act: (bloc) => bloc.characterSelected(const SparkyTheme()), act: (bloc) => bloc.characterSelected(const SparkyTheme()),
expect: () => [ expect: () => [
const SelectCharacterState(PinballTheme(characterTheme: SparkyTheme())), const SelectCharacterState(SparkyTheme()),
], ],
); );
}); });

Loading…
Cancel
Save