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]
/// count, and a new [Ball] is spawned.
ControlledBall.launch({
required PinballTheme theme,
}) : super(baseColor: theme.characterTheme.ballColor) {
required CharacterTheme characterTheme,
}) : super(baseColor: characterTheme.ballColor) {
controller = BallController(this);
priority = RenderPriority.ballOnLaunchRamp;
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.
/// {@endtemplate}
ControlledBall.bonus({
required PinballTheme theme,
}) : super(baseColor: theme.characterTheme.ballColor) {
required CharacterTheme characterTheme,
}) : super(baseColor: characterTheme.ballColor) {
controller = BallController(this);
priority = RenderPriority.ballOnBoard;
}

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

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

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

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

@ -11,6 +11,6 @@ class SelectCharacterCubit extends Cubit<SelectCharacterState> {
SelectCharacterCubit() : super(const SelectCharacterState.initial());
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 {
const SelectCharacterState(this.selectedCharacter);
const SelectCharacterState.initial()
: selectedCharacter = const PinballTheme(characterTheme: DashTheme());
const SelectCharacterState.initial() : selectedCharacter = const DashTheme();
final PinballTheme selectedCharacter;
final CharacterTheme selectedCharacter;
@override
List<Object> get props => [selectedCharacter];

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

@ -1,5 +1,4 @@
library pinball_theme;
export 'src/generated/generated.dart';
export 'src/pinball_theme.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<CameraController>).thenReturn(cameraController);
when(() => game.overlays).thenReturn(overlays);
when(() => game.theme)
.thenReturn(PinballTheme(characterTheme: DashTheme()));
when(() => game.characterTheme).thenReturn(DashTheme());
});
test(

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

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

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

Loading…
Cancel
Save