refactor: removed ephemeral state

pull/119/head
alestiago 4 years ago
parent 6f365ae16a
commit 92723a2843

@ -37,9 +37,6 @@ class FlutterForest extends Component
theme: gameRef.theme, theme: gameRef.theme,
)..initialPosition = Vector2(17.2, 52.7), )..initialPosition = Vector2(17.2, 52.7),
); );
children.whereType<DashNestBumper>().forEach(
(bumper) => bumper.deactivate,
);
} }
@override @override
@ -69,7 +66,7 @@ class FlutterForest extends Component
/// {@endtemplate} /// {@endtemplate}
@visibleForTesting @visibleForTesting
abstract class DashNestBumper extends BodyComponent<PinballGame> abstract class DashNestBumper extends BodyComponent<PinballGame>
with ScorePoints, InitialPosition { with ScorePoints, InitialPosition, BlocComponent<GameBloc, GameState> {
/// {@macro dash_nest_bumper} /// {@macro dash_nest_bumper}
DashNestBumper({ DashNestBumper({
required this.id, required this.id,
@ -99,25 +96,35 @@ abstract class DashNestBumper extends BodyComponent<PinballGame>
_activeSprite = await gameRef.loadSprite(_activeAssetPath); _activeSprite = await gameRef.loadSprite(_activeAssetPath);
} }
bool _active = false;
/// Whether this [DashNestBumper] is active.
// TODO(alestiago): Question if we want this ephemeral state to be stores as
// so.
bool get active => _active;
/// Activates the [DashNestBumper]. /// Activates the [DashNestBumper].
void activate() { void activate() {
_active = true;
_spriteComponent.sprite = _activeSprite; _spriteComponent.sprite = _activeSprite;
} }
/// Deactivates the [DashNestBumper]. /// Deactivates the [DashNestBumper].
void deactivate() { void deactivate() {
_active = false;
_spriteComponent.sprite = _inactiveSprite; _spriteComponent.sprite = _inactiveSprite;
} }
@override
bool listenWhen(GameState? previousState, GameState newState) {
final wasActive = previousState?.activatedDashNests.contains(id) ?? false;
final isActive = newState.activatedDashNests.contains(id);
return wasActive != isActive;
}
@override
void onNewState(GameState state) {
super.onNewState(state);
if (state.activatedDashNests.contains(id)) {
activate();
} else {
deactivate();
}
}
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
@ -134,12 +141,9 @@ class DashNestBumperBallContactCallback
extends ContactCallback<DashNestBumper, Ball> { extends ContactCallback<DashNestBumper, Ball> {
@override @override
void begin(DashNestBumper dashNestBumper, Ball _, Contact __) { void begin(DashNestBumper dashNestBumper, Ball _, Contact __) {
if (!dashNestBumper.active) {
dashNestBumper.gameRef.read<GameBloc>().add( dashNestBumper.gameRef.read<GameBloc>().add(
DashNestActivated(dashNestBumper.id), DashNestActivated(dashNestBumper.id),
); );
dashNestBumper.activate();
}
} }
} }

Loading…
Cancel
Save