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 'controlled_ball.dart';
export 'controlled_flipper.dart';
export 'controlled_multiplier.dart';
export 'controlled_multipliers.dart';
export 'controlled_plunger.dart';
export 'flutter_forest.dart';
export 'game_flow_controller.dart';

@ -16,26 +16,26 @@ class Multipliers extends Component
/// {@macro multipliers_group_component}
Multipliers()
: x2multiplier = Multiplier(
value: 2,
value: MultiplierValue.x2,
position: Vector2(-19.5, -2),
rotation: -15 * math.pi / 180,
),
x3multiplier = Multiplier(
value: 3,
value: MultiplierValue.x3,
position: Vector2(13, -9.5),
rotation: 15 * math.pi / 180,
),
x4multiplier = Multiplier(
value: 4,
value: MultiplierValue.x4,
position: Vector2(0, -21),
),
x5multiplier = Multiplier(
value: 5,
value: MultiplierValue.x5,
position: Vector2(-8.5, -28),
rotation: -3 * math.pi / 180,
),
x6multiplier = Multiplier(
value: 6,
value: MultiplierValue.x6,
position: Vector2(10, -31),
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.letter6.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.inactive.keyName),
images.load(components.Assets.images.multiplier.x3.active.keyName),
images.load(components.Assets.images.multiplier.x3.inactive.keyName),
images.load(components.Assets.images.multiplier.x4.active.keyName),
images.load(components.Assets.images.multiplier.x4.inactive.keyName),
images.load(components.Assets.images.multiplier.x5.active.keyName),
images.load(components.Assets.images.multiplier.x5.inactive.keyName),
images.load(components.Assets.images.multiplier.x6.active.keyName),
images.load(components.Assets.images.multiplier.x6.inactive.keyName),
images.load(components.Assets.images.multiplier.x2.lit.keyName),
images.load(components.Assets.images.multiplier.x2.dimmed.keyName),
images.load(components.Assets.images.multiplier.x3.lit.keyName),
images.load(components.Assets.images.multiplier.x3.dimmed.keyName),
images.load(components.Assets.images.multiplier.x4.lit.keyName),
images.load(components.Assets.images.multiplier.x4.dimmed.keyName),
images.load(components.Assets.images.multiplier.x5.lit.keyName),
images.load(components.Assets.images.multiplier.x5.dimmed.keyName),
images.load(components.Assets.images.multiplier.x6.lit.keyName),
images.load(components.Assets.images.multiplier.x6.dimmed.keyName),
images.load(dashTheme.leaderboardIcon.keyName),
images.load(sparkyTheme.leaderboardIcon.keyName),
images.load(androidTheme.leaderboardIcon.keyName),

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

@ -1,3 +1,5 @@
// ignore_for_file: public_member_api_docs
import 'package:flame/components.dart';
import 'package:flutter/material.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 {
/// {@macro multiplier}
Multiplier({
required int value,
required MultiplierValue value,
required Vector2 position,
double rotation = 0,
}) : assert(
2 <= value && value <= 6,
'multiplier value must be in range 2 <= value <= 6',
),
_value = value,
_position = position,
_rotation = rotation,
super();
final int _value;
final Vector2 _position;
final double _rotation;
late final MultiplierSpriteGroupComponent _sprite;
}) : _value = value,
_sprite = MultiplierSpriteGroupComponent(
position: position,
onAssetPath: value.onAssetPath,
offAssetPath: value.offAssetPath,
rotation: rotation,
);
final MultiplierValue _value;
final MultiplierSpriteGroupComponent _sprite;
/// Change current [Sprite] to active or inactive depending on applied
/// multiplier.
void toggle(int multiplier) {
if (multiplier == _value) {
if (_value.equalsTo(multiplier)) {
_sprite.current = MultiplierSpriteState.active;
} else {
_sprite.current = MultiplierSpriteState.inactive;
@ -38,43 +37,19 @@ class Multiplier extends Component {
@override
Future<void> onLoad() async {
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);
}
}
/// Available multiplier values.
enum MultiplierValue {
x2,
x3,
x4,
x5,
x6,
}
/// Indicates the current sprite state of the multiplier.
enum MultiplierSpriteState {
/// A lit up bumper.
@ -84,6 +59,53 @@ enum MultiplierSpriteState {
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}
/// A [SpriteGroupComponent] for the multiplier over the board.
/// {@endtemplate}
@ -95,11 +117,13 @@ class MultiplierSpriteGroupComponent
required Vector2 position,
required String onAssetPath,
required String offAssetPath,
required double rotation,
}) : _onAssetPath = onAssetPath,
_offAssetPath = offAssetPath,
super(
anchor: Anchor.center,
position: position,
angle: rotation,
);
final String _onAssetPath;

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

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

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

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

Loading…
Cancel
Save