From aac9ee2d5d4655ec988096702567ed9aae30566c Mon Sep 17 00:00:00 2001 From: alestiago Date: Fri, 29 Apr 2022 18:28:46 +0100 Subject: [PATCH] feat: adjusting game physics --- .../flutter_forest/flutter_forest.dart | 2 +- lib/game/pinball_game.dart | 2 +- .../android_bumper/android_bumper.dart | 17 +++++++----- .../dash_nest_bumper/dash_nest_bumper.dart | 20 +++++++++----- .../lib/src/components/dino_walls.dart | 8 +----- .../lib/src/components/flipper.dart | 2 +- .../lib/src/components/kicker.dart | 3 +-- .../lib/src/components/plunger.dart | 2 +- .../lib/src/components/slingshot.dart | 6 ++++- .../sparky_bumper/sparky_bumper.dart | 26 ++++++++++++------- 10 files changed, 51 insertions(+), 37 deletions(-) diff --git a/lib/game/components/flutter_forest/flutter_forest.dart b/lib/game/components/flutter_forest/flutter_forest.dart index d7447543..88e06f0f 100644 --- a/lib/game/components/flutter_forest/flutter_forest.dart +++ b/lib/game/components/flutter_forest/flutter_forest.dart @@ -35,7 +35,7 @@ class FlutterForest extends Component { children: [ ScoringBehavior(points: 20), ], - )..initialPosition = Vector2(23.3, -46.75), + )..initialPosition = Vector2(22.3, -46.75), DashAnimatronic()..position = Vector2(20, -66), FlutterForestBonusBehavior(), ], diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index a4b740fb..fe6bc228 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -24,7 +24,7 @@ class PinballGame extends Forge2DGame PinballGame({ required this.characterTheme, required this.audio, - }) { + }) : super(gravity: Vector2(0, 35)) { images.prefix = ''; controller = _GameBallsController(this); } diff --git a/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart b/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart index ad954975..c0fff945 100644 --- a/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart +++ b/packages/pinball_components/lib/src/components/android_bumper/android_bumper.dart @@ -5,6 +5,7 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/src/components/android_bumper/behaviors/behaviors.dart'; +import 'package:pinball_components/src/components/bumping_behavior.dart'; import 'package:pinball_flame/pinball_flame.dart'; export 'cubit/android_bumper_cubit.dart'; @@ -47,7 +48,10 @@ class AndroidBumper extends BodyComponent with InitialPosition { litAssetPath: Assets.images.androidBumper.a.lit.keyName, dimmedAssetPath: Assets.images.androidBumper.a.dimmed.keyName, bloc: AndroidBumperCubit(), - children: children, + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// {@macro android_bumper} @@ -59,7 +63,10 @@ class AndroidBumper extends BodyComponent with InitialPosition { litAssetPath: Assets.images.androidBumper.b.lit.keyName, dimmedAssetPath: Assets.images.androidBumper.b.dimmed.keyName, bloc: AndroidBumperCubit(), - children: children, + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// Creates an [AndroidBumper] without any children. @@ -95,15 +102,11 @@ class AndroidBumper extends BodyComponent with InitialPosition { majorRadius: _majorRadius, minorRadius: _minorRadius, )..rotate(1.29); - final fixtureDef = FixtureDef( - shape, - restitution: 4, - ); final bodyDef = BodyDef( position: initialPosition, ); - return world.createBody(bodyDef)..createFixture(fixtureDef); + return world.createBody(bodyDef)..createFixtureFromShape(shape); } } diff --git a/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart b/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart index 82ec0036..208936c8 100644 --- a/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart +++ b/packages/pinball_components/lib/src/components/dash_nest_bumper/dash_nest_bumper.dart @@ -4,6 +4,7 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/bumping_behavior.dart'; import 'package:pinball_components/src/components/dash_nest_bumper/behaviors/behaviors.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -47,8 +48,11 @@ class DashNestBumper extends BodyComponent with InitialPosition { activeAssetPath: Assets.images.dash.bumper.main.active.keyName, inactiveAssetPath: Assets.images.dash.bumper.main.inactive.keyName, spritePosition: Vector2(0, -0.3), - children: children, bloc: DashNestBumperCubit(), + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// {@macro dash_nest_bumper} @@ -60,8 +64,11 @@ class DashNestBumper extends BodyComponent with InitialPosition { activeAssetPath: Assets.images.dash.bumper.a.active.keyName, inactiveAssetPath: Assets.images.dash.bumper.a.inactive.keyName, spritePosition: Vector2(0.35, -1.2), - children: children, bloc: DashNestBumperCubit(), + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// {@macro dash_nest_bumper} @@ -73,8 +80,11 @@ class DashNestBumper extends BodyComponent with InitialPosition { activeAssetPath: Assets.images.dash.bumper.b.active.keyName, inactiveAssetPath: Assets.images.dash.bumper.b.inactive.keyName, spritePosition: Vector2(0.35, -1.2), - children: children, bloc: DashNestBumperCubit(), + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// Creates an [DashNestBumper] without any children. @@ -108,13 +118,11 @@ class DashNestBumper extends BodyComponent with InitialPosition { majorRadius: _majorRadius, minorRadius: _minorRadius, )..rotate(math.pi / 1.9); - final fixtureDef = FixtureDef(shape, restitution: 4); final bodyDef = BodyDef( position: initialPosition, - userData: this, ); - return world.createBody(bodyDef)..createFixture(fixtureDef); + return world.createBody(bodyDef)..createFixtureFromShape(shape); } } diff --git a/packages/pinball_components/lib/src/components/dino_walls.dart b/packages/pinball_components/lib/src/components/dino_walls.dart index 39824490..c6db1db9 100644 --- a/packages/pinball_components/lib/src/components/dino_walls.dart +++ b/packages/pinball_components/lib/src/components/dino_walls.dart @@ -86,13 +86,7 @@ class _DinoTopWall extends BodyComponent with InitialPosition { ); final body = world.createBody(bodyDef); - _createFixtureDefs().forEach( - (fixture) => body.createFixture( - fixture - ..restitution = 0.1 - ..friction = 0, - ), - ); + _createFixtureDefs().forEach(body.createFixture); return body; } diff --git a/packages/pinball_components/lib/src/components/flipper.dart b/packages/pinball_components/lib/src/components/flipper.dart index bb982e96..b62d2390 100644 --- a/packages/pinball_components/lib/src/components/flipper.dart +++ b/packages/pinball_components/lib/src/components/flipper.dart @@ -24,7 +24,7 @@ class Flipper extends BodyComponent with KeyboardHandler, InitialPosition { /// The speed required to move the [Flipper] to its highest position. /// /// The higher the value, the faster the [Flipper] will move. - static const double _speed = 60; + static const double _speed = 90; /// Whether the [Flipper] is on the left or right side of the board. /// diff --git a/packages/pinball_components/lib/src/components/kicker.dart b/packages/pinball_components/lib/src/components/kicker.dart index 12cd638d..09692c24 100644 --- a/packages/pinball_components/lib/src/components/kicker.dart +++ b/packages/pinball_components/lib/src/components/kicker.dart @@ -90,8 +90,7 @@ class Kicker extends BodyComponent with InitialPosition { final bouncyFixtureDef = FixtureDef( bouncyEdge, - // TODO(alestiago): Play with restitution value once game is bundled. - restitution: 10, + userData: 'bouncy_fixture', ); fixturesDefs.add(bouncyFixtureDef); diff --git a/packages/pinball_components/lib/src/components/plunger.dart b/packages/pinball_components/lib/src/components/plunger.dart index 735a5490..3f00186d 100644 --- a/packages/pinball_components/lib/src/components/plunger.dart +++ b/packages/pinball_components/lib/src/components/plunger.dart @@ -82,7 +82,7 @@ class Plunger extends BodyComponent with InitialPosition, Layered { /// The velocity's magnitude depends on how far the [Plunger] has been pulled /// from its original [initialPosition]. void release() { - final velocity = (initialPosition.y - body.position.y) * 5; + final velocity = (initialPosition.y - body.position.y) * 20; body.linearVelocity = Vector2(0, velocity); _spriteComponent.release(); } diff --git a/packages/pinball_components/lib/src/components/slingshot.dart b/packages/pinball_components/lib/src/components/slingshot.dart index b48bf2f9..62506569 100644 --- a/packages/pinball_components/lib/src/components/slingshot.dart +++ b/packages/pinball_components/lib/src/components/slingshot.dart @@ -1,6 +1,7 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/bumping_behavior.dart'; import 'package:pinball_flame/pinball_flame.dart'; /// {@template slingshots} @@ -39,7 +40,10 @@ class Slingshot extends BodyComponent with InitialPosition { _angle = angle, super( priority: RenderPriority.slingshot, - children: [_SlinghsotSpriteComponent(spritePath, angle: angle)], + children: [ + _SlinghsotSpriteComponent(spritePath, angle: angle), + BumpingBehavior(strength: 10), + ], renderBody: false, ); diff --git a/packages/pinball_components/lib/src/components/sparky_bumper/sparky_bumper.dart b/packages/pinball_components/lib/src/components/sparky_bumper/sparky_bumper.dart index d6434375..464ffc53 100644 --- a/packages/pinball_components/lib/src/components/sparky_bumper/sparky_bumper.dart +++ b/packages/pinball_components/lib/src/components/sparky_bumper/sparky_bumper.dart @@ -4,6 +4,7 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/bumping_behavior.dart'; import 'package:pinball_components/src/components/sparky_bumper/behaviors/behaviors.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -50,7 +51,10 @@ class SparkyBumper extends BodyComponent with InitialPosition { offAssetPath: Assets.images.sparky.bumper.a.inactive.keyName, spritePosition: Vector2(0, -0.25), bloc: SparkyBumperCubit(), - children: children, + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// {@macro sparky_bumper} @@ -63,7 +67,10 @@ class SparkyBumper extends BodyComponent with InitialPosition { offAssetPath: Assets.images.sparky.bumper.b.inactive.keyName, spritePosition: Vector2(0, -0.35), bloc: SparkyBumperCubit(), - children: children, + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// {@macro sparky_bumper} @@ -76,7 +83,10 @@ class SparkyBumper extends BodyComponent with InitialPosition { offAssetPath: Assets.images.sparky.bumper.c.inactive.keyName, spritePosition: Vector2(0, -0.4), bloc: SparkyBumperCubit(), - children: children, + children: [ + ...?children, + BumpingBehavior(strength: 20), + ], ); /// Creates an [SparkyBumper] without any children. @@ -111,15 +121,11 @@ class SparkyBumper extends BodyComponent with InitialPosition { majorRadius: _majorRadius, minorRadius: _minorRadius, )..rotate(math.pi / 2.1); - final fixtureDef = FixtureDef( - shape, - restitution: 4, + final bodyDef = BodyDef( + position: initialPosition, ); - final bodyDef = BodyDef() - ..position = initialPosition - ..userData = this; - return world.createBody(bodyDef)..createFixture(fixtureDef); + return world.createBody(bodyDef)..createFixtureFromShape(shape); } }