angular-three-cannon 3.7.2 → 4.0.0-next.10

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,17 +1,17 @@
1
1
  import { ElementRef, Injector, Signal } from '@angular/core';
2
2
  import { BodyShapeType } from '@pmndrs/cannon-worker-api';
3
- import { Object3D } from 'three';
3
+ import * as THREE from 'three';
4
4
  import { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';
5
5
  export interface NgtcBodyOptions<TShape extends BodyShapeType> {
6
6
  transformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;
7
7
  injector?: Injector;
8
8
  }
9
- export declare const injectBox: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
10
- export declare const injectConvexPolyhedron: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
11
- export declare const injectCylinder: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
12
- export declare const injectHeightfield: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
13
- export declare const injectParticle: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
14
- export declare const injectPlane: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
15
- export declare const injectSphere: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
16
- export declare const injectTrimesh: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
17
- export declare const injectCompound: <TObject extends Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
9
+ export declare const injectBox: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
10
+ export declare const injectConvexPolyhedron: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
11
+ export declare const injectCylinder: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
12
+ export declare const injectHeightfield: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
13
+ export declare const injectParticle: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
14
+ export declare const injectPlane: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
15
+ export declare const injectSphere: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
16
+ export declare const injectTrimesh: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
17
+ export declare const injectCompound: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
@@ -1,16 +1,16 @@
1
- import { AtomicName, AtomicProps, BodyProps, BoxProps, CompoundBodyProps, ConvexPolyhedronProps, CylinderProps, HeightfieldProps, ParticleProps, PlaneProps, Quad, SphereProps, TrimeshProps, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
2
- import { Euler, Quaternion, Vector3 } from 'three';
1
+ import type { AtomicName, AtomicProps, BodyProps, BoxProps, CompoundBodyProps, ConvexPolyhedronProps, CylinderProps, HeightfieldProps, ParticleProps, PlaneProps, Quad, SphereProps, TrimeshProps, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
2
+ import type * as THREE from 'three';
3
3
  export interface NgtcAtomicApi<K extends AtomicName> {
4
4
  set: (value: AtomicProps[K]) => void;
5
5
  subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
6
6
  }
7
7
  export interface NgtcQuaternionApi {
8
- copy: ({ w, x, y, z }: Quaternion) => void;
8
+ copy: ({ w, x, y, z }: THREE.Quaternion) => void;
9
9
  set: (x: number, y: number, z: number, w: number) => void;
10
10
  subscribe: (callback: (value: Quad) => void) => () => void;
11
11
  }
12
12
  export interface NgtcVectorApi {
13
- copy: ({ x, y, z }: Vector3 | Euler) => void;
13
+ copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;
14
14
  set: (x: number, y: number, z: number) => void;
15
15
  subscribe: (callback: (value: Triplet) => void) => () => void;
16
16
  }
@@ -1,11 +1,11 @@
1
1
  import { BodyProps, BoxProps, CannonWorkerAPI, CompoundBodyProps, ConvexPolyhedronArgs, CylinderArgs, HeightfieldArgs, ParticleProps, PlaneProps, PropValue, SphereArgs, SubscriptionName, SubscriptionTarget, Subscriptions, TrimeshArgs, Triplet } from '@pmndrs/cannon-worker-api';
2
2
  import { NgtcCannonEvents, NgtcPhysics } from 'angular-three-cannon';
3
- import { Object3D } from 'three';
3
+ import * as THREE from 'three';
4
4
  import { NgtcWorkerApi } from './types';
5
- export declare function createSubscribe<T extends SubscriptionName>(body: Object3D, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
6
- export declare function prepare(object: Object3D, { position, rotation, userData }: BodyProps): void;
5
+ export declare function createSubscribe<T extends SubscriptionName>(body: THREE.Object3D, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
6
+ export declare function prepare(object: THREE.Object3D, { position, rotation, userData }: BodyProps): void;
7
7
  export declare function setupCollision(events: NgtcCannonEvents, { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>, uuid: string): void;
8
- export declare function makeBodyApi(body: Object3D, worker: CannonWorkerAPI, { subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>): {
8
+ export declare function makeBodyApi(body: THREE.Object3D, worker: CannonWorkerAPI, { subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>): {
9
9
  at: (index: number) => NgtcWorkerApi;
10
10
  allowSleep: import("angular-three-cannon/body").NgtcAtomicApi<"allowSleep">;
11
11
  angularDamping: import("angular-three-cannon/body").NgtcAtomicApi<"angularDamping">;
@@ -1,6 +1,6 @@
1
1
  import { ElementRef, Injector, Signal } from '@angular/core';
2
2
  import { ConeTwistConstraintOpts, ConstraintTypes, DistanceConstraintOpts, HingeConstraintOpts, LockConstraintOpts, PointToPointConstraintOpts } from '@pmndrs/cannon-worker-api';
3
- import { Object3D } from 'three';
3
+ import * as THREE from 'three';
4
4
  export interface NgtcConstraintApi {
5
5
  disable: () => void;
6
6
  enable: () => void;
@@ -25,8 +25,8 @@ export type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTy
25
25
  disableOnStart?: boolean;
26
26
  options?: NgtcConstraintOptionsMap[TConstraintType];
27
27
  };
28
- export declare const injectPointToPoint: <A extends Object3D = Object3D<import("three").Object3DEventMap>, B extends Object3D = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
29
- export declare const injectConeTwist: <A extends Object3D = Object3D<import("three").Object3DEventMap>, B extends Object3D = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
30
- export declare const injectDistance: <A extends Object3D = Object3D<import("three").Object3DEventMap>, B extends Object3D = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
31
- export declare const injectLock: <A extends Object3D = Object3D<import("three").Object3DEventMap>, B extends Object3D = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
32
- export declare const injectHinge: <A extends Object3D = Object3D<import("three").Object3DEventMap>, B extends Object3D = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
28
+ export declare const injectPointToPoint: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
29
+ export declare const injectConeTwist: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
30
+ export declare const injectDistance: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
31
+ export declare const injectLock: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
32
+ export declare const injectHinge: <A extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>, B extends THREE.Object3D = THREE.Object3D<THREE.Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
@@ -8,9 +8,9 @@ export interface NgtcDebugInputs {
8
8
  scale: number;
9
9
  }
10
10
  export declare class NgtcDebug {
11
- private store;
12
- private physics;
13
11
  debug: import("@angular/core").InputSignalWithTransform<NgtcDebugInputs, "" | Partial<NgtcDebugInputs>>;
12
+ private physics;
13
+ private store;
14
14
  private defaultScene;
15
15
  private debuggerScene;
16
16
  private bodies;
@@ -1,9 +1,9 @@
1
1
  import { inject, isSignal, signal, computed, effect } from '@angular/core';
2
- import { resolveRef } from 'angular-three';
2
+ import { is, resolveRef } from 'angular-three';
3
3
  import { NgtcPhysics } from 'angular-three-cannon';
4
4
  import { NgtcDebug } from 'angular-three-cannon/debug';
5
5
  import { assertInjector } from 'ngxtension/assert-injector';
6
- import { Euler, Quaternion, Vector3, InstancedMesh, DynamicDrawUsage, Object3D } from 'three';
6
+ import * as THREE from 'three';
7
7
 
8
8
  function capitalize(str) {
9
9
  return (str.charAt(0).toUpperCase() + str.slice(1));
@@ -14,8 +14,8 @@ function getUUID(body, index) {
14
14
  return null;
15
15
  return body && body && `${body.uuid}${suffix}`;
16
16
  }
17
- const e = new Euler();
18
- const q = new Quaternion();
17
+ const e = new THREE.Euler();
18
+ const q = new THREE.Quaternion();
19
19
  function quaternionToRotation(callback) {
20
20
  return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());
21
21
  }
@@ -33,7 +33,7 @@ function createSubscribe(body, worker, subscriptions, type, index, target = 'bod
33
33
  };
34
34
  }
35
35
  function makeTriplet(v) {
36
- return v instanceof Vector3 ? [v.x, v.y, v.z] : v;
36
+ return is.three(v, 'isVector3') ? [v.x, v.y, v.z] : v;
37
37
  }
38
38
  function prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {
39
39
  object.userData = userData;
@@ -155,7 +155,7 @@ function makeBodyApi(body, worker, { subscriptions, scaleOverrides }) {
155
155
  scaleOverride(scale) {
156
156
  const uuid = getUUID(body, index);
157
157
  if (uuid)
158
- scaleOverrides[uuid] = new Vector3(...scale);
158
+ scaleOverrides[uuid] = new THREE.Vector3(...scale);
159
159
  },
160
160
  sleep() {
161
161
  const uuid = getUUID(body, index);
@@ -235,10 +235,10 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
235
235
  const [uuid, props] = (() => {
236
236
  let uuids = [];
237
237
  let temp;
238
- if (object instanceof InstancedMesh) {
239
- object.instanceMatrix.setUsage(DynamicDrawUsage);
238
+ if (is.three(object, 'isInstancedMesh')) {
239
+ object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);
240
240
  uuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);
241
- temp = new Object3D();
241
+ temp = new THREE.Object3D();
242
242
  }
243
243
  else {
244
244
  uuids = [object.uuid];
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-body.mjs","sources":["../../../../libs/cannon/body/src/lib/utils.ts","../../../../libs/cannon/body/src/lib/body.ts","../../../../libs/cannon/body/src/angular-three-cannon-body.ts"],"sourcesContent":["import {\n\tAtomicName,\n\tBodyProps,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tCylinderArgs,\n\tHeightfieldArgs,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshArgs,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtcCannonEvents, NgtcPhysics } from 'angular-three-cannon';\nimport { Euler, Object3D, Quaternion, Vector3 } from 'three';\nimport { NgtcWorkerApi } from './types';\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nfunction getUUID(body: Object3D, index?: number) {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof body === 'function') return null;\n\treturn body && body && `${body.uuid}${suffix}`;\n}\n\nconst e = new Euler();\nconst q = new Quaternion();\n\nfunction quaternionToRotation(callback: (v: Triplet) => void) {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n}\n\nlet incrementingId = 0;\nexport function createSubscribe<T extends SubscriptionName>(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(body, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction makeTriplet(v: Vector3 | Triplet): Triplet {\n\treturn v instanceof Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport function prepare(object: Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nexport function setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\n\nexport function makeBodyApi(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\t{ subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>,\n) {\n\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\treturn {\n\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: value, uuid } as never);\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeQuaternion = (index?: number) => {\n\t\tconst type = 'quaternion';\n\t\treturn {\n\t\t\tcopy: ({ w, x, y, z }: Quaternion) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRotation = (index?: number) => {\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\tconst id = incrementingId++;\n\t\t\t\tconst target = 'bodies';\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\t\t\treturn () => {\n\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\tworker.unsubscribe({ props: id });\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst makeVec = (type: VectorName, index?: number) => {\n\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRemove = (index?: number) => {\n\t\tconst uuid = getUUID(body, index);\n\t\treturn () => {\n\t\t\tif (uuid) worker.removeBodies({ uuid: [uuid] });\n\t\t};\n\t};\n\n\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\treturn {\n\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyForce({ props: [force, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyTorque({ props: [torque], uuid });\n\t\t\t},\n\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\tmass: makeAtomic('mass', index),\n\t\t\tmaterial: makeAtomic('material', index),\n\t\t\tposition: makeVec('position', index),\n\t\t\tquaternion: makeQuaternion(index),\n\t\t\trotation: makeRotation(index),\n\t\t\tscaleOverride(scale) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tif (uuid) scaleOverrides[uuid] = new Vector3(...scale);\n\t\t\t},\n\t\t\tsleep() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.sleep({ uuid });\n\t\t\t},\n\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\tuserData: makeAtomic('userData', index),\n\t\t\tvelocity: makeVec('velocity', index),\n\t\t\tremove: makeRemove(index),\n\t\t\twakeUp() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.wakeUp({ uuid });\n\t\t\t},\n\t\t};\n\t}\n\tconst cache: Record<number, NgtcWorkerApi> = {};\n\treturn { ...makeApi(), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n}\n\nexport const defaultTransformArgs = {\n\tPlane: (_: PlaneProps['args']) => [],\n\tBox: (args: BoxProps['args'] = [1, 1, 1]) => args,\n\tTrimesh: (args: TrimeshArgs) => args,\n\tCylinder: (_: CylinderArgs = []) => [],\n\tHeightfield: (args: HeightfieldArgs) => args,\n\tConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]: ConvexPolyhedronArgs = []) => [\n\t\tvertices && vertices.map(makeTriplet),\n\t\tfaces,\n\t\tnormals && normals.map(makeTriplet),\n\t\taxes && axes.map(makeTriplet),\n\t\tboundingSphereRadius,\n\t],\n\tParticle: (_: ParticleProps['args']) => [],\n\tSphere: (args: SphereArgs = [1]) => {\n\t\tif (!Array.isArray(args)) throw new Error('Sphere body args must be an array');\n\t\treturn [args[0]];\n\t},\n\tCompound: (args: CompoundBodyProps['args']) => args,\n};\n","import {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tWritableSignal,\n\tcomputed,\n\teffect,\n\tinject,\n\tisSignal,\n\tsignal,\n} from '@angular/core';\nimport { BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { NgtcDebug } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';\nimport { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\n\nexport interface NgtcBodyOptions<TShape extends BodyShapeType> {\n\ttransformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;\n\tinjector?: Injector;\n}\n\nfunction createInjectBody<TShape extends BodyShapeType>(type: TShape) {\n\treturn <TObject extends Object3D>(\n\t\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\t\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t\toptions?: NgtcBodyOptions<TShape>,\n\t) => injectBody<TShape, TObject>(type, getPropFn, ref, options);\n}\n\nfunction injectBody<TShape extends BodyShapeType, TObject extends Object3D>(\n\ttype: TShape,\n\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t{ transformArgs, injector }: NgtcBodyOptions<TShape> = {},\n): Signal<NgtcBodyPublicApi | null> {\n\treturn assertInjector(injectBody, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst debug = inject(NgtcDebug, { optional: true });\n\n\t\tconst transform = transformArgs ?? defaultTransformArgs[type];\n\t\tconst isRefSignal = isSignal(ref);\n\t\tconst bodyRef = (isRefSignal ? ref : signal(ref)) as WritableSignal<TObject | undefined>;\n\t\tconst body = computed(() => resolveRef(bodyRef()));\n\n\t\tconst api = computed(() => {\n\t\t\tconst _body = body();\n\t\t\tif (!_body) return null;\n\n\t\t\tconst { worker, ...rest } = physics;\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\treturn makeBodyApi(_body, _worker, rest);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = physics.worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst object = body();\n\n\t\t\tif (!isRefSignal && !object) {\n\t\t\t\tbodyRef.set(resolveRef(ref));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!object) return;\n\n\t\t\tconst [uuid, props] = (() => {\n\t\t\t\tlet uuids: string[] = [];\n\t\t\t\tlet temp: Object3D;\n\t\t\t\tif (object instanceof InstancedMesh) {\n\t\t\t\t\tobject.instanceMatrix.setUsage(DynamicDrawUsage);\n\t\t\t\t\tuuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n\t\t\t\t\ttemp = new Object3D();\n\t\t\t\t} else {\n\t\t\t\t\tuuids = [object.uuid];\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tuuids,\n\t\t\t\t\tuuids.map((id, index) => {\n\t\t\t\t\t\tconst props = getPropFn(index);\n\t\t\t\t\t\tif (temp) {\n\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\t(object as unknown as InstancedMesh).setMatrixAt(index, temp.matrix);\n\t\t\t\t\t\t\t(object as unknown as InstancedMesh).instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tphysics.refs[id] = object;\n\t\t\t\t\t\tdebug?.add(id, props, type);\n\t\t\t\t\t\tsetupCollision(physics.events, props, id);\n\t\t\t\t\t\t// @ts-expect-error - if args is undefined, there's default\n\t\t\t\t\t\treturn { ...props, args: transform(props.args) };\n\t\t\t\t\t}),\n\t\t\t\t];\n\t\t\t})();\n\n\t\t\t// Register on mount, unregister on unmount\n\t\t\tcurrentWorker.addBodies({\n\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tonCollide: Boolean(onCollide),\n\t\t\t\t\t\tonCollideBegin: Boolean(onCollideBegin),\n\t\t\t\t\t\tonCollideEnd: Boolean(onCollideEnd),\n\t\t\t\t\t\t...serializableProps,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\tdelete physics.refs[id];\n\t\t\t\t\tdebug?.remove(id);\n\t\t\t\t\tdelete physics.events[id];\n\t\t\t\t});\n\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t});\n\t\t});\n\n\t\treturn api;\n\t});\n}\n\nexport const injectBox = createInjectBody('Box');\nexport const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');\nexport const injectCylinder = createInjectBody('Cylinder');\nexport const injectHeightfield = createInjectBody('Heightfield');\nexport const injectParticle = createInjectBody('Particle');\nexport const injectPlane = createInjectBody('Plane');\nexport const injectSphere = createInjectBody('Sphere');\nexport const injectTrimesh = createInjectBody('Trimesh');\nexport const injectCompound = createInjectBody('Compound');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-body.mjs","sources":["../../../../libs/cannon/body/src/lib/utils.ts","../../../../libs/cannon/body/src/lib/body.ts","../../../../libs/cannon/body/src/angular-three-cannon-body.ts"],"sourcesContent":["import {\n\tAtomicName,\n\tBodyProps,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tCylinderArgs,\n\tHeightfieldArgs,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshArgs,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { is } from 'angular-three';\nimport { NgtcCannonEvents, NgtcPhysics } from 'angular-three-cannon';\nimport * as THREE from 'three';\nimport { NgtcWorkerApi } from './types';\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nfunction getUUID(body: THREE.Object3D, index?: number) {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof body === 'function') return null;\n\treturn body && body && `${body.uuid}${suffix}`;\n}\n\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nfunction quaternionToRotation(callback: (v: Triplet) => void) {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n}\n\nlet incrementingId = 0;\nexport function createSubscribe<T extends SubscriptionName>(\n\tbody: THREE.Object3D,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(body, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n\treturn is.three<THREE.Vector3>(v, 'isVector3') ? [v.x, v.y, v.z] : v;\n}\n\nexport function prepare(\n\tobject: THREE.Object3D,\n\t{ position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps,\n) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nexport function setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\n\nexport function makeBodyApi(\n\tbody: THREE.Object3D,\n\tworker: CannonWorkerAPI,\n\t{ subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>,\n) {\n\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\treturn {\n\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: value, uuid } as never);\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeQuaternion = (index?: number) => {\n\t\tconst type = 'quaternion';\n\t\treturn {\n\t\t\tcopy: ({ w, x, y, z }: THREE.Quaternion) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRotation = (index?: number) => {\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\tconst id = incrementingId++;\n\t\t\t\tconst target = 'bodies';\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\t\t\treturn () => {\n\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\tworker.unsubscribe({ props: id });\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst makeVec = (type: VectorName, index?: number) => {\n\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRemove = (index?: number) => {\n\t\tconst uuid = getUUID(body, index);\n\t\treturn () => {\n\t\t\tif (uuid) worker.removeBodies({ uuid: [uuid] });\n\t\t};\n\t};\n\n\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\treturn {\n\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyForce({ props: [force, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyTorque({ props: [torque], uuid });\n\t\t\t},\n\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\tmass: makeAtomic('mass', index),\n\t\t\tmaterial: makeAtomic('material', index),\n\t\t\tposition: makeVec('position', index),\n\t\t\tquaternion: makeQuaternion(index),\n\t\t\trotation: makeRotation(index),\n\t\t\tscaleOverride(scale) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tif (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n\t\t\t},\n\t\t\tsleep() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.sleep({ uuid });\n\t\t\t},\n\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\tuserData: makeAtomic('userData', index),\n\t\t\tvelocity: makeVec('velocity', index),\n\t\t\tremove: makeRemove(index),\n\t\t\twakeUp() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.wakeUp({ uuid });\n\t\t\t},\n\t\t};\n\t}\n\tconst cache: Record<number, NgtcWorkerApi> = {};\n\treturn { ...makeApi(), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n}\n\nexport const defaultTransformArgs = {\n\tPlane: (_: PlaneProps['args']) => [],\n\tBox: (args: BoxProps['args'] = [1, 1, 1]) => args,\n\tTrimesh: (args: TrimeshArgs) => args,\n\tCylinder: (_: CylinderArgs = []) => [],\n\tHeightfield: (args: HeightfieldArgs) => args,\n\tConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]: ConvexPolyhedronArgs = []) => [\n\t\tvertices && vertices.map(makeTriplet),\n\t\tfaces,\n\t\tnormals && normals.map(makeTriplet),\n\t\taxes && axes.map(makeTriplet),\n\t\tboundingSphereRadius,\n\t],\n\tParticle: (_: ParticleProps['args']) => [],\n\tSphere: (args: SphereArgs = [1]) => {\n\t\tif (!Array.isArray(args)) throw new Error('Sphere body args must be an array');\n\t\treturn [args[0]];\n\t},\n\tCompound: (args: CompoundBodyProps['args']) => args,\n};\n","import {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tWritableSignal,\n\tcomputed,\n\teffect,\n\tinject,\n\tisSignal,\n\tsignal,\n} from '@angular/core';\nimport { BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { is, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { NgtcDebug } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\n\nexport interface NgtcBodyOptions<TShape extends BodyShapeType> {\n\ttransformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;\n\tinjector?: Injector;\n}\n\nfunction createInjectBody<TShape extends BodyShapeType>(type: TShape) {\n\treturn <TObject extends THREE.Object3D>(\n\t\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\t\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t\toptions?: NgtcBodyOptions<TShape>,\n\t) => injectBody<TShape, TObject>(type, getPropFn, ref, options);\n}\n\nfunction injectBody<TShape extends BodyShapeType, TObject extends THREE.Object3D>(\n\ttype: TShape,\n\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t{ transformArgs, injector }: NgtcBodyOptions<TShape> = {},\n): Signal<NgtcBodyPublicApi | null> {\n\treturn assertInjector(injectBody, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst debug = inject(NgtcDebug, { optional: true });\n\n\t\tconst transform = transformArgs ?? defaultTransformArgs[type];\n\t\tconst isRefSignal = isSignal(ref);\n\t\tconst bodyRef = (isRefSignal ? ref : signal(ref)) as WritableSignal<TObject | undefined>;\n\t\tconst body = computed(() => resolveRef(bodyRef()));\n\n\t\tconst api = computed(() => {\n\t\t\tconst _body = body();\n\t\t\tif (!_body) return null;\n\n\t\t\tconst { worker, ...rest } = physics;\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\treturn makeBodyApi(_body, _worker, rest);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = physics.worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst object = body();\n\n\t\t\tif (!isRefSignal && !object) {\n\t\t\t\tbodyRef.set(resolveRef(ref));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!object) return;\n\n\t\t\tconst [uuid, props] = (() => {\n\t\t\t\tlet uuids: string[] = [];\n\t\t\t\tlet temp: THREE.Object3D;\n\t\t\t\tif (is.three<THREE.InstancedMesh>(object, 'isInstancedMesh')) {\n\t\t\t\t\tobject.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t\t\t\tuuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n\t\t\t\t\ttemp = new THREE.Object3D();\n\t\t\t\t} else {\n\t\t\t\t\tuuids = [object.uuid];\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\tuuids,\n\t\t\t\t\tuuids.map((id, index) => {\n\t\t\t\t\t\tconst props = getPropFn(index);\n\t\t\t\t\t\tif (temp) {\n\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\t(object as unknown as THREE.InstancedMesh).setMatrixAt(index, temp.matrix);\n\t\t\t\t\t\t\t(object as unknown as THREE.InstancedMesh).instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tphysics.refs[id] = object;\n\t\t\t\t\t\tdebug?.add(id, props, type);\n\t\t\t\t\t\tsetupCollision(physics.events, props, id);\n\t\t\t\t\t\t// @ts-expect-error - if args is undefined, there's default\n\t\t\t\t\t\treturn { ...props, args: transform(props.args) };\n\t\t\t\t\t}),\n\t\t\t\t];\n\t\t\t})();\n\n\t\t\t// Register on mount, unregister on unmount\n\t\t\tcurrentWorker.addBodies({\n\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tonCollide: Boolean(onCollide),\n\t\t\t\t\t\tonCollideBegin: Boolean(onCollideBegin),\n\t\t\t\t\t\tonCollideEnd: Boolean(onCollideEnd),\n\t\t\t\t\t\t...serializableProps,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tonCleanup(() => {\n\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\tdelete physics.refs[id];\n\t\t\t\t\tdebug?.remove(id);\n\t\t\t\t\tdelete physics.events[id];\n\t\t\t\t});\n\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t});\n\t\t});\n\n\t\treturn api;\n\t});\n}\n\nexport const injectBox = createInjectBody('Box');\nexport const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');\nexport const injectCylinder = createInjectBody('Cylinder');\nexport const injectHeightfield = createInjectBody('Heightfield');\nexport const injectParticle = createInjectBody('Particle');\nexport const injectPlane = createInjectBody('Plane');\nexport const injectSphere = createInjectBody('Sphere');\nexport const injectTrimesh = createInjectBody('Trimesh');\nexport const injectCompound = createInjectBody('Compound');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-constraint.mjs","sources":["../../../../libs/cannon/constraint/src/lib/constraint.ts","../../../../libs/cannon/constraint/src/angular-three-cannon-constraint.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport {\n\tConeTwistConstraintOpts,\n\tConstraintTypes,\n\tDistanceConstraintOpts,\n\tHingeConstraintOpts,\n\tLockConstraintOpts,\n\tPointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { makeId, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { Object3D } from 'three';\n\nexport interface NgtcConstraintApi {\n\tdisable: () => void;\n\tenable: () => void;\n\tremove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n\tdisableMotor: () => void;\n\tenableMotor: () => void;\n\tsetMotorMaxForce: (value: number) => void;\n\tsetMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n\t? NgtcConstraintApi\n\t: NgtcHingeConstraintApi;\n\nexport type NgtcConstraintOptionsMap = {\n\tConeTwist: ConeTwistConstraintOpts;\n\tPointToPoint: PointToPointConstraintOpts;\n\tDistance: DistanceConstraintOpts;\n\tLock: LockConstraintOpts;\n\tHinge: HingeConstraintOpts;\n};\n\nexport type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes> = {\n\tinjector?: Injector;\n\tdisableOnStart?: boolean;\n\toptions?: NgtcConstraintOptionsMap[TConstraintType];\n};\n\nfunction createInjectConstraint<TConstraint extends ConstraintTypes | 'Hinge'>(type: TConstraint) {\n\treturn <A extends Object3D = Object3D, B extends Object3D = Object3D>(\n\t\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\t\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t\toptions?: NgtcConstraintOptions<TConstraint>,\n\t) => injectConstraint<TConstraint, A, B>(type, bodyA, bodyB, options);\n}\n\nfunction injectConstraint<\n\tTConstraint extends ConstraintTypes | 'Hinge',\n\tA extends Object3D = Object3D,\n\tB extends Object3D = Object3D,\n>(\n\ttype: TConstraint,\n\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t{\n\t\tinjector,\n\t\toptions = {} as NgtcConstraintOptionsMap[TConstraint],\n\t\tdisableOnStart = false,\n\t}: NgtcConstraintOptions<TConstraint> = {},\n) {\n\treturn assertInjector(injectConstraint, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst worker = physics.worker;\n\n\t\tconst uuid = makeId();\n\t\tconst bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);\n\t\tconst bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);\n\t\tconst bodyAValue = computed(() => resolveRef(bodyARef()));\n\t\tconst bodyBValue = computed(() => resolveRef(bodyBRef()));\n\n\t\tconst constraintApi = computed(() => {\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\tconst enableDisable = {\n\t\t\t\tdisable: () => _worker.disableConstraint({ uuid }),\n\t\t\t\tenable: () => _worker.enableConstraint({ uuid }),\n\t\t\t\tremove: () => _worker.removeConstraint({ uuid }),\n\t\t\t};\n\t\t\tif (type === 'Hinge') {\n\t\t\t\treturn {\n\t\t\t\t\t...enableDisable,\n\t\t\t\t\tdisableMotor: () => _worker.disableConstraintMotor({ uuid }),\n\t\t\t\t\tenableMotor: () => _worker.enableConstraintMotor({ uuid }),\n\t\t\t\t\tsetMotorMaxForce: (value: number) => _worker.setConstraintMotorMaxForce({ props: value, uuid }),\n\t\t\t\t\tsetMotorSpeed: (value: number) => _worker.setConstraintMotorSpeed({ props: value, uuid }),\n\t\t\t\t} as NgtcHingeConstraintApi;\n\t\t\t}\n\t\t\treturn enableDisable as NgtcConstraintApi;\n\t\t});\n\n\t\tlet alreadyDisabled = false;\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst [a, b, api] = [bodyAValue(), bodyBValue(), untracked(constraintApi)];\n\t\t\tif (!a || !b) return;\n\n\t\t\tcurrentWorker.addConstraint({\n\t\t\t\tprops: [a.uuid, b.uuid, options],\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tif (disableOnStart && !alreadyDisabled) {\n\t\t\t\talreadyDisabled = true;\n\t\t\t\tapi?.disable();\n\t\t\t}\n\n\t\t\tonCleanup(() => currentWorker.removeConstraint({ uuid }));\n\t\t});\n\n\t\treturn constraintApi;\n\t});\n}\n\nexport const injectPointToPoint = createInjectConstraint('PointToPoint');\nexport const injectConeTwist = createInjectConstraint('ConeTwist');\nexport const injectDistance = createInjectConstraint('Distance');\nexport const injectLock = createInjectConstraint('Lock');\nexport const injectHinge = createInjectConstraint('Hinge');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-constraint.mjs","sources":["../../../../libs/cannon/constraint/src/lib/constraint.ts","../../../../libs/cannon/constraint/src/angular-three-cannon-constraint.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport {\n\tConeTwistConstraintOpts,\n\tConstraintTypes,\n\tDistanceConstraintOpts,\n\tHingeConstraintOpts,\n\tLockConstraintOpts,\n\tPointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { makeId, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport interface NgtcConstraintApi {\n\tdisable: () => void;\n\tenable: () => void;\n\tremove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n\tdisableMotor: () => void;\n\tenableMotor: () => void;\n\tsetMotorMaxForce: (value: number) => void;\n\tsetMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n\t? NgtcConstraintApi\n\t: NgtcHingeConstraintApi;\n\nexport type NgtcConstraintOptionsMap = {\n\tConeTwist: ConeTwistConstraintOpts;\n\tPointToPoint: PointToPointConstraintOpts;\n\tDistance: DistanceConstraintOpts;\n\tLock: LockConstraintOpts;\n\tHinge: HingeConstraintOpts;\n};\n\nexport type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes> = {\n\tinjector?: Injector;\n\tdisableOnStart?: boolean;\n\toptions?: NgtcConstraintOptionsMap[TConstraintType];\n};\n\nfunction createInjectConstraint<TConstraint extends ConstraintTypes | 'Hinge'>(type: TConstraint) {\n\treturn <A extends THREE.Object3D = THREE.Object3D, B extends THREE.Object3D = THREE.Object3D>(\n\t\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\t\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t\toptions?: NgtcConstraintOptions<TConstraint>,\n\t) => injectConstraint<TConstraint, A, B>(type, bodyA, bodyB, options);\n}\n\nfunction injectConstraint<\n\tTConstraint extends ConstraintTypes | 'Hinge',\n\tA extends THREE.Object3D = THREE.Object3D,\n\tB extends THREE.Object3D = THREE.Object3D,\n>(\n\ttype: TConstraint,\n\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t{\n\t\tinjector,\n\t\toptions = {} as NgtcConstraintOptionsMap[TConstraint],\n\t\tdisableOnStart = false,\n\t}: NgtcConstraintOptions<TConstraint> = {},\n) {\n\treturn assertInjector(injectConstraint, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst worker = physics.worker;\n\n\t\tconst uuid = makeId();\n\t\tconst bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);\n\t\tconst bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);\n\t\tconst bodyAValue = computed(() => resolveRef(bodyARef()));\n\t\tconst bodyBValue = computed(() => resolveRef(bodyBRef()));\n\n\t\tconst constraintApi = computed(() => {\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\tconst enableDisable = {\n\t\t\t\tdisable: () => _worker.disableConstraint({ uuid }),\n\t\t\t\tenable: () => _worker.enableConstraint({ uuid }),\n\t\t\t\tremove: () => _worker.removeConstraint({ uuid }),\n\t\t\t};\n\t\t\tif (type === 'Hinge') {\n\t\t\t\treturn {\n\t\t\t\t\t...enableDisable,\n\t\t\t\t\tdisableMotor: () => _worker.disableConstraintMotor({ uuid }),\n\t\t\t\t\tenableMotor: () => _worker.enableConstraintMotor({ uuid }),\n\t\t\t\t\tsetMotorMaxForce: (value: number) => _worker.setConstraintMotorMaxForce({ props: value, uuid }),\n\t\t\t\t\tsetMotorSpeed: (value: number) => _worker.setConstraintMotorSpeed({ props: value, uuid }),\n\t\t\t\t} as NgtcHingeConstraintApi;\n\t\t\t}\n\t\t\treturn enableDisable as NgtcConstraintApi;\n\t\t});\n\n\t\tlet alreadyDisabled = false;\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst [a, b, api] = [bodyAValue(), bodyBValue(), untracked(constraintApi)];\n\t\t\tif (!a || !b) return;\n\n\t\t\tcurrentWorker.addConstraint({\n\t\t\t\tprops: [a.uuid, b.uuid, options],\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tif (disableOnStart && !alreadyDisabled) {\n\t\t\t\talreadyDisabled = true;\n\t\t\t\tapi?.disable();\n\t\t\t}\n\n\t\t\tonCleanup(() => currentWorker.removeConstraint({ uuid }));\n\t\t});\n\n\t\treturn constraintApi;\n\t});\n}\n\nexport const injectPointToPoint = createInjectConstraint('PointToPoint');\nexport const injectConeTwist = createInjectConstraint('ConeTwist');\nexport const injectDistance = createInjectConstraint('Distance');\nexport const injectLock = createInjectConstraint('Lock');\nexport const injectHinge = createInjectConstraint('Hinge');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, input, afterNextRender, Directive } from '@angular/core';
2
+ import { input, inject, afterNextRender, Directive } from '@angular/core';
3
3
  import { propsToBody } from '@pmndrs/cannon-worker-api';
4
- import { injectStore, injectBeforeRender } from 'angular-three';
4
+ import { is, injectStore, injectBeforeRender } from 'angular-three';
5
5
  import { NgtcPhysics } from 'angular-three-cannon';
6
6
  import CannonDebugger from 'cannon-es-debugger';
7
7
  import { mergeInputs } from 'ngxtension/inject-inputs';
8
- import { Quaternion, Vector3, Matrix4, InstancedMesh, Scene } from 'three';
8
+ import * as THREE from 'three';
9
9
 
10
- const q = new Quaternion();
11
- const s = new Vector3(1, 1, 1);
12
- const v = new Vector3();
13
- const m = new Matrix4();
10
+ const q = new THREE.Quaternion();
11
+ const s = new THREE.Vector3(1, 1, 1);
12
+ const v = new THREE.Vector3();
13
+ const m = new THREE.Matrix4();
14
14
  function getMatrix(o) {
15
- if (o instanceof InstancedMesh) {
15
+ if (is.three(o, 'isInstancedMesh')) {
16
16
  o.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);
17
17
  return m;
18
18
  }
@@ -26,11 +26,11 @@ const defaultOptions = {
26
26
  };
27
27
  class NgtcDebug {
28
28
  constructor() {
29
- this.store = injectStore();
30
- this.physics = inject(NgtcPhysics);
31
29
  this.debug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
32
- this.defaultScene = this.store.select('scene');
33
- this.debuggerScene = new Scene();
30
+ this.physics = inject(NgtcPhysics);
31
+ this.store = injectStore();
32
+ this.defaultScene = this.store.scene;
33
+ this.debuggerScene = new THREE.Scene();
34
34
  this.bodies = [];
35
35
  this.bodyMap = {};
36
36
  // NOTE: afterNextRender so we only instantiate once after inputs have been resolved
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-debug.mjs","sources":["../../../../libs/cannon/debug/src/lib/debug.ts","../../../../libs/cannon/debug/src/angular-three-cannon-debug.ts"],"sourcesContent":["import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { BodyProps, BodyShapeType, propsToBody } from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { Body, Quaternion as CQuarternion, Vec3, World } from 'cannon-es';\nimport CannonDebugger from 'cannon-es-debugger';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, Scene, Vector3 } from 'three';\n\nconst q = new Quaternion();\nconst s = new Vector3(1, 1, 1);\nconst v = new Vector3();\nconst m = new Matrix4();\nfunction getMatrix(o: Object3D) {\n\tif (o instanceof InstancedMesh) {\n\t\to.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n\t\treturn m;\n\t}\n\treturn o.matrix;\n}\n\nexport interface NgtcDebugInputs {\n\tenabled: boolean;\n\tcolor: string;\n\timpl: typeof CannonDebugger;\n\tscale: number;\n}\n\nconst defaultOptions: NgtcDebugInputs = {\n\tenabled: true,\n\tscale: 1,\n\tcolor: 'black',\n\timpl: CannonDebugger,\n};\n\n@Directive({ selector: 'ngtc-physics[debug]' })\nexport class NgtcDebug {\n\tprivate store = injectStore();\n\tprivate physics = inject(NgtcPhysics);\n\n\tdebug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate defaultScene = this.store.select('scene');\n\n\tprivate debuggerScene = new Scene();\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tconstructor() {\n\t\t// NOTE: afterNextRender so we only instantiate once after inputs have been resolved\n\t\tafterNextRender(() => {\n\t\t\tthis.defaultScene().add(this.debuggerScene);\n\t\t\tthis.cannonDebugger = this.debug().impl(this.debuggerScene, { bodies: this.bodies } as World, {\n\t\t\t\tcolor: this.debug().color,\n\t\t\t\tscale: this.debug().scale,\n\t\t\t});\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!this.cannonDebugger) return;\n\n\t\t\tconst enabled = this.debug().enabled;\n\t\t\tconst refs = this.physics.refs;\n\t\t\tfor (const uuid in this.bodyMap) {\n\t\t\t\tconst ref = refs[uuid];\n\t\t\t\tconst body = this.bodyMap[uuid];\n\t\t\t\tif (ref) {\n\t\t\t\t\tgetMatrix(ref).decompose(v, q, s);\n\t\t\t\t\tbody.position.copy(v as unknown as Vec3);\n\t\t\t\t\tbody.quaternion.copy(q as unknown as CQuarternion);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const child of this.debuggerScene.children) child.visible = enabled;\n\t\t\tif (enabled) this.cannonDebugger.update();\n\t\t});\n\t}\n\n\tadd(uuid: string, props: BodyProps, type: BodyShapeType) {\n\t\tconst body = propsToBody({ uuid, props, type });\n\t\tthis.bodies.push(body);\n\t\tthis.bodyMap[uuid] = body;\n\t}\n\n\tremove(uuid: string) {\n\t\tconst debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);\n\t\tif (debugBodyIndex > -1) this.bodies.splice(debugBodyIndex, 1);\n\t\tdelete this.bodyMap[uuid];\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AASA,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE;AAC1B,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9B,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE;AACvB,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE;AACvB,SAAS,SAAS,CAAC,CAAW,EAAA;AAC7B,IAAA,IAAI,CAAC,YAAY,aAAa,EAAE;QAC/B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,QAAA,OAAO,CAAC;;IAET,OAAO,CAAC,CAAC,MAAM;AAChB;AASA,MAAM,cAAc,GAAoB;AACvC,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,IAAI,EAAE,cAAc;CACpB;MAGY,SAAS,CAAA;AAcrB,IAAA,WAAA,GAAA;QAbQ,IAAK,CAAA,KAAA,GAAG,WAAW,EAAE;AACrB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AAErC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QAEjE,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAEzC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,KAAK,EAAE;QAC3B,IAAM,CAAA,MAAA,GAAW,EAAE;QACnB,IAAO,CAAA,OAAA,GAAyB,EAAE;;QAMzC,eAAe,CAAC,MAAK;YACpB,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAW,EAAE;AAC7F,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK;AACzB,aAAA,CAAC;AACH,SAAC,CAAC;QAEF,kBAAkB,CAAC,MAAK;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE;YAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;AAC9B,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AAChC,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC/B,IAAI,GAAG,EAAE;AACR,oBAAA,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAoB,CAAC;AACxC,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAA4B,CAAC;;;AAIpD,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ;AAAE,gBAAA,KAAK,CAAC,OAAO,GAAG,OAAO;AACxE,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AAC1C,SAAC,CAAC;;AAGH,IAAA,GAAG,CAAC,IAAY,EAAE,KAAgB,EAAE,IAAmB,EAAA;AACtD,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;;AAG1B,IAAA,MAAM,CAAC,IAAY,EAAA;AAClB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,cAAc,GAAG,CAAC,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;AAC9D,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;8GArDd,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,SAAS;mBAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE;;;ACnC9C;;AAEG;;;;"}
1
+ {"version":3,"file":"angular-three-cannon-debug.mjs","sources":["../../../../libs/cannon/debug/src/lib/debug.ts","../../../../libs/cannon/debug/src/angular-three-cannon-debug.ts"],"sourcesContent":["import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { BodyProps, BodyShapeType, propsToBody } from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore, is } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { Body, Quaternion as CQuarternion, Vec3, World } from 'cannon-es';\nimport CannonDebugger from 'cannon-es-debugger';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nconst q = new THREE.Quaternion();\nconst s = new THREE.Vector3(1, 1, 1);\nconst v = new THREE.Vector3();\nconst m = new THREE.Matrix4();\n\nfunction getMatrix(o: THREE.Object3D) {\n\tif (is.three<THREE.InstancedMesh>(o, 'isInstancedMesh')) {\n\t\to.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n\t\treturn m;\n\t}\n\treturn o.matrix;\n}\n\nexport interface NgtcDebugInputs {\n\tenabled: boolean;\n\tcolor: string;\n\timpl: typeof CannonDebugger;\n\tscale: number;\n}\n\nconst defaultOptions: NgtcDebugInputs = {\n\tenabled: true,\n\tscale: 1,\n\tcolor: 'black',\n\timpl: CannonDebugger,\n};\n\n@Directive({ selector: 'ngtc-physics[debug]' })\nexport class NgtcDebug {\n\tdebug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate physics = inject(NgtcPhysics);\n\n\tprivate store = injectStore();\n\tprivate defaultScene = this.store.scene;\n\n\tprivate debuggerScene = new THREE.Scene();\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tconstructor() {\n\t\t// NOTE: afterNextRender so we only instantiate once after inputs have been resolved\n\t\tafterNextRender(() => {\n\t\t\tthis.defaultScene().add(this.debuggerScene);\n\t\t\tthis.cannonDebugger = this.debug().impl(this.debuggerScene, { bodies: this.bodies } as World, {\n\t\t\t\tcolor: this.debug().color,\n\t\t\t\tscale: this.debug().scale,\n\t\t\t});\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!this.cannonDebugger) return;\n\n\t\t\tconst enabled = this.debug().enabled;\n\t\t\tconst refs = this.physics.refs;\n\t\t\tfor (const uuid in this.bodyMap) {\n\t\t\t\tconst ref = refs[uuid];\n\t\t\t\tconst body = this.bodyMap[uuid];\n\t\t\t\tif (ref) {\n\t\t\t\t\tgetMatrix(ref).decompose(v, q, s);\n\t\t\t\t\tbody.position.copy(v as unknown as Vec3);\n\t\t\t\t\tbody.quaternion.copy(q as unknown as CQuarternion);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const child of this.debuggerScene.children) child.visible = enabled;\n\t\t\tif (enabled) this.cannonDebugger.update();\n\t\t});\n\t}\n\n\tadd(uuid: string, props: BodyProps, type: BodyShapeType) {\n\t\tconst body = propsToBody({ uuid, props, type });\n\t\tthis.bodies.push(body);\n\t\tthis.bodyMap[uuid] = body;\n\t}\n\n\tremove(uuid: string) {\n\t\tconst debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);\n\t\tif (debugBodyIndex > -1) this.bodies.splice(debugBodyIndex, 1);\n\t\tdelete this.bodyMap[uuid];\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, signal, inject, Injector, afterNextRender, effect, untracked, Directive } from '@angular/core';
3
3
  import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
- import { injectStore, pick, injectBeforeRender } from 'angular-three';
4
+ import { injectStore, pick, injectBeforeRender, is } from 'angular-three';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
- import { Vector3, Quaternion, Matrix4, InstancedMesh } from 'three';
6
+ import * as THREE from 'three';
7
7
 
8
- const v = new Vector3();
9
- const s = new Vector3(1, 1, 1);
10
- const q = new Quaternion();
11
- const m = new Matrix4();
8
+ const v = new THREE.Vector3();
9
+ const s = new THREE.Vector3(1, 1, 1);
10
+ const q = new THREE.Quaternion();
11
+ const m = new THREE.Matrix4();
12
12
  function apply(index, positions, quaternions, scale = s, object) {
13
13
  if (index !== undefined) {
14
14
  m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
@@ -51,7 +51,7 @@ class NgtcPhysics {
51
51
  this.gravity = pick(this.options, 'gravity');
52
52
  this.iterations = pick(this.options, 'iterations');
53
53
  this.tolerance = pick(this.options, 'tolerance');
54
- this.invalidate = this.store.select('invalidate');
54
+ this.invalidate = this.store.invalidate;
55
55
  // @ts-expect-error - worker is not nullable, and we don't want to use ! operator.
56
56
  this.cannonWorker = signal(null);
57
57
  this.bodies = {};
@@ -154,7 +154,7 @@ class NgtcPhysics {
154
154
  if (!active)
155
155
  return;
156
156
  for (const ref of Object.values(refs).filter(unique())) {
157
- if (ref instanceof InstancedMesh) {
157
+ if (is.three(ref, 'isInstancedMesh')) {
158
158
  for (let i = 0; i < ref.count; i++) {
159
159
  const uuid = `${ref.uuid}/${i}`;
160
160
  const index = bodies[uuid];
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Directive, Injector, afterNextRender, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\tCannonWorkerProps,\n\tCollideBeginEvent,\n\tCollideEndEvent,\n\tCollideEvent,\n\tRayhitEvent,\n\tRefs,\n\tSubscriptions,\n\tWorkerCollideBeginEvent,\n\tWorkerCollideEndEvent,\n\tWorkerCollideEvent,\n\tWorkerFrameMessage,\n\tWorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, QuaternionTuple, Vector3 } from 'three';\n\nexport interface NgtcCannonWorkerEvents {\n\tcollide: WorkerCollideEvent;\n\tcollideBegin: WorkerCollideBeginEvent;\n\tcollideEnd: WorkerCollideEndEvent;\n\tframe: WorkerFrameMessage;\n\trayhit: WorkerRayhitEvent;\n}\n\nexport type NgtcCannonWorker = CannonWorkerAPI & {\n\ton: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;\n\tremoveAllListeners: () => void;\n};\n\nconst v = new Vector3();\nconst s = new Vector3(1, 1, 1);\nconst q = new Quaternion();\nconst m = new Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions as QuaternionTuple, index * 4), scale);\n\t\tif (object) {\n\t\t\tobject.matrixAutoUpdate = false;\n\t\t\tobject.matrix.copy(m);\n\t\t}\n\t\treturn m;\n\t}\n\treturn m.identity();\n}\n\nfunction unique() {\n\tconst values: unknown[] = [];\n\treturn (value: unknown) => (values.includes(value) ? false : !!values.push(value));\n}\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n\t[K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;\n\nexport type ScaleOverrides = Record<string, Vector3>;\n\nexport interface NgtcPhysicsOptions extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nconst defaultOptions: NgtcPhysicsOptions = {\n\tallowSleep: false,\n\taxisIndex: 0,\n\tbroadphase: 'Naive',\n\tdefaultContactMaterial: { contactEquationStiffness: 1e6 },\n\tfrictionGravity: null,\n\tgravity: [0, -9.81, 0],\n\tisPaused: false,\n\titerations: 5,\n\tmaxSubSteps: 10,\n\tquatNormalizeFast: false,\n\tquatNormalizeSkip: 0,\n\tshouldInvalidate: true,\n\tsize: 1000,\n\tsolver: 'GS',\n\tstepSize: 1 / 60,\n\ttolerance: 0.001,\n};\n\ntype NgtsPhysicsUpdatableOptions = Extract<\n\tkeyof NgtcPhysicsOptions,\n\t'gravity' | 'iterations' | 'tolerance' | 'broadphase' | 'axisIndex'\n>;\n\n@Directive({ selector: 'ngtc-physics' })\nexport class NgtcPhysics {\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate axisIndex = pick(this.options, 'axisIndex');\n\tprivate broadphase = pick(this.options, 'broadphase');\n\tprivate gravity = pick(this.options, 'gravity');\n\tprivate iterations = pick(this.options, 'iterations');\n\tprivate tolerance = pick(this.options, 'tolerance');\n\n\tprivate invalidate = this.store.select('invalidate');\n\t// @ts-expect-error - worker is not nullable, and we don't want to use ! operator.\n\tprivate cannonWorker = signal<CannonWorkerAPI>(null);\n\n\tbodies: { [uuid: string]: number } = {};\n\tevents: NgtcCannonEvents = {};\n\trefs: Refs = {};\n\tscaleOverrides: ScaleOverrides = {};\n\tsubscriptions: Subscriptions = {};\n\tworker = this.cannonWorker.asReadonly();\n\n\tconstructor() {\n\t\tconst injector = inject(Injector);\n\n\t\t// NOTE: set new cannonworker in afterNextRender\n\t\t// - so inputs are resolved\n\t\t// - so the worker is instantiated only once\n\t\t// - effects are started after worker is instantiated\n\t\tafterNextRender(() => {\n\t\t\tthis.cannonWorker.set(new CannonWorkerAPI(this.options()));\n\n\t\t\teffect(\n\t\t\t\t(onCleanup) => {\n\t\t\t\t\tconst cleanup = this.connectWorkerEffect();\n\t\t\t\t\tonCleanup(() => cleanup?.());\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tthis.updateWorkerStateEffect('axisIndex', this.axisIndex);\n\t\t\t\t\tthis.updateWorkerStateEffect('broadphase', this.broadphase);\n\t\t\t\t\tthis.updateWorkerStateEffect('gravity', this.gravity);\n\t\t\t\t\tthis.updateWorkerStateEffect('iterations', this.iterations);\n\t\t\t\t\tthis.updateWorkerStateEffect('tolerance', this.tolerance);\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\t\t});\n\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.cannonWorker()];\n\t\t\tif (isPaused || !worker || stepSize == null) return;\n\t\t\ttimeSinceLastCalled += delta;\n\t\t\tworker.step({ maxSubSteps, stepSize, timeSinceLastCalled });\n\t\t\ttimeSinceLastCalled = 0;\n\t\t});\n\t}\n\n\tprivate connectWorkerEffect() {\n\t\tconst worker = this.cannonWorker() as NgtcCannonWorker;\n\t\tif (!worker) return;\n\n\t\tworker.connect();\n\t\tworker.init();\n\n\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\treturn () => {\n\t\t\tworker.terminate();\n\t\t\tworker.removeAllListeners();\n\t\t};\n\t}\n\n\tprivate updateWorkerStateEffect<TUpdatableKey extends NgtsPhysicsUpdatableOptions>(\n\t\tkey: TUpdatableKey,\n\t\toption: () => NgtcPhysicsOptions[TUpdatableKey],\n\t) {\n\t\tconst worker = this.cannonWorker();\n\t\tif (!worker) return;\n\t\tObject.assign(worker, { [key]: option() });\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[target]?.collide;\n\t\tif (cb) {\n\t\t\tcb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideBegin;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\t\tconst cbB = events[bodyB]?.collideBegin;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n\t}\n\n\tprivate collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideEnd;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\t\tconst cbB = events[bodyB]?.collideEnd;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n\t}\n\n\tprivate frameHandler({\n\t\tactive,\n\t\tbodies: uuids = [],\n\t\tobservations,\n\t\tpositions,\n\t\tquaternions,\n\t}: WorkerFrameMessage['data']) {\n\t\tconst [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [\n\t\t\tuntracked(this.options),\n\t\t\tthis,\n\t\t\tthis.invalidate(),\n\t\t];\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\t\tobservations.forEach(([id, value, type]) => {\n\t\t\tconst subscription = subscriptions[id] || {};\n\t\t\tconst cb = subscription[type];\n\t\t\t// @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value);\n\t\t});\n\t\tif (!active) return;\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (ref instanceof InstancedMesh) {\n\t\t\t\tfor (let i = 0; i < ref.count; i++) {\n\t\t\t\t\tconst uuid = `${ref.uuid}/${i}`;\n\t\t\t\t\tconst index = bodies[uuid];\n\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\tref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n\t\t\t\t\t\tref.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst scale = scaleOverrides[ref.uuid] || ref.scale;\n\t\t\t\tapply(bodies[ref.uuid], positions, quaternions, scale, ref);\n\t\t\t}\n\t\t}\n\t\tif (shouldInvalidate) invalidate();\n\t}\n\n\tprivate rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[uuid]?.rayhit;\n\t\tif (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Directive, Injector, afterNextRender, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\tCannonWorkerProps,\n\tCollideBeginEvent,\n\tCollideEndEvent,\n\tCollideEvent,\n\tRayhitEvent,\n\tRefs,\n\tSubscriptions,\n\tWorkerCollideBeginEvent,\n\tWorkerCollideEndEvent,\n\tWorkerCollideEvent,\n\tWorkerFrameMessage,\n\tWorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore, is, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport interface NgtcCannonWorkerEvents {\n\tcollide: WorkerCollideEvent;\n\tcollideBegin: WorkerCollideBeginEvent;\n\tcollideEnd: WorkerCollideEndEvent;\n\tframe: WorkerFrameMessage;\n\trayhit: WorkerRayhitEvent;\n}\n\nexport type NgtcCannonWorker = CannonWorkerAPI & {\n\ton: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;\n\tremoveAllListeners: () => void;\n};\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: THREE.Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions as THREE.QuaternionTuple, index * 4), scale);\n\t\tif (object) {\n\t\t\tobject.matrixAutoUpdate = false;\n\t\t\tobject.matrix.copy(m);\n\t\t}\n\t\treturn m;\n\t}\n\treturn m.identity();\n}\n\nfunction unique() {\n\tconst values: unknown[] = [];\n\treturn (value: unknown) => (values.includes(value) ? false : !!values.push(value));\n}\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n\t[K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;\n\nexport type ScaleOverrides = Record<string, THREE.Vector3>;\n\nexport interface NgtcPhysicsOptions extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nconst defaultOptions: NgtcPhysicsOptions = {\n\tallowSleep: false,\n\taxisIndex: 0,\n\tbroadphase: 'Naive',\n\tdefaultContactMaterial: { contactEquationStiffness: 1e6 },\n\tfrictionGravity: null,\n\tgravity: [0, -9.81, 0],\n\tisPaused: false,\n\titerations: 5,\n\tmaxSubSteps: 10,\n\tquatNormalizeFast: false,\n\tquatNormalizeSkip: 0,\n\tshouldInvalidate: true,\n\tsize: 1000,\n\tsolver: 'GS',\n\tstepSize: 1 / 60,\n\ttolerance: 0.001,\n};\n\ntype NgtsPhysicsUpdatableOptions = Extract<\n\tkeyof NgtcPhysicsOptions,\n\t'gravity' | 'iterations' | 'tolerance' | 'broadphase' | 'axisIndex'\n>;\n\n@Directive({ selector: 'ngtc-physics' })\nexport class NgtcPhysics {\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate axisIndex = pick(this.options, 'axisIndex');\n\tprivate broadphase = pick(this.options, 'broadphase');\n\tprivate gravity = pick(this.options, 'gravity');\n\tprivate iterations = pick(this.options, 'iterations');\n\tprivate tolerance = pick(this.options, 'tolerance');\n\n\tprivate invalidate = this.store.invalidate;\n\t// @ts-expect-error - worker is not nullable, and we don't want to use ! operator.\n\tprivate cannonWorker = signal<CannonWorkerAPI>(null);\n\n\tbodies: { [uuid: string]: number } = {};\n\tevents: NgtcCannonEvents = {};\n\trefs: Refs = {};\n\tscaleOverrides: ScaleOverrides = {};\n\tsubscriptions: Subscriptions = {};\n\tworker = this.cannonWorker.asReadonly();\n\n\tconstructor() {\n\t\tconst injector = inject(Injector);\n\n\t\t// NOTE: set new cannonworker in afterNextRender\n\t\t// - so inputs are resolved\n\t\t// - so the worker is instantiated only once\n\t\t// - effects are started after worker is instantiated\n\t\tafterNextRender(() => {\n\t\t\tthis.cannonWorker.set(new CannonWorkerAPI(this.options()));\n\n\t\t\teffect(\n\t\t\t\t(onCleanup) => {\n\t\t\t\t\tconst cleanup = this.connectWorkerEffect();\n\t\t\t\t\tonCleanup(() => cleanup?.());\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tthis.updateWorkerStateEffect('axisIndex', this.axisIndex);\n\t\t\t\t\tthis.updateWorkerStateEffect('broadphase', this.broadphase);\n\t\t\t\t\tthis.updateWorkerStateEffect('gravity', this.gravity);\n\t\t\t\t\tthis.updateWorkerStateEffect('iterations', this.iterations);\n\t\t\t\t\tthis.updateWorkerStateEffect('tolerance', this.tolerance);\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\t\t});\n\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.cannonWorker()];\n\t\t\tif (isPaused || !worker || stepSize == null) return;\n\t\t\ttimeSinceLastCalled += delta;\n\t\t\tworker.step({ maxSubSteps, stepSize, timeSinceLastCalled });\n\t\t\ttimeSinceLastCalled = 0;\n\t\t});\n\t}\n\n\tprivate connectWorkerEffect() {\n\t\tconst worker = this.cannonWorker() as NgtcCannonWorker;\n\t\tif (!worker) return;\n\n\t\tworker.connect();\n\t\tworker.init();\n\n\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\treturn () => {\n\t\t\tworker.terminate();\n\t\t\tworker.removeAllListeners();\n\t\t};\n\t}\n\n\tprivate updateWorkerStateEffect<TUpdatableKey extends NgtsPhysicsUpdatableOptions>(\n\t\tkey: TUpdatableKey,\n\t\toption: () => NgtcPhysicsOptions[TUpdatableKey],\n\t) {\n\t\tconst worker = this.cannonWorker();\n\t\tif (!worker) return;\n\t\tObject.assign(worker, { [key]: option() });\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[target]?.collide;\n\t\tif (cb) {\n\t\t\tcb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideBegin;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\t\tconst cbB = events[bodyB]?.collideBegin;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n\t}\n\n\tprivate collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideEnd;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\t\tconst cbB = events[bodyB]?.collideEnd;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n\t}\n\n\tprivate frameHandler({\n\t\tactive,\n\t\tbodies: uuids = [],\n\t\tobservations,\n\t\tpositions,\n\t\tquaternions,\n\t}: WorkerFrameMessage['data']) {\n\t\tconst [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [\n\t\t\tuntracked(this.options),\n\t\t\tthis,\n\t\t\tthis.invalidate(),\n\t\t];\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\t\tobservations.forEach(([id, value, type]) => {\n\t\t\tconst subscription = subscriptions[id] || {};\n\t\t\tconst cb = subscription[type];\n\t\t\t// @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value);\n\t\t});\n\t\tif (!active) return;\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (is.three<THREE.InstancedMesh>(ref, 'isInstancedMesh')) {\n\t\t\t\tfor (let i = 0; i < ref.count; i++) {\n\t\t\t\t\tconst uuid = `${ref.uuid}/${i}`;\n\t\t\t\t\tconst index = bodies[uuid];\n\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\tref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n\t\t\t\t\t\tref.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst scale = scaleOverrides[ref.uuid] || ref.scale;\n\t\t\t\tapply(bodies[ref.uuid], positions, quaternions, scale, ref);\n\t\t\t}\n\t\t}\n\t\tif (shouldInvalidate) invalidate();\n\t}\n\n\tprivate rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[uuid]?.rayhit;\n\t\tif (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/lib/physics.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { CannonWorkerAPI, CannonWorkerProps, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, Refs, Subscriptions, WorkerCollideBeginEvent, WorkerCollideEndEvent, WorkerCollideEvent, WorkerFrameMessage, WorkerRayhitEvent } from '@pmndrs/cannon-worker-api';
2
- import { Vector3 } from 'three';
2
+ import * as THREE from 'three';
3
3
  import * as i0 from "@angular/core";
4
4
  export interface NgtcCannonWorkerEvents {
5
5
  collide: WorkerCollideEvent;
@@ -21,7 +21,7 @@ type NgtcCallbackByType<T extends {
21
21
  } ? (e: T) => void : never;
22
22
  };
23
23
  export type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;
24
- export type ScaleOverrides = Record<string, Vector3>;
24
+ export type ScaleOverrides = Record<string, THREE.Vector3>;
25
25
  export interface NgtcPhysicsOptions extends CannonWorkerProps {
26
26
  isPaused?: boolean;
27
27
  maxSubSteps?: number;
package/package.json CHANGED
@@ -1,65 +1,65 @@
1
1
  {
2
- "name": "angular-three-cannon",
3
- "version": "3.7.2",
4
- "publishConfig": {
5
- "access": "public"
6
- },
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/angular-threejs/angular-three/tree/main/libs/cannon"
10
- },
11
- "author": {
12
- "name": "Chau Tran",
13
- "email": "nartc7789@gmail.com",
14
- "url": "https://nartc.me"
15
- },
16
- "description": "Physics Cannon for Angular Three",
17
- "keywords": [
18
- "angular",
19
- "threejs",
20
- "renderer",
21
- "cannon",
22
- "physics"
23
- ],
24
- "license": "MIT",
25
- "peerDependencies": {
26
- "@angular/common": ">=19.0.0 <20.0.0",
27
- "@angular/core": ">=19.0.0 <20.0.0",
28
- "@pmndrs/cannon-worker-api": "^2.0.0",
29
- "cannon-es": ">=0.20.0 <0.21.0",
30
- "cannon-es-debugger": "^1.0.0",
31
- "three": ">=0.148.0 <0.173.0"
32
- },
33
- "peerDependenciesMeta": {
34
- "cannon-es-debugger": {
35
- "optional": true
36
- }
37
- },
38
- "dependencies": {
39
- "tslib": "^2.7.0"
40
- },
41
- "sideEffects": false,
42
- "module": "fesm2022/angular-three-cannon.mjs",
43
- "typings": "index.d.ts",
44
- "exports": {
45
- "./package.json": {
46
- "default": "./package.json"
47
- },
48
- ".": {
49
- "types": "./index.d.ts",
50
- "default": "./fesm2022/angular-three-cannon.mjs"
51
- },
52
- "./body": {
53
- "types": "./body/index.d.ts",
54
- "default": "./fesm2022/angular-three-cannon-body.mjs"
55
- },
56
- "./constraint": {
57
- "types": "./constraint/index.d.ts",
58
- "default": "./fesm2022/angular-three-cannon-constraint.mjs"
59
- },
60
- "./debug": {
61
- "types": "./debug/index.d.ts",
62
- "default": "./fesm2022/angular-three-cannon-debug.mjs"
63
- }
64
- }
65
- }
2
+ "name": "angular-three-cannon",
3
+ "version": "4.0.0-next.10",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/angular-threejs/angular-three/tree/main/libs/cannon"
10
+ },
11
+ "author": {
12
+ "name": "Chau Tran",
13
+ "email": "nartc7789@gmail.com",
14
+ "url": "https://nartc.me"
15
+ },
16
+ "description": "Physics Cannon for Angular Three",
17
+ "keywords": [
18
+ "angular",
19
+ "threejs",
20
+ "renderer",
21
+ "cannon",
22
+ "physics"
23
+ ],
24
+ "license": "MIT",
25
+ "peerDependencies": {
26
+ "@angular/common": ">=19.0.0 <20.0.0",
27
+ "@angular/core": ">=19.0.0 <20.0.0",
28
+ "@pmndrs/cannon-worker-api": "^2.0.0",
29
+ "cannon-es": ">=0.20.0 <0.21.0",
30
+ "cannon-es-debugger": "^1.0.0",
31
+ "three": ">=0.148.0 <0.174.0"
32
+ },
33
+ "peerDependenciesMeta": {
34
+ "cannon-es-debugger": {
35
+ "optional": true
36
+ }
37
+ },
38
+ "dependencies": {
39
+ "tslib": "^2.7.0"
40
+ },
41
+ "sideEffects": false,
42
+ "module": "fesm2022/angular-three-cannon.mjs",
43
+ "typings": "index.d.ts",
44
+ "exports": {
45
+ "./package.json": {
46
+ "default": "./package.json"
47
+ },
48
+ ".": {
49
+ "types": "./index.d.ts",
50
+ "default": "./fesm2022/angular-three-cannon.mjs"
51
+ },
52
+ "./body": {
53
+ "types": "./body/index.d.ts",
54
+ "default": "./fesm2022/angular-three-cannon-body.mjs"
55
+ },
56
+ "./constraint": {
57
+ "types": "./constraint/index.d.ts",
58
+ "default": "./fesm2022/angular-three-cannon-constraint.mjs"
59
+ },
60
+ "./debug": {
61
+ "types": "./debug/index.d.ts",
62
+ "default": "./fesm2022/angular-three-cannon-debug.mjs"
63
+ }
64
+ }
65
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Angular Three
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.