@lagless/physics3d 0.0.43 → 0.0.46
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 +4 -4
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/collider-entity-map-3d.d.ts +1 -0
- package/dist/lib/collider-entity-map-3d.d.ts.map +1 -1
- package/dist/lib/collider-entity-map-3d.js +1 -1
- package/dist/lib/collider-entity-map-3d.js.map +1 -1
- package/dist/lib/collision-events-3d.d.ts +1 -1
- package/dist/lib/collision-events-3d.d.ts.map +1 -1
- package/dist/lib/collision-events-3d.js.map +1 -1
- package/dist/lib/collision-layers-3d.d.ts +1 -0
- package/dist/lib/collision-layers-3d.d.ts.map +1 -1
- package/dist/lib/collision-layers-3d.js +1 -1
- package/dist/lib/collision-layers-3d.js.map +1 -1
- package/dist/lib/physics-config-3d.d.ts +1 -3
- package/dist/lib/physics-config-3d.d.ts.map +1 -1
- package/dist/lib/physics-config-3d.js +1 -2
- package/dist/lib/physics-config-3d.js.map +1 -1
- package/dist/lib/physics-runner-3d.d.ts +3 -4
- package/dist/lib/physics-runner-3d.d.ts.map +1 -1
- package/dist/lib/physics-runner-3d.js +3 -3
- package/dist/lib/physics-runner-3d.js.map +1 -1
- package/dist/lib/physics-simulation-3d.d.ts +2 -6
- package/dist/lib/physics-simulation-3d.d.ts.map +1 -1
- package/dist/lib/physics-simulation-3d.js +1 -6
- package/dist/lib/physics-simulation-3d.js.map +1 -1
- package/dist/lib/physics-world-manager-3d.d.ts +8 -4
- package/dist/lib/physics-world-manager-3d.d.ts.map +1 -1
- package/dist/lib/physics-world-manager-3d.js +25 -7
- package/dist/lib/physics-world-manager-3d.js.map +1 -1
- package/dist/lib/rapier-types-3d.d.ts +155 -0
- package/dist/lib/rapier-types-3d.d.ts.map +1 -0
- package/dist/lib/rapier-types-3d.js +7 -0
- package/dist/lib/rapier-types-3d.js.map +1 -0
- package/dist/lib/rapier-types.d.ts +7 -153
- package/dist/lib/rapier-types.d.ts.map +1 -1
- package/dist/lib/rapier-types.js +5 -4
- package/dist/lib/rapier-types.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -5,10 +5,10 @@ Rapier 3D physics integration for the lagless ECS framework. Deterministic stepp
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pnpm add @lagless/physics3d @dimforge/rapier3d-compat
|
|
8
|
+
pnpm add @lagless/physics3d @dimforge/rapier3d-deterministic-compat
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Peer dependency: `@dimforge/rapier3d-compat >= 0.
|
|
11
|
+
Peer dependency: `@dimforge/rapier3d-deterministic-compat >= 0.15.0`
|
|
12
12
|
|
|
13
13
|
## Architecture
|
|
14
14
|
|
|
@@ -18,7 +18,7 @@ Peer dependency: `@dimforge/rapier3d-compat >= 0.14.0`
|
|
|
18
18
|
▼
|
|
19
19
|
@lagless/physics3d (3D wrappers: PhysicsWorldManager3d, PhysicsStepSync3d, PhysicsRunner3d, ...)
|
|
20
20
|
│
|
|
21
|
-
└── peer: @dimforge/rapier3d-compat
|
|
21
|
+
└── peer: @dimforge/rapier3d-deterministic-compat
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## ECS Schema (codegen)
|
|
@@ -55,7 +55,7 @@ filters:
|
|
|
55
55
|
### Runner Setup
|
|
56
56
|
|
|
57
57
|
```typescript
|
|
58
|
-
import RAPIER from '@dimforge/rapier3d-compat';
|
|
58
|
+
import RAPIER from '@dimforge/rapier3d-deterministic-compat';
|
|
59
59
|
import { PhysicsConfig3d } from '@lagless/physics3d';
|
|
60
60
|
import { MyGameRunner } from './code-gen/my-game.runner.js';
|
|
61
61
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
export * from './lib/rapier-types.js';
|
|
1
|
+
export * from './lib/rapier-types-3d.js';
|
|
2
2
|
export * from './lib/physics-config-3d.js';
|
|
3
3
|
export * from './lib/physics-world-manager-3d.js';
|
|
4
4
|
export * from './lib/physics-simulation-3d.js';
|
|
5
5
|
export * from './lib/physics-runner-3d.js';
|
|
6
6
|
export * from './lib/physics-step-sync-3d.js';
|
|
7
|
-
export * from './lib/collision-layers-3d.js';
|
|
8
7
|
export * from './lib/collision-events-3d.js';
|
|
8
|
+
export { BodyType, type BodyTypeValue, ColliderEntityMap, UNMAPPED_ENTITY, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
|
|
9
|
+
export type { IPhysicsRefsComponent, IFilter, IPhysicsWorldManagerBase, IRapierEventQueue, IColliderSensorChecker } from '@lagless/physics-shared';
|
|
9
10
|
export * from './lib/collider-entity-map-3d.js';
|
|
11
|
+
export * from './lib/collision-layers-3d.js';
|
|
12
|
+
export * from './lib/rapier-types.js';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAG7C,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;AAGnJ,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
export * from './lib/rapier-types.js';
|
|
1
|
+
export * from './lib/rapier-types-3d.js';
|
|
2
2
|
export * from './lib/physics-config-3d.js';
|
|
3
3
|
export * from './lib/physics-world-manager-3d.js';
|
|
4
4
|
export * from './lib/physics-simulation-3d.js';
|
|
5
5
|
export * from './lib/physics-runner-3d.js';
|
|
6
6
|
export * from './lib/physics-step-sync-3d.js';
|
|
7
|
-
export * from './lib/collision-layers-3d.js';
|
|
8
7
|
export * from './lib/collision-events-3d.js';
|
|
8
|
+
// Re-exports from @lagless/physics-shared (matching physics2d pattern)
|
|
9
|
+
export { BodyType, ColliderEntityMap, UNMAPPED_ENTITY, handleToIndex, CollisionLayers, CollisionEventsBase } from '@lagless/physics-shared';
|
|
10
|
+
// Deprecated aliases (use ColliderEntityMap and CollisionLayers from @lagless/physics-shared directly)
|
|
9
11
|
export * from './lib/collider-entity-map-3d.js';
|
|
12
|
+
export * from './lib/collision-layers-3d.js';
|
|
13
|
+
// Deprecated unsuffixed type names (use suffixed names from rapier-types-3d.js)
|
|
14
|
+
export * from './lib/rapier-types.js';
|
|
10
15
|
|
|
11
16
|
//# 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.js';\nexport * from './lib/physics-config-3d.js';\nexport * from './lib/physics-world-manager-3d.js';\nexport * from './lib/physics-simulation-3d.js';\nexport * from './lib/physics-runner-3d.js';\nexport * from './lib/physics-step-sync-3d.js';\nexport * from './lib/collision-
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './lib/rapier-types-3d.js';\nexport * from './lib/physics-config-3d.js';\nexport * from './lib/physics-world-manager-3d.js';\nexport * from './lib/physics-simulation-3d.js';\nexport * from './lib/physics-runner-3d.js';\nexport * from './lib/physics-step-sync-3d.js';\nexport * from './lib/collision-events-3d.js';\n\n// Re-exports from @lagless/physics-shared (matching physics2d pattern)\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\n// Deprecated aliases (use ColliderEntityMap and CollisionLayers from @lagless/physics-shared directly)\nexport * from './lib/collider-entity-map-3d.js';\nexport * from './lib/collision-layers-3d.js';\n\n// Deprecated unsuffixed type names (use suffixed names from rapier-types-3d.js)\nexport * from './lib/rapier-types.js';\n"],"names":["BodyType","ColliderEntityMap","UNMAPPED_ENTITY","handleToIndex","CollisionLayers","CollisionEventsBase"],"rangeMappings":";;;;;;;;;;;;;","mappings":"AAAA,cAAc,2BAA2B;AACzC,cAAc,6BAA6B;AAC3C,cAAc,oCAAoC;AAClD,cAAc,iCAAiC;AAC/C,cAAc,6BAA6B;AAC3C,cAAc,gCAAgC;AAC9C,cAAc,+BAA+B;AAE7C,uEAAuE;AACvE,SAASA,QAAQ,EAAsBC,iBAAiB,EAAEC,eAAe,EAAEC,aAAa,EAAEC,eAAe,EAAEC,mBAAmB,QAAQ,0BAA0B;AAGhK,uGAAuG;AACvG,cAAc,kCAAkC;AAChD,cAAc,+BAA+B;AAE7C,gFAAgF;AAChF,cAAc,wBAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collider-entity-map-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collider-entity-map-3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,mBAAmB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"collider-entity-map-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collider-entity-map-3d.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,iBAAiB,IAAI,mBAAmB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ColliderEntityMap as ColliderEntityMap3d, handleToIndex } from '@lagless/physics-shared';
|
|
1
|
+
/** @deprecated Use `ColliderEntityMap` from `@lagless/physics-shared` or `@lagless/physics3d` directly. */ export { ColliderEntityMap as ColliderEntityMap3d, handleToIndex } from '@lagless/physics-shared';
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=collider-entity-map-3d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/collider-entity-map-3d.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/lib/collider-entity-map-3d.ts"],"sourcesContent":["/** @deprecated Use `ColliderEntityMap` from `@lagless/physics-shared` or `@lagless/physics3d` directly. */\nexport { ColliderEntityMap as ColliderEntityMap3d, handleToIndex } from '@lagless/physics-shared';\n"],"names":["ColliderEntityMap","ColliderEntityMap3d","handleToIndex"],"rangeMappings":"","mappings":"AAAA,yGAAyG,GACzG,SAASA,qBAAqBC,mBAAmB,EAAEC,aAAa,QAAQ,0BAA0B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CollisionEventsBase } from '@lagless/physics-shared';
|
|
2
|
-
import type { RapierModule3d } from './rapier-types.js';
|
|
2
|
+
import type { RapierModule3d } from './rapier-types-3d.js';
|
|
3
3
|
export declare class CollisionEvents3d extends CollisionEventsBase {
|
|
4
4
|
constructor(rapier: RapierModule3d, initialCapacity?: number);
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision-events-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collision-events-3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"collision-events-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collision-events-3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,iBAAkB,SAAQ,mBAAmB;gBAC5C,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,MAAM;CAG7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/collision-events-3d.ts"],"sourcesContent":["import { CollisionEventsBase } from '@lagless/physics-shared';\nimport type { RapierModule3d } from './rapier-types.js';\n\nexport class CollisionEvents3d extends CollisionEventsBase {\n constructor(rapier: RapierModule3d, initialCapacity?: number) {\n super(rapier.EventQueue, initialCapacity);\n }\n}\n"],"names":["CollisionEventsBase","CollisionEvents3d","constructor","rapier","initialCapacity","EventQueue"],"rangeMappings":";;;;;","mappings":"AAAA,SAASA,mBAAmB,QAAQ,0BAA0B;AAG9D,OAAO,MAAMC,0BAA0BD;IACrCE,YAAYC,MAAsB,EAAEC,eAAwB,CAAE;QAC5D,KAAK,CAACD,OAAOE,UAAU,EAAED;IAC3B;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/collision-events-3d.ts"],"sourcesContent":["import { CollisionEventsBase } from '@lagless/physics-shared';\nimport type { RapierModule3d } from './rapier-types-3d.js';\n\nexport class CollisionEvents3d extends CollisionEventsBase {\n constructor(rapier: RapierModule3d, initialCapacity?: number) {\n super(rapier.EventQueue, initialCapacity);\n }\n}\n"],"names":["CollisionEventsBase","CollisionEvents3d","constructor","rapier","initialCapacity","EventQueue"],"rangeMappings":";;;;;","mappings":"AAAA,SAASA,mBAAmB,QAAQ,0BAA0B;AAG9D,OAAO,MAAMC,0BAA0BD;IACrCE,YAAYC,MAAsB,EAAEC,eAAwB,CAAE;QAC5D,KAAK,CAACD,OAAOE,UAAU,EAAED;IAC3B;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collision-layers-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collision-layers-3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"collision-layers-3d.d.ts","sourceRoot":"","sources":["../../src/lib/collision-layers-3d.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,EAAE,eAAe,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { CollisionLayers as CollisionLayers3d } from '@lagless/physics-shared';
|
|
1
|
+
/** @deprecated Use `CollisionLayers` from `@lagless/physics-shared` or `@lagless/physics3d` directly. */ export { CollisionLayers as CollisionLayers3d } from '@lagless/physics-shared';
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=collision-layers-3d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/collision-layers-3d.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/lib/collision-layers-3d.ts"],"sourcesContent":["/** @deprecated Use `CollisionLayers` from `@lagless/physics-shared` or `@lagless/physics3d` directly. */\nexport { CollisionLayers as CollisionLayers3d } from '@lagless/physics-shared';\n"],"names":["CollisionLayers","CollisionLayers3d"],"rangeMappings":"","mappings":"AAAA,uGAAuG,GACvG,SAASA,mBAAmBC,iBAAiB,QAAQ,0BAA0B"}
|
|
@@ -3,8 +3,6 @@ export declare class PhysicsConfig3d {
|
|
|
3
3
|
readonly gravityY: number;
|
|
4
4
|
readonly gravityZ: number;
|
|
5
5
|
readonly substeps: number;
|
|
6
|
-
|
|
7
|
-
readonly substepDt: number;
|
|
8
|
-
constructor(options?: Partial<Pick<PhysicsConfig3d, 'gravityX' | 'gravityY' | 'gravityZ' | 'substeps'>>, frameDt?: number);
|
|
6
|
+
constructor(options?: Partial<Pick<PhysicsConfig3d, 'gravityX' | 'gravityY' | 'gravityZ' | 'substeps'>>);
|
|
9
7
|
}
|
|
10
8
|
//# sourceMappingURL=physics-config-3d.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-config-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-config-3d.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,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"physics-config-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-config-3d.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,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;CAO9F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export class PhysicsConfig3d {
|
|
2
|
-
constructor(options
|
|
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;
|
|
@@ -8,7 +8,6 @@ export class PhysicsConfig3d {
|
|
|
8
8
|
this.gravityZ = (_options_gravityZ = options == null ? void 0 : options.gravityZ) != null ? _options_gravityZ : 0;
|
|
9
9
|
var _options_substeps;
|
|
10
10
|
this.substeps = (_options_substeps = options == null ? void 0 : options.substeps) != null ? _options_substeps : 1;
|
|
11
|
-
this.substepDt = frameDt / this.substeps;
|
|
12
11
|
}
|
|
13
12
|
}
|
|
14
13
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/physics-config-3d.ts"],"sourcesContent":["export class PhysicsConfig3d {\n public readonly gravityX: number;\n public readonly gravityY: number;\n public readonly gravityZ: number;\n public readonly substeps: number;\n
|
|
1
|
+
{"version":3,"sources":["../../src/lib/physics-config-3d.ts"],"sourcesContent":["export class PhysicsConfig3d {\n public readonly gravityX: number;\n public readonly gravityY: number;\n public readonly gravityZ: number;\n public readonly substeps: number;\n\n constructor(\n options?: Partial<Pick<PhysicsConfig3d, 'gravityX' | 'gravityY' | 'gravityZ' | 'substeps'>>,\n ) {\n this.gravityX = options?.gravityX ?? 0;\n this.gravityY = options?.gravityY ?? -9.81;\n this.gravityZ = options?.gravityZ ?? 0;\n this.substeps = options?.substeps ?? 1;\n }\n}\n"],"names":["PhysicsConfig3d","constructor","options","gravityX","gravityY","gravityZ","substeps"],"rangeMappings":";;;;;;;;;;;","mappings":"AAAA,OAAO,MAAMA;IAMXC,YACEC,OAA2F,CAC3F;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;YACrBA;QAAhB,IAAI,CAACI,QAAQ,GAAGJ,CAAAA,oBAAAA,2BAAAA,QAASI,QAAQ,YAAjBJ,oBAAqB;IACvC;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 { CollisionEvents3d } from './collision-events-3d.js';
|
|
5
5
|
import { PhysicsConfig3d } from './physics-config-3d.js';
|
|
6
|
-
import { PhysicsSimulation3d } from './physics-simulation-3d.js';
|
|
7
6
|
import { PhysicsWorldManager3d } from './physics-world-manager-3d.js';
|
|
8
|
-
import { RapierModule3d } from './rapier-types.js';
|
|
7
|
+
import { RapierModule3d } from './rapier-types-3d.js';
|
|
9
8
|
export declare abstract class PhysicsRunner3d extends ECSRunner {
|
|
10
9
|
readonly PhysicsWorldManager: PhysicsWorldManager3d;
|
|
11
10
|
readonly PhysicsConfig: PhysicsConfig3d;
|
|
12
11
|
readonly CollisionEvents: CollisionEvents3d;
|
|
13
|
-
readonly Simulation:
|
|
12
|
+
readonly Simulation: PhysicsSimulationBase;
|
|
14
13
|
protected constructor(Config: ECSConfig, InputProviderInstance: AbstractInputProvider, Systems: Array<IECSSystemConstructor>, Signals: Array<ISignalConstructor>, Deps: ECSDeps, rapier: RapierModule3d, physicsConfig?: PhysicsConfig3d, collisionLayers?: CollisionLayers, extraRegistrations?: Array<[unknown, unknown]>);
|
|
15
14
|
dispose(): void;
|
|
16
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-runner-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-runner-3d.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;
|
|
1
|
+
{"version":3,"file":"physics-runner-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-runner-3d.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 { CollisionEvents3d } from './collision-events-3d.js';
|
|
4
4
|
import { PhysicsConfig3d } from './physics-config-3d.js';
|
|
5
|
-
import { PhysicsSimulation3d } from './physics-simulation-3d.js';
|
|
6
5
|
import { PhysicsWorldManager3d } from './physics-world-manager-3d.js';
|
|
7
6
|
export class PhysicsRunner3d extends ECSRunner {
|
|
8
7
|
dispose() {
|
|
@@ -12,7 +11,7 @@ export class PhysicsRunner3d extends ECSRunner {
|
|
|
12
11
|
constructor(Config, InputProviderInstance, Systems, Signals, Deps, rapier, physicsConfig, collisionLayers, extraRegistrations){
|
|
13
12
|
const config = physicsConfig != null ? physicsConfig : new PhysicsConfig3d();
|
|
14
13
|
const worldManager = new PhysicsWorldManager3d(rapier, config, Config.frameLength);
|
|
15
|
-
const simulation = new
|
|
14
|
+
const simulation = new PhysicsSimulationBase(Config, Deps, InputProviderInstance, worldManager);
|
|
16
15
|
const extraRegs = [
|
|
17
16
|
[
|
|
18
17
|
PhysicsWorldManager3d,
|
|
@@ -41,6 +40,7 @@ export class PhysicsRunner3d 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-3d.ts"],"sourcesContent":["import { AbstractInputProvider, ECSConfig, ECSRunner, ECSDeps, IECSSystemConstructor } from '@lagless/core';\nimport { ISignalConstructor } from '@lagless/core';\nimport { CollisionLayers } from '@lagless/physics-shared';\nimport { CollisionEvents3d } from './collision-events-3d.js';\nimport { PhysicsConfig3d } from './physics-config-3d.js';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/lib/physics-runner-3d.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 { CollisionEvents3d } from './collision-events-3d.js';\nimport { PhysicsConfig3d } from './physics-config-3d.js';\nimport { PhysicsWorldManager3d } from './physics-world-manager-3d.js';\nimport { RapierModule3d } from './rapier-types-3d.js';\n\nexport abstract class PhysicsRunner3d extends ECSRunner {\n public readonly PhysicsWorldManager: PhysicsWorldManager3d;\n public readonly PhysicsConfig: PhysicsConfig3d;\n public readonly CollisionEvents: CollisionEvents3d;\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: RapierModule3d,\n physicsConfig?: PhysicsConfig3d,\n collisionLayers?: CollisionLayers,\n extraRegistrations?: Array<[unknown, unknown]>,\n ) {\n const config = physicsConfig ?? new PhysicsConfig3d();\n const worldManager = new PhysicsWorldManager3d(rapier, config, Config.frameLength);\n const simulation = new PhysicsSimulationBase(Config, Deps, InputProviderInstance, worldManager);\n\n const extraRegs: Array<[unknown, unknown]> = [\n [PhysicsWorldManager3d, worldManager],\n [PhysicsConfig3d, config],\n [CollisionEvents3d, 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","CollisionEvents3d","PhysicsConfig3d","PhysicsWorldManager3d","PhysicsRunner3d","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
|
-
|
|
2
|
-
|
|
3
|
-
import { PhysicsWorldManager3d } from './physics-world-manager-3d.js';
|
|
4
|
-
export declare class PhysicsSimulation3d extends PhysicsSimulationBase {
|
|
5
|
-
constructor(config: ECSConfig, deps: ECSDeps, inputProvider: AbstractInputProvider, physicsWorldManager: PhysicsWorldManager3d);
|
|
6
|
-
}
|
|
1
|
+
/** @deprecated Use `PhysicsSimulationBase` from `@lagless/physics-shared` directly. */
|
|
2
|
+
export { PhysicsSimulationBase as PhysicsSimulation3d } from '@lagless/physics-shared';
|
|
7
3
|
//# sourceMappingURL=physics-simulation-3d.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-simulation-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-simulation-3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"physics-simulation-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-simulation-3d.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,qBAAqB,IAAI,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export class PhysicsSimulation3d 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 PhysicsSimulation3d } from '@lagless/physics-shared';
|
|
7
2
|
|
|
8
3
|
//# sourceMappingURL=physics-simulation-3d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/physics-simulation-3d.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/lib/physics-simulation-3d.ts"],"sourcesContent":["/** @deprecated Use `PhysicsSimulationBase` from `@lagless/physics-shared` directly. */\nexport { PhysicsSimulationBase as PhysicsSimulation3d } from '@lagless/physics-shared';\n"],"names":["PhysicsSimulationBase","PhysicsSimulation3d"],"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 { CollisionEvents3d } from './collision-events-3d.js';
|
|
3
3
|
import { PhysicsConfig3d } from './physics-config-3d.js';
|
|
4
|
-
import { RapierCollider3d,
|
|
4
|
+
import { RapierCollider3d, RapierColliderDesc3d, RapierModule3d, RapierRigidBody3d, RapierRigidBodyDesc3d, RapierWorld3d } from './rapier-types-3d.js';
|
|
5
5
|
export declare class PhysicsWorldManager3d {
|
|
6
6
|
private readonly _rapier;
|
|
7
7
|
private readonly _config;
|
|
@@ -12,6 +12,7 @@ export declare class PhysicsWorldManager3d {
|
|
|
12
12
|
private readonly _colliderEntityMap;
|
|
13
13
|
get world(): RapierWorld3d;
|
|
14
14
|
get substeps(): number;
|
|
15
|
+
get substepDt(): number;
|
|
15
16
|
get colliderEntityMap(): ColliderEntityMap;
|
|
16
17
|
get collisionEvents(): CollisionEvents3d;
|
|
17
18
|
constructor(_rapier: RapierModule3d, _config: PhysicsConfig3d, frameLengthMs: number);
|
|
@@ -29,12 +30,15 @@ export declare class PhysicsWorldManager3d {
|
|
|
29
30
|
createFixedBody(): RapierRigidBody3d;
|
|
30
31
|
createKinematicPositionBody(): RapierRigidBody3d;
|
|
31
32
|
createKinematicVelocityBody(): RapierRigidBody3d;
|
|
32
|
-
createBodyFromDesc(desc:
|
|
33
|
+
createBodyFromDesc(desc: RapierRigidBodyDesc3d): RapierRigidBody3d;
|
|
33
34
|
createBallCollider(radius: number, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
34
35
|
createCuboidCollider(hx: number, hy: number, hz: number, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
35
36
|
createCapsuleCollider(halfHeight: number, radius: number, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
createCylinderCollider(halfHeight: number, radius: number, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
38
|
+
createConeCollider(halfHeight: number, radius: number, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
39
|
+
createConvexHullCollider(points: Float32Array, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d | null;
|
|
40
|
+
createTrimeshCollider(vertices: Float32Array, indices: Uint32Array, parent?: RapierRigidBody3d, groups?: number, activeEvents?: number): RapierCollider3d;
|
|
41
|
+
createColliderFromDesc(desc: RapierColliderDesc3d, parent?: RapierRigidBody3d): RapierCollider3d;
|
|
38
42
|
getBody(handle: number): RapierRigidBody3d;
|
|
39
43
|
getCollider(handle: number): RapierCollider3d;
|
|
40
44
|
removeBody(handle: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-world-manager-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-world-manager-3d.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,
|
|
1
|
+
{"version":3,"file":"physics-world-manager-3d.d.ts","sourceRoot":"","sources":["../../src/lib/physics-world-manager-3d.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,9 @@ export class PhysicsWorldManager3d {
|
|
|
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
|
}
|
|
@@ -42,12 +45,6 @@ export class PhysicsWorldManager3d {
|
|
|
42
45
|
return;
|
|
43
46
|
}
|
|
44
47
|
this._world = restored;
|
|
45
|
-
// CRITICAL: QueryPipeline is NOT included in the Rapier snapshot format.
|
|
46
|
-
// After restoreSnapshot(), the world has a fresh empty QueryPipeline.
|
|
47
|
-
// computeColliderMovement() queries the QueryPipeline, so if we don't rebuild it
|
|
48
|
-
// here, KCC will detect no collisions on the first tick after rollback,
|
|
49
|
-
// causing non-deterministic movement and client divergence.
|
|
50
|
-
this._world.updateSceneQueries();
|
|
51
48
|
}
|
|
52
49
|
// Entity-collider mapping
|
|
53
50
|
registerCollider(colliderHandle, entity) {
|
|
@@ -95,8 +92,29 @@ export class PhysicsWorldManager3d {
|
|
|
95
92
|
if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
|
|
96
93
|
return this._world.createCollider(desc, parent);
|
|
97
94
|
}
|
|
98
|
-
|
|
95
|
+
createCylinderCollider(halfHeight, radius, parent, groups, activeEvents) {
|
|
96
|
+
const desc = this._rapier.ColliderDesc.cylinder(halfHeight, radius);
|
|
97
|
+
if (groups !== undefined) desc.setCollisionGroups(groups);
|
|
98
|
+
if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
|
|
99
|
+
return this._world.createCollider(desc, parent);
|
|
100
|
+
}
|
|
101
|
+
createConeCollider(halfHeight, radius, parent, groups, activeEvents) {
|
|
102
|
+
const desc = this._rapier.ColliderDesc.cone(halfHeight, radius);
|
|
103
|
+
if (groups !== undefined) desc.setCollisionGroups(groups);
|
|
104
|
+
if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
|
|
105
|
+
return this._world.createCollider(desc, parent);
|
|
106
|
+
}
|
|
107
|
+
createConvexHullCollider(points, parent, groups, activeEvents) {
|
|
108
|
+
const desc = this._rapier.ColliderDesc.convexHull(points);
|
|
109
|
+
if (!desc) return null;
|
|
110
|
+
if (groups !== undefined) desc.setCollisionGroups(groups);
|
|
111
|
+
if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
|
|
112
|
+
return this._world.createCollider(desc, parent);
|
|
113
|
+
}
|
|
114
|
+
createTrimeshCollider(vertices, indices, parent, groups, activeEvents) {
|
|
99
115
|
const desc = this._rapier.ColliderDesc.trimesh(vertices, indices);
|
|
116
|
+
if (groups !== undefined) desc.setCollisionGroups(groups);
|
|
117
|
+
if (activeEvents !== undefined) desc.setActiveEvents(activeEvents);
|
|
100
118
|
return this._world.createCollider(desc, parent);
|
|
101
119
|
}
|
|
102
120
|
createColliderFromDesc(desc, parent) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/physics-world-manager-3d.ts"],"sourcesContent":["import { createLogger } from '@lagless/misc';\nimport { ColliderEntityMap } from '@lagless/physics-shared';\nimport { CollisionEvents3d } from './collision-events-3d.js';\nimport { PhysicsConfig3d } from './physics-config-3d.js';\nimport {\n RapierCollider3d,\n RapierColliderDesc,\n RapierEventQueue,\n RapierModule3d,\n RapierRigidBody3d,\n RapierRigidBodyDesc,\n RapierWorld3d,\n} from './rapier-types.js';\n\nconst log = createLogger('PhysicsWorldManager3d');\n\nexport class PhysicsWorldManager3d {\n private _world: RapierWorld3d;\n private readonly _substeps: number;\n private readonly _substepDt: number;\n private readonly _collisionEvents: CollisionEvents3d;\n private readonly _colliderEntityMap = new ColliderEntityMap();\n\n public get world(): RapierWorld3d {\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(): CollisionEvents3d {\n return this._collisionEvents;\n }\n\n constructor(\n private readonly _rapier: RapierModule3d,\n private readonly _config: PhysicsConfig3d,\n frameLengthMs: number,\n ) {\n this._world = new _rapier.World({\n x: _config.gravityX,\n y: _config.gravityY,\n z: _config.gravityZ,\n });\n\n this._substeps = _config.substeps;\n this._substepDt = (frameLengthMs / 1000) / this._substeps;\n this._world.timestep = this._substepDt;\n this._collisionEvents = new CollisionEvents3d(_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 z: this._config.gravityZ,\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 // computeColliderMovement() queries the QueryPipeline, so if we don't rebuild it\n // here, KCC will detect no collisions on the first tick after rollback,\n // causing non-deterministic movement and client divergence.\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(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.dynamic();\n return this._world.createRigidBody(desc);\n }\n\n public createFixedBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.fixed();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicPositionBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.kinematicPositionBased();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicVelocityBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.kinematicVelocityBased();\n return this._world.createRigidBody(desc);\n }\n\n public createBodyFromDesc(desc: RapierRigidBodyDesc): RapierRigidBody3d {\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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\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, hz: number,\n parent?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\n const desc = this._rapier.ColliderDesc.cuboid(hx, hy, hz);\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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\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 createTrimeshCollider(\n vertices: Float32Array,\n indices: Uint32Array,\n parent?: RapierRigidBody3d,\n ): RapierCollider3d {\n const desc = this._rapier.ColliderDesc.trimesh(vertices, indices);\n return this._world.createCollider(desc, parent);\n }\n\n public createColliderFromDesc(desc: RapierColliderDesc, parent?: RapierRigidBody3d): RapierCollider3d {\n return this._world.createCollider(desc, parent);\n }\n\n // Accessors\n public getBody(handle: number): RapierRigidBody3d {\n return this._world.getRigidBody(handle);\n }\n\n public getCollider(handle: number): RapierCollider3d {\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(): RapierModule3d {\n return this._rapier;\n }\n\n public dispose(): void {\n this._collisionEvents.dispose();\n this._world.free();\n }\n}\n"],"names":["createLogger","ColliderEntityMap","CollisionEvents3d","log","PhysicsWorldManager3d","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","z","gravityZ","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","hz","cuboid","createCapsuleCollider","halfHeight","capsule","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-3d.ts"],"sourcesContent":["import { createLogger } from '@lagless/misc';\nimport { ColliderEntityMap } from '@lagless/physics-shared';\nimport { CollisionEvents3d } from './collision-events-3d.js';\nimport { PhysicsConfig3d } from './physics-config-3d.js';\nimport {\n RapierCollider3d,\n RapierColliderDesc3d,\n RapierEventQueue3d,\n RapierModule3d,\n RapierRigidBody3d,\n RapierRigidBodyDesc3d,\n RapierWorld3d,\n} from './rapier-types-3d.js';\n\nconst log = createLogger('PhysicsWorldManager3d');\n\nexport class PhysicsWorldManager3d {\n private _world: RapierWorld3d;\n private readonly _substeps: number;\n private readonly _substepDt: number;\n private readonly _collisionEvents: CollisionEvents3d;\n private readonly _colliderEntityMap = new ColliderEntityMap();\n\n public get world(): RapierWorld3d {\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(): CollisionEvents3d {\n return this._collisionEvents;\n }\n\n constructor(\n private readonly _rapier: RapierModule3d,\n private readonly _config: PhysicsConfig3d,\n frameLengthMs: number,\n ) {\n this._world = new _rapier.World({\n x: _config.gravityX,\n y: _config.gravityY,\n z: _config.gravityZ,\n });\n\n this._substeps = _config.substeps;\n this._substepDt = (frameLengthMs / 1000) / this._substeps;\n this._world.timestep = this._substepDt;\n this._collisionEvents = new CollisionEvents3d(_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 RapierEventQueue3d;\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 z: this._config.gravityZ,\n });\n return;\n }\n this._world = restored;\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(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.dynamic();\n return this._world.createRigidBody(desc);\n }\n\n public createFixedBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.fixed();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicPositionBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.kinematicPositionBased();\n return this._world.createRigidBody(desc);\n }\n\n public createKinematicVelocityBody(): RapierRigidBody3d {\n const desc = this._rapier.RigidBodyDesc.kinematicVelocityBased();\n return this._world.createRigidBody(desc);\n }\n\n public createBodyFromDesc(desc: RapierRigidBodyDesc3d): RapierRigidBody3d {\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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\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, hz: number,\n parent?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\n const desc = this._rapier.ColliderDesc.cuboid(hx, hy, hz);\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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\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 createCylinderCollider(\n halfHeight: number, radius: number,\n parent?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\n const desc = this._rapier.ColliderDesc.cylinder(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 createConeCollider(\n halfHeight: number, radius: number,\n parent?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\n const desc = this._rapier.ColliderDesc.cone(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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d | 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?: RapierRigidBody3d,\n groups?: number,\n activeEvents?: number,\n ): RapierCollider3d {\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: RapierColliderDesc3d, parent?: RapierRigidBody3d): RapierCollider3d {\n return this._world.createCollider(desc, parent);\n }\n\n // Accessors\n public getBody(handle: number): RapierRigidBody3d {\n return this._world.getRigidBody(handle);\n }\n\n public getCollider(handle: number): RapierCollider3d {\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(): RapierModule3d {\n return this._rapier;\n }\n\n public dispose(): void {\n this._collisionEvents.dispose();\n this._world.free();\n }\n}\n"],"names":["createLogger","ColliderEntityMap","CollisionEvents3d","log","PhysicsWorldManager3d","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","z","gravityZ","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","hz","cuboid","createCapsuleCollider","halfHeight","capsule","createCylinderCollider","cylinder","createConeCollider","cone","createConvexHullCollider","points","convexHull","createTrimeshCollider","vertices","indices","trimesh","createColliderFromDesc","getBody","handle","getRigidBody","getCollider","removeBody","body","removeRigidBody","removeCollider","wakeUp","collider","rapier","dispose","constructor","frameLengthMs","timestep"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal type abstractions for Rapier 3D API.
|
|
3
|
+
* Works with both @dimforge/rapier3d-deterministic and @dimforge/rapier3d-deterministic-compat.
|
|
4
|
+
* The consumer project injects the actual RAPIER module at runtime.
|
|
5
|
+
*/
|
|
6
|
+
export interface RapierVector3 {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
z: number;
|
|
10
|
+
}
|
|
11
|
+
export interface RapierQuaternion {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
z: number;
|
|
15
|
+
w: number;
|
|
16
|
+
}
|
|
17
|
+
export interface RapierRigidBody3d {
|
|
18
|
+
handle: number;
|
|
19
|
+
translation(): RapierVector3;
|
|
20
|
+
rotation(): RapierQuaternion;
|
|
21
|
+
linvel(): RapierVector3;
|
|
22
|
+
angvel(): RapierVector3;
|
|
23
|
+
setTranslation(translation: RapierVector3, wakeUp: boolean): void;
|
|
24
|
+
setRotation(rotation: RapierQuaternion, wakeUp: boolean): void;
|
|
25
|
+
setLinvel(linvel: RapierVector3, wakeUp: boolean): void;
|
|
26
|
+
setAngvel(angvel: RapierVector3, wakeUp: boolean): void;
|
|
27
|
+
setLinearDamping(damping: number): void;
|
|
28
|
+
setAngularDamping(damping: number): void;
|
|
29
|
+
setAdditionalMass(mass: number): void;
|
|
30
|
+
isKinematic(): boolean;
|
|
31
|
+
isDynamic(): boolean;
|
|
32
|
+
isFixed(): boolean;
|
|
33
|
+
setNextKinematicTranslation(translation: RapierVector3): void;
|
|
34
|
+
setNextKinematicRotation(rotation: RapierQuaternion): void;
|
|
35
|
+
}
|
|
36
|
+
export interface RapierCollider3d {
|
|
37
|
+
handle: number;
|
|
38
|
+
parent(): RapierRigidBody3d | null;
|
|
39
|
+
isSensor(): boolean;
|
|
40
|
+
collisionGroups(): number;
|
|
41
|
+
setCollisionGroups(groups: number): void;
|
|
42
|
+
setActiveEvents(events: number): void;
|
|
43
|
+
setSensor(isSensor: boolean): void;
|
|
44
|
+
}
|
|
45
|
+
export interface RapierRigidBodyDesc3d {
|
|
46
|
+
setTranslation(x: number, y: number, z: number): RapierRigidBodyDesc3d;
|
|
47
|
+
setRotation(rotation: RapierQuaternion): RapierRigidBodyDesc3d;
|
|
48
|
+
setLinearDamping(damping: number): RapierRigidBodyDesc3d;
|
|
49
|
+
setAngularDamping(damping: number): RapierRigidBodyDesc3d;
|
|
50
|
+
setAdditionalMass(mass: number): RapierRigidBodyDesc3d;
|
|
51
|
+
}
|
|
52
|
+
export interface RapierColliderDesc3d {
|
|
53
|
+
setTranslation(x: number, y: number, z: number): RapierColliderDesc3d;
|
|
54
|
+
setRotation(rotation: RapierQuaternion): RapierColliderDesc3d;
|
|
55
|
+
setRestitution(restitution: number): RapierColliderDesc3d;
|
|
56
|
+
setFriction(friction: number): RapierColliderDesc3d;
|
|
57
|
+
setDensity(density: number): RapierColliderDesc3d;
|
|
58
|
+
setMass(mass: number): RapierColliderDesc3d;
|
|
59
|
+
setSensor(isSensor: boolean): RapierColliderDesc3d;
|
|
60
|
+
setCollisionGroups(groups: number): RapierColliderDesc3d;
|
|
61
|
+
setActiveEvents(events: number): RapierColliderDesc3d;
|
|
62
|
+
}
|
|
63
|
+
export interface RapierEventQueue3d {
|
|
64
|
+
free(): void;
|
|
65
|
+
drainCollisionEvents(f: (h1: number, h2: number, started: boolean) => void): void;
|
|
66
|
+
drainContactForceEvents(f: (event: RapierTempContactForceEvent3d) => void): void;
|
|
67
|
+
clear(): void;
|
|
68
|
+
}
|
|
69
|
+
export interface RapierTempContactForceEvent3d {
|
|
70
|
+
collider1(): number;
|
|
71
|
+
collider2(): number;
|
|
72
|
+
totalForceMagnitude(): number;
|
|
73
|
+
maxForceMagnitude(): number;
|
|
74
|
+
maxForceDirection(): RapierVector3;
|
|
75
|
+
}
|
|
76
|
+
export interface RapierWorld3d {
|
|
77
|
+
timestep: number;
|
|
78
|
+
step(eventQueue?: RapierEventQueue3d): void;
|
|
79
|
+
free(): void;
|
|
80
|
+
takeSnapshot(): Uint8Array;
|
|
81
|
+
getRigidBody(handle: number): RapierRigidBody3d;
|
|
82
|
+
getCollider(handle: number): RapierCollider3d;
|
|
83
|
+
createRigidBody(desc: RapierRigidBodyDesc3d): RapierRigidBody3d;
|
|
84
|
+
createCollider(desc: RapierColliderDesc3d, parent?: RapierRigidBody3d): RapierCollider3d;
|
|
85
|
+
removeRigidBody(body: RapierRigidBody3d): void;
|
|
86
|
+
removeCollider(collider: RapierCollider3d, wakeUp: boolean): void;
|
|
87
|
+
createCharacterController(offset: number): RapierKinematicCharacterController;
|
|
88
|
+
}
|
|
89
|
+
export interface RapierCharacterCollision {
|
|
90
|
+
toi: number;
|
|
91
|
+
witness1: RapierVector3;
|
|
92
|
+
witness2: RapierVector3;
|
|
93
|
+
normal1: RapierVector3;
|
|
94
|
+
normal2: RapierVector3;
|
|
95
|
+
translationDeltaApplied: RapierVector3;
|
|
96
|
+
translationDeltaRemaining: RapierVector3;
|
|
97
|
+
}
|
|
98
|
+
export interface RapierKinematicCharacterController {
|
|
99
|
+
setUp(up: RapierVector3): void;
|
|
100
|
+
setMaxSlopeClimbAngle(angle: number): void;
|
|
101
|
+
setMinSlopeSlideAngle(angle: number): void;
|
|
102
|
+
enableAutostep(maxHeight: number, minWidth: number, includeDynamicBodies: boolean): void;
|
|
103
|
+
disableAutostep(): void;
|
|
104
|
+
enableSnapToGround(distance: number): void;
|
|
105
|
+
disableSnapToGround(): void;
|
|
106
|
+
setSlideEnabled(enabled: boolean): void;
|
|
107
|
+
setCharacterMass(mass: number): void;
|
|
108
|
+
setApplyImpulsesToDynamicBodies(apply: boolean): void;
|
|
109
|
+
computeColliderMovement(collider: RapierCollider3d, desiredTranslation: RapierVector3, filterFlags?: number, filterGroups?: number): void;
|
|
110
|
+
computedMovement(): RapierVector3;
|
|
111
|
+
computedGrounded(): boolean;
|
|
112
|
+
numComputedCollisions(): number;
|
|
113
|
+
computedCollision(index: number): RapierCharacterCollision | null;
|
|
114
|
+
free(): void;
|
|
115
|
+
}
|
|
116
|
+
export interface RapierModule3d {
|
|
117
|
+
World: {
|
|
118
|
+
new (gravity: RapierVector3): RapierWorld3d;
|
|
119
|
+
restoreSnapshot(data: Uint8Array): RapierWorld3d | null;
|
|
120
|
+
};
|
|
121
|
+
RigidBodyDesc: {
|
|
122
|
+
dynamic(): RapierRigidBodyDesc3d;
|
|
123
|
+
fixed(): RapierRigidBodyDesc3d;
|
|
124
|
+
kinematicPositionBased(): RapierRigidBodyDesc3d;
|
|
125
|
+
kinematicVelocityBased(): RapierRigidBodyDesc3d;
|
|
126
|
+
};
|
|
127
|
+
ColliderDesc: {
|
|
128
|
+
ball(radius: number): RapierColliderDesc3d;
|
|
129
|
+
cuboid(hx: number, hy: number, hz: number): RapierColliderDesc3d;
|
|
130
|
+
capsule(halfHeight: number, radius: number): RapierColliderDesc3d;
|
|
131
|
+
trimesh(vertices: Float32Array, indices: Uint32Array): RapierColliderDesc3d;
|
|
132
|
+
cylinder(halfHeight: number, radius: number): RapierColliderDesc3d;
|
|
133
|
+
cone(halfHeight: number, radius: number): RapierColliderDesc3d;
|
|
134
|
+
convexHull(points: Float32Array): RapierColliderDesc3d | null;
|
|
135
|
+
};
|
|
136
|
+
EventQueue: {
|
|
137
|
+
new (autoDrain: boolean): RapierEventQueue3d;
|
|
138
|
+
};
|
|
139
|
+
ActiveEvents: {
|
|
140
|
+
NONE: number;
|
|
141
|
+
COLLISION_EVENTS: number;
|
|
142
|
+
CONTACT_FORCE_EVENTS: number;
|
|
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
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=rapier-types-3d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rapier-types-3d.d.ts","sourceRoot":"","sources":["../../src/lib/rapier-types-3d.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal type abstractions for Rapier 3D API.
|
|
3
|
+
* Works with both @dimforge/rapier3d-deterministic and @dimforge/rapier3d-deterministic-compat.
|
|
4
|
+
* The consumer project injects the actual RAPIER module at runtime.
|
|
5
|
+
*/ export { };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=rapier-types-3d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/rapier-types-3d.ts"],"sourcesContent":["/**\n * Minimal type abstractions for Rapier 3D API.\n * Works with both @dimforge/rapier3d-deterministic and @dimforge/rapier3d-deterministic-compat.\n * The consumer project injects the actual RAPIER module at runtime.\n */\n\nexport interface RapierVector3 {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface RapierQuaternion {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\nexport interface RapierRigidBody3d {\n handle: number;\n translation(): RapierVector3;\n rotation(): RapierQuaternion;\n linvel(): RapierVector3;\n angvel(): RapierVector3;\n setTranslation(translation: RapierVector3, wakeUp: boolean): void;\n setRotation(rotation: RapierQuaternion, wakeUp: boolean): void;\n setLinvel(linvel: RapierVector3, wakeUp: boolean): void;\n setAngvel(angvel: RapierVector3, 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: RapierVector3): void;\n setNextKinematicRotation(rotation: RapierQuaternion): void;\n}\n\nexport interface RapierCollider3d {\n handle: number;\n parent(): RapierRigidBody3d | 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 RapierRigidBodyDesc3d {\n setTranslation(x: number, y: number, z: number): RapierRigidBodyDesc3d;\n setRotation(rotation: RapierQuaternion): RapierRigidBodyDesc3d;\n setLinearDamping(damping: number): RapierRigidBodyDesc3d;\n setAngularDamping(damping: number): RapierRigidBodyDesc3d;\n setAdditionalMass(mass: number): RapierRigidBodyDesc3d;\n}\n\nexport interface RapierColliderDesc3d {\n setTranslation(x: number, y: number, z: number): RapierColliderDesc3d;\n setRotation(rotation: RapierQuaternion): RapierColliderDesc3d;\n setRestitution(restitution: number): RapierColliderDesc3d;\n setFriction(friction: number): RapierColliderDesc3d;\n setDensity(density: number): RapierColliderDesc3d;\n setMass(mass: number): RapierColliderDesc3d;\n setSensor(isSensor: boolean): RapierColliderDesc3d;\n setCollisionGroups(groups: number): RapierColliderDesc3d;\n setActiveEvents(events: number): RapierColliderDesc3d;\n}\n\nexport interface RapierEventQueue3d {\n free(): void;\n drainCollisionEvents(f: (h1: number, h2: number, started: boolean) => void): void;\n drainContactForceEvents(f: (event: RapierTempContactForceEvent3d) => void): void;\n clear(): void;\n}\n\nexport interface RapierTempContactForceEvent3d {\n collider1(): number;\n collider2(): number;\n totalForceMagnitude(): number;\n maxForceMagnitude(): number;\n maxForceDirection(): RapierVector3;\n}\n\nexport interface RapierWorld3d {\n timestep: number;\n step(eventQueue?: RapierEventQueue3d): void;\n free(): void;\n takeSnapshot(): Uint8Array;\n getRigidBody(handle: number): RapierRigidBody3d;\n getCollider(handle: number): RapierCollider3d;\n createRigidBody(desc: RapierRigidBodyDesc3d): RapierRigidBody3d;\n createCollider(desc: RapierColliderDesc3d, parent?: RapierRigidBody3d): RapierCollider3d;\n removeRigidBody(body: RapierRigidBody3d): void;\n removeCollider(collider: RapierCollider3d, wakeUp: boolean): void;\n createCharacterController(offset: number): RapierKinematicCharacterController;\n}\n\n// ─── Kinematic Character Controller ────────────────────────\n\nexport interface RapierCharacterCollision {\n toi: number;\n witness1: RapierVector3;\n witness2: RapierVector3;\n normal1: RapierVector3;\n normal2: RapierVector3;\n translationDeltaApplied: RapierVector3;\n translationDeltaRemaining: RapierVector3;\n}\n\nexport interface RapierKinematicCharacterController {\n setUp(up: RapierVector3): 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: RapierCollider3d,\n desiredTranslation: RapierVector3,\n filterFlags?: number,\n filterGroups?: number,\n ): void;\n computedMovement(): RapierVector3;\n computedGrounded(): boolean;\n numComputedCollisions(): number;\n computedCollision(index: number): RapierCharacterCollision | null;\n free(): void;\n}\n\nexport interface RapierModule3d {\n World: {\n new (gravity: RapierVector3): RapierWorld3d;\n restoreSnapshot(data: Uint8Array): RapierWorld3d | null;\n };\n RigidBodyDesc: {\n dynamic(): RapierRigidBodyDesc3d;\n fixed(): RapierRigidBodyDesc3d;\n kinematicPositionBased(): RapierRigidBodyDesc3d;\n kinematicVelocityBased(): RapierRigidBodyDesc3d;\n };\n ColliderDesc: {\n ball(radius: number): RapierColliderDesc3d;\n cuboid(hx: number, hy: number, hz: number): RapierColliderDesc3d;\n capsule(halfHeight: number, radius: number): RapierColliderDesc3d;\n trimesh(vertices: Float32Array, indices: Uint32Array): RapierColliderDesc3d;\n cylinder(halfHeight: number, radius: number): RapierColliderDesc3d;\n cone(halfHeight: number, radius: number): RapierColliderDesc3d;\n convexHull(points: Float32Array): RapierColliderDesc3d | null;\n };\n EventQueue: {\n new (autoDrain: boolean): RapierEventQueue3d;\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,GAkID,WAsCC"}
|
|
@@ -1,156 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The consumer project injects the actual RAPIER module at runtime.
|
|
2
|
+
* @deprecated Import from `./rapier-types-3d.js` and use suffixed names
|
|
3
|
+
* (e.g. `RapierRigidBodyDesc3d` instead of `RapierRigidBodyDesc`).
|
|
5
4
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
export interface RapierQuaternion {
|
|
12
|
-
x: number;
|
|
13
|
-
y: number;
|
|
14
|
-
z: number;
|
|
15
|
-
w: number;
|
|
16
|
-
}
|
|
17
|
-
export interface RapierRigidBody3d {
|
|
18
|
-
handle: number;
|
|
19
|
-
translation(): RapierVector3;
|
|
20
|
-
rotation(): RapierQuaternion;
|
|
21
|
-
linvel(): RapierVector3;
|
|
22
|
-
angvel(): RapierVector3;
|
|
23
|
-
setTranslation(translation: RapierVector3, wakeUp: boolean): void;
|
|
24
|
-
setRotation(rotation: RapierQuaternion, wakeUp: boolean): void;
|
|
25
|
-
setLinvel(linvel: RapierVector3, wakeUp: boolean): void;
|
|
26
|
-
setAngvel(angvel: RapierVector3, wakeUp: boolean): void;
|
|
27
|
-
setLinearDamping(damping: number): void;
|
|
28
|
-
setAngularDamping(damping: number): void;
|
|
29
|
-
setAdditionalMass(mass: number): void;
|
|
30
|
-
isKinematic(): boolean;
|
|
31
|
-
isDynamic(): boolean;
|
|
32
|
-
isFixed(): boolean;
|
|
33
|
-
setNextKinematicTranslation(translation: RapierVector3): void;
|
|
34
|
-
setNextKinematicRotation(rotation: RapierQuaternion): void;
|
|
35
|
-
}
|
|
36
|
-
export interface RapierCollider3d {
|
|
37
|
-
handle: number;
|
|
38
|
-
parent(): RapierRigidBody3d | null;
|
|
39
|
-
isSensor(): boolean;
|
|
40
|
-
collisionGroups(): number;
|
|
41
|
-
setCollisionGroups(groups: number): void;
|
|
42
|
-
setActiveEvents(events: number): void;
|
|
43
|
-
setSensor(isSensor: boolean): void;
|
|
44
|
-
}
|
|
45
|
-
export interface RapierRigidBodyDesc {
|
|
46
|
-
setTranslation(x: number, y: number, z: number): RapierRigidBodyDesc;
|
|
47
|
-
setRotation(rotation: RapierQuaternion): RapierRigidBodyDesc;
|
|
48
|
-
setLinearDamping(damping: number): RapierRigidBodyDesc;
|
|
49
|
-
setAngularDamping(damping: number): RapierRigidBodyDesc;
|
|
50
|
-
setAdditionalMass(mass: number): RapierRigidBodyDesc;
|
|
51
|
-
}
|
|
52
|
-
export interface RapierColliderDesc {
|
|
53
|
-
setTranslation(x: number, y: number, z: number): RapierColliderDesc;
|
|
54
|
-
setRotation(rotation: RapierQuaternion): RapierColliderDesc;
|
|
55
|
-
setRestitution(restitution: number): RapierColliderDesc;
|
|
56
|
-
setFriction(friction: number): RapierColliderDesc;
|
|
57
|
-
setDensity(density: number): RapierColliderDesc;
|
|
58
|
-
setMass(mass: number): RapierColliderDesc;
|
|
59
|
-
setSensor(isSensor: boolean): RapierColliderDesc;
|
|
60
|
-
setCollisionGroups(groups: number): RapierColliderDesc;
|
|
61
|
-
setActiveEvents(events: number): RapierColliderDesc;
|
|
62
|
-
}
|
|
63
|
-
export interface RapierEventQueue {
|
|
64
|
-
free(): void;
|
|
65
|
-
drainCollisionEvents(f: (h1: number, h2: number, started: boolean) => void): void;
|
|
66
|
-
drainContactForceEvents(f: (event: RapierTempContactForceEvent) => void): void;
|
|
67
|
-
clear(): void;
|
|
68
|
-
}
|
|
69
|
-
export interface RapierTempContactForceEvent {
|
|
70
|
-
collider1(): number;
|
|
71
|
-
collider2(): number;
|
|
72
|
-
totalForceMagnitude(): number;
|
|
73
|
-
maxForceMagnitude(): number;
|
|
74
|
-
maxForceDirection(): RapierVector3;
|
|
75
|
-
}
|
|
76
|
-
export interface RapierWorld3d {
|
|
77
|
-
timestep: number;
|
|
78
|
-
step(eventQueue?: RapierEventQueue): void;
|
|
79
|
-
free(): void;
|
|
80
|
-
takeSnapshot(): Uint8Array;
|
|
81
|
-
getRigidBody(handle: number): RapierRigidBody3d;
|
|
82
|
-
getCollider(handle: number): RapierCollider3d;
|
|
83
|
-
createRigidBody(desc: RapierRigidBodyDesc): RapierRigidBody3d;
|
|
84
|
-
createCollider(desc: RapierColliderDesc, parent?: RapierRigidBody3d): RapierCollider3d;
|
|
85
|
-
removeRigidBody(body: RapierRigidBody3d): void;
|
|
86
|
-
removeCollider(collider: RapierCollider3d, wakeUp: boolean): void;
|
|
87
|
-
createCharacterController(offset: number): RapierKinematicCharacterController;
|
|
88
|
-
/** Rebuilds the query pipeline (BVH) from current collider positions. Must be called after restoreSnapshot(). */
|
|
89
|
-
updateSceneQueries(): void;
|
|
90
|
-
}
|
|
91
|
-
export interface RapierCharacterCollision {
|
|
92
|
-
toi: number;
|
|
93
|
-
witness1: RapierVector3;
|
|
94
|
-
witness2: RapierVector3;
|
|
95
|
-
normal1: RapierVector3;
|
|
96
|
-
normal2: RapierVector3;
|
|
97
|
-
translationDeltaApplied: RapierVector3;
|
|
98
|
-
translationDeltaRemaining: RapierVector3;
|
|
99
|
-
}
|
|
100
|
-
export interface RapierKinematicCharacterController {
|
|
101
|
-
setUp(up: RapierVector3): 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: RapierCollider3d, desiredTranslation: RapierVector3, filterFlags?: number, filterGroups?: number): void;
|
|
112
|
-
computedMovement(): RapierVector3;
|
|
113
|
-
computedGrounded(): boolean;
|
|
114
|
-
numComputedCollisions(): number;
|
|
115
|
-
computedCollision(index: number): RapierCharacterCollision | null;
|
|
116
|
-
free(): void;
|
|
117
|
-
}
|
|
118
|
-
export interface RapierModule3d {
|
|
119
|
-
World: {
|
|
120
|
-
new (gravity: RapierVector3): RapierWorld3d;
|
|
121
|
-
restoreSnapshot(data: Uint8Array): RapierWorld3d | null;
|
|
122
|
-
};
|
|
123
|
-
RigidBodyDesc: {
|
|
124
|
-
dynamic(): RapierRigidBodyDesc;
|
|
125
|
-
fixed(): RapierRigidBodyDesc;
|
|
126
|
-
kinematicPositionBased(): RapierRigidBodyDesc;
|
|
127
|
-
kinematicVelocityBased(): RapierRigidBodyDesc;
|
|
128
|
-
};
|
|
129
|
-
ColliderDesc: {
|
|
130
|
-
ball(radius: number): RapierColliderDesc;
|
|
131
|
-
cuboid(hx: number, hy: number, hz: number): RapierColliderDesc;
|
|
132
|
-
capsule(halfHeight: number, radius: number): RapierColliderDesc;
|
|
133
|
-
trimesh(vertices: Float32Array, indices: Uint32Array): RapierColliderDesc;
|
|
134
|
-
cylinder(halfHeight: number, radius: number): RapierColliderDesc;
|
|
135
|
-
cone(halfHeight: number, radius: number): RapierColliderDesc;
|
|
136
|
-
};
|
|
137
|
-
EventQueue: {
|
|
138
|
-
new (autoDrain: boolean): RapierEventQueue;
|
|
139
|
-
};
|
|
140
|
-
ActiveEvents: {
|
|
141
|
-
NONE: number;
|
|
142
|
-
COLLISION_EVENTS: number;
|
|
143
|
-
CONTACT_FORCE_EVENTS: number;
|
|
144
|
-
};
|
|
145
|
-
QueryFilterFlags: {
|
|
146
|
-
ONLY_DYNAMIC: number;
|
|
147
|
-
ONLY_KINEMATIC: number;
|
|
148
|
-
ONLY_FIXED: number;
|
|
149
|
-
EXCLUDE_DYNAMIC: number;
|
|
150
|
-
EXCLUDE_KINEMATIC: number;
|
|
151
|
-
EXCLUDE_FIXED: number;
|
|
152
|
-
EXCLUDE_SENSORS: number;
|
|
153
|
-
EXCLUDE_SOLIDS: number;
|
|
154
|
-
};
|
|
155
|
-
}
|
|
5
|
+
export type { RapierRigidBodyDesc3d as RapierRigidBodyDesc } from './rapier-types-3d.js';
|
|
6
|
+
export type { RapierColliderDesc3d as RapierColliderDesc } from './rapier-types-3d.js';
|
|
7
|
+
export type { RapierTempContactForceEvent3d as RapierTempContactForceEvent } from './rapier-types-3d.js';
|
|
8
|
+
export type { RapierEventQueue3d as RapierEventQueue } from './rapier-types-3d.js';
|
|
9
|
+
export type { RapierVector3, RapierQuaternion, RapierRigidBody3d, RapierCollider3d, RapierWorld3d, RapierModule3d, RapierCharacterCollision, RapierKinematicCharacterController, } from './rapier-types-3d.js';
|
|
156
10
|
//# sourceMappingURL=rapier-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rapier-types.d.ts","sourceRoot":"","sources":["../../src/lib/rapier-types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rapier-types.d.ts","sourceRoot":"","sources":["../../src/lib/rapier-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EAAE,qBAAqB,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzF,YAAY,EAAE,oBAAoB,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACvF,YAAY,EAAE,6BAA6B,IAAI,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACzG,YAAY,EAAE,kBAAkB,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGnF,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,kCAAkC,GACnC,MAAM,sBAAsB,CAAC"}
|
package/dist/lib/rapier-types.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
* @deprecated Import from `./rapier-types-3d.js` and use suffixed names
|
|
3
|
+
* (e.g. `RapierRigidBodyDesc3d` instead of `RapierRigidBodyDesc`).
|
|
4
|
+
*/ // Re-export suffixed names as the old unsuffixed names for backward compatibility
|
|
5
|
+
// Forward all other exports unchanged (already have correct names)
|
|
6
|
+
export { };
|
|
6
7
|
|
|
7
8
|
//# sourceMappingURL=rapier-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/rapier-types.ts"],"sourcesContent":["/**\n *
|
|
1
|
+
{"version":3,"sources":["../../src/lib/rapier-types.ts"],"sourcesContent":["/**\n * @deprecated Import from `./rapier-types-3d.js` and use suffixed names\n * (e.g. `RapierRigidBodyDesc3d` instead of `RapierRigidBodyDesc`).\n */\n\n// Re-export suffixed names as the old unsuffixed names for backward compatibility\nexport type { RapierRigidBodyDesc3d as RapierRigidBodyDesc } from './rapier-types-3d.js';\nexport type { RapierColliderDesc3d as RapierColliderDesc } from './rapier-types-3d.js';\nexport type { RapierTempContactForceEvent3d as RapierTempContactForceEvent } from './rapier-types-3d.js';\nexport type { RapierEventQueue3d as RapierEventQueue } from './rapier-types-3d.js';\n\n// Forward all other exports unchanged (already have correct names)\nexport type {\n RapierVector3,\n RapierQuaternion,\n RapierRigidBody3d,\n RapierCollider3d,\n RapierWorld3d,\n RapierModule3d,\n RapierCharacterCollision,\n RapierKinematicCharacterController,\n} from './rapier-types-3d.js';\n"],"names":[],"rangeMappings":";;;;;","mappings":"AAAA;;;CAGC,GAED,kFAAkF;AAMlF,mEAAmE;AACnE,WAS8B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lagless/physics3d",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.46",
|
|
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.
|
|
43
|
-
"@lagless/misc": "0.0.
|
|
44
|
-
"@lagless/physics-shared": "0.0.
|
|
42
|
+
"@lagless/core": "0.0.46",
|
|
43
|
+
"@lagless/misc": "0.0.46",
|
|
44
|
+
"@lagless/physics-shared": "0.0.46"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@dimforge/rapier3d-compat": ">=0.
|
|
47
|
+
"@dimforge/rapier3d-deterministic-compat": ">=0.15.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@dimforge/rapier3d-compat": "^0.
|
|
50
|
+
"@dimforge/rapier3d-deterministic-compat": "^0.19.0",
|
|
51
51
|
"unplugin-swc": "^1.5.7"
|
|
52
52
|
},
|
|
53
53
|
"files": [
|