From bc53fb64d912cf1d158d2a196008949a5de1984f Mon Sep 17 00:00:00 2001 From: Allison Ryan <77211884+allisonryan0002@users.noreply.github.com> Date: Tue, 12 Apr 2022 13:36:36 -0500 Subject: [PATCH] refactor: ball priority (#183) * refactor: ball priority * refactor: ramp opening and score text --- lib/game/components/controlled_ball.dart | 3 +++ .../lib/src/components/ball.dart | 15 +++++++++++++++ .../lib/src/components/launch_ramp.dart | 9 +++------ .../lib/src/components/ramp_opening.dart | 6 +++--- .../lib/src/components/score_text.dart | 2 +- .../lib/src/components/spaceship.dart | 14 +++++--------- .../lib/src/components/spaceship_rail.dart | 12 ++++-------- .../lib/src/components/spaceship_ramp.dart | 12 ++++-------- .../stories/launch_ramp/launch_ramp_game.dart | 2 +- .../spaceship_rail/spaceship_rail_game.dart | 2 +- .../spaceship_ramp/spaceship_ramp_game.dart | 2 +- .../test/src/components/ramp_opening_test.dart | 16 +++++++++++++--- 12 files changed, 54 insertions(+), 41 deletions(-) diff --git a/lib/game/components/controlled_ball.dart b/lib/game/components/controlled_ball.dart index d48ebe66..7a94f96b 100644 --- a/lib/game/components/controlled_ball.dart +++ b/lib/game/components/controlled_ball.dart @@ -18,6 +18,7 @@ class ControlledBall extends Ball with Controls { required PinballTheme theme, }) : super(baseColor: theme.characterTheme.ballColor) { controller = BallController(this); + priority = Ball.launchRampPriority; } /// {@template bonus_ball} @@ -29,11 +30,13 @@ class ControlledBall extends Ball with Controls { required PinballTheme theme, }) : super(baseColor: theme.characterTheme.ballColor) { controller = BallController(this); + priority = Ball.boardPriority; } /// [Ball] used in [DebugPinballGame]. ControlledBall.debug() : super(baseColor: const Color(0xFFFF0000)) { controller = DebugBallController(this); + priority = Ball.boardPriority; } } diff --git a/packages/pinball_components/lib/src/components/ball.dart b/packages/pinball_components/lib/src/components/ball.dart index 1261791d..71719a0e 100644 --- a/packages/pinball_components/lib/src/components/ball.dart +++ b/packages/pinball_components/lib/src/components/ball.dart @@ -22,6 +22,21 @@ class Ball extends BodyComponent layer = Layer.board; } + /// Render priority for the [Ball] while it's on the board. + static const int boardPriority = 0; + + /// Render priority for the [Ball] while it's on the [SpaceshipRamp]. + static const int spaceshipRampPriority = 4; + + /// Render priority for the [Ball] while it's on the [Spaceship]. + static const int spaceshipPriority = 4; + + /// Render priority for the [Ball] while it's on the [SpaceshipRail]. + static const int spaceshipRailPriority = 2; + + /// Render priority for the [Ball] while it's on the [LaunchRamp]. + static const int launchRampPriority = 0; + /// The size of the [Ball]. static final Vector2 size = Vector2.all(4.13); diff --git a/packages/pinball_components/lib/src/components/launch_ramp.dart b/packages/pinball_components/lib/src/components/launch_ramp.dart index deaa3941..02ac742a 100644 --- a/packages/pinball_components/lib/src/components/launch_ramp.dart +++ b/packages/pinball_components/lib/src/components/launch_ramp.dart @@ -11,9 +11,6 @@ import 'package:pinball_components/pinball_components.dart'; /// [_LaunchRampForegroundRailing]. /// {@endtemplate} class LaunchRamp extends Forge2DBlueprint { - /// Base priority for [Ball] while inside [LaunchRamp]. - static const ballPriorityInsideRamp = 0; - @override void build(_) { addAllContactCallback([ @@ -45,7 +42,7 @@ class _LaunchRampBase extends BodyComponent with InitialPosition, Layered { /// {@macro launch_ramp_base} _LaunchRampBase() : super( - priority: LaunchRamp.ballPriorityInsideRamp - 1, + priority: Ball.launchRampPriority - 1, ) { layer = Layer.launcher; } @@ -151,7 +148,7 @@ class _LaunchRampForegroundRailing extends BodyComponent /// {@macro launch_ramp_foreground_railing} _LaunchRampForegroundRailing() : super( - priority: LaunchRamp.ballPriorityInsideRamp + 1, + priority: Ball.launchRampPriority + 1, ) { layer = Layer.launcher; } @@ -236,7 +233,7 @@ class _LaunchRampExit extends RampOpening { super( insideLayer: Layer.launcher, orientation: RampOrientation.down, - insidePriority: LaunchRamp.ballPriorityInsideRamp, + insidePriority: Ball.launchRampPriority, ); final double _rotation; diff --git a/packages/pinball_components/lib/src/components/ramp_opening.dart b/packages/pinball_components/lib/src/components/ramp_opening.dart index cb6066f2..a76c0d9e 100644 --- a/packages/pinball_components/lib/src/components/ramp_opening.dart +++ b/packages/pinball_components/lib/src/components/ramp_opening.dart @@ -29,13 +29,13 @@ abstract class RampOpening extends BodyComponent with InitialPosition, Layered { RampOpening({ required Layer insideLayer, Layer? outsideLayer, - int? insidePriority, + required int insidePriority, int? outsidePriority, required this.orientation, }) : _insideLayer = insideLayer, _outsideLayer = outsideLayer ?? Layer.board, - _insidePriority = insidePriority ?? 0, - _outsidePriority = outsidePriority ?? 0 { + _insidePriority = insidePriority, + _outsidePriority = outsidePriority ?? Ball.boardPriority { layer = Layer.opening; } final Layer _insideLayer; diff --git a/packages/pinball_components/lib/src/components/score_text.dart b/packages/pinball_components/lib/src/components/score_text.dart index 01b26385..6fe5f6a3 100644 --- a/packages/pinball_components/lib/src/components/score_text.dart +++ b/packages/pinball_components/lib/src/components/score_text.dart @@ -18,7 +18,7 @@ class ScoreText extends TextComponent { text: text, position: position, anchor: Anchor.center, - priority: 100, + priority: Ball.spaceshipRampPriority + 1, ); late final Effect _effect; diff --git a/packages/pinball_components/lib/src/components/spaceship.dart b/packages/pinball_components/lib/src/components/spaceship.dart index 6643a53a..2cf37a13 100644 --- a/packages/pinball_components/lib/src/components/spaceship.dart +++ b/packages/pinball_components/lib/src/components/spaceship.dart @@ -21,9 +21,6 @@ class Spaceship extends Forge2DBlueprint { /// The [position] where the elements will be created final Vector2 position; - /// Base priority for wall while be on spaceship. - static const ballPriorityWhenOnSpaceship = 4; - @override void build(_) { addAllContactCallback([ @@ -37,7 +34,7 @@ class Spaceship extends Forge2DBlueprint { AndroidHead()..initialPosition = position, SpaceshipHole( outsideLayer: Layer.spaceshipExitRail, - outsidePriority: SpaceshipRail.ballPriorityInsideRail, + outsidePriority: Ball.spaceshipRailPriority, )..initialPosition = position - Vector2(5.2, 4.8), SpaceshipHole()..initialPosition = position - Vector2(-7.2, 0.8), SpaceshipWall()..initialPosition = position, @@ -50,8 +47,7 @@ class Spaceship extends Forge2DBlueprint { /// {@endtemplate} class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_saucer} - SpaceshipSaucer() - : super(priority: Spaceship.ballPriorityWhenOnSpaceship - 1) { + SpaceshipSaucer() : super(priority: Ball.spaceshipPriority - 1) { layer = Layer.spaceship; } @@ -95,7 +91,7 @@ class SpaceshipSaucer extends BodyComponent with InitialPosition, Layered { /// {@endtemplate} class AndroidHead extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_bridge} - AndroidHead() : super(priority: Spaceship.ballPriorityWhenOnSpaceship + 1) { + AndroidHead() : super(priority: Ball.spaceshipPriority + 1) { layer = Layer.spaceship; } @@ -157,7 +153,7 @@ class SpaceshipEntrance extends RampOpening { : super( insideLayer: Layer.spaceship, orientation: RampOrientation.up, - insidePriority: Spaceship.ballPriorityWhenOnSpaceship, + insidePriority: Ball.spaceshipPriority, ) { layer = Layer.spaceship; } @@ -242,7 +238,7 @@ class _SpaceshipWallShape extends ChainShape { /// {@endtemplate} class SpaceshipWall extends BodyComponent with InitialPosition, Layered { /// {@macro spaceship_wall} - SpaceshipWall() : super(priority: Spaceship.ballPriorityWhenOnSpaceship + 1) { + SpaceshipWall() : super(priority: Ball.spaceshipPriority + 1) { layer = Layer.spaceship; } diff --git a/packages/pinball_components/lib/src/components/spaceship_rail.dart b/packages/pinball_components/lib/src/components/spaceship_rail.dart index b63e401a..45c769a1 100644 --- a/packages/pinball_components/lib/src/components/spaceship_rail.dart +++ b/packages/pinball_components/lib/src/components/spaceship_rail.dart @@ -14,9 +14,6 @@ class SpaceshipRail extends Forge2DBlueprint { /// {@macro spaceship_rail} SpaceshipRail(); - /// Base priority for [Ball] while inside [SpaceshipRail]. - static const ballPriorityInsideRail = 2; - @override void build(_) { addAllContactCallback([ @@ -45,7 +42,7 @@ class SpaceshipRail extends Forge2DBlueprint { class _SpaceshipRailRamp extends BodyComponent with InitialPosition, Layered { _SpaceshipRailRamp() : super( - priority: SpaceshipRail.ballPriorityInsideRail - 1, + priority: Ball.spaceshipRailPriority - 1, ) { layer = Layer.spaceshipExitRail; } @@ -161,8 +158,7 @@ class _SpaceshipRailRampSpriteComponent extends SpriteComponent } class _SpaceshipRailForeground extends SpriteComponent with HasGameRef { - _SpaceshipRailForeground() - : super(priority: SpaceshipRail.ballPriorityInsideRail + 1); + _SpaceshipRailForeground() : super(priority: Ball.spaceshipRailPriority + 1); @override Future onLoad() async { @@ -182,7 +178,7 @@ class _SpaceshipRailForeground extends SpriteComponent with HasGameRef { class _SpaceshipRailBase extends BodyComponent with InitialPosition, Layered { _SpaceshipRailBase({required this.radius}) : super( - priority: SpaceshipRail.ballPriorityInsideRail + 1, + priority: Ball.spaceshipRailPriority + 1, ) { renderBody = false; layer = Layer.board; @@ -214,7 +210,7 @@ class SpaceshipRailExit extends RampOpening { : super( orientation: RampOrientation.down, insideLayer: Layer.spaceshipExitRail, - insidePriority: SpaceshipRail.ballPriorityInsideRail, + insidePriority: Ball.spaceshipRailPriority, ) { renderBody = false; layer = Layer.spaceshipExitRail; diff --git a/packages/pinball_components/lib/src/components/spaceship_ramp.dart b/packages/pinball_components/lib/src/components/spaceship_ramp.dart index 1085f83b..1e0125b6 100644 --- a/packages/pinball_components/lib/src/components/spaceship_ramp.dart +++ b/packages/pinball_components/lib/src/components/spaceship_ramp.dart @@ -14,9 +14,6 @@ class SpaceshipRamp extends Forge2DBlueprint { /// {@macro spaceship_ramp} SpaceshipRamp(); - /// Base priority for the [Ball] while inside the ramp. - static const int ballPriorityInsideRamp = 4; - @override void build(_) { addAllContactCallback([ @@ -32,7 +29,7 @@ class SpaceshipRamp extends Forge2DBlueprint { ..layer = Layer.opening; final leftOpening = _SpaceshipRampOpening( outsideLayer: Layer.spaceship, - outsidePriority: Spaceship.ballPriorityWhenOnSpaceship, + outsidePriority: Ball.spaceshipPriority, rotation: math.pi, ) ..initialPosition = Vector2(-13.7, 18.6) @@ -61,8 +58,7 @@ class SpaceshipRamp extends Forge2DBlueprint { class _SpaceshipRampBackground extends BodyComponent with InitialPosition, Layered { - _SpaceshipRampBackground() - : super(priority: SpaceshipRamp.ballPriorityInsideRamp - 1) { + _SpaceshipRampBackground() : super(priority: Ball.spaceshipRampPriority - 1) { layer = Layer.spaceshipEntranceRamp; } @@ -174,7 +170,7 @@ class _SpaceshipRampBoardOpeningSpriteComponent extends SpriteComponent class _SpaceshipRampForegroundRailing extends BodyComponent with InitialPosition, Layered { _SpaceshipRampForegroundRailing() - : super(priority: SpaceshipRamp.ballPriorityInsideRamp + 1) { + : super(priority: Ball.spaceshipRampPriority + 1) { layer = Layer.spaceshipEntranceRamp; } @@ -294,7 +290,7 @@ class _SpaceshipRampOpening extends RampOpening { insideLayer: Layer.spaceshipEntranceRamp, outsideLayer: outsideLayer, orientation: RampOrientation.down, - insidePriority: SpaceshipRamp.ballPriorityInsideRamp, + insidePriority: Ball.spaceshipRampPriority, outsidePriority: outsidePriority, ) { renderBody = false; diff --git a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart index 5258de86..b3d23b7a 100644 --- a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart @@ -9,7 +9,7 @@ class LaunchRampGame extends BasicBallGame { LaunchRampGame() : super( color: Colors.blue, - ballPriority: LaunchRamp.ballPriorityInsideRamp, + ballPriority: Ball.launchRampPriority, ballLayer: Layer.launcher, ); diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart b/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart index cef04304..f4da4786 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/spaceship_rail/spaceship_rail_game.dart @@ -9,7 +9,7 @@ class SpaceshipRailGame extends BasicBallGame { SpaceshipRailGame() : super( color: Colors.blue, - ballPriority: SpaceshipRail.ballPriorityInsideRail, + ballPriority: Ball.spaceshipRailPriority, ballLayer: Layer.spaceshipExitRail, ); diff --git a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart index eddf4b81..2e6f6d56 100644 --- a/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/spaceship_ramp/spaceship_ramp_game.dart @@ -9,7 +9,7 @@ class SpaceshipRampGame extends BasicBallGame { SpaceshipRampGame() : super( color: Colors.blue, - ballPriority: SpaceshipRamp.ballPriorityInsideRamp, + ballPriority: Ball.spaceshipRampPriority, ballLayer: Layer.spaceshipEntranceRamp, ); diff --git a/packages/pinball_components/test/src/components/ramp_opening_test.dart b/packages/pinball_components/test/src/components/ramp_opening_test.dart index 46e56e3d..e79842bd 100644 --- a/packages/pinball_components/test/src/components/ramp_opening_test.dart +++ b/packages/pinball_components/test/src/components/ramp_opening_test.dart @@ -10,9 +10,11 @@ import '../../helpers/helpers.dart'; class TestRampOpening extends RampOpening { TestRampOpening({ required RampOrientation orientation, + required int insidePriority, required Layer pathwayLayer, }) : super( insideLayer: pathwayLayer, + insidePriority: insidePriority, orientation: orientation, ); @@ -34,16 +36,15 @@ class TestRampOpeningBallContactCallback void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); + const insidePriority = 1; group('RampOpening', () { - TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); - flameTester.test( 'loads correctly', (game) async { final ramp = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, ); await game.ready(); @@ -59,6 +60,7 @@ void main() { (game) async { final ramp = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, ); await game.ensureAdd(ramp); @@ -76,6 +78,7 @@ void main() { (game) async { final ramp = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: pathwayLayer, )..layer = openingLayer; await game.ensureAdd(ramp); @@ -89,6 +92,7 @@ void main() { (game) async { final ramp = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: pathwayLayer, )..layer = openingLayer; await game.ensureAdd(ramp); @@ -103,6 +107,7 @@ void main() { (game) async { final ramp = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: pathwayLayer, )..layer = openingLayer; await game.ensureAdd(ramp); @@ -124,6 +129,7 @@ void main() { final body = MockBody(); final area = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, ); final callback = TestRampOpeningBallContactCallback(); @@ -145,6 +151,7 @@ void main() { final body = MockBody(); final area = TestRampOpening( orientation: RampOrientation.up, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, ); final callback = TestRampOpeningBallContactCallback(); @@ -165,6 +172,7 @@ void main() { final body = MockBody(); final area = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, )..initialPosition = Vector2(0, 10); final callback = TestRampOpeningBallContactCallback(); @@ -189,6 +197,7 @@ void main() { final body = MockBody(); final area = TestRampOpening( orientation: RampOrientation.up, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, )..initialPosition = Vector2(0, 10); final callback = TestRampOpeningBallContactCallback(); @@ -213,6 +222,7 @@ void main() { final body = MockBody(); final area = TestRampOpening( orientation: RampOrientation.down, + insidePriority: insidePriority, pathwayLayer: Layer.spaceshipEntranceRamp, )..initialPosition = Vector2(0, 10); final callback = TestRampOpeningBallContactCallback();