refactor: multiplier creation refactored

pull/231/head
RuiAlonso 3 years ago
parent 2f739a99d9
commit 33b5ecd66e

@ -3,7 +3,7 @@ export 'board.dart';
export 'camera_controller.dart'; export 'camera_controller.dart';
export 'controlled_ball.dart'; export 'controlled_ball.dart';
export 'controlled_flipper.dart'; export 'controlled_flipper.dart';
export 'controlled_multiplier.dart'; export 'controlled_multipliers.dart';
export 'controlled_plunger.dart'; export 'controlled_plunger.dart';
export 'flutter_forest.dart'; export 'flutter_forest.dart';
export 'game_flow_controller.dart'; export 'game_flow_controller.dart';

@ -16,26 +16,26 @@ class Multipliers extends Component
/// {@macro multipliers_group_component} /// {@macro multipliers_group_component}
Multipliers() Multipliers()
: x2multiplier = Multiplier( : x2multiplier = Multiplier(
value: 2, value: MultiplierValue.x2,
position: Vector2(-19.5, -2), position: Vector2(-19.5, -2),
rotation: -15 * math.pi / 180, rotation: -15 * math.pi / 180,
), ),
x3multiplier = Multiplier( x3multiplier = Multiplier(
value: 3, value: MultiplierValue.x3,
position: Vector2(13, -9.5), position: Vector2(13, -9.5),
rotation: 15 * math.pi / 180, rotation: 15 * math.pi / 180,
), ),
x4multiplier = Multiplier( x4multiplier = Multiplier(
value: 4, value: MultiplierValue.x4,
position: Vector2(0, -21), position: Vector2(0, -21),
), ),
x5multiplier = Multiplier( x5multiplier = Multiplier(
value: 5, value: MultiplierValue.x5,
position: Vector2(-8.5, -28), position: Vector2(-8.5, -28),
rotation: -3 * math.pi / 180, rotation: -3 * math.pi / 180,
), ),
x6multiplier = Multiplier( x6multiplier = Multiplier(
value: 6, value: MultiplierValue.x6,
position: Vector2(10, -31), position: Vector2(10, -31),
rotation: 8 * math.pi / 180, rotation: 8 * math.pi / 180,
), ),

@ -101,16 +101,16 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.googleWord.letter5.keyName), images.load(components.Assets.images.googleWord.letter5.keyName),
images.load(components.Assets.images.googleWord.letter6.keyName), images.load(components.Assets.images.googleWord.letter6.keyName),
images.load(components.Assets.images.backboard.display.keyName), images.load(components.Assets.images.backboard.display.keyName),
images.load(components.Assets.images.multiplier.x2.active.keyName), images.load(components.Assets.images.multiplier.x2.lit.keyName),
images.load(components.Assets.images.multiplier.x2.inactive.keyName), images.load(components.Assets.images.multiplier.x2.dimmed.keyName),
images.load(components.Assets.images.multiplier.x3.active.keyName), images.load(components.Assets.images.multiplier.x3.lit.keyName),
images.load(components.Assets.images.multiplier.x3.inactive.keyName), images.load(components.Assets.images.multiplier.x3.dimmed.keyName),
images.load(components.Assets.images.multiplier.x4.active.keyName), images.load(components.Assets.images.multiplier.x4.lit.keyName),
images.load(components.Assets.images.multiplier.x4.inactive.keyName), images.load(components.Assets.images.multiplier.x4.dimmed.keyName),
images.load(components.Assets.images.multiplier.x5.active.keyName), images.load(components.Assets.images.multiplier.x5.lit.keyName),
images.load(components.Assets.images.multiplier.x5.inactive.keyName), images.load(components.Assets.images.multiplier.x5.dimmed.keyName),
images.load(components.Assets.images.multiplier.x6.active.keyName), images.load(components.Assets.images.multiplier.x6.lit.keyName),
images.load(components.Assets.images.multiplier.x6.inactive.keyName), images.load(components.Assets.images.multiplier.x6.dimmed.keyName),
images.load(dashTheme.leaderboardIcon.keyName), images.load(dashTheme.leaderboardIcon.keyName),
images.load(sparkyTheme.leaderboardIcon.keyName), images.load(sparkyTheme.leaderboardIcon.keyName),
images.load(androidTheme.leaderboardIcon.keyName), images.load(androidTheme.leaderboardIcon.keyName),

