feat: sparky bumpers game logic (#154)

* feat: added event for sparky bumpers hit

* test: test sparky bumper bloc event

* refactor: added sparky bumpers actives to GameState

* refactor: removed active sparky bumper from game bloc logic

* refactor: moved sparky bumpers logic to SparkyBumperController

* test: tests for SparkyBumperController

* chore: removed unused import

* refactor: changed sparky fire zone

* refactor: changed sparky fire zone

* chore: analysis errors

* chore: analysis error

* Update test/game/bloc/game_bloc_test.dart

Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com>

* Update lib/game/components/sparky_fire_zone.dart

Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com>

* chore: formatting file

Co-authored-by: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com>
pull/164/head
Rui Miguel Alonso 4 years ago committed by GitHub
parent 4744f552f0
commit fdc3039f72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,4 +5,5 @@ export 'controlled_flipper.dart';
export 'flutter_forest.dart';
export 'plunger.dart';
export 'score_points.dart';
export 'sparky_fire_zone.dart';
export 'wall.dart';

@ -0,0 +1,44 @@
// ignore_for_file: avoid_renaming_method_parameters
import 'package:flame/components.dart';
import 'package:pinball/flame/flame.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart';
// TODO(ruimiguel): create and add SparkyFireZone component here in other PR.
// TODO(ruimiguel): make private and remove ignore once SparkyFireZone is done
// ignore: public_member_api_docs
class ControlledSparkyBumper extends SparkyBumper
with Controls<_SparkyBumperController> {
// TODO(ruimiguel): make private and remove ignore once SparkyFireZone is done
// ignore: public_member_api_docs
ControlledSparkyBumper() : super.a() {
controller = _SparkyBumperController(this);
}
}
/// {@template sparky_bumper_controller}
/// Controls a [SparkyBumper].
/// {@endtemplate}
class _SparkyBumperController extends ComponentController<SparkyBumper>
with HasGameRef<PinballGame> {
/// {@macro sparky_bumper_controller}
_SparkyBumperController(ControlledSparkyBumper controlledSparkyBumper)
: super(controlledSparkyBumper);
/// Flag for activated state of the [SparkyBumper].
///
/// Used to toggle [SparkyBumper]s' state between activated and deactivated.
bool isActivated = false;
/// Registers when a [SparkyBumper] is hit by a [Ball].
void hit() {
if (isActivated) {
component.deactivate();
} else {
component.activate();
}
isActivated = !isActivated;
}
}

@ -3,6 +3,8 @@
/// FlutterGen
/// *****************************************************
// ignore_for_file: directives_ordering,unnecessary_import
import 'package:flutter/widgets.dart';
class $AssetsImagesGen {
@ -15,6 +17,7 @@ class $AssetsImagesGen {
class $AssetsImagesComponentsGen {
const $AssetsImagesComponentsGen();
/// File path: assets/images/components/background.png
AssetGenImage get background =>
const AssetGenImage('assets/images/components/background.png');

@ -0,0 +1,45 @@
// ignore_for_file: cascade_invocations
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball/game/game.dart';
import '../../helpers/helpers.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballGameTest.new);
group('SparkyFireZone', () {
group('bumpers', () {
late ControlledSparkyBumper controlledSparkyBumper;
flameTester.testGameWidget(
'activate when deactivated bumper is hit',
setUp: (game, tester) async {
controlledSparkyBumper = ControlledSparkyBumper();
await game.ensureAdd(controlledSparkyBumper);
controlledSparkyBumper.controller.hit();
},
verify: (game, tester) async {
expect(controlledSparkyBumper.controller.isActivated, isTrue);
},
);
flameTester.testGameWidget(
'deactivate when activated bumper is hit',
setUp: (game, tester) async {
controlledSparkyBumper = ControlledSparkyBumper();
await game.ensureAdd(controlledSparkyBumper);
controlledSparkyBumper.controller.hit();
controlledSparkyBumper.controller.hit();
},
verify: (game, tester) async {
expect(controlledSparkyBumper.controller.isActivated, isFalse);
},
);
});
});
}
Loading…
Cancel
Save