@forgeax/engine-physics-rapier3d 0.1.28 → 0.1.30

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.
@@ -1,8 +1,8 @@
1
1
  import type { Component, SystemHandle, World } from '@forgeax/engine-ecs';
2
2
  import { type Vec3 } from '@forgeax/engine-math';
3
- import { type DerivedPhysicsCandidate, type DerivedPhysicsCandidateInput, type DerivedPhysicsFailure, type DerivedPhysicsMotion, type DerivedPhysicsPublication, type DerivedPhysicsSnapshot, type DerivedShapeState, type PhysicsConstraintInput, type PhysicsContactObservation, type PhysicsWorld, type RaycastHit } from '@forgeax/engine-physics';
3
+ import { type DerivedPhysicsCandidate, type DerivedPhysicsCandidateInput, DerivedPhysicsError, type DerivedPhysicsFailure, type DerivedPhysicsMotion, type DerivedPhysicsPublication, type DerivedPhysicsSnapshot, type DerivedShapeState, type PhysicsConstraintInput, type PhysicsContactObservation, type PhysicsWorld, type RaycastHit } from '@forgeax/engine-physics';
4
4
  import { type Result } from '@forgeax/engine-types';
5
- import type { Rapier3DModule } from './wasm-loader';
5
+ import type { Rapier3DModule } from './wasm-loader.js';
6
6
  interface Rapier3DKinematicControllerState {
7
7
  readonly entity: number;
8
8
  readonly offset: number;
@@ -149,6 +149,7 @@ export declare class RapierPhysicsWorld3D implements PhysicsWorld {
149
149
  prepareDerivedShapeCandidate(input: DerivedPhysicsCandidateInput): ReturnType<NonNullable<PhysicsWorld['prepareDerivedShapeCandidate']>>;
150
150
  /** Queue a prepared candidate for the next call to `step()`. */
151
151
  admitDerivedShapeCandidate(candidate: DerivedPhysicsCandidate, commitGeometry?: () => Result<void, Error>): ReturnType<NonNullable<PhysicsWorld['admitDerivedShapeCandidate']>>;
152
+ admitDerivedShapeCandidates(candidates: readonly DerivedPhysicsCandidate[], commitGeometry?: () => Result<void, Error>): ReturnType<NonNullable<PhysicsWorld['admitDerivedShapeCandidates']>>;
152
153
  getDerivedAdmission(entity?: number): {
153
154
  readonly entity: number;
154
155
  readonly revision: number;
@@ -164,6 +165,7 @@ export declare class RapierPhysicsWorld3D implements PhysicsWorld {
164
165
  getDerivedBodyType(entity: number): 'static' | 'dynamic' | 'kinematic' | undefined;
165
166
  getDerivedBodyMass(entity: number): number | undefined;
166
167
  getDerivedMotion(entity: number): DerivedPhysicsMotion | undefined;
168
+ applyDerivedImpulse(input: Parameters<NonNullable<PhysicsWorld['applyDerivedImpulse']>>[0]): Result<void, DerivedPhysicsError>;
167
169
  getDerivedRecoveryState(): 'ready' | 'rebuild-required';
168
170
  getDerivedShapes(entity: number): readonly DerivedShapeState[];
169
171
  captureDerivedPhysicsState(): DerivedPhysicsSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"rapier-physics-world-3d.d.ts","sourceRoot":"","sources":["../src/rapier-physics-world-3d.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAuB,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAI/F,OAAO,EAAc,KAAK,IAAI,EAAQ,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAOL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAGjC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EAGtB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAM9B,KAAK,YAAY,EAEjB,KAAK,UAAU,EAOhB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,UAAU,gCAAgC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAgBD,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAyFD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD,KAAK,WAAW,GAAG,GAAG,CAAC;AAqHvB;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,2EAA2E;IAC3E,GAAG,EAAE,WAAW,CAAC;IAEjB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAE9C,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IAEpE,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0D;IAE3F,wCAAwC;IACxC,OAAO,CAAC,UAAU,CAAmB;IAErC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IAEjE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IAEvE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgC;IAEtE,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAC/E,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqD;IAC5F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8C;IACjF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwC;IAC3E,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgD;IACpF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4C;IAC5E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAqB;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;IACnC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,qBAAqB,CAAK;IAClC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,sBAAsB,CAAqC;IAEnE,OAAO,CAAC,cAAc,CAAsC;IAE5D;;;;;OAKG;IAEH,QAAQ,CAAC,QAAQ,mBAA0B;IAE3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IAExD;;;;;;OAMG;IACH,OAAO,CAAC,WAAW,CAEL;IAEd,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,cAAc;IAWlC,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAS/B,UAAU,IAAI,IAAI;IAKlB,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS;IAoDzB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAS9C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAoC7B,wEAAwE;IACxE,wBAAwB,IAAI,IAAI;IAQhC;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,wBAAwB;IA0ChC,+EAA+E;IAC/E,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,kBAAkB;IAgB1B;;;;;;OAMG;IACH,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,GAAG,IAAI;IAQ7E,oBAAoB,IAAI,sBAAsB,EAAE;IAIhD,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAI7C,wBAAwB,IAAI,SAAS,sBAAsB,EAAE;IAI7D,gFAAgF;IAChF,sBAAsB,IAAI,SAAS,yBAAyB,EAAE;IAS9D,8EAA8E;IAC9E,4BAA4B,CAC1B,KAAK,EAAE,4BAA4B,GAClC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;IA4IxE,gEAAgE;IAChE,0BAA0B,CACxB,SAAS,EAAE,uBAAuB,EAClC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GACzC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAStE,mBAAmB,CACjB,MAAM,CAAC,EAAE,MAAM,GAEb;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAClF,SAAS;IAWb,OAAO,CAAC,kCAAkC;IAyI1C,gFAAgF;IAChF,2BAA2B,CACzB,SAAS,EAAE,uBAAuB,GACjC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAC;IA8BvE,+EAA+E;IAC/E,gCAAgC,CAAC,MAAM,SAAyB,GAAG,IAAI;IAcvE,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAS5E,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAKpE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS;IAQlF,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOtD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAelE,uBAAuB,IAAI,OAAO,GAAG,kBAAkB;IAIvD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,iBAAiB,EAAE;IAgB9D,0BAA0B,IAAI,sBAAsB;IAmCpD,0BAA0B,CACxB,QAAQ,EAAE,sBAAsB,GAC/B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC;IA4DtE,uBAAuB,CACrB,KAAK,EAAE,sBAAsB,GAC5B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAInE,uBAAuB,CACrB,KAAK,EAAE,sBAAsB,GAC5B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAInE,uBAAuB,CACrB,EAAE,EAAE,MAAM,GACT,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAkBnE,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,sBAAsB;IAsD9B,OAAO,CAAC,sBAAsB;IAqB9B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,wBAAwB;IAmZhC,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,gBAAgB;IA8DxB,2EAA2E;IAC3E,OAAO,CAAC,oBAAoB;IA2B5B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,yBAAyB;IA0BjC,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,eAAe;IASvB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,8BAA8B;IAkDtC,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,wBAAwB;IAsDhC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,wBAAwB;IA6ChC,OAAO,CAAC,sBAAsB;IAU9B,mBAAmB,IAAI,SAAS;QAC9B,MAAM;QACN;YAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;SAAE;KAC/D,EAAE;IAIH,4BAA4B,IAAI,SAAS,gCAAgC,EAAE;IAM3E,OAAO,IAAI,IAAI;IAgCf,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS,GAAG,IAAI;IAMxF,2EAA2E;IAC3E,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMnC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI;IAKtD,OAAO,CAAC,YAAY;IAcpB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAoGnB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IAEH,OAAO,CAAC,SAAS;IAUjB,2EAA2E;IAC3E,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAMvD,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,mCAAmC;IAU3C,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,yBAAyB;IAqDjC,OAAO,CAAC,qBAAqB;IA8E7B,OAAO,CAAC,gCAAgC;IA+CxC,iFAAiF;IACjF,YAAY,CACV,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,SAAS,EAC7B,wBAAwB,+EAA8C,GACrE,IAAI;IAoIP;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWzC;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,kBAAkB,EAC7B,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,EACD,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GACtC,IAAI;IAuEP,OAAO,CAAC,sBAAsB;IA6E9B;;;OAGG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,iBAAiB,GAAG,SAAS,EACvC,QAAQ,EAAE,QAAQ,GAAG,WAAW,GAC/B,IAAI;IA4CP;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,cAAc,SAAI,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI;IAsBP;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAe7B;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASpF;;OAEG;IACH,sBAAsB,IAAI,KAAK,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1D,CAAC;IAsBF;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CA2CnC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB,CAEvF;AAwKD;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,SAAS,EAAE,CAkBvD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,SAAS,EAAE,CAiB1D,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,SAAS,EAAE,CAuBrD,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAAY,CAAC,SAAS,EAAE,CAczD,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,IAAI,CAqC/D"}
1
+ {"version":3,"file":"rapier-physics-world-3d.d.ts","sourceRoot":"","sources":["../src/rapier-physics-world-3d.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeax/engine-physics-rapier3d",
3
- "version": "0.1.28",
3
+ "version": "0.1.30",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -23,15 +23,15 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "@dimforge/rapier3d-compat": "0.20.0",
26
- "@forgeax/engine-ecs": "0.1.28",
27
- "@forgeax/engine-math": "0.1.28",
28
- "@forgeax/engine-physics": "0.1.28",
29
- "@forgeax/engine-scene": "0.1.28",
30
- "@forgeax/engine-types": "0.1.28"
26
+ "@forgeax/engine-ecs": "0.1.30",
27
+ "@forgeax/engine-math": "0.1.30",
28
+ "@forgeax/engine-physics": "0.1.30",
29
+ "@forgeax/engine-scene": "0.1.30",
30
+ "@forgeax/engine-types": "0.1.30"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@dimforge/rapier3d": "0.20.0",
34
- "@forgeax/engine-runtime": "0.1.28"
34
+ "@forgeax/engine-runtime": "0.1.30"
35
35
  },
36
36
  "forgeax": {
37
37
  "metrics": {
@@ -0,0 +1,113 @@
1
+ import { vec3 } from '@forgeax/engine-math';
2
+ import type { PhysicsContactObservation } from '@forgeax/engine-physics';
3
+ import { expect, it } from 'vitest';
4
+ import { createRapier3DPhysicsWorld } from '../rapier-physics-world-3d';
5
+ import { loadRapier3D } from '../wasm-loader';
6
+
7
+ it.each([
8
+ { yaw: 0, projectileFirst: false, shape: 0 },
9
+ { yaw: Math.PI / 3, projectileFirst: false, shape: 0 },
10
+ { yaw: Math.PI / 3, projectileFirst: true, shape: 0 },
11
+ { yaw: Math.PI / 3, projectileFirst: true, shape: 1 },
12
+ { yaw: Math.PI / 3, projectileFirst: true, shape: 2 },
13
+ ])('samples world-space contact against a voxel wall ($yaw, $projectileFirst, $shape)', async ({
14
+ yaw,
15
+ projectileFirst,
16
+ shape,
17
+ }) => {
18
+ const module = await loadRapier3D();
19
+ if ('code' in module) throw module;
20
+ const physics = createRapier3DPhysicsWorld(module);
21
+ try {
22
+ physics.setGravity(vec3.create(0, -9.81, 0));
23
+ const pose = (x: number, y: number, z: number) => ({
24
+ position: { x, y, z },
25
+ rotation: { x: 0, y: 0, z: 0, w: 1 },
26
+ scale: { x: 1, y: 1, z: 1 },
27
+ });
28
+ const body = (type: number) => ({
29
+ type,
30
+ mass: 1,
31
+ linearDamping: 0,
32
+ angularDamping: 0,
33
+ gravityScale: 1,
34
+ ccdEnabled: 1,
35
+ });
36
+ const addProjectile = () =>
37
+ physics.ensureBody(
38
+ 2,
39
+ pose(10 + Math.cos(yaw) + 0.5 * Math.sin(yaw), 4, -Math.sin(yaw) + 0.5 * Math.cos(yaw)),
40
+ body(1),
41
+ {
42
+ shape,
43
+ halfExtents: [0.2, 0.2, 0.2],
44
+ radius: 0.2,
45
+ halfHeight: 0.2,
46
+ friction: 0.5,
47
+ restitution: 0,
48
+ density: 1,
49
+ isSensor: 0,
50
+ collisionGroups: 0xffffffff,
51
+ solverGroups: 0xffffffff,
52
+ },
53
+ );
54
+ if (projectileFirst) addProjectile();
55
+ const wallPose = pose(10, 0, 0);
56
+ wallPose.rotation = { x: 0, y: Math.sin(yaw / 2), z: 0, w: Math.cos(yaw / 2) };
57
+ physics.ensureBody(1, wallPose, body(0), undefined);
58
+ const candidate = physics
59
+ .prepareDerivedShapeCandidate({
60
+ entity: 1,
61
+ sourceKey: 'wall',
62
+ revision: 0,
63
+ bodyType: 'static',
64
+ shapes: [
65
+ {
66
+ id: 'main',
67
+ revision: 0,
68
+ voxelSize: [0.5, 0.5, 0.5],
69
+ origin: [0, 0, 0],
70
+ cells: Array.from(
71
+ { length: 36 },
72
+ (_, i) => [i % 6, Math.floor(i / 6) % 3, Math.floor(i / 18)] as const,
73
+ ),
74
+ },
75
+ ],
76
+ massProperties: {
77
+ mode: 'explicit',
78
+ mass: 9,
79
+ centerOfMass: [1.5, 0.75, 0.5],
80
+ principalInertia: [1, 1, 1],
81
+ },
82
+ })
83
+ .unwrap();
84
+ physics.admitDerivedShapeCandidate(candidate).unwrap();
85
+ physics.step(1 / 60);
86
+ if (!projectileFirst) addProjectile();
87
+ let contact: PhysicsContactObservation | undefined;
88
+ for (let i = 0; i < 120 && contact === undefined; i++) {
89
+ physics.step(1 / 60);
90
+ contact = physics.getContactObservations().find((event) => event.phase === 'started');
91
+ }
92
+ expect(contact).toBeDefined();
93
+ if (contact === undefined) throw new Error('expected a started physics contact');
94
+ const point = contact.point;
95
+ expect(point).toBeDefined();
96
+ if (point === undefined) throw new Error('expected a contact point');
97
+ expect(point[1]).toBeCloseTo(1.5, 1);
98
+ const normal = contact.normal;
99
+ expect(normal).toBeDefined();
100
+ if (normal === undefined) throw new Error('expected a contact normal');
101
+ expect(normal[1]).toBeCloseTo(contact.entityA === 1 ? 1 : -1, 2);
102
+ const dx = point[0] - 10;
103
+ const dz = point[2];
104
+ const localX = Math.cos(yaw) * dx - Math.sin(yaw) * dz;
105
+ const localZ = Math.sin(yaw) * dx + Math.cos(yaw) * dz;
106
+ expect(localX).toBeGreaterThan(0);
107
+ expect(localX).toBeLessThan(3);
108
+ expect(localZ).toBeGreaterThan(0);
109
+ expect(localZ).toBeLessThan(1);
110
+ } finally {
111
+ physics.dispose();
112
+ }
113
+ });