From 6c0b939861e3db405de7a0dc2348f51c307fc5e1 Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Thu, 5 Dec 2024 20:19:20 -0600 Subject: [PATCH] fix: flakey tests --- src/engine/Collision/BodyComponent.ts | 10 +++---- .../Collision/Colliders/CompositeCollider.ts | 4 +-- src/engine/Collision/PhysicsConfig.ts | 6 ++--- src/engine/Engine.ts | 6 ++--- src/engine/Graphics/TiledAnimation.ts | 2 +- src/engine/Particles/GpuParticleEmitter.ts | 4 +-- src/engine/Scene.ts | 4 +-- src/spec/ArcadeSolverSpec.ts | 14 +++++----- src/spec/CollisionContactSpec.ts | 18 ++++++------- src/spec/CollisionSpec.ts | 6 ++--- src/spec/CompositeColliderSpec.ts | 6 ++--- src/spec/DynamicTreeBroadphaseSpec.ts | 26 +++++++++---------- src/spec/RealisticSolverSpec.ts | 4 +-- 13 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/engine/Collision/BodyComponent.ts b/src/engine/Collision/BodyComponent.ts index b15088bf5..148d5c868 100644 --- a/src/engine/Collision/BodyComponent.ts +++ b/src/engine/Collision/BodyComponent.ts @@ -10,7 +10,7 @@ import { clamp } from '../Math/util'; import { ColliderComponent } from './ColliderComponent'; import { Transform } from '../Math/transform'; import { EventEmitter } from '../EventEmitter'; -import { DefaultPhysicsConfig, PhysicsConfig } from './PhysicsConfig'; +import { getDefaultPhysicsConfig, PhysicsConfig } from './PhysicsConfig'; import { DeepRequired } from '../Util/Required'; import { Entity } from '../EntityComponentSystem'; @@ -52,7 +52,7 @@ export class BodyComponent extends Component implements Clonable private _bodyConfig: DeepRequired['bodies']>; private static _DEFAULT_CONFIG: DeepRequired['bodies']> = { - ...DefaultPhysicsConfig.bodies + ...getDefaultPhysicsConfig().bodies }; public wakeThreshold: number; @@ -63,12 +63,12 @@ export class BodyComponent extends Component implements Clonable this.group = options.group ?? this.group; this.useGravity = options.useGravity ?? this.useGravity; this._bodyConfig = { - ...DefaultPhysicsConfig.bodies, + ...getDefaultPhysicsConfig().bodies, ...options.config }; } else { this._bodyConfig = { - ...DefaultPhysicsConfig.bodies + ...getDefaultPhysicsConfig().bodies }; } this.updatePhysicsConfig(this._bodyConfig); @@ -85,7 +85,7 @@ export class BodyComponent extends Component implements Clonable */ public updatePhysicsConfig(config: DeepRequired['bodies']>) { this._bodyConfig = { - ...DefaultPhysicsConfig.bodies, + ...getDefaultPhysicsConfig().bodies, ...config }; this.canSleep = this._bodyConfig.canSleepByDefault; diff --git a/src/engine/Collision/Colliders/CompositeCollider.ts b/src/engine/Collision/Colliders/CompositeCollider.ts index b73130936..8700b9b35 100644 --- a/src/engine/Collision/Colliders/CompositeCollider.ts +++ b/src/engine/Collision/Colliders/CompositeCollider.ts @@ -13,12 +13,12 @@ import { DynamicTreeCollisionProcessor } from '../Detection/DynamicTreeCollision import { RayCastHit } from '../Detection/RayCastHit'; import { Collider } from './Collider'; import { Transform } from '../../Math/transform'; -import { DefaultPhysicsConfig } from '../PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../PhysicsConfig'; export class CompositeCollider extends Collider { private _transform: Transform; private _collisionProcessor = new DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); private _dynamicAABBTree = new DynamicTree({ boundsPadding: 5, diff --git a/src/engine/Collision/PhysicsConfig.ts b/src/engine/Collision/PhysicsConfig.ts index 9300db0e4..e6a67a97f 100644 --- a/src/engine/Collision/PhysicsConfig.ts +++ b/src/engine/Collision/PhysicsConfig.ts @@ -216,9 +216,9 @@ export interface PhysicsConfig { }; } -export const DefaultPhysicsConfig: DeepRequired = { +export const getDefaultPhysicsConfig: () => DeepRequired = () => ({ enabled: true, - gravity: vec(0, 0), + gravity: vec(0, 0).clone(), solver: SolverStrategy.Arcade, substep: 1, colliders: { @@ -254,4 +254,4 @@ export const DefaultPhysicsConfig: DeepRequired = { steeringFactor: 0.2, warmStart: true } -}; +}); diff --git a/src/engine/Engine.ts b/src/engine/Engine.ts index 3d9eaadd7..d3c216e05 100644 --- a/src/engine/Engine.ts +++ b/src/engine/Engine.ts @@ -50,7 +50,7 @@ import { Toaster } from './Util/Toaster'; import { InputMapper } from './Input/InputMapper'; import { GoToOptions, SceneMap, Director, StartOptions, SceneWithOptions, WithRoot } from './Director/Director'; import { InputHost } from './Input/InputHost'; -import { DefaultPhysicsConfig, PhysicsConfig } from './Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig, PhysicsConfig } from './Collision/PhysicsConfig'; import { DeepRequired } from './Util/Required'; import { Context, createContext, useContext } from './Context'; import { DefaultGarbageCollectionOptions, GarbageCollectionOptions, GarbageCollector } from './GarbageCollector'; @@ -1039,12 +1039,12 @@ O|===|* >________________>\n\ if (typeof options.physics === 'boolean') { this.physics = { - ...DefaultPhysicsConfig, + ...getDefaultPhysicsConfig(), enabled: options.physics }; } else { this.physics = { - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }; mergeDeep(this.physics, options.physics); } diff --git a/src/engine/Graphics/TiledAnimation.ts b/src/engine/Graphics/TiledAnimation.ts index cdddda72a..5d5ff8edb 100644 --- a/src/engine/Graphics/TiledAnimation.ts +++ b/src/engine/Graphics/TiledAnimation.ts @@ -75,7 +75,7 @@ export class TiledAnimation extends Animation { promises.push(tiledSprite.ready); } } - Promise.allSettled(promises).then(() => this._ready.resolve()); + Promise.all(promises).then(() => this._ready.resolve()); } public static fromAnimation(animation: Animation, options?: Omit): TiledAnimation { diff --git a/src/engine/Particles/GpuParticleEmitter.ts b/src/engine/Particles/GpuParticleEmitter.ts index c91d2091b..0c0274898 100644 --- a/src/engine/Particles/GpuParticleEmitter.ts +++ b/src/engine/Particles/GpuParticleEmitter.ts @@ -1,4 +1,4 @@ -import { Actor, clamp, Engine, ExcaliburGraphicsContextWebGL, GraphicsComponent, Random, vec, Vector } from '../'; +import { Actor, clamp, Engine, ExcaliburGraphicsContextWebGL, GraphicsComponent, ParticleRenderer, Random, vec, Vector } from '../'; import { EmitterType } from './EmitterType'; import { ParticleEmitterArgs, ParticleTransform } from './Particles'; import { GpuParticleConfig, GpuParticleRenderer } from './GpuParticleRenderer'; @@ -96,6 +96,6 @@ export class GpuParticleEmitter extends Actor { } draw(ctx: ExcaliburGraphicsContextWebGL, elapsed: number) { - ctx.draw('ex.particle', this.renderer, elapsed); + ctx.draw('ex.particle', this.renderer, elapsed); } } diff --git a/src/engine/Scene.ts b/src/engine/Scene.ts index 3f494606b..6da71f6a7 100644 --- a/src/engine/Scene.ts +++ b/src/engine/Scene.ts @@ -38,7 +38,7 @@ import { DefaultLoader } from './Director/DefaultLoader'; import { Transition } from './Director'; import { InputHost } from './Input/InputHost'; import { PointerScope } from './Input/PointerScope'; -import { DefaultPhysicsConfig } from './Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from './Collision/PhysicsConfig'; export class PreLoadEvent { loader: DefaultLoader; @@ -110,7 +110,7 @@ export class Scene implements CanInitialize, CanActiv * * Can be used to perform scene ray casts, track colliders, broadphase, and narrowphase. */ - public physics = new PhysicsWorld(DefaultPhysicsConfig); + public physics = new PhysicsWorld(getDefaultPhysicsConfig()); /** * The actors in the current scene diff --git a/src/spec/ArcadeSolverSpec.ts b/src/spec/ArcadeSolverSpec.ts index e9f08fb38..242251c0f 100644 --- a/src/spec/ArcadeSolverSpec.ts +++ b/src/spec/ArcadeSolverSpec.ts @@ -1,7 +1,7 @@ import * as ex from '@excalibur'; import { ExcaliburMatchers } from 'excalibur-jasmine'; import { TestUtils } from './util/TestUtils'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; describe('An ArcadeSolver', () => { beforeAll(() => { @@ -24,7 +24,7 @@ describe('An ArcadeSolver', () => { const contacts = [...pair1.collide(), ...pair2.collide()]; expect(contacts.length).toBe(2); - const sut = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const sut = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); for (const contact of contacts) { sut.solvePosition(contact); @@ -92,7 +92,7 @@ describe('An ArcadeSolver', () => { }); it('should cancel collision contacts where there is no more overlap', () => { - const arcadeSolver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const arcadeSolver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); const player = new ex.Actor({ x: 0, @@ -143,7 +143,7 @@ describe('An ArcadeSolver', () => { }); it('should NOT cancel collisions where the bodies are moving away from the contact', () => { - const arcadeSolver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const arcadeSolver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); const player = new ex.Actor({ x: 0, @@ -198,7 +198,7 @@ describe('An ArcadeSolver', () => { }); it('should cancel near zero mtv collisions', () => { - const arcadeSolver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const arcadeSolver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); const player = new ex.Actor({ x: 0, @@ -235,7 +235,7 @@ describe('An ArcadeSolver', () => { }); it('should cancel near zero overlap collisions', () => { - const arcadeSolver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const arcadeSolver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); const player = new ex.Actor({ x: 0, @@ -272,7 +272,7 @@ describe('An ArcadeSolver', () => { }); it('should cancel zero overlap collisions during presolve', () => { - const arcadeSolver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const arcadeSolver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); const player = new ex.Actor({ x: 0, diff --git a/src/spec/CollisionContactSpec.ts b/src/spec/CollisionContactSpec.ts index eb1ab6101..e5e315154 100644 --- a/src/spec/CollisionContactSpec.ts +++ b/src/spec/CollisionContactSpec.ts @@ -2,7 +2,7 @@ import * as ex from '@excalibur'; import { TransformComponent } from '@excalibur'; import { EulerIntegrator } from '../engine/Collision/Integrator'; import { MotionComponent } from '../engine/EntityComponentSystem/Components/MotionComponent'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; import { ExcaliburMatchers } from 'excalibur-jasmine'; describe('A CollisionContact', () => { @@ -59,7 +59,7 @@ describe('A CollisionContact', () => { new ex.SeparationInfo() ); - const solver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const solver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); solver.solve([cc]); expect(actorA.pos.x).toBe(-0.5); @@ -88,7 +88,7 @@ describe('A CollisionContact', () => { new ex.SeparationInfo() ); - const solver = new ex.ArcadeSolver(DefaultPhysicsConfig.arcade); + const solver = new ex.ArcadeSolver(getDefaultPhysicsConfig().arcade); solver.solve([cc]); expect(actorAPreCollide).toHaveBeenCalledTimes(1); @@ -120,7 +120,7 @@ describe('A CollisionContact', () => { null ); // slop is normally 1 pixel, we are testing at a pixel scale here - const solver = new ex.RealisticSolver({ ...DefaultPhysicsConfig.realistic, slop: 0 }); + const solver = new ex.RealisticSolver({ ...getDefaultPhysicsConfig().realistic, slop: 0 }); // Realistic solver converges over time for (let i = 0; i < 4; i++) { solver.solve([cc]); @@ -165,7 +165,7 @@ describe('A CollisionContact', () => { null ); // slop is normally 1 pixel, we are testing at a pixel scale here - const solver = new ex.RealisticSolver({ ...DefaultPhysicsConfig.realistic, slop: 0 }); + const solver = new ex.RealisticSolver({ ...getDefaultPhysicsConfig().realistic, slop: 0 }); solver.solve([cc]); // Realistic solver uses velocity impulses to correct overlap @@ -209,7 +209,7 @@ describe('A CollisionContact', () => { [new ex.Vector(10, 0), new ex.Vector(10, 10)], null ); - const solver = new ex.RealisticSolver(DefaultPhysicsConfig.realistic); + const solver = new ex.RealisticSolver({ ...getDefaultPhysicsConfig().realistic }); solver.solve([cc]); // Realistic solver uses velocity impulses to correct overlap EulerIntegrator.integrate(actorA.get(TransformComponent), actorA.get(MotionComponent), ex.Vector.Zero, 30); @@ -247,7 +247,7 @@ describe('A CollisionContact', () => { null ); const solver = new ex.RealisticSolver({ - ...DefaultPhysicsConfig.realistic, + ...getDefaultPhysicsConfig().realistic, slop: 0 }); solver.solve([cc]); @@ -288,7 +288,7 @@ describe('A CollisionContact', () => { // slop is normally 1 pixel, we are testing at a pixel scale here const solver = new ex.RealisticSolver({ - ...DefaultPhysicsConfig.realistic, + ...getDefaultPhysicsConfig().realistic, slop: 0 }); solver.solve([cc]); @@ -325,7 +325,7 @@ describe('A CollisionContact', () => { null ); - const solver = new ex.RealisticSolver(DefaultPhysicsConfig.realistic); + const solver = new ex.RealisticSolver({ ...getDefaultPhysicsConfig().realistic }); solver.solve([cc]); expect(emittedA).toBe(true); diff --git a/src/spec/CollisionSpec.ts b/src/spec/CollisionSpec.ts index 78954f13e..0bc956b8a 100644 --- a/src/spec/CollisionSpec.ts +++ b/src/spec/CollisionSpec.ts @@ -1,6 +1,6 @@ import * as ex from '@excalibur'; import { TestUtils } from './util/TestUtils'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; describe('A Collision', () => { let actor1: ex.Actor = null; @@ -56,7 +56,7 @@ describe('A Collision', () => { it('order of actors collision should not matter when an Active and Active Collision', () => { const collisionTree = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); actor1.body.collisionType = ex.CollisionType.Active; @@ -75,7 +75,7 @@ describe('A Collision', () => { it('order of actors collision should not matter when an Active and Passive Collision', () => { const collisionTree = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); actor1.body.collisionType = ex.CollisionType.Active; diff --git a/src/spec/CompositeColliderSpec.ts b/src/spec/CompositeColliderSpec.ts index 726f71aa6..c7ab6212a 100644 --- a/src/spec/CompositeColliderSpec.ts +++ b/src/spec/CompositeColliderSpec.ts @@ -1,7 +1,7 @@ import * as ex from '@excalibur'; import { BoundingBox, GameEvent, LineSegment, Projection, Ray, vec, Vector } from '@excalibur'; import { ExcaliburAsyncMatchers, ExcaliburMatchers } from 'excalibur-jasmine'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; describe('A CompositeCollider', () => { beforeAll(() => { jasmine.addAsyncMatchers(ExcaliburAsyncMatchers); @@ -281,7 +281,7 @@ describe('A CompositeCollider', () => { const compCollider = new ex.CompositeCollider([ex.Shape.Circle(50), ex.Shape.Box(200, 10, Vector.Half)]); const dynamicTreeProcessor = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); dynamicTreeProcessor.track(compCollider); @@ -294,7 +294,7 @@ describe('A CompositeCollider', () => { const compCollider = new ex.CompositeCollider([ex.Shape.Circle(50), ex.Shape.Box(200, 10, Vector.Half)]); const dynamicTreeProcessor = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); dynamicTreeProcessor.track(compCollider); diff --git a/src/spec/DynamicTreeBroadphaseSpec.ts b/src/spec/DynamicTreeBroadphaseSpec.ts index f2b8f2b85..44f7e1c60 100644 --- a/src/spec/DynamicTreeBroadphaseSpec.ts +++ b/src/spec/DynamicTreeBroadphaseSpec.ts @@ -1,5 +1,5 @@ import * as ex from '@excalibur'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; import { TestUtils } from './util/TestUtils'; describe('A DynamicTree Broadphase', () => { @@ -29,14 +29,14 @@ describe('A DynamicTree Broadphase', () => { }); it('can be constructed', () => { - const dt = new ex.DynamicTreeCollisionProcessor(DefaultPhysicsConfig); + const dt = new ex.DynamicTreeCollisionProcessor(getDefaultPhysicsConfig()); expect(dt).not.toBe(null); }); it('can find collision pairs for actors that are potentially colliding', () => { const dt = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); dt.track(actorA.collider.get()); dt.track(actorB.collider.get()); @@ -54,7 +54,7 @@ describe('A DynamicTree Broadphase', () => { const compCollider = new ex.CompositeCollider([circle, box]); const actor = new ex.Actor({ collider: compCollider }); const dt = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); dt.track(compCollider); @@ -69,7 +69,7 @@ describe('A DynamicTree Broadphase', () => { const actor = new ex.Actor({ collider: compCollider, collisionType: ex.CollisionType.Active }); actor.body.vel = ex.vec(2000, 0); // extra fast to trigger the fast object detection const dt = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); dt.track(compCollider); @@ -79,7 +79,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with default options, only 1 hit is returned, searches all groups', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); @@ -98,7 +98,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with searchAllColliders on, all hits is returned, searches all groups', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); @@ -125,7 +125,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with searchAllColliders on & collision group on, only specified group is returned', () => { ex.CollisionGroupManager.reset(); const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const collisionGroup1 = ex.CollisionGroupManager.create('somegroup1'); const collisionGroup2 = ex.CollisionGroupManager.create('somegroup2'); @@ -150,7 +150,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with searchAllColliders on with actors that have collision groups are searched', () => { ex.CollisionGroupManager.reset(); const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const collisionGroup1 = ex.CollisionGroupManager.create('somegroup1'); const collisionGroup2 = ex.CollisionGroupManager.create('somegroup2'); @@ -178,7 +178,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with searchAllColliders on and max distance set, returns 1 hit', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); @@ -200,7 +200,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with ignoreCollisionGroupAll, returns 1 hit', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); @@ -225,7 +225,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with filter, returns 1 hit', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); @@ -251,7 +251,7 @@ describe('A DynamicTree Broadphase', () => { it('can rayCast with filter and search all colliders false, returns 1 hit', () => { const sut = new ex.DynamicTreeCollisionProcessor({ - ...DefaultPhysicsConfig + ...getDefaultPhysicsConfig() }); const actor1 = new ex.Actor({ x: 100, y: 0, width: 50, height: 50 }); sut.track(actor1.collider.get()); diff --git a/src/spec/RealisticSolverSpec.ts b/src/spec/RealisticSolverSpec.ts index 0dfbaa3e2..872730c70 100644 --- a/src/spec/RealisticSolverSpec.ts +++ b/src/spec/RealisticSolverSpec.ts @@ -1,6 +1,6 @@ import { ExcaliburMatchers } from 'excalibur-jasmine'; import * as ex from '@excalibur'; -import { DefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; +import { getDefaultPhysicsConfig } from '../engine/Collision/PhysicsConfig'; describe('A RealisticSolver', () => { beforeAll(() => { @@ -12,7 +12,7 @@ describe('A RealisticSolver', () => { }); it('should cancel zero overlap collisions during presolve', () => { - const realisticSolver = new ex.RealisticSolver(DefaultPhysicsConfig.realistic); + const realisticSolver = new ex.RealisticSolver(getDefaultPhysicsConfig().realistic); const player = new ex.Actor({ x: 0,