From fefeb245d3bcd724e40acd97e02916f87eb717e7 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Tue, 5 Apr 2022 15:35:56 -0500 Subject: [PATCH] test: slingshot --- .../lib/src/components/slingshot.dart | 18 ++-- .../test/src/components/golden/slingshots.png | Bin 0 -> 49944 bytes .../test/src/components/slingshot_test.dart | 97 ++++++++++++++++++ 3 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 packages/pinball_components/test/src/components/golden/slingshots.png create mode 100644 packages/pinball_components/test/src/components/slingshot_test.dart diff --git a/packages/pinball_components/lib/src/components/slingshot.dart b/packages/pinball_components/lib/src/components/slingshot.dart index 52bcf318..0a4f5cae 100644 --- a/packages/pinball_components/lib/src/components/slingshot.dart +++ b/packages/pinball_components/lib/src/components/slingshot.dart @@ -17,16 +17,19 @@ class Slingshots extends Forge2DBlueprint { angle: -1.5 * (math.pi / 180), spritePath: Assets.images.slingshot.leftUpper.keyName, )..initialPosition = Vector2(-29, 1.5); + final leftLowerSlingshot = Slingshot( length: 3.54, angle: -29.1 * (math.pi / 180), spritePath: Assets.images.slingshot.leftLower.keyName, )..initialPosition = Vector2(-31, -6.2); + final rightUpperSlingshot = Slingshot( length: 5.64, angle: 1 * (math.pi / 180), spritePath: Assets.images.slingshot.rightUpper.keyName, )..initialPosition = Vector2(22.3, 1.58); + final rightLowerSlingshot = Slingshot( length: 3.46, angle: 26.8 * (math.pi / 180), @@ -68,12 +71,12 @@ class Slingshot extends BodyComponent with InitialPosition { final topCircleShape = CircleShape()..radius = circleRadius; topCircleShape.position.setValues(0, _length / 2); - final topCircleFixtureDef = FixtureDef(topCircleShape); + final topCircleFixtureDef = FixtureDef(topCircleShape)..friction = 0; fixturesDef.add(topCircleFixtureDef); final bottomCircleShape = CircleShape()..radius = circleRadius; bottomCircleShape.position.setValues(0, -_length / 2); - final bottomCircleFixtureDef = FixtureDef(bottomCircleShape); + final bottomCircleFixtureDef = FixtureDef(bottomCircleShape)..friction = 0; fixturesDef.add(bottomCircleFixtureDef); final leftEdgeShape = EdgeShape() @@ -81,17 +84,20 @@ class Slingshot extends BodyComponent with InitialPosition { Vector2(circleRadius, _length / 2), Vector2(circleRadius, -_length / 2), ); - final leftEdgeShapeFixtureDef = FixtureDef(leftEdgeShape)..restitution = 5; + final leftEdgeShapeFixtureDef = FixtureDef(leftEdgeShape) + ..friction = 0 + ..restitution = 5; fixturesDef.add(leftEdgeShapeFixtureDef); - final righttEdgeShape = EdgeShape() + final rightEdgeShape = EdgeShape() ..set( Vector2(-circleRadius, _length / 2), Vector2(-circleRadius, -_length / 2), ); - final righttEdgeShapeFixtureDef = FixtureDef(righttEdgeShape) + final rightEdgeShapeFixtureDef = FixtureDef(rightEdgeShape) + ..friction = 0 ..restitution = 5; - fixturesDef.add(righttEdgeShapeFixtureDef); + fixturesDef.add(rightEdgeShapeFixtureDef); return fixturesDef; } diff --git a/packages/pinball_components/test/src/components/golden/slingshots.png b/packages/pinball_components/test/src/components/golden/slingshots.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4ada7b6a610b9dce69f08eabff4dc68bc8c29c GIT binary patch literal 49944 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, + // matchesGoldenFile('golden/slingshots.png'), + // ); + // }, + ); + + flameTester.test( + 'loads correctly', + (game) async { + final slingshot = Slingshot( + length: length, + angle: angle, + spritePath: spritePath, + ); + await game.ensureAdd(slingshot); + + expect(game.contains(slingshot), isTrue); + }, + ); + + flameTester.test( + 'body is static', + (game) async { + final slingshot = Slingshot( + length: length, + angle: angle, + spritePath: spritePath, + ); + await game.ensureAdd(slingshot); + + expect(slingshot.body.bodyType, equals(BodyType.static)); + }, + ); + + flameTester.test( + 'has restitution', + (game) async { + final slingshot = Slingshot( + length: length, + angle: angle, + spritePath: spritePath, + ); + await game.ensureAdd(slingshot); + + final totalRestitution = slingshot.body.fixtures.fold( + 0, + (total, fixture) => total + fixture.restitution, + ); + expect(totalRestitution, greaterThan(0)); + }, + ); + + flameTester.test( + 'has no friction', + (game) async { + final slingshot = Slingshot( + length: length, + angle: angle, + spritePath: spritePath, + ); + await game.ensureAdd(slingshot); + + final totalFriction = slingshot.body.fixtures.fold( + 0, + (total, fixture) => total + fixture.friction, + ); + expect(totalFriction, equals(0)); + }, + ); + }); +}