@lagless/physics2d 0.0.44 → 0.0.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,10 +5,10 @@ Rapier 2D physics integration for the lagless ECS framework. Deterministic stepp
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- pnpm add @lagless/physics2d @dimforge/rapier2d-compat
8
+ pnpm add @lagless/physics2d @lagless/rapier2d-deterministic-compat
9
9
  ```
10
10
 
11
- Peer dependency: `@dimforge/rapier2d-compat >= 0.14.0`
11
+ Peer dependency: `@lagless/rapier2d-deterministic-compat >= 0.15.0`
12
12
 
13
13
  ## Architecture
14
14
 
@@ -18,7 +18,7 @@ Peer dependency: `@dimforge/rapier2d-compat >= 0.14.0`
18
18
 
19
19
  @lagless/physics2d (2D wrappers: PhysicsWorldManager2d, PhysicsStepSync2d, PhysicsRunner2d, ...)
20
20
 
21
- └── peer: @dimforge/rapier2d-compat
21
+ └── peer: @lagless/rapier2d-deterministic-compat
22
22
  ```
23
23
 
24
24
  ## ECS Schema (codegen)
@@ -54,7 +54,7 @@ filters:
54
54
  ### Runner Setup
55
55
 
56
56
  ```typescript
57
- import RAPIER from '@dimforge/rapier2d-compat';
57
+ import RAPIER from '@lagless/rapier2d-deterministic-compat';
58
58
  import { PhysicsConfig2d } from '@lagless/physics2d';
59
59
  import { MyGameRunner } from './code-gen/my-game.runner.js';
60
60
 
@@ -159,6 +159,7 @@ class SpawnSystem implements IECSSystem {
159
159
  | `gravityY` | `number` | `-9.81` | Gravity Y component |
160
160
  | `substeps` | `number` | `1` | Physics substeps per frame |
161
161
  | `substepDt` | `number` | (derived) | `frameDt / substeps` |
162
+ | `warmstartCoefficient` | `number` | `0` | Rapier solver warm-start coefficient. `0` disables warm-starting for determinism. |
162
163
 
163
164
  ## Collision Layers
164
165
 
package/dist/index.d.ts CHANGED
@@ -5,6 +5,6 @@ export * from './lib/physics-world-manager-2d.js';
5
5
  export * from './lib/physics-step-sync-2d.js';
6
6
  export * from './lib/physics-simulation-2d.js';
7
7
  export * from './lib/physics-runner-2d.js';
8
- export { BodyType, type BodyTypeValue, ColliderEntityMap, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
8
+ export { BodyType, type BodyTypeValue, ColliderEntityMap, UNMAPPED_ENTITY, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
9
9
  export type { IPhysicsRefsComponent, IFilter, IPhysicsWorldManagerBase, IRapierEventQueue, IColliderSensorChecker } from '@lagless/physics-shared';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC/I,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAChK,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,6 @@ export * from './lib/physics-world-manager-2d.js';
5
5
  export * from './lib/physics-step-sync-2d.js';
6
6
  export * from './lib/physics-simulation-2d.js';
7
7
  export * from './lib/physics-runner-2d.js';
8
- export { BodyType, ColliderEntityMap, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
8
+ export { BodyType, ColliderEntityMap, UNMAPPED_ENTITY, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
9
9
 
10
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './lib/rapier-types-2d.js';\nexport * from './lib/physics-config-2d.js';\nexport * from './lib/collision-events-2d.js';\nexport * from './lib/physics-world-manager-2d.js';\nexport * from './lib/physics-step-sync-2d.js';\nexport * from './lib/physics-simulation-2d.js';\nexport * from './lib/physics-runner-2d.js';\n\nexport { BodyType, type BodyTypeValue, ColliderEntityMap, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';\nexport type { IPhysicsRefsComponent, IFilter, IPhysicsWorldManagerBase, IRapierEventQueue, IColliderSensorChecker } from '@lagless/physics-shared';\n"],"names":["BodyType","ColliderEntityMap","handleToIndex","CollisionLayers","CollisionEventsBase"],"rangeMappings":";;;;;;;","mappings":"AAAA,cAAc,2BAA2B;AACzC,cAAc,6BAA6B;AAC3C,cAAc,+BAA+B;AAC7C,cAAc,oCAAoC;AAClD,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,6BAA6B;AAE3C,SAASA,QAAQ,EAAsBC,iBAAiB,EAAEC,aAAa,EAAEC,eAAe,EAAEC,mBAAmB,QAAQ,0BAA0B"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './lib/rapier-types-2d.js';\nexport * from './lib/physics-config-2d.js';\nexport * from './lib/collision-events-2d.js';\nexport * from './lib/physics-world-manager-2d.js';\nexport * from './lib/physics-step-sync-2d.js';\nexport * from './lib/physics-simulation-2d.js';\nexport * from './lib/physics-runner-2d.js';\n\nexport { BodyType, type BodyTypeValue, ColliderEntityMap, UNMAPPED_ENTITY, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';\nexport type { IPhysicsRefsComponent, IFilter, IPhysicsWorldManagerBase, IRapierEventQueue, IColliderSensorChecker } from '@lagless/physics-shared';\n"],"names":["BodyType","ColliderEntityMap","UNMAPPED_ENTITY","handleToIndex","CollisionLayers","CollisionEventsBase"],"rangeMappings":";;;;;;;","mappings":"AAAA,cAAc,2BAA2B;AACzC,cAAc,6BAA6B;AAC3C,cAAc,+BAA+B;AAC7C,cAAc,oCAAoC;AAClD,cAAc,gCAAgC;AAC9C,cAAc,iCAAiC;AAC/C,cAAc,6BAA6B;AAE3C,SAASA,QAAQ,EAAsBC,iBAAiB,EAAEC,eAAe,EAAEC,aAAa,EAAEC,eAAe,EAAEC,mBAAmB,QAAQ,0BAA0B"}
@@ -2,8 +2,7 @@ export declare class PhysicsConfig2d {
2
2
  readonly gravityX: number;
3
3
  readonly gravityY: number;
4
4
  readonly substeps: number;
5
- /** Per-substep dt in seconds, derived from frameDt / substeps */
6
- readonly substepDt: number;
7
- constructor(options?: Partial<Pick<PhysicsConfig2d, 'gravityX' | 'gravityY' | 'substeps'>>, frameDt?: number);
5
+ readonly warmstartCoefficient: number;
6
+ constructor(options?: Partial<Pick<PhysicsConfig2d, 'gravityX' | 'gravityY' | 'substeps' | 'warmstartCoefficient'>>);
8
7
  }
9
8
  //# sourceMappingURL=physics-config-2d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"physics-config-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-config-2d.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,iEAAiE;IACjE,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAGhC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,EAC9E,OAAO,GAAE,MAAe;CAO3B"}
1
+ {"version":3,"file":"physics-config-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-config-2d.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,oBAAoB,EAAE,MAAM,CAAC;gBAG3C,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,sBAAsB,CAAC,CAAC;CAO1G"}
@@ -1,12 +1,13 @@
1
1
  export class PhysicsConfig2d {
2
- constructor(options, frameDt = 1 / 60){
2
+ constructor(options){
3
3
  var _options_gravityX;
4
4
  this.gravityX = (_options_gravityX = options == null ? void 0 : options.gravityX) != null ? _options_gravityX : 0;
5
5
  var _options_gravityY;
6
6
  this.gravityY = (_options_gravityY = options == null ? void 0 : options.gravityY) != null ? _options_gravityY : -9.81;
7
7
  var _options_substeps;
8
8
  this.substeps = (_options_substeps = options == null ? void 0 : options.substeps) != null ? _options_substeps : 1;
9
- this.substepDt = frameDt / this.substeps;
9
+ var _options_warmstartCoefficient;
10
+ this.warmstartCoefficient = (_options_warmstartCoefficient = options == null ? void 0 : options.warmstartCoefficient) != null ? _options_warmstartCoefficient : 0;
10
11
  }
11
12
  }
12
13
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/physics-config-2d.ts"],"sourcesContent":["export class PhysicsConfig2d {\n public readonly gravityX: number;\n public readonly gravityY: number;\n public readonly substeps: number;\n /** Per-substep dt in seconds, derived from frameDt / substeps */\n public readonly substepDt: number;\n\n constructor(\n options?: Partial<Pick<PhysicsConfig2d, 'gravityX' | 'gravityY' | 'substeps'>>,\n frameDt: number = 1 / 60,\n ) {\n this.gravityX = options?.gravityX ?? 0;\n this.gravityY = options?.gravityY ?? -9.81;\n this.substeps = options?.substeps ?? 1;\n this.substepDt = frameDt / this.substeps;\n }\n}\n"],"names":["PhysicsConfig2d","constructor","options","frameDt","gravityX","gravityY","substeps","substepDt"],"rangeMappings":";;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA;IAOXC,YACEC,OAA8E,EAC9EC,UAAkB,IAAI,EAAE,CACxB;YACgBD;QAAhB,IAAI,CAACE,QAAQ,GAAGF,CAAAA,oBAAAA,2BAAAA,QAASE,QAAQ,YAAjBF,oBAAqB;YACrBA;QAAhB,IAAI,CAACG,QAAQ,GAAGH,CAAAA,oBAAAA,2BAAAA,QAASG,QAAQ,YAAjBH,oBAAqB,CAAC;YACtBA;QAAhB,IAAI,CAACI,QAAQ,GAAGJ,CAAAA,oBAAAA,2BAAAA,QAASI,QAAQ,YAAjBJ,oBAAqB;QACrC,IAAI,CAACK,SAAS,GAAGJ,UAAU,IAAI,CAACG,QAAQ;IAC1C;AACF"}
1
+ {"version":3,"sources":["../../src/lib/physics-config-2d.ts"],"sourcesContent":["export class PhysicsConfig2d {\n public readonly gravityX: number;\n public readonly gravityY: number;\n public readonly substeps: number;\n public readonly warmstartCoefficient: number;\n\n constructor(\n options?: Partial<Pick<PhysicsConfig2d, 'gravityX' | 'gravityY' | 'substeps' | 'warmstartCoefficient'>>,\n ) {\n this.gravityX = options?.gravityX ?? 0;\n this.gravityY = options?.gravityY ?? -9.81;\n this.substeps = options?.substeps ?? 1;\n this.warmstartCoefficient = options?.warmstartCoefficient ?? 0;\n }\n}\n"],"names":["PhysicsConfig2d","constructor","options","gravityX","gravityY","substeps","warmstartCoefficient"],"rangeMappings":";;;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA;IAMXC,YACEC,OAAuG,CACvG;YACgBA;QAAhB,IAAI,CAACC,QAAQ,GAAGD,CAAAA,oBAAAA,2BAAAA,QAASC,QAAQ,YAAjBD,oBAAqB;YACrBA;QAAhB,IAAI,CAACE,QAAQ,GAAGF,CAAAA,oBAAAA,2BAAAA,QAASE,QAAQ,YAAjBF,oBAAqB,CAAC;YACtBA;QAAhB,IAAI,CAACG,QAAQ,GAAGH,CAAAA,oBAAAA,2BAAAA,QAASG,QAAQ,YAAjBH,oBAAqB;YACTA;QAA5B,IAAI,CAACI,oBAAoB,GAAGJ,CAAAA,gCAAAA,2BAAAA,QAASI,oBAAoB,YAA7BJ,gCAAiC;IAC/D;AACF"}
@@ -1,16 +1,15 @@
1
1
  import { AbstractInputProvider, ECSConfig, ECSRunner, ECSDeps, IECSSystemConstructor } from '@lagless/core';
2
2
  import { ISignalConstructor } from '@lagless/core';
3
- import { CollisionLayers } from '@lagless/physics-shared';
3
+ import { CollisionLayers, PhysicsSimulationBase } from '@lagless/physics-shared';
4
4
  import { CollisionEvents2d } from './collision-events-2d.js';
5
5
  import { PhysicsConfig2d } from './physics-config-2d.js';
6
- import { PhysicsSimulation2d } from './physics-simulation-2d.js';
7
6
  import { PhysicsWorldManager2d } from './physics-world-manager-2d.js';
8
7
  import { RapierModule2d } from './rapier-types-2d.js';
9
8
  export declare abstract class PhysicsRunner2d extends ECSRunner {
10
9
  readonly PhysicsWorldManager: PhysicsWorldManager2d;
11
10
  readonly PhysicsConfig: PhysicsConfig2d;
12
11
  readonly CollisionEvents: CollisionEvents2d;
13
- readonly Simulation: PhysicsSimulation2d;
12
+ readonly Simulation: PhysicsSimulationBase;
14
13
  protected constructor(Config: ECSConfig, InputProviderInstance: AbstractInputProvider, Systems: Array<IECSSystemConstructor>, Signals: Array<ISignalConstructor>, Deps: ECSDeps, rapier: RapierModule2d, physicsConfig?: PhysicsConfig2d, collisionLayers?: CollisionLayers, extraRegistrations?: Array<[unknown, unknown]>);
15
14
  dispose(): void;
16
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"physics-runner-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-runner-2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8BAAsB,eAAgB,SAAQ,SAAS;IACrD,SAAgB,mBAAmB,EAAE,qBAAqB,CAAC;IAC3D,SAAgB,aAAa,EAAE,eAAe,CAAC;IAC/C,SAAgB,eAAe,EAAE,iBAAiB,CAAC;IACnD,SAAyB,UAAU,EAAE,mBAAmB,CAAC;IAEzD,SAAS,aACP,MAAM,EAAE,SAAS,EACjB,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC,EACrC,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,cAAc,EACtB,aAAa,CAAC,EAAE,eAAe,EAC/B,eAAe,CAAC,EAAE,eAAe,EACjC,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA0BhC,OAAO,IAAI,IAAI;CAIhC"}
1
+ {"version":3,"file":"physics-runner-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-runner-2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5G,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAgC,MAAM,yBAAyB,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,8BAAsB,eAAgB,SAAQ,SAAS;IACrD,SAAgB,mBAAmB,EAAE,qBAAqB,CAAC;IAC3D,SAAgB,aAAa,EAAE,eAAe,CAAC;IAC/C,SAAgB,eAAe,EAAE,iBAAiB,CAAC;IACnD,SAAyB,UAAU,EAAE,qBAAqB,CAAC;IAE3D,SAAS,aACP,MAAM,EAAE,SAAS,EACjB,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC,EACrC,OAAO,EAAE,KAAK,CAAC,kBAAkB,CAAC,EAClC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,cAAc,EACtB,aAAa,CAAC,EAAE,eAAe,EAC/B,eAAe,CAAC,EAAE,eAAe,EACjC,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA4BhC,OAAO,IAAI,IAAI;CAIhC"}
@@ -1,8 +1,7 @@
1
1
  import { ECSRunner } from '@lagless/core';
2
- import { CollisionLayers } from '@lagless/physics-shared';
2
+ import { CollisionLayers, PhysicsSimulationBase, wireColliderEntityMapRebuild } from '@lagless/physics-shared';
3
3
  import { CollisionEvents2d } from './collision-events-2d.js';
4
4
  import { PhysicsConfig2d } from './physics-config-2d.js';
5
- import { PhysicsSimulation2d } from './physics-simulation-2d.js';
6
5
  import { PhysicsWorldManager2d } from './physics-world-manager-2d.js';
7
6
  export class PhysicsRunner2d extends ECSRunner {
8
7
  dispose() {
@@ -12,7 +11,7 @@ export class PhysicsRunner2d extends ECSRunner {
12
11
  constructor(Config, InputProviderInstance, Systems, Signals, Deps, rapier, physicsConfig, collisionLayers, extraRegistrations){
13
12
  const config = physicsConfig != null ? physicsConfig : new PhysicsConfig2d();
14
13
  const worldManager = new PhysicsWorldManager2d(rapier, config, Config.frameLength);
15
- const simulation = new PhysicsSimulation2d(Config, Deps, InputProviderInstance, worldManager);
14
+ const simulation = new PhysicsSimulationBase(Config, Deps, InputProviderInstance, worldManager);
16
15
  const extraRegs = [
17
16
  [
18
17
  PhysicsWorldManager2d,
@@ -41,6 +40,7 @@ export class PhysicsRunner2d extends ECSRunner {
41
40
  this.PhysicsConfig = config;
42
41
  this.Simulation = simulation;
43
42
  this.CollisionEvents = worldManager.collisionEvents;
43
+ wireColliderEntityMapRebuild(Deps, simulation, worldManager.colliderEntityMap);
44
44
  }
45
45
  }
46
46
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/physics-runner-2d.ts"],"sourcesContent":["import { AbstractInputProvider, ECSConfig, ECSRunner, ECSDeps, IECSSystemConstructor } from '@lagless/core';\nimport { ISignalConstructor } from '@lagless/core';\nimport { CollisionLayers } from '@lagless/physics-shared';\nimport { CollisionEvents2d } from './collision-events-2d.js';\nimport { PhysicsConfig2d } from './physics-config-2d.js';\nimport { PhysicsSimulation2d } from './physics-simulation-2d.js';\nimport { PhysicsWorldManager2d } from './physics-world-manager-2d.js';\nimport { RapierModule2d } from './rapier-types-2d.js';\n\nexport abstract class PhysicsRunner2d extends ECSRunner {\n public readonly PhysicsWorldManager: PhysicsWorldManager2d;\n public readonly PhysicsConfig: PhysicsConfig2d;\n public readonly CollisionEvents: CollisionEvents2d;\n public override readonly Simulation: PhysicsSimulation2d;\n\n protected constructor(\n Config: ECSConfig,\n InputProviderInstance: AbstractInputProvider,\n Systems: Array<IECSSystemConstructor>,\n Signals: Array<ISignalConstructor>,\n Deps: ECSDeps,\n rapier: RapierModule2d,\n physicsConfig?: PhysicsConfig2d,\n collisionLayers?: CollisionLayers,\n extraRegistrations?: Array<[unknown, unknown]>,\n ) {\n const config = physicsConfig ?? new PhysicsConfig2d();\n const worldManager = new PhysicsWorldManager2d(rapier, config, Config.frameLength);\n const simulation = new PhysicsSimulation2d(Config, Deps, InputProviderInstance, worldManager);\n\n const extraRegs: Array<[unknown, unknown]> = [\n [PhysicsWorldManager2d, worldManager],\n [PhysicsConfig2d, config],\n [CollisionEvents2d, worldManager.collisionEvents],\n ];\n if (collisionLayers) {\n extraRegs.push([CollisionLayers, collisionLayers]);\n }\n if (extraRegistrations) {\n extraRegs.push(...extraRegistrations);\n }\n\n super(Config, InputProviderInstance, Systems, Signals, Deps, simulation, extraRegs);\n\n this.PhysicsWorldManager = worldManager;\n this.PhysicsConfig = config;\n this.Simulation = simulation;\n this.CollisionEvents = worldManager.collisionEvents;\n }\n\n public override dispose(): void {\n super.dispose();\n this.PhysicsWorldManager.dispose();\n }\n}\n"],"names":["ECSRunner","CollisionLayers","CollisionEvents2d","PhysicsConfig2d","PhysicsSimulation2d","PhysicsWorldManager2d","PhysicsRunner2d","dispose","PhysicsWorldManager","Config","InputProviderInstance","Systems","Signals","Deps","rapier","physicsConfig","collisionLayers","extraRegistrations","config","worldManager","frameLength","simulation","extraRegs","collisionEvents","push","PhysicsConfig","Simulation","CollisionEvents"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAA2CA,SAAS,QAAwC,gBAAgB;AAE5G,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,mBAAmB,QAAQ,6BAA6B;AACjE,SAASC,qBAAqB,QAAQ,gCAAgC;AAGtE,OAAO,MAAeC,wBAAwBN;IAyC5BO,UAAgB;QAC9B,KAAK,CAACA;QACN,IAAI,CAACC,mBAAmB,CAACD,OAAO;IAClC;IAtCA,YACEE,MAAiB,EACjBC,qBAA4C,EAC5CC,OAAqC,EACrCC,OAAkC,EAClCC,IAAa,EACbC,MAAsB,EACtBC,aAA+B,EAC/BC,eAAiC,EACjCC,kBAA8C,CAC9C;QACA,MAAMC,SAASH,wBAAAA,gBAAiB,IAAIZ;QACpC,MAAMgB,eAAe,IAAId,sBAAsBS,QAAQI,QAAQT,OAAOW,WAAW;QACjF,MAAMC,aAAa,IAAIjB,oBAAoBK,QAAQI,MAAMH,uBAAuBS;QAEhF,MAAMG,YAAuC;YAC3C;gBAACjB;gBAAuBc;aAAa;YACrC;gBAAChB;gBAAiBe;aAAO;YACzB;gBAAChB;gBAAmBiB,aAAaI,eAAe;aAAC;SAClD;QACD,IAAIP,iBAAiB;YACnBM,UAAUE,IAAI,CAAC;gBAACvB;gBAAiBe;aAAgB;QACnD;QACA,IAAIC,oBAAoB;YACtBK,UAAUE,IAAI,IAAIP;QACpB;QAEA,KAAK,CAACR,QAAQC,uBAAuBC,SAASC,SAASC,MAAMQ,YAAYC;QAEzE,IAAI,CAACd,mBAAmB,GAAGW;QAC3B,IAAI,CAACM,aAAa,GAAGP;QACrB,IAAI,CAACQ,UAAU,GAAGL;QAClB,IAAI,CAACM,eAAe,GAAGR,aAAaI,eAAe;IACrD;AAMF"}
1
+ {"version":3,"sources":["../../src/lib/physics-runner-2d.ts"],"sourcesContent":["import { AbstractInputProvider, ECSConfig, ECSRunner, ECSDeps, IECSSystemConstructor } from '@lagless/core';\nimport { ISignalConstructor } from '@lagless/core';\nimport { CollisionLayers, PhysicsSimulationBase, wireColliderEntityMapRebuild } from '@lagless/physics-shared';\nimport { CollisionEvents2d } from './collision-events-2d.js';\nimport { PhysicsConfig2d } from './physics-config-2d.js';\nimport { PhysicsWorldManager2d } from './physics-world-manager-2d.js';\nimport { RapierModule2d } from './rapier-types-2d.js';\n\nexport abstract class PhysicsRunner2d extends ECSRunner {\n public readonly PhysicsWorldManager: PhysicsWorldManager2d;\n public readonly PhysicsConfig: PhysicsConfig2d;\n public readonly CollisionEvents: CollisionEvents2d;\n public override readonly Simulation: PhysicsSimulationBase;\n\n protected constructor(\n Config: ECSConfig,\n InputProviderInstance: AbstractInputProvider,\n Systems: Array<IECSSystemConstructor>,\n Signals: Array<ISignalConstructor>,\n Deps: ECSDeps,\n rapier: RapierModule2d,\n physicsConfig?: PhysicsConfig2d,\n collisionLayers?: CollisionLayers,\n extraRegistrations?: Array<[unknown, unknown]>,\n ) {\n const config = physicsConfig ?? new PhysicsConfig2d();\n const worldManager = new PhysicsWorldManager2d(rapier, config, Config.frameLength);\n const simulation = new PhysicsSimulationBase(Config, Deps, InputProviderInstance, worldManager);\n\n const extraRegs: Array<[unknown, unknown]> = [\n [PhysicsWorldManager2d, worldManager],\n [PhysicsConfig2d, config],\n [CollisionEvents2d, worldManager.collisionEvents],\n ];\n if (collisionLayers) {\n extraRegs.push([CollisionLayers, collisionLayers]);\n }\n if (extraRegistrations) {\n extraRegs.push(...extraRegistrations);\n }\n\n super(Config, InputProviderInstance, Systems, Signals, Deps, simulation, extraRegs);\n\n this.PhysicsWorldManager = worldManager;\n this.PhysicsConfig = config;\n this.Simulation = simulation;\n this.CollisionEvents = worldManager.collisionEvents;\n\n wireColliderEntityMapRebuild(Deps, simulation, worldManager.colliderEntityMap);\n }\n\n public override dispose(): void {\n super.dispose();\n this.PhysicsWorldManager.dispose();\n }\n}\n"],"names":["ECSRunner","CollisionLayers","PhysicsSimulationBase","wireColliderEntityMapRebuild","CollisionEvents2d","PhysicsConfig2d","PhysicsWorldManager2d","PhysicsRunner2d","dispose","PhysicsWorldManager","Config","InputProviderInstance","Systems","Signals","Deps","rapier","physicsConfig","collisionLayers","extraRegistrations","config","worldManager","frameLength","simulation","extraRegs","collisionEvents","push","PhysicsConfig","Simulation","CollisionEvents","colliderEntityMap"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAA2CA,SAAS,QAAwC,gBAAgB;AAE5G,SAASC,eAAe,EAAEC,qBAAqB,EAAEC,4BAA4B,QAAQ,0BAA0B;AAC/G,SAASC,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,eAAe,QAAQ,yBAAyB;AACzD,SAASC,qBAAqB,QAAQ,gCAAgC;AAGtE,OAAO,MAAeC,wBAAwBP;IA2C5BQ,UAAgB;QAC9B,KAAK,CAACA;QACN,IAAI,CAACC,mBAAmB,CAACD,OAAO;IAClC;IAxCA,YACEE,MAAiB,EACjBC,qBAA4C,EAC5CC,OAAqC,EACrCC,OAAkC,EAClCC,IAAa,EACbC,MAAsB,EACtBC,aAA+B,EAC/BC,eAAiC,EACjCC,kBAA8C,CAC9C;QACA,MAAMC,SAASH,wBAAAA,gBAAiB,IAAIX;QACpC,MAAMe,eAAe,IAAId,sBAAsBS,QAAQI,QAAQT,OAAOW,WAAW;QACjF,MAAMC,aAAa,IAAIpB,sBAAsBQ,QAAQI,MAAMH,uBAAuBS;QAElF,MAAMG,YAAuC;YAC3C;gBAACjB;gBAAuBc;aAAa;YACrC;gBAACf;gBAAiBc;aAAO;YACzB;gBAACf;gBAAmBgB,aAAaI,eAAe;aAAC;SAClD;QACD,IAAIP,iBAAiB;YACnBM,UAAUE,IAAI,CAAC;gBAACxB;gBAAiBgB;aAAgB;QACnD;QACA,IAAIC,oBAAoB;YACtBK,UAAUE,IAAI,IAAIP;QACpB;QAEA,KAAK,CAACR,QAAQC,uBAAuBC,SAASC,SAASC,MAAMQ,YAAYC;QAEzE,IAAI,CAACd,mBAAmB,GAAGW;QAC3B,IAAI,CAACM,aAAa,GAAGP;QACrB,IAAI,CAACQ,UAAU,GAAGL;QAClB,IAAI,CAACM,eAAe,GAAGR,aAAaI,eAAe;QAEnDrB,6BAA6BW,MAAMQ,YAAYF,aAAaS,iBAAiB;IAC/E;AAMF"}
@@ -1,7 +1,3 @@
1
- import { ECSConfig, AbstractInputProvider, ECSDeps } from '@lagless/core';
2
- import { PhysicsSimulationBase } from '@lagless/physics-shared';
3
- import { PhysicsWorldManager2d } from './physics-world-manager-2d.js';
4
- export declare class PhysicsSimulation2d extends PhysicsSimulationBase {
5
- constructor(config: ECSConfig, deps: ECSDeps, inputProvider: AbstractInputProvider, physicsWorldManager: PhysicsWorldManager2d);
6
- }
1
+ /** @deprecated Use `PhysicsSimulationBase` from `@lagless/physics-shared` directly. */
2
+ export { PhysicsSimulationBase as PhysicsSimulation2d } from '@lagless/physics-shared';
7
3
  //# sourceMappingURL=physics-simulation-2d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"physics-simulation-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-simulation-2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,qBAAa,mBAAoB,SAAQ,qBAAqB;gBAE1D,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,EACb,aAAa,EAAE,qBAAqB,EACpC,mBAAmB,EAAE,qBAAqB;CAI7C"}
1
+ {"version":3,"file":"physics-simulation-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-simulation-2d.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,qBAAqB,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,8 +1,3 @@
1
- import { PhysicsSimulationBase } from '@lagless/physics-shared';
2
- export class PhysicsSimulation2d extends PhysicsSimulationBase {
3
- constructor(config, deps, inputProvider, physicsWorldManager){
4
- super(config, deps, inputProvider, physicsWorldManager);
5
- }
6
- }
1
+ /** @deprecated Use `PhysicsSimulationBase` from `@lagless/physics-shared` directly. */ export { PhysicsSimulationBase as PhysicsSimulation2d } from '@lagless/physics-shared';
7
2
 
8
3
  //# sourceMappingURL=physics-simulation-2d.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/physics-simulation-2d.ts"],"sourcesContent":["import { ECSConfig, AbstractInputProvider, ECSDeps } from '@lagless/core';\nimport { PhysicsSimulationBase } from '@lagless/physics-shared';\nimport { PhysicsWorldManager2d } from './physics-world-manager-2d.js';\n\nexport class PhysicsSimulation2d extends PhysicsSimulationBase {\n constructor(\n config: ECSConfig,\n deps: ECSDeps,\n inputProvider: AbstractInputProvider,\n physicsWorldManager: PhysicsWorldManager2d,\n ) {\n super(config, deps, inputProvider, physicsWorldManager);\n }\n}\n"],"names":["PhysicsSimulationBase","PhysicsSimulation2d","constructor","config","deps","inputProvider","physicsWorldManager"],"rangeMappings":";;;;;","mappings":"AACA,SAASA,qBAAqB,QAAQ,0BAA0B;AAGhE,OAAO,MAAMC,4BAA4BD;IACvCE,YACEC,MAAiB,EACjBC,IAAa,EACbC,aAAoC,EACpCC,mBAA0C,CAC1C;QACA,KAAK,CAACH,QAAQC,MAAMC,eAAeC;IACrC;AACF"}
1
+ {"version":3,"sources":["../../src/lib/physics-simulation-2d.ts"],"sourcesContent":["/** @deprecated Use `PhysicsSimulationBase` from `@lagless/physics-shared` directly. */\nexport { PhysicsSimulationBase as PhysicsSimulation2d } from '@lagless/physics-shared';\n"],"names":["PhysicsSimulationBase","PhysicsSimulation2d"],"rangeMappings":"","mappings":"AAAA,qFAAqF,GACrF,SAASA,yBAAyBC,mBAAmB,QAAQ,0BAA0B"}
@@ -1,7 +1,7 @@
1
1
  import { ColliderEntityMap } from '@lagless/physics-shared';
2
2
  import { CollisionEvents2d } from './collision-events-2d.js';
3
3
  import { PhysicsConfig2d } from './physics-config-2d.js';
4
- import { RapierCollider2d, RapierColliderDesc2d, RapierModule2d, RapierRigidBody2d, RapierRigidBodyDesc2d, RapierWorld2d } from './rapier-types-2d.js';
4
+ import type { DebugRenderBuffers, RapierCollider2d, RapierColliderDesc2d, RapierModule2d, RapierRigidBody2d, RapierRigidBodyDesc2d, RapierWorld2d } from './rapier-types-2d.js';
5
5
  export declare class PhysicsWorldManager2d {
6
6
  private readonly _rapier;
7
7
  private readonly _config;
@@ -12,6 +12,7 @@ export declare class PhysicsWorldManager2d {
12
12
  private readonly _colliderEntityMap;
13
13
  get world(): RapierWorld2d;
14
14
  get substeps(): number;
15
+ get substepDt(): number;
15
16
  get colliderEntityMap(): ColliderEntityMap;
16
17
  get collisionEvents(): CollisionEvents2d;
17
18
  constructor(_rapier: RapierModule2d, _config: PhysicsConfig2d, frameLengthMs: number);
@@ -34,12 +35,13 @@ export declare class PhysicsWorldManager2d {
34
35
  createCuboidCollider(hx: number, hy: number, parent?: RapierRigidBody2d, groups?: number, activeEvents?: number): RapierCollider2d;
35
36
  createCapsuleCollider(halfHeight: number, radius: number, parent?: RapierRigidBody2d, groups?: number, activeEvents?: number): RapierCollider2d;
36
37
  createConvexHullCollider(points: Float32Array, parent?: RapierRigidBody2d, groups?: number, activeEvents?: number): RapierCollider2d | null;
37
- createTrimeshCollider(vertices: Float32Array, indices: Uint32Array, parent?: RapierRigidBody2d): RapierCollider2d;
38
+ createTrimeshCollider(vertices: Float32Array, indices: Uint32Array, parent?: RapierRigidBody2d, groups?: number, activeEvents?: number): RapierCollider2d;
38
39
  createColliderFromDesc(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d;
39
40
  getBody(handle: number): RapierRigidBody2d;
40
41
  getCollider(handle: number): RapierCollider2d;
41
42
  removeBody(handle: number): void;
42
43
  removeCollider(handle: number, wakeUp?: boolean): void;
44
+ debugRender(): DebugRenderBuffers;
43
45
  get rapier(): RapierModule2d;
44
46
  dispose(): void;
45
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"physics-world-manager-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-world-manager-2d.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EAEpB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAI9B,qBAAa,qBAAqB;IAwB9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAxB1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAE9D,IAAW,KAAK,IAAI,aAAa,CAEhC;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,iBAAiB,IAAI,iBAAiB,CAEhD;IAED,IAAW,eAAe,IAAI,iBAAiB,CAE9C;gBAGkB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,eAAe,EACzC,aAAa,EAAE,MAAM;IAavB;;;;OAIG;IACI,IAAI,IAAI,IAAI;IAQZ,YAAY,IAAI,UAAU;IAI1B,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAmBvC,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI9D,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKhD,iBAAiB,IAAI,iBAAiB;IAKtC,eAAe,IAAI,iBAAiB;IAKpC,2BAA2B,IAAI,iBAAiB;IAKhD,2BAA2B,IAAI,iBAAiB;IAKhD,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB;IAKlE,kBAAkB,CACvB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB;IAOZ,oBAAoB,CACzB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB;IAOZ,qBAAqB,CAC1B,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAClC,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB;IAOZ,wBAAwB,CAC7B,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,gBAAgB,GAAG,IAAI;IAQnB,qBAAqB,CAC1B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,iBAAiB,GACzB,gBAAgB;IAKZ,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,gBAAgB;IAKhG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAI1C,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAK7C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKhC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,IAAI;IAM1D,IAAW,MAAM,IAAI,cAAc,CAElC;IAEM,OAAO,IAAI,IAAI;CAIvB"}
1
+ {"version":3,"file":"physics-world-manager-2d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-world-manager-2d.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export class PhysicsWorldManager2d {
9
9
  get substeps() {
10
10
  return this._substeps;
11
11
  }
12
+ get substepDt() {
13
+ return this._substepDt;
14
+ }
12
15
  get colliderEntityMap() {
13
16
  return this._colliderEntityMap;
14
17
  }
@@ -38,13 +41,11 @@ export class PhysicsWorldManager2d {
38
41
  x: this._config.gravityX,
39
42
  y: this._config.gravityY
40
43
  });
44
+ this._world.integrationParameters.warmstartCoefficient = this._config.warmstartCoefficient;
41
45
  return;
42
46
  }
43
47
  this._world = restored;
44
- // CRITICAL: QueryPipeline is NOT included in the Rapier snapshot format.
45
- // After restoreSnapshot(), the world has a fresh empty QueryPipeline.
46
- // Any scene queries (ray casts, shape casts) will return wrong results until rebuilt.
47
- this._world.updateSceneQueries();
48
+ this._world.integrationParameters.warmstartCoefficient = this._config.warmstartCoefficient;
48
49
  }
49
50
  // Entity-collider mapping
50
51
  registerCollider(colliderHandle, entity) {
@@ -99,8 +100,10 @@ export class PhysicsWorldManager2d {
99
100
  if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
100
101
  return this._world.createCollider(desc, parent);
101
102
  }
102
- createTrimeshCollider(vertices, indices, parent) {
103
+ createTrimeshCollider(vertices, indices, parent, groups, activeEvents) {
103
104
  const desc = this._rapier.ColliderDesc.trimesh(vertices, indices);
105
+ if (groups !== undefined) desc.setCollisionGroups(groups);
106
+ if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
104
107
  return this._world.createCollider(desc, parent);
105
108
  }
106
109
  createColliderFromDesc(desc, parent) {
@@ -122,6 +125,9 @@ export class PhysicsWorldManager2d {
122
125
  const collider = this._world.getCollider(handle);
123
126
  this._world.removeCollider(collider, wakeUp);
124
127
  }
128
+ debugRender() {
129
+ return this._world.debugRender();
130
+ }
125
131
  // Rapier module access (for creating descs in game code)
126
132
  get rapier() {
127
133
  return this._rapier;
@@ -141,6 +147,7 @@ export class PhysicsWorldManager2d {
141
147
  this._substeps = _config.substeps;
142
148
  this._substepDt = frameLengthMs / 1000 / this._substeps;
143
149
  this._world.timestep = this._substepDt;
150
+ this._world.integrationParameters.warmstartCoefficient = _config.warmstartCoefficient;
144
151
  this._collisionEvents = new CollisionEvents2d(_rapier);
145
152
  }
146
153
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/physics-world-manager-2d.ts"],"sourcesContent":["import { createLogger } from '@lagless/misc';\nimport { ColliderEntityMap } from '@lagless/physics-shared';\nimport { CollisionEvents2d } from './collision-events-2d.js';\nimport { PhysicsConfig2d } from './physics-config-2d.js';\nimport {\n RapierCollider2d,\n RapierColliderDesc2d,\n RapierEventQueue,\n RapierModule2d,\n RapierRigidBody2d,\n RapierRigidBodyDesc2d,\n RapierWorld2d,\n} from './rapier-types-2d.js';\n\nconst log = createLogger('PhysicsWorldManager2d');\n\nexport class PhysicsWorldManager2d {\n private _world: RapierWorld2d;\n private readonly _substeps: number;\n private readonly _substepDt: number;\n private readonly _collisionEvents: CollisionEvents2d;\n private readonly _colliderEntityMap = new ColliderEntityMap();\n\n public get world(): RapierWorld2d {\n return this._world;\n }\n\n public get substeps(): number {\n return this._substeps;\n }\n\n public get colliderEntityMap(): ColliderEntityMap {\n return this._colliderEntityMap;\n }\n\n public get collisionEvents(): CollisionEvents2d {\n return this._collisionEvents;\n }\n\n constructor(\n private readonly _rapier: RapierModule2d,\n private readonly _config: PhysicsConfig2d,\n frameLengthMs: number,\n ) {\n this._world = new _rapier.World({\n x: _config.gravityX,\n y: _config.gravityY,\n });\n\n this._substeps = _config.substeps;\n this._substepDt = (frameLengthMs / 1000) / this._substeps;\n this._world.timestep = this._substepDt;\n this._collisionEvents = new CollisionEvents2d(_rapier);\n }\n\n /**\n * Step the physics world for one ECS frame.\n * Executes `substeps` Rapier steps, each with a fixed dt derived from frameLength / substeps.\n * When collision events are enabled, drains the event queue after all substeps.\n */\n public step(): void {\n const eq = this._collisionEvents.eventQueue as RapierEventQueue;\n for (let i = 0; i < this._substeps; i++) {\n this._world.step(eq);\n }\n this._collisionEvents.drain(this._colliderEntityMap, this._world);\n }\n\n public takeSnapshot(): Uint8Array {\n return this._world.takeSnapshot();\n }\n\n public restoreSnapshot(data: Uint8Array): void {\n this._world.free();\n const restored = this._rapier.World.restoreSnapshot(data);\n if (!restored) {\n log.warn('Failed to restore Rapier snapshot, recreating world');\n this._world = new this._rapier.World({\n x: this._config.gravityX,\n y: this._config.gravityY,\n });\n return;\n }\n this._world = restored;\n // CRITICAL: QueryPipeline is NOT included in the Rapier snapshot format.\n // After restoreSnapshot(), the world has a fresh empty QueryPipeline.\n // Any scene queries (ray casts, shape casts) will return wrong results until rebuilt.\n this._world.updateSceneQueries();\n }\n\n // Entity-collider mapping\n public registerCollider(colliderHandle: number, entity: number): void {\n this._colliderEntityMap.set(colliderHandle, entity);\n }\n\n public unregisterCollider(colliderHandle: number): void {\n this._colliderEntityMap.delete(colliderHandle);\n }\n\n // Body factories\n public createDynamicBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.dynamic();\n return this._world.createRigidBody(desc);\n }\n\n public createFixedBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.fixed();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicPositionBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.kinematicPositionBased();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicVelocityBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.kinematicVelocityBased();\n return this._world.createRigidBody(desc);\n }\n\n public createBodyFromDesc(desc: RapierRigidBodyDesc2d): RapierRigidBody2d {\n return this._world.createRigidBody(desc);\n }\n\n // Collider factories (with optional collision groups and active events)\n public createBallCollider(\n radius: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.ball(radius);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createCuboidCollider(\n hx: number, hy: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.cuboid(hx, hy);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createCapsuleCollider(\n halfHeight: number, radius: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.capsule(halfHeight, radius);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createConvexHullCollider(\n points: Float32Array,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d | null {\n const desc = this._rapier.ColliderDesc.convexHull(points);\n if (!desc) return null;\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createTrimeshCollider(\n vertices: Float32Array,\n indices: Uint32Array,\n parent?: RapierRigidBody2d,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.trimesh(vertices, indices);\n return this._world.createCollider(desc, parent);\n }\n\n public createColliderFromDesc(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d {\n return this._world.createCollider(desc, parent);\n }\n\n // Accessors\n public getBody(handle: number): RapierRigidBody2d {\n return this._world.getRigidBody(handle);\n }\n\n public getCollider(handle: number): RapierCollider2d {\n return this._world.getCollider(handle);\n }\n\n // Removal\n public removeBody(handle: number): void {\n const body = this._world.getRigidBody(handle);\n this._world.removeRigidBody(body);\n }\n\n public removeCollider(handle: number, wakeUp = true): void {\n const collider = this._world.getCollider(handle);\n this._world.removeCollider(collider, wakeUp);\n }\n\n // Rapier module access (for creating descs in game code)\n public get rapier(): RapierModule2d {\n return this._rapier;\n }\n\n public dispose(): void {\n this._collisionEvents.dispose();\n this._world.free();\n }\n}\n"],"names":["createLogger","ColliderEntityMap","CollisionEvents2d","log","PhysicsWorldManager2d","world","_world","substeps","_substeps","colliderEntityMap","_colliderEntityMap","collisionEvents","_collisionEvents","step","eq","eventQueue","i","drain","takeSnapshot","restoreSnapshot","data","free","restored","_rapier","World","warn","x","_config","gravityX","y","gravityY","updateSceneQueries","registerCollider","colliderHandle","entity","set","unregisterCollider","delete","createDynamicBody","desc","RigidBodyDesc","dynamic","createRigidBody","createFixedBody","fixed","createKinematicPositionBody","kinematicPositionBased","createKinematicVelocityBody","kinematicVelocityBased","createBodyFromDesc","createBallCollider","radius","parent","groups","activeEvents","ColliderDesc","ball","undefined","setCollisionGroups","setActiveEvents","createCollider","createCuboidCollider","hx","hy","cuboid","createCapsuleCollider","halfHeight","capsule","createConvexHullCollider","points","convexHull","createTrimeshCollider","vertices","indices","trimesh","createColliderFromDesc","getBody","handle","getRigidBody","getCollider","removeBody","body","removeRigidBody","removeCollider","wakeUp","collider","rapier","dispose","constructor","frameLengthMs","_substepDt","timestep"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/lib/physics-world-manager-2d.ts"],"sourcesContent":["import { createLogger } from '@lagless/misc';\nimport { ColliderEntityMap } from '@lagless/physics-shared';\nimport { CollisionEvents2d } from './collision-events-2d.js';\nimport { PhysicsConfig2d } from './physics-config-2d.js';\nimport type {\n DebugRenderBuffers,\n RapierCollider2d,\n RapierColliderDesc2d,\n RapierEventQueue,\n RapierModule2d,\n RapierRigidBody2d,\n RapierRigidBodyDesc2d,\n RapierWorld2d,\n} from './rapier-types-2d.js';\n\nconst log = createLogger('PhysicsWorldManager2d');\n\nexport class PhysicsWorldManager2d {\n private _world: RapierWorld2d;\n private readonly _substeps: number;\n private readonly _substepDt: number;\n private readonly _collisionEvents: CollisionEvents2d;\n private readonly _colliderEntityMap = new ColliderEntityMap();\n\n public get world(): RapierWorld2d {\n return this._world;\n }\n\n public get substeps(): number {\n return this._substeps;\n }\n\n public get substepDt(): number {\n return this._substepDt;\n }\n\n public get colliderEntityMap(): ColliderEntityMap {\n return this._colliderEntityMap;\n }\n\n public get collisionEvents(): CollisionEvents2d {\n return this._collisionEvents;\n }\n\n constructor(\n private readonly _rapier: RapierModule2d,\n private readonly _config: PhysicsConfig2d,\n frameLengthMs: number,\n ) {\n this._world = new _rapier.World({\n x: _config.gravityX,\n y: _config.gravityY,\n });\n\n this._substeps = _config.substeps;\n this._substepDt = (frameLengthMs / 1000) / this._substeps;\n this._world.timestep = this._substepDt;\n this._world.integrationParameters.warmstartCoefficient = _config.warmstartCoefficient;\n this._collisionEvents = new CollisionEvents2d(_rapier);\n }\n\n /**\n * Step the physics world for one ECS frame.\n * Executes `substeps` Rapier steps, each with a fixed dt derived from frameLength / substeps.\n * When collision events are enabled, drains the event queue after all substeps.\n */\n public step(): void {\n const eq = this._collisionEvents.eventQueue as RapierEventQueue;\n for (let i = 0; i < this._substeps; i++) {\n this._world.step(eq);\n }\n this._collisionEvents.drain(this._colliderEntityMap, this._world);\n }\n\n public takeSnapshot(): Uint8Array {\n return this._world.takeSnapshot();\n }\n\n public restoreSnapshot(data: Uint8Array): void {\n this._world.free();\n const restored = this._rapier.World.restoreSnapshot(data);\n if (!restored) {\n log.warn('Failed to restore Rapier snapshot, recreating world');\n this._world = new this._rapier.World({\n x: this._config.gravityX,\n y: this._config.gravityY,\n });\n this._world.integrationParameters.warmstartCoefficient = this._config.warmstartCoefficient;\n return;\n }\n this._world = restored;\n this._world.integrationParameters.warmstartCoefficient = this._config.warmstartCoefficient;\n }\n\n // Entity-collider mapping\n public registerCollider(colliderHandle: number, entity: number): void {\n this._colliderEntityMap.set(colliderHandle, entity);\n }\n\n public unregisterCollider(colliderHandle: number): void {\n this._colliderEntityMap.delete(colliderHandle);\n }\n\n // Body factories\n public createDynamicBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.dynamic();\n return this._world.createRigidBody(desc);\n }\n\n public createFixedBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.fixed();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicPositionBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.kinematicPositionBased();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicVelocityBody(): RapierRigidBody2d {\n const desc = this._rapier.RigidBodyDesc.kinematicVelocityBased();\n return this._world.createRigidBody(desc);\n }\n\n public createBodyFromDesc(desc: RapierRigidBodyDesc2d): RapierRigidBody2d {\n return this._world.createRigidBody(desc);\n }\n\n // Collider factories (with optional collision groups and active events)\n public createBallCollider(\n radius: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.ball(radius);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createCuboidCollider(\n hx: number, hy: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.cuboid(hx, hy);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createCapsuleCollider(\n halfHeight: number, radius: number,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.capsule(halfHeight, radius);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createConvexHullCollider(\n points: Float32Array,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d | null {\n const desc = this._rapier.ColliderDesc.convexHull(points);\n if (!desc) return null;\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createTrimeshCollider(\n vertices: Float32Array,\n indices: Uint32Array,\n parent?: RapierRigidBody2d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider2d {\n const desc = this._rapier.ColliderDesc.trimesh(vertices, indices);\n if (groups !== undefined) desc.setCollisionGroups(groups);\n if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);\n return this._world.createCollider(desc, parent);\n }\n\n public createColliderFromDesc(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d {\n return this._world.createCollider(desc, parent);\n }\n\n // Accessors\n public getBody(handle: number): RapierRigidBody2d {\n return this._world.getRigidBody(handle);\n }\n\n public getCollider(handle: number): RapierCollider2d {\n return this._world.getCollider(handle);\n }\n\n // Removal\n public removeBody(handle: number): void {\n const body = this._world.getRigidBody(handle);\n this._world.removeRigidBody(body);\n }\n\n public removeCollider(handle: number, wakeUp = true): void {\n const collider = this._world.getCollider(handle);\n this._world.removeCollider(collider, wakeUp);\n }\n\n public debugRender(): DebugRenderBuffers {\n return this._world.debugRender();\n }\n\n // Rapier module access (for creating descs in game code)\n public get rapier(): RapierModule2d {\n return this._rapier;\n }\n\n public dispose(): void {\n this._collisionEvents.dispose();\n this._world.free();\n }\n}\n"],"names":["createLogger","ColliderEntityMap","CollisionEvents2d","log","PhysicsWorldManager2d","world","_world","substeps","_substeps","substepDt","_substepDt","colliderEntityMap","_colliderEntityMap","collisionEvents","_collisionEvents","step","eq","eventQueue","i","drain","takeSnapshot","restoreSnapshot","data","free","restored","_rapier","World","warn","x","_config","gravityX","y","gravityY","integrationParameters","warmstartCoefficient","registerCollider","colliderHandle","entity","set","unregisterCollider","delete","createDynamicBody","desc","RigidBodyDesc","dynamic","createRigidBody","createFixedBody","fixed","createKinematicPositionBody","kinematicPositionBased","createKinematicVelocityBody","kinematicVelocityBased","createBodyFromDesc","createBallCollider","radius","parent","groups","activeEvents","ColliderDesc","ball","undefined","setCollisionGroups","setActiveEvents","createCollider","createCuboidCollider","hx","hy","cuboid","createCapsuleCollider","halfHeight","capsule","createConvexHullCollider","points","convexHull","createTrimeshCollider","vertices","indices","trimesh","createColliderFromDesc","getBody","handle","getRigidBody","getCollider","removeBody","body","removeRigidBody","removeCollider","wakeUp","collider","debugRender","rapier","dispose","constructor","frameLengthMs","timestep"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Minimal type abstractions for Rapier 2D API.
3
- * Works with both @dimforge/rapier2d and @dimforge/rapier2d-compat.
3
+ * Works with @lagless/rapier2d-deterministic-compat.
4
4
  * The consumer project injects the actual RAPIER module at runtime.
5
5
  */
6
6
  export interface RapierVector2 {
@@ -66,19 +66,54 @@ export interface RapierTempContactForceEvent2d {
66
66
  maxForceMagnitude(): number;
67
67
  maxForceDirection(): RapierVector2;
68
68
  }
69
+ export interface DebugRenderBuffers {
70
+ vertices: Float32Array;
71
+ colors: Float32Array;
72
+ }
73
+ export interface RapierIntegrationParameters {
74
+ warmstartCoefficient: number;
75
+ }
69
76
  export interface RapierWorld2d {
70
77
  timestep: number;
78
+ integrationParameters: RapierIntegrationParameters;
71
79
  step(eventQueue?: RapierEventQueue): void;
72
80
  free(): void;
73
81
  takeSnapshot(): Uint8Array;
82
+ debugRender(): DebugRenderBuffers;
74
83
  getRigidBody(handle: number): RapierRigidBody2d;
75
84
  getCollider(handle: number): RapierCollider2d;
76
85
  createRigidBody(desc: RapierRigidBodyDesc2d): RapierRigidBody2d;
77
86
  createCollider(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d;
78
87
  removeRigidBody(body: RapierRigidBody2d): void;
79
88
  removeCollider(collider: RapierCollider2d, wakeUp: boolean): void;
80
- /** Rebuilds the query pipeline (BVH) from current collider positions. Must be called after restoreSnapshot(). */
81
- updateSceneQueries(): void;
89
+ createCharacterController(offset: number): RapierKinematicCharacterController2d;
90
+ }
91
+ export interface RapierCharacterCollision2d {
92
+ toi: number;
93
+ witness1: RapierVector2;
94
+ witness2: RapierVector2;
95
+ normal1: RapierVector2;
96
+ normal2: RapierVector2;
97
+ translationDeltaApplied: RapierVector2;
98
+ translationDeltaRemaining: RapierVector2;
99
+ }
100
+ export interface RapierKinematicCharacterController2d {
101
+ setUp(up: RapierVector2): void;
102
+ setMaxSlopeClimbAngle(angle: number): void;
103
+ setMinSlopeSlideAngle(angle: number): void;
104
+ enableAutostep(maxHeight: number, minWidth: number, includeDynamicBodies: boolean): void;
105
+ disableAutostep(): void;
106
+ enableSnapToGround(distance: number): void;
107
+ disableSnapToGround(): void;
108
+ setSlideEnabled(enabled: boolean): void;
109
+ setCharacterMass(mass: number): void;
110
+ setApplyImpulsesToDynamicBodies(apply: boolean): void;
111
+ computeColliderMovement(collider: RapierCollider2d, desiredTranslation: RapierVector2, filterFlags?: number, filterGroups?: number): void;
112
+ computedMovement(): RapierVector2;
113
+ computedGrounded(): boolean;
114
+ numComputedCollisions(): number;
115
+ computedCollision(index: number): RapierCharacterCollision2d | null;
116
+ free(): void;
82
117
  }
83
118
  export interface RapierModule2d {
84
119
  World: {
@@ -106,5 +141,15 @@ export interface RapierModule2d {
106
141
  COLLISION_EVENTS: number;
107
142
  CONTACT_FORCE_EVENTS: number;
108
143
  };
144
+ QueryFilterFlags: {
145
+ ONLY_DYNAMIC: number;
146
+ ONLY_KINEMATIC: number;
147
+ ONLY_FIXED: number;
148
+ EXCLUDE_DYNAMIC: number;
149
+ EXCLUDE_KINEMATIC: number;
150
+ EXCLUDE_FIXED: number;
151
+ EXCLUDE_SENSORS: number;
152
+ EXCLUDE_SOLIDS: number;
153
+ };
109
154
  }
110
155
  //# sourceMappingURL=rapier-types-2d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rapier-types-2d.d.ts","sourceRoot":"","sources":["../../src/lib/rapier-types-2d.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rapier-types-2d.d.ts","sourceRoot":"","sources":["../../src/lib/rapier-types-2d.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Minimal type abstractions for Rapier 2D API.
3
- * Works with both @dimforge/rapier2d and @dimforge/rapier2d-compat.
3
+ * Works with @lagless/rapier2d-deterministic-compat.
4
4
  * The consumer project injects the actual RAPIER module at runtime.
5
5
  */ export { };
6
6
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/rapier-types-2d.ts"],"sourcesContent":["/**\n * Minimal type abstractions for Rapier 2D API.\n * Works with both @dimforge/rapier2d and @dimforge/rapier2d-compat.\n * The consumer project injects the actual RAPIER module at runtime.\n */\n\nexport interface RapierVector2 {\n x: number;\n y: number;\n}\n\nexport interface RapierRigidBody2d {\n handle: number;\n translation(): RapierVector2;\n rotation(): number;\n linvel(): RapierVector2;\n angvel(): number;\n setTranslation(translation: RapierVector2, wakeUp: boolean): void;\n setRotation(angle: number, wakeUp: boolean): void;\n setLinvel(linvel: RapierVector2, wakeUp: boolean): void;\n setAngvel(angvel: number, wakeUp: boolean): void;\n setLinearDamping(damping: number): void;\n setAngularDamping(damping: number): void;\n setAdditionalMass(mass: number): void;\n isKinematic(): boolean;\n isDynamic(): boolean;\n isFixed(): boolean;\n setNextKinematicTranslation(translation: RapierVector2): void;\n setNextKinematicRotation(angle: number): void;\n}\n\nexport interface RapierCollider2d {\n handle: number;\n parent(): RapierRigidBody2d | null;\n isSensor(): boolean;\n collisionGroups(): number;\n setCollisionGroups(groups: number): void;\n setActiveEvents(events: number): void;\n setSensor(isSensor: boolean): void;\n}\n\nexport interface RapierRigidBodyDesc2d {\n setTranslation(x: number, y: number): RapierRigidBodyDesc2d;\n setRotation(angle: number): RapierRigidBodyDesc2d;\n setLinearDamping(damping: number): RapierRigidBodyDesc2d;\n setAngularDamping(damping: number): RapierRigidBodyDesc2d;\n setAdditionalMass(mass: number): RapierRigidBodyDesc2d;\n}\n\nexport interface RapierColliderDesc2d {\n setTranslation(x: number, y: number): RapierColliderDesc2d;\n setRotation(angle: number): RapierColliderDesc2d;\n setRestitution(restitution: number): RapierColliderDesc2d;\n setFriction(friction: number): RapierColliderDesc2d;\n setDensity(density: number): RapierColliderDesc2d;\n setMass(mass: number): RapierColliderDesc2d;\n setSensor(isSensor: boolean): RapierColliderDesc2d;\n setCollisionGroups(groups: number): RapierColliderDesc2d;\n setActiveEvents(events: number): RapierColliderDesc2d;\n}\n\nexport interface RapierEventQueue {\n free(): void;\n drainCollisionEvents(f: (h1: number, h2: number, started: boolean) => void): void;\n drainContactForceEvents(f: (event: RapierTempContactForceEvent2d) => void): void;\n clear(): void;\n}\n\nexport interface RapierTempContactForceEvent2d {\n collider1(): number;\n collider2(): number;\n totalForceMagnitude(): number;\n maxForceMagnitude(): number;\n maxForceDirection(): RapierVector2;\n}\n\nexport interface RapierWorld2d {\n timestep: number;\n step(eventQueue?: RapierEventQueue): void;\n free(): void;\n takeSnapshot(): Uint8Array;\n getRigidBody(handle: number): RapierRigidBody2d;\n getCollider(handle: number): RapierCollider2d;\n createRigidBody(desc: RapierRigidBodyDesc2d): RapierRigidBody2d;\n createCollider(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d;\n removeRigidBody(body: RapierRigidBody2d): void;\n removeCollider(collider: RapierCollider2d, wakeUp: boolean): void;\n /** Rebuilds the query pipeline (BVH) from current collider positions. Must be called after restoreSnapshot(). */\n updateSceneQueries(): void;\n}\n\nexport interface RapierModule2d {\n World: {\n new (gravity: RapierVector2): RapierWorld2d;\n restoreSnapshot(data: Uint8Array): RapierWorld2d | null;\n };\n RigidBodyDesc: {\n dynamic(): RapierRigidBodyDesc2d;\n fixed(): RapierRigidBodyDesc2d;\n kinematicPositionBased(): RapierRigidBodyDesc2d;\n kinematicVelocityBased(): RapierRigidBodyDesc2d;\n };\n ColliderDesc: {\n ball(radius: number): RapierColliderDesc2d;\n cuboid(hx: number, hy: number): RapierColliderDesc2d;\n capsule(halfHeight: number, radius: number): RapierColliderDesc2d;\n trimesh(vertices: Float32Array, indices: Uint32Array): RapierColliderDesc2d;\n convexHull(points: Float32Array): RapierColliderDesc2d | null;\n };\n EventQueue: {\n new (autoDrain: boolean): RapierEventQueue;\n };\n ActiveEvents: {\n NONE: number;\n COLLISION_EVENTS: number;\n CONTACT_FORCE_EVENTS: number;\n };\n}\n"],"names":[],"rangeMappings":";;;;","mappings":"AAAA;;;;CAIC,GAuFD,WA0BC"}
1
+ {"version":3,"sources":["../../src/lib/rapier-types-2d.ts"],"sourcesContent":["/**\n * Minimal type abstractions for Rapier 2D API.\n * Works with @lagless/rapier2d-deterministic-compat.\n * The consumer project injects the actual RAPIER module at runtime.\n */\n\nexport interface RapierVector2 {\n x: number;\n y: number;\n}\n\nexport interface RapierRigidBody2d {\n handle: number;\n translation(): RapierVector2;\n rotation(): number;\n linvel(): RapierVector2;\n angvel(): number;\n setTranslation(translation: RapierVector2, wakeUp: boolean): void;\n setRotation(angle: number, wakeUp: boolean): void;\n setLinvel(linvel: RapierVector2, wakeUp: boolean): void;\n setAngvel(angvel: number, wakeUp: boolean): void;\n setLinearDamping(damping: number): void;\n setAngularDamping(damping: number): void;\n setAdditionalMass(mass: number): void;\n isKinematic(): boolean;\n isDynamic(): boolean;\n isFixed(): boolean;\n setNextKinematicTranslation(translation: RapierVector2): void;\n setNextKinematicRotation(angle: number): void;\n}\n\nexport interface RapierCollider2d {\n handle: number;\n parent(): RapierRigidBody2d | null;\n isSensor(): boolean;\n collisionGroups(): number;\n setCollisionGroups(groups: number): void;\n setActiveEvents(events: number): void;\n setSensor(isSensor: boolean): void;\n}\n\nexport interface RapierRigidBodyDesc2d {\n setTranslation(x: number, y: number): RapierRigidBodyDesc2d;\n setRotation(angle: number): RapierRigidBodyDesc2d;\n setLinearDamping(damping: number): RapierRigidBodyDesc2d;\n setAngularDamping(damping: number): RapierRigidBodyDesc2d;\n setAdditionalMass(mass: number): RapierRigidBodyDesc2d;\n}\n\nexport interface RapierColliderDesc2d {\n setTranslation(x: number, y: number): RapierColliderDesc2d;\n setRotation(angle: number): RapierColliderDesc2d;\n setRestitution(restitution: number): RapierColliderDesc2d;\n setFriction(friction: number): RapierColliderDesc2d;\n setDensity(density: number): RapierColliderDesc2d;\n setMass(mass: number): RapierColliderDesc2d;\n setSensor(isSensor: boolean): RapierColliderDesc2d;\n setCollisionGroups(groups: number): RapierColliderDesc2d;\n setActiveEvents(events: number): RapierColliderDesc2d;\n}\n\nexport interface RapierEventQueue {\n free(): void;\n drainCollisionEvents(f: (h1: number, h2: number, started: boolean) => void): void;\n drainContactForceEvents(f: (event: RapierTempContactForceEvent2d) => void): void;\n clear(): void;\n}\n\nexport interface RapierTempContactForceEvent2d {\n collider1(): number;\n collider2(): number;\n totalForceMagnitude(): number;\n maxForceMagnitude(): number;\n maxForceDirection(): RapierVector2;\n}\n\nexport interface DebugRenderBuffers {\n vertices: Float32Array;\n colors: Float32Array;\n}\n\nexport interface RapierIntegrationParameters {\n warmstartCoefficient: number;\n}\n\nexport interface RapierWorld2d {\n timestep: number;\n integrationParameters: RapierIntegrationParameters;\n step(eventQueue?: RapierEventQueue): void;\n free(): void;\n takeSnapshot(): Uint8Array;\n debugRender(): DebugRenderBuffers;\n getRigidBody(handle: number): RapierRigidBody2d;\n getCollider(handle: number): RapierCollider2d;\n createRigidBody(desc: RapierRigidBodyDesc2d): RapierRigidBody2d;\n createCollider(desc: RapierColliderDesc2d, parent?: RapierRigidBody2d): RapierCollider2d;\n removeRigidBody(body: RapierRigidBody2d): void;\n removeCollider(collider: RapierCollider2d, wakeUp: boolean): void;\n createCharacterController(offset: number): RapierKinematicCharacterController2d;\n}\n\n// ─── Kinematic Character Controller (2D) ────────────────────────\n\nexport interface RapierCharacterCollision2d {\n toi: number;\n witness1: RapierVector2;\n witness2: RapierVector2;\n normal1: RapierVector2;\n normal2: RapierVector2;\n translationDeltaApplied: RapierVector2;\n translationDeltaRemaining: RapierVector2;\n}\n\nexport interface RapierKinematicCharacterController2d {\n setUp(up: RapierVector2): void;\n setMaxSlopeClimbAngle(angle: number): void;\n setMinSlopeSlideAngle(angle: number): void;\n enableAutostep(maxHeight: number, minWidth: number, includeDynamicBodies: boolean): void;\n disableAutostep(): void;\n enableSnapToGround(distance: number): void;\n disableSnapToGround(): void;\n setSlideEnabled(enabled: boolean): void;\n setCharacterMass(mass: number): void;\n setApplyImpulsesToDynamicBodies(apply: boolean): void;\n computeColliderMovement(\n collider: RapierCollider2d,\n desiredTranslation: RapierVector2,\n filterFlags?: number,\n filterGroups?: number,\n ): void;\n computedMovement(): RapierVector2;\n computedGrounded(): boolean;\n numComputedCollisions(): number;\n computedCollision(index: number): RapierCharacterCollision2d | null;\n free(): void;\n}\n\nexport interface RapierModule2d {\n World: {\n new (gravity: RapierVector2): RapierWorld2d;\n restoreSnapshot(data: Uint8Array): RapierWorld2d | null;\n };\n RigidBodyDesc: {\n dynamic(): RapierRigidBodyDesc2d;\n fixed(): RapierRigidBodyDesc2d;\n kinematicPositionBased(): RapierRigidBodyDesc2d;\n kinematicVelocityBased(): RapierRigidBodyDesc2d;\n };\n ColliderDesc: {\n ball(radius: number): RapierColliderDesc2d;\n cuboid(hx: number, hy: number): RapierColliderDesc2d;\n capsule(halfHeight: number, radius: number): RapierColliderDesc2d;\n trimesh(vertices: Float32Array, indices: Uint32Array): RapierColliderDesc2d;\n convexHull(points: Float32Array): RapierColliderDesc2d | null;\n };\n EventQueue: {\n new (autoDrain: boolean): RapierEventQueue;\n };\n ActiveEvents: {\n NONE: number;\n COLLISION_EVENTS: number;\n CONTACT_FORCE_EVENTS: number;\n };\n QueryFilterFlags: {\n ONLY_DYNAMIC: number;\n ONLY_KINEMATIC: number;\n ONLY_FIXED: number;\n EXCLUDE_DYNAMIC: number;\n EXCLUDE_KINEMATIC: number;\n EXCLUDE_FIXED: number;\n EXCLUDE_SENSORS: number;\n EXCLUDE_SOLIDS: number;\n };\n}\n"],"names":[],"rangeMappings":";;;;","mappings":"AAAA;;;;CAIC,GAqID,WAoCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lagless/physics2d",
3
- "version": "0.0.44",
3
+ "version": "0.0.48",
4
4
  "license": "CC-BY-NC-4.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,15 +39,15 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@swc/helpers": "~0.5.11",
42
- "@lagless/core": "0.0.44",
43
- "@lagless/misc": "0.0.44",
44
- "@lagless/physics-shared": "0.0.44"
42
+ "@lagless/core": "0.0.48",
43
+ "@lagless/misc": "0.0.48",
44
+ "@lagless/physics-shared": "0.0.48"
45
45
  },
46
46
  "peerDependencies": {
47
- "@dimforge/rapier2d-compat": ">=0.14.0"
47
+ "@lagless/rapier2d-deterministic-compat": ">=0.15.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@dimforge/rapier2d-compat": "^0.14.0",
50
+ "@lagless/rapier2d-deterministic-compat": "^0.19.0",
51
51
  "unplugin-swc": "^1.5.7"
52
52
  },
53
53
  "files": [