@ -319,61 +319,61 @@ class $AssetsImagesDashBumperGen {
class $AssetsImagesMultiplierX2Gen { class $AssetsImagesMultiplierX2Gen {
const $AssetsImagesMultiplierX2Gen(); const $AssetsImagesMultiplierX2Gen();
/// File path: assets/images/multiplier/x2/active.png /// File path: assets/images/multiplier/x2/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/multiplier/x2/active.png'); const AssetGenImage('assets/images/multiplier/x2/dimmed.png');
/// File path: assets/images/multiplier/x2/inactive.png /// File path: assets/images/multiplier/x2/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/multiplier/x2/inactive.png'); const AssetGenImage('assets/images/multiplier/x2/lit.png');
} }
class $AssetsImagesMultiplierX3Gen { class $AssetsImagesMultiplierX3Gen {
const $AssetsImagesMultiplierX3Gen(); const $AssetsImagesMultiplierX3Gen();
/// File path: assets/images/multiplier/x3/active.png /// File path: assets/images/multiplier/x3/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/multiplier/x3/active.png'); const AssetGenImage('assets/images/multiplier/x3/dimmed.png');
/// File path: assets/images/multiplier/x3/inactive.png /// File path: assets/images/multiplier/x3/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/multiplier/x3/inactive.png'); const AssetGenImage('assets/images/multiplier/x3/lit.png');
} }
class $AssetsImagesMultiplierX4Gen { class $AssetsImagesMultiplierX4Gen {
const $AssetsImagesMultiplierX4Gen(); const $AssetsImagesMultiplierX4Gen();
/// File path: assets/images/multiplier/x4/active.png /// File path: assets/images/multiplier/x4/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/multiplier/x4/active.png'); const AssetGenImage('assets/images/multiplier/x4/dimmed.png');
/// File path: assets/images/multiplier/x4/inactive.png /// File path: assets/images/multiplier/x4/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/multiplier/x4/inactive.png'); const AssetGenImage('assets/images/multiplier/x4/lit.png');
} }
class $AssetsImagesMultiplierX5Gen { class $AssetsImagesMultiplierX5Gen {
const $AssetsImagesMultiplierX5Gen(); const $AssetsImagesMultiplierX5Gen();
/// File path: assets/images/multiplier/x5/active.png /// File path: assets/images/multiplier/x5/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/multiplier/x5/active.png'); const AssetGenImage('assets/images/multiplier/x5/dimmed.png');
/// File path: assets/images/multiplier/x5/inactive.png /// File path: assets/images/multiplier/x5/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/multiplier/x5/inactive.png'); const AssetGenImage('assets/images/multiplier/x5/lit.png');
} }
class $AssetsImagesMultiplierX6Gen { class $AssetsImagesMultiplierX6Gen {
const $AssetsImagesMultiplierX6Gen(); const $AssetsImagesMultiplierX6Gen();
/// File path: assets/images/multiplier/x6/active.png /// File path: assets/images/multiplier/x6/dimmed.png
AssetGenImage get active => AssetGenImage get dimmed =>
const AssetGenImage('assets/images/multiplier/x6/active.png'); const AssetGenImage('assets/images/multiplier/x6/dimmed.png');
/// File path: assets/images/multiplier/x6/inactive.png /// File path: assets/images/multiplier/x6/lit.png
AssetGenImage get inactive => AssetGenImage get lit =>
const AssetGenImage('assets/images/multiplier/x6/inactive.png'); const AssetGenImage('assets/images/multiplier/x6/lit.png');
} }
class $AssetsImagesSpaceshipRailGen { class $AssetsImagesSpaceshipRailGen {

@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pinball_components/gen/assets.gen.dart'; import 'package:pinball_components/gen/assets.gen.dart';
@ -8,27 +10,24 @@ import 'package:pinball_components/gen/assets.gen.dart';
class Multiplier extends Component { class Multiplier extends Component {
/// {@macro multiplier} /// {@macro multiplier}
Multiplier({ Multiplier({
required int value, required MultiplierValue value,
required Vector2 position, required Vector2 position,
double rotation = 0, double rotation = 0,
}) : assert( }) : _value = value,
2 <= value && value <= 6, _sprite = MultiplierSpriteGroupComponent(
'multiplier value must be in range 2 <= value <= 6', position: position,
), onAssetPath: value.onAssetPath,
_value = value, offAssetPath: value.offAssetPath,
_position = position, rotation: rotation,
_rotation = rotation, );
super();
final MultiplierValue _value;
final int _value; final MultiplierSpriteGroupComponent _sprite;
final Vector2 _position;
final double _rotation;
late final MultiplierSpriteGroupComponent _sprite;
/// Change current [Sprite] to active or inactive depending on applied /// Change current [Sprite] to active or inactive depending on applied
/// multiplier. /// multiplier.
void toggle(int multiplier) { void toggle(int multiplier) {
if (multiplier == _value) { if (_value.equalsTo(multiplier)) {
_sprite.current = MultiplierSpriteState.active; _sprite.current = MultiplierSpriteState.active;
} else { } else {
_sprite.current = MultiplierSpriteState.inactive; _sprite.current = MultiplierSpriteState.inactive;
@ -38,43 +37,19 @@ class Multiplier extends Component {
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
String? onAssetPath;
String? offAssetPath;
switch (_value) {
case 2:
onAssetPath = Assets.images.multiplier.x2.active.keyName;
offAssetPath = Assets.images.multiplier.x2.inactive.keyName;
break;
case 3:
onAssetPath = Assets.images.multiplier.x3.active.keyName;
offAssetPath = Assets.images.multiplier.x3.inactive.keyName;
break;
case 4:
onAssetPath = Assets.images.multiplier.x4.active.keyName;
offAssetPath = Assets.images.multiplier.x4.inactive.keyName;
break;
case 5:
onAssetPath = Assets.images.multiplier.x5.active.keyName;
offAssetPath = Assets.images.multiplier.x5.inactive.keyName;
break;
case 6:
onAssetPath = Assets.images.multiplier.x6.active.keyName;
offAssetPath = Assets.images.multiplier.x6.inactive.keyName;
break;
}
_sprite = MultiplierSpriteGroupComponent(
position: _position,
onAssetPath: onAssetPath!,
offAssetPath: offAssetPath!,
)..angle = _rotation;
await add(_sprite); await add(_sprite);
} }
} }
/// Available multiplier values.
enum MultiplierValue {
x2,
x3,
x4,
x5,
x6,
}
/// Indicates the current sprite state of the multiplier. /// Indicates the current sprite state of the multiplier.
enum MultiplierSpriteState { enum MultiplierSpriteState {
/// A lit up bumper. /// A lit up bumper.
@ -84,6 +59,53 @@ enum MultiplierSpriteState {
inactive, inactive,
} }
extension on MultiplierValue {
String get onAssetPath {
switch (this) {
case MultiplierValue.x2:
return Assets.images.multiplier.x2.lit.keyName;
case MultiplierValue.x3:
return Assets.images.multiplier.x3.lit.keyName;
case MultiplierValue.x4:
return Assets.images.multiplier.x4.lit.keyName;
case MultiplierValue.x5:
return Assets.images.multiplier.x5.lit.keyName;
case MultiplierValue.x6:
return Assets.images.multiplier.x6.lit.keyName;
}
}
String get offAssetPath {
switch (this) {
case MultiplierValue.x2:
return Assets.images.multiplier.x2.dimmed.keyName;
case MultiplierValue.x3:
return Assets.images.multiplier.x3.dimmed.keyName;
case MultiplierValue.x4:
return Assets.images.multiplier.x4.dimmed.keyName;
case MultiplierValue.x5:
return Assets.images.multiplier.x5.dimmed.keyName;
case MultiplierValue.x6:
return Assets.images.multiplier.x6.dimmed.keyName;
}
}
bool equalsTo(int value) {
switch (this) {
case MultiplierValue.x2:
return value == 2;
case MultiplierValue.x3:
return value == 3;
case MultiplierValue.x4:
return value == 4;
case MultiplierValue.x5:
return value == 5;
case MultiplierValue.x6:
return value == 6;
}
}
}
/// {@template multiplier_sprite_group_component} /// {@template multiplier_sprite_group_component}
/// A [SpriteGroupComponent] for the multiplier over the board. /// A [SpriteGroupComponent] for the multiplier over the board.
/// {@endtemplate} /// {@endtemplate}
@ -95,11 +117,13 @@ class MultiplierSpriteGroupComponent
required Vector2 position, required Vector2 position,
required String onAssetPath, required String onAssetPath,
required String offAssetPath, required String offAssetPath,
required double rotation,
}) : _onAssetPath = onAssetPath, }) : _onAssetPath = onAssetPath,
_offAssetPath = offAssetPath, _offAssetPath = offAssetPath,
super( super(
anchor: Anchor.center, anchor: Anchor.center,
position: position, position: position,
angle: rotation,
); );
final String _onAssetPath; final String _onAssetPath;

@ -8,16 +8,16 @@ class MultipliersGame extends BallGame with KeyboardEvents {
MultipliersGame() MultipliersGame()
: super( : super(
imagesFileNames: [ imagesFileNames: [
Assets.images.multiplier.x2.active.keyName, Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.inactive.keyName, Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.active.keyName, Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.inactive.keyName, Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.active.keyName, Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.inactive.keyName, Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.active.keyName, Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.inactive.keyName, Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.active.keyName, Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.inactive.keyName, Assets.images.multiplier.x6.dimmed.keyName,
], ],
); );
@ -41,23 +41,23 @@ class MultipliersGame extends BallGame with KeyboardEvents {
camera.followVector2(Vector2.zero()); camera.followVector2(Vector2.zero());
x2 = Multiplier( x2 = Multiplier(
value: 2, value: MultiplierValue.x2,
position: Vector2(-20, 0), position: Vector2(-20, 0),
); );
x3 = Multiplier( x3 = Multiplier(
value: 3, value: MultiplierValue.x3,
position: Vector2(20, -5), position: Vector2(20, -5),
); );
x4 = Multiplier( x4 = Multiplier(
value: 4, value: MultiplierValue.x4,
position: Vector2(0, -15), position: Vector2(0, -15),
); );
x5 = Multiplier( x5 = Multiplier(
value: 5, value: MultiplierValue.x5,
position: Vector2(-10, -25), position: Vector2(-10, -25),
); );
x6 = Multiplier( x6 = Multiplier(
value: 6, value: MultiplierValue.x6,
position: Vector2(10, -35), position: Vector2(10, -35),
); );

@ -11,16 +11,16 @@ void main() {
group('MultiplierSpriteGroupComponent', () { group('MultiplierSpriteGroupComponent', () {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.multiplier.x2.active.keyName, Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.inactive.keyName, Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.active.keyName, Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.inactive.keyName, Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.active.keyName, Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.inactive.keyName, Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.active.keyName, Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.inactive.keyName, Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.active.keyName, Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.inactive.keyName, Assets.images.multiplier.x6.dimmed.keyName,
]; ];
final flameTester = FlameTester(() => TestGame(assets)); final flameTester = FlameTester(() => TestGame(assets));

@ -11,16 +11,16 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [ final assets = [
Assets.images.multiplier.x2.active.keyName, Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.inactive.keyName, Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.active.keyName, Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.inactive.keyName, Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.active.keyName, Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.inactive.keyName, Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.active.keyName, Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.inactive.keyName, Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.active.keyName, Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.inactive.keyName, Assets.images.multiplier.x6.dimmed.keyName,
]; ];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); final flameTester = FlameTester(() => EmptyPinballTestGame(assets));

@ -56,16 +56,16 @@ void main() {
Assets.images.slingshot.lower.keyName, Assets.images.slingshot.lower.keyName,
Assets.images.dino.dinoLandTop.keyName, Assets.images.dino.dinoLandTop.keyName,
Assets.images.dino.dinoLandBottom.keyName, Assets.images.dino.dinoLandBottom.keyName,
Assets.images.multiplier.x2.active.keyName, Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.inactive.keyName, Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.active.keyName, Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.inactive.keyName, Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.active.keyName, Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.inactive.keyName, Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.active.keyName, Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.inactive.keyName, Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.active.keyName, Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.inactive.keyName, Assets.images.multiplier.x6.dimmed.keyName,
]; ];
final flameTester = FlameTester(() => PinballTestGame(assets)); final flameTester = FlameTester(() => PinballTestGame(assets));
final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets)); final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets));

Loading…
Cancel
Save