refactor: make arrow accesible

pull/207/head
RuiAlonso 3 years ago
parent c4b4cc672d
commit fa783116cf

@ -8,6 +8,51 @@ import 'package:pinball_components/gen/assets.gen.dart';
import 'package:pinball_components/pinball_components.dart' hide Assets; import 'package:pinball_components/pinball_components.dart' hide Assets;
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
/// Indicates the state of the arrow on the [SpaceshipRamp].
enum SpaceshipRampArrowSpriteState {
/// Arrow with no dashes lit up.
inactive,
/// Arrow with 1 dash lit up.
active1,
/// Arrow with 2 dashes lit up.
active2,
/// Arrow with 3 dashes lit up.
active3,
/// Arrow with 4 dashes lit up.
active4,
/// Arrow with all 5 dashes lit up.
active5,
}
extension on SpaceshipRampArrowSpriteState {
String get path {
switch (this) {
case SpaceshipRampArrowSpriteState.inactive:
return Assets.images.spaceship.ramp.arrow.inactive.keyName;
case SpaceshipRampArrowSpriteState.active1:
return Assets.images.spaceship.ramp.arrow.oneActive.keyName;
case SpaceshipRampArrowSpriteState.active2:
return Assets.images.spaceship.ramp.arrow.twoActive.keyName;
case SpaceshipRampArrowSpriteState.active3:
return Assets.images.spaceship.ramp.arrow.threeActive.keyName;
case SpaceshipRampArrowSpriteState.active4:
return Assets.images.spaceship.ramp.arrow.fourActive.keyName;
case SpaceshipRampArrowSpriteState.active5:
return Assets.images.spaceship.ramp.arrow.fiveActive.keyName;
}
}
SpaceshipRampArrowSpriteState get next {
return SpaceshipRampArrowSpriteState
.values[(index + 1) % SpaceshipRampArrowSpriteState.values.length];
}
}
/// {@template spaceship_ramp} /// {@template spaceship_ramp}
/// A [Blueprint] which creates the ramp leading into the [Spaceship]. /// A [Blueprint] which creates the ramp leading into the [Spaceship].
/// {@endtemplate} /// {@endtemplate}
@ -15,6 +60,14 @@ class SpaceshipRamp extends Forge2DBlueprint {
/// {@macro spaceship_ramp} /// {@macro spaceship_ramp}
SpaceshipRamp(); SpaceshipRamp();
/// [SpriteGroupComponent] representing the arrow that lights up.
late final SpaceshipRampArrowSpriteComponent spaceshipRampArrow;
/// Forwards the sprite to the next [SpaceshipRampArrowSpriteState].
///
/// If the current state is the last one it cycles back to the initial state.
void progress() => spaceshipRampArrow.progress();
@override @override
void build(_) { void build(_) {
addAllContactCallback([ addAllContactCallback([
@ -37,6 +90,8 @@ class SpaceshipRamp extends Forge2DBlueprint {
final spaceshipRamp = _SpaceshipRampBackground(); final spaceshipRamp = _SpaceshipRampBackground();
spaceshipRampArrow = SpaceshipRampArrowSpriteComponent();
final spaceshipRampBoardOpeningSprite = final spaceshipRampBoardOpeningSprite =
_SpaceshipRampBoardOpeningSpriteComponent() _SpaceshipRampBoardOpeningSpriteComponent()
..position = Vector2(3.4, -39.5); ..position = Vector2(3.4, -39.5);
@ -52,6 +107,7 @@ class SpaceshipRamp extends Forge2DBlueprint {
baseRight, baseRight,
_SpaceshipRampBackgroundRailingSpriteComponent(), _SpaceshipRampBackgroundRailingSpriteComponent(),
spaceshipRamp, spaceshipRamp,
spaceshipRampArrow,
spaceshipRampForegroundRailing, spaceshipRampForegroundRailing,
]); ]);
} }
@ -64,7 +120,6 @@ class _SpaceshipRampBackground extends BodyComponent
priority: RenderPriority.spaceshipRamp, priority: RenderPriority.spaceshipRamp,
children: [ children: [
_SpaceshipRampBackgroundRampSpriteComponent(), _SpaceshipRampBackgroundRampSpriteComponent(),
_SpaceshipRampArrowSpriteComponent(),
], ],
) { ) {
layer = Layer.spaceshipEntranceRamp; layer = Layer.spaceshipEntranceRamp;
@ -156,55 +211,24 @@ class _SpaceshipRampBackgroundRampSpriteComponent extends SpriteComponent
} }
} }
/// Indicates the state of the arrow on the [SpaceshipRamp]. /// {@template spaceship_ramp_arrow_sprite_component}
enum SpaceshipRampArrowSpriteState { /// An arrow inside [SpaceshipRamp].
/// Arrow with no dashes lit up. ///
inactive, /// Lights up a each dash whenever a [Ball] gets into [SpaceshipRamp].
/// {@endtemplate}
/// Arrow with 1 dash lit up. class SpaceshipRampArrowSpriteComponent
active1,
/// Arrow with 2 dashes lit up.
active2,
/// Arrow with 3 dashes lit up.
active3,
/// Arrow with 4 dashes lit up.
active4,
/// Arrow with all 5 dashes lit up.
active5,
}
extension on SpaceshipRampArrowSpriteState {
String get path {
switch (this) {
case SpaceshipRampArrowSpriteState.inactive:
return Assets.images.spaceship.ramp.arrow.inactive.keyName;
case SpaceshipRampArrowSpriteState.active1:
return Assets.images.spaceship.ramp.arrow.oneActive.keyName;
case SpaceshipRampArrowSpriteState.active2:
return Assets.images.spaceship.ramp.arrow.twoActive.keyName;
case SpaceshipRampArrowSpriteState.active3:
return Assets.images.spaceship.ramp.arrow.threeActive.keyName;
case SpaceshipRampArrowSpriteState.active4:
return Assets.images.spaceship.ramp.arrow.fourActive.keyName;
case SpaceshipRampArrowSpriteState.active5:
return Assets.images.spaceship.ramp.arrow.fiveActive.keyName;
}
}
}
class _SpaceshipRampArrowSpriteComponent
extends SpriteGroupComponent<SpaceshipRampArrowSpriteState> extends SpriteGroupComponent<SpaceshipRampArrowSpriteState>
with HasGameRef { with HasGameRef {
_SpaceshipRampArrowSpriteComponent() /// {@macro spaceship_ramp_arrow_sprite_component}
SpaceshipRampArrowSpriteComponent()
: super( : super(
position: Vector2(-3.9, -56.5), position: Vector2(-3.9, -56.5),
priority: RenderPriority.spaceshipRampBackgroundRailing, priority: RenderPriority.spaceshipRampBackgroundRailing,
); );
/// Changes arrow image to the next [Sprite].
void progress() => current = current?.next;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -297,6 +321,11 @@ class _SpaceshipRampForegroundRailing extends BodyComponent
class _SpaceshipRampForegroundRailingSpriteComponent extends SpriteComponent class _SpaceshipRampForegroundRailingSpriteComponent extends SpriteComponent
with HasGameRef { with HasGameRef {
_SpaceshipRampForegroundRailingSpriteComponent()
: super(
position: Vector2(-12.3, -52.5),
);
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -306,7 +335,6 @@ class _SpaceshipRampForegroundRailingSpriteComponent extends SpriteComponent
this.sprite = sprite; this.sprite = sprite;
size = sprite.originalSize / 10; size = sprite.originalSize / 10;
anchor = Anchor.center; anchor = Anchor.center;
position = Vector2(-12.3, -52.5);
} }
} }

Loading…
Cancel
Save