angular-three-cannon 1.5.0 → 1.5.2

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 +1 @@
1
- {"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/angular-three-cannon/services/src/lib/body.ts","../../../../libs/angular-three-cannon/services/src/lib/constraint.ts","../../../../libs/angular-three-cannon/services/src/lib/contact-material.ts","../../../../libs/angular-three-cannon/services/src/lib/ray.ts","../../../../libs/angular-three-cannon/services/src/lib/raycast-vehicle.ts","../../../../libs/angular-three-cannon/services/src/lib/spring.ts","../../../../libs/angular-three-cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CompoundBodyProps,\n ConvexPolyhedronArgs,\n ConvexPolyhedronProps,\n CylinderProps,\n HeightfieldProps,\n ParticleProps,\n PlaneProps,\n PropValue,\n Quad,\n SetOpName,\n SphereArgs,\n SphereProps,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport * as THREE from 'three';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n set: (value: AtomicProps[K]) => void;\n subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n copy: ({ w, x, y, z }: THREE.Quaternion) => void;\n set: (x: number, y: number, z: number, w: number) => void;\n subscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n set: (x: number, y: number, z: number) => void;\n subscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n [K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n [K in VectorName]: NgtcVectorApi;\n} & {\n applyForce: (force: Triplet, worldPoint: Triplet) => void;\n applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n applyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n applyTorque: (torque: Triplet) => void;\n quaternion: NgtcQuaternionApi;\n rotation: NgtcVectorApi;\n scaleOverride: (scale: Triplet) => void;\n sleep: () => void;\n wakeUp: () => void;\n remove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n at: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcBodyPublicApi;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<PlaneProps, TObject>('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody<BoxProps, TObject>('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CylinderProps, TObject>('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<HeightfieldProps, TObject>('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ParticleProps, TObject>('Particle', fn, () => [], opts);\n}\n\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<SphereProps, TObject>(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('injectSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\n\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<TrimeshProps, TObject>('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ConvexPolyhedronProps, TObject>(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(NgtcUtils.makeTriplet),\n faces,\n normals && normals.map(NgtcUtils.makeTriplet),\n axes && axes.map(NgtcUtils.makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\n\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CompoundBodyProps, TObject>('Compound', fn, (args) => args as unknown[], opts);\n}\n\nconst temp = new THREE.Object3D();\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, waitFor }: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> } = {}\n): NgtcBodyReturn<TObject> {\n let subscription: Subscription | undefined = undefined;\n\n const debugApi = inject(NGTC_DEBUG_API, { skipSelf: true, optional: true });\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n // clean up our streams on destroy\n injectNgtDestroy(() => {\n subscription?.unsubscribe();\n });\n\n // give our bodyRef an NgtInjectedRef\n let bodyRef = injectNgtRef<TObject>();\n\n // re-assign bodyRef if the consumers pass a ref in\n if (ref) bodyRef = ref;\n\n // fire microQueue$\n queueMicrotask(() => {\n // waitFor assumes the consumer will be using the bodyRef on the template\n // with the model (waitFor) as a THREE instance\n if (!waitFor && !bodyRef.nativeElement) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n }\n });\n\n // start the pipeline as soon as bodyRef has a truthy value\n subscription = combineLatest([physicsStore.select('worker'), bodyRef.$])\n .pipe(\n tapEffect(([worker, object]) => {\n const currentWorker = worker;\n\n const { events, refs } = physicsStore.get();\n let objectCount = 1;\n\n if (object instanceof THREE.InstancedMesh) {\n object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n objectCount = object.count;\n }\n\n // consolidate our uuids into an Array so we can handle them in a more consistent way\n const uuids =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const propsList = uuids.map((uuid, index) => {\n const propsResult = getPropsFn(index);\n NgtcUtils.prepare(temp, propsResult);\n if (object instanceof THREE.InstancedMesh) {\n object.setMatrixAt(index, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n }\n refs[uuid] = object;\n debugApi?.add(uuid, propsResult, type);\n NgtcUtils.setupCollision(events, propsResult, uuid);\n return { ...propsResult, args: argsFn(propsResult.args) };\n });\n\n currentWorker.addBodies({\n props: propsList.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => ({\n onCollide: Boolean(onCollide),\n onCollideBegin: Boolean(onCollideBegin),\n onCollideEnd: Boolean(onCollideEnd),\n ...serializableProps,\n })),\n type,\n uuid: uuids,\n });\n\n return () => {\n uuids.forEach((uuid) => {\n delete refs[uuid];\n debugApi?.remove(uuid);\n delete events[uuid];\n });\n currentWorker.removeBodies({ uuid: uuids });\n };\n })\n )\n .subscribe();\n\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${NgtcUtils.capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: value, uuid } as never);\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x: number, y: number, z: number, w: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const { subscriptions, worker } = physicsStore.get();\n const id = NgtcUtils.incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: NgtcUtils.quaternionToRotation(callback) };\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n },\n };\n };\n\n const makeVec = (type: VectorName, index?: number) => {\n const op: SetOpName<VectorName> = `set${NgtcUtils.capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRemove = (index?: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n return () => {\n if (uuid) worker.removeBodies({ uuid: [uuid] });\n };\n };\n\n function makeApi(index?: number): NgtcWorkerApi {\n return {\n allowSleep: makeAtomic('allowSleep', index),\n angularDamping: makeAtomic('angularDamping', index),\n angularFactor: makeVec('angularFactor', index),\n angularVelocity: makeVec('angularVelocity', index),\n applyForce(force: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyTorque({ props: [torque], uuid });\n },\n collisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n collisionFilterMask: makeAtomic('collisionFilterMask', index),\n collisionResponse: makeAtomic('collisionResponse', index),\n fixedRotation: makeAtomic('fixedRotation', index),\n isTrigger: makeAtomic('isTrigger', index),\n linearDamping: makeAtomic('linearDamping', index),\n linearFactor: makeVec('linearFactor', index),\n mass: makeAtomic('mass', index),\n material: makeAtomic('material', index),\n position: makeVec('position', index),\n quaternion: makeQuaternion(index),\n remove: makeRemove(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const { scaleOverrides } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.sleep({ uuid });\n },\n sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n sleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n userData: makeAtomic('userData', index),\n velocity: makeVec('velocity', index),\n wakeUp() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n const api = { ...makeApi(undefined), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n return { ref: bodyRef, api };\n}\n","import { inject } from '@angular/core';\nimport {\n ConeTwistConstraintOpts,\n ConstraintOptns,\n ConstraintTypes,\n DistanceConstraintOpts,\n HingeConstraintOpts,\n LockConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, is, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\n\nexport interface NgtcConstraintApi {\n disable: () => void;\n enable: () => void;\n remove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n disableMotor: () => void;\n enableMotor: () => void;\n setMotorMaxForce: (value: number) => void;\n setMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n ? NgtcConstraintApi\n : NgtcHingeConstraintApi;\n\nexport interface NgtcConstraintReturn<\n T extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcConstraintORHingeApi<T>;\n}\n\nexport type NgtcOptsFunction<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> = () => TOptions;\n\nexport function injectPointToPointConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, optsFn);\n}\n\nexport function injectConeTwistConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'ConeTwist', ConeTwistConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, optsFn);\n}\n\nexport function injectDistanceConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Distance', DistanceConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, optsFn);\n}\n\nexport function injectHingeConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Hinge', HingeConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, optsFn);\n}\n\nexport function injectLockConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Lock', LockConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, optsFn);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn: NgtcOptsFunction<TConstraintType, TOptions> = () => ({} as TOptions)\n): NgtcConstraintReturn<TConstraintType, TObjectA, TObjectB> {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;\n const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;\n\n combineLatest([physicsStore.select('worker'), bodyARef.$, bodyBRef.$])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });\n return () => worker.removeConstraint({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n disable: () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraint({ uuid });\n },\n enable: () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraint({ uuid });\n },\n remove: () => {\n const worker = physicsStore.get('worker');\n worker.removeConstraint({ uuid });\n },\n } as NgtcConstraintORHingeApi<TConstraintType>;\n\n if (type === 'Hinge') {\n const hingeApi = api as NgtcHingeConstraintApi;\n hingeApi.disableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraintMotor({ uuid });\n };\n\n hingeApi.enableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraintMotor({ uuid });\n };\n\n hingeApi.setMotorSpeed = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorSpeed({ uuid, props: value });\n };\n\n hingeApi.setMotorMaxForce = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorMaxForce({ uuid, props: value });\n };\n }\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n}\n","import { inject } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectContactMaterial(\n materialA: MaterialOptions,\n materialB: MaterialOptions,\n optionsFn: () => ContactMaterialOptions\n) {\n const { destroy$ } = injectNgtDestroy();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const options = optionsFn();\n worker.addContactMaterial({ props: [materialA, materialB, options], uuid });\n return () => worker.removeContactMaterial({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { RayhitEvent, RayMode, RayOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectRaycastClosest(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Closest', optionsFn, callback);\n}\n\nexport function injectRaycastAny(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Any', optionsFn, callback);\n}\n\nexport function injectRaycastAll(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('All', optionsFn, callback);\n}\n\nfunction injectRay(mode: RayMode, optionsFn: () => RayOptions, callback: (event: RayhitEvent) => void): void {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const opts = optionsFn();\n const events = physicsStore.get('events');\n events[uuid] = { rayhit: callback };\n worker.addRay({ props: { ...opts, mode }, uuid });\n return () => {\n worker.removeRay({ uuid });\n delete events[uuid];\n };\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\n\nexport interface NgtcRaycastVehicleProps {\n chassisBody: NgtInjectedRef<THREE.Object3D>;\n wheelInfos: WheelInfoOptions[];\n wheels: Array<NgtInjectedRef<THREE.Object3D>>;\n indexForwardAxis?: number;\n indexRightAxis?: number;\n indexUpAxis?: number;\n}\n\nexport interface NgtcRaycastVehiclePublicApi {\n applyEngineForce: (value: number, wheelIndex: number) => void;\n setBrake: (brake: number, wheelIndex: number) => void;\n setSteeringValue: (value: number, wheelIndex: number) => void;\n sliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n remove: () => void;\n}\n\nexport interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcRaycastVehiclePublicApi;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n instanceRef?: NgtInjectedRef<TObject>\n): NgtcRaycastVehicleReturn<TObject> {\n const store = inject(NgtcStore, { skipSelf: true });\n const { destroy$ } = injectNgtDestroy();\n\n let ref = injectNgtRef<TObject>();\n\n if (instanceRef) ref = instanceRef;\n\n queueMicrotask(() => {\n if (!ref.nativeElement) ref.nativeElement = new THREE.Object3D() as TObject;\n });\n\n queueMicrotask(() => {\n const { chassisBody, indexForwardAxis = 2, indexRightAxis = 0, indexUpAxis = 1, wheelInfos, wheels } = fn();\n\n combineLatest([store.select('worker'), ref.$, chassisBody.$, ...wheels.map((wheel) => wheel.$)])\n .pipe(\n tapEffect(([worker, object]) => {\n const uuid = object.uuid;\n const chassisBodyUUID = NgtcUtils.getUUID(chassisBody);\n const wheelUUIDs = wheels.map((wheel) => NgtcUtils.getUUID(wheel));\n\n if (!chassisBodyUUID || !wheelUUIDs.every((v) => typeof v === 'string')) return;\n\n worker.addRaycastVehicle({\n props: [\n chassisBodyUUID,\n wheelUUIDs as string[],\n wheelInfos,\n indexForwardAxis,\n indexRightAxis,\n indexUpAxis,\n ],\n uuid,\n });\n\n return () => worker.removeRaycastVehicle({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n });\n\n const api = {\n applyEngineForce: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.applyRaycastVehicleEngineForce({ props: [value, wheelIndex], uuid });\n },\n setBrake: (brake: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleSteeringValue({ props: [value, wheelIndex], uuid });\n },\n sliding: {\n get subscribe() {\n const { worker, subscriptions } = store.get();\n return NgtcUtils.subscribe(ref, worker, subscriptions, 'sliding', undefined, 'vehicles');\n },\n },\n remove: () => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.removeRaycastVehicle({ uuid });\n },\n } as NgtcRaycastVehiclePublicApi;\n\n return { ref, api };\n}\n","import { inject } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\n\nexport interface NgtcSpringApi {\n setDamping: (value: number) => void;\n setRestLength: (value: number) => void;\n setStiffness: (value: number) => void;\n remove: () => void;\n}\n\nexport interface NgtcSpringReturn<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcSpringApi;\n}\n\nexport function injectSpring<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA>,\n bodyB: NgtInjectedRef<TObjectB>,\n optsFn: () => SpringOptns\n): NgtcSpringReturn<TObjectA, TObjectB> {\n const store = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n const { destroy$ } = injectNgtDestroy();\n\n combineLatest([store.select('worker'), bodyA.$, bodyB.$])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addSpring({ props: [bodyA.uuid, bodyB.uuid, opts], uuid });\n return () => worker.removeSpring({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n setDamping: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringDamping({ uuid, props: value });\n },\n setRestLength: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringRestLength({ uuid, props: value });\n },\n setStiffness: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringStiffness({ uuid, props: value });\n },\n remove: () => {\n const worker = store.get('worker');\n worker.removeSpring({ uuid });\n },\n } as NgtcSpringApi;\n\n return { bodyA, bodyB, api };\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-services.mjs","sources":["../../../../libs/angular-three-cannon/services/src/lib/utils.ts","../../../../libs/angular-three-cannon/services/src/lib/body.ts","../../../../libs/angular-three-cannon/services/src/lib/constraint.ts","../../../../libs/angular-three-cannon/services/src/lib/contact-material.ts","../../../../libs/angular-three-cannon/services/src/lib/ray.ts","../../../../libs/angular-three-cannon/services/src/lib/raycast-vehicle.ts","../../../../libs/angular-three-cannon/services/src/lib/spring.ts","../../../../libs/angular-three-cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { filter, MonoTypeOperatorFunction } from 'rxjs';\n\nexport function filterEmpty<T>(): MonoTypeOperatorFunction<T> {\n return filter<T>((obj): obj is T => obj != null);\n}\n","import { inject } from '@angular/core';\nimport {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CompoundBodyProps,\n ConvexPolyhedronArgs,\n ConvexPolyhedronProps,\n CylinderProps,\n HeightfieldProps,\n ParticleProps,\n PlaneProps,\n PropValue,\n Quad,\n SetOpName,\n SphereArgs,\n SphereProps,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\nimport * as THREE from 'three';\nimport { filterEmpty } from './utils';\n\nexport type NgtcAtomicApi<K extends AtomicName> = {\n set: (value: AtomicProps[K]) => void;\n subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;\n};\n\nexport type NgtcQuaternionApi = {\n copy: ({ w, x, y, z }: THREE.Quaternion) => void;\n set: (x: number, y: number, z: number, w: number) => void;\n subscribe: (callback: (value: Quad) => void) => () => void;\n};\n\nexport type NgtcVectorApi = {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;\n set: (x: number, y: number, z: number) => void;\n subscribe: (callback: (value: Triplet) => void) => () => void;\n};\n\nexport type NgtcWorkerApi = {\n [K in AtomicName]: NgtcAtomicApi<K>;\n} & {\n [K in VectorName]: NgtcVectorApi;\n} & {\n applyForce: (force: Triplet, worldPoint: Triplet) => void;\n applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;\n applyLocalForce: (force: Triplet, localPoint: Triplet) => void;\n applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;\n applyTorque: (torque: Triplet) => void;\n quaternion: NgtcQuaternionApi;\n rotation: NgtcVectorApi;\n scaleOverride: (scale: Triplet) => void;\n sleep: () => void;\n wakeUp: () => void;\n remove: () => void;\n};\n\nexport interface NgtcBodyPublicApi extends NgtcWorkerApi {\n at: (index: number) => NgtcWorkerApi;\n}\n\nexport interface NgtcBodyReturn<TObject extends THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcBodyPublicApi;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<PlaneProps, TObject>('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody<BoxProps, TObject>('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CylinderProps, TObject>('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<HeightfieldProps, TObject>('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ParticleProps, TObject>('Particle', fn, () => [], opts);\n}\n\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<SphereProps, TObject>(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('injectSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\n\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<TrimeshProps, TObject>('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<ConvexPolyhedronProps, TObject>(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(NgtcUtils.makeTriplet),\n faces,\n normals && normals.map(NgtcUtils.makeTriplet),\n axes && axes.map(NgtcUtils.makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\n\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> }\n) {\n return injectBody<CompoundBodyProps, TObject>('Compound', fn, (args) => args as unknown[], opts);\n}\n\nconst temp = new THREE.Object3D();\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, waitFor }: { ref?: NgtInjectedRef<TObject>; waitFor?: Observable<unknown> } = {}\n): NgtcBodyReturn<TObject> {\n let subscription: Subscription | undefined = undefined;\n\n const debugApi = inject(NGTC_DEBUG_API, { skipSelf: true, optional: true });\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n // clean up our streams on destroy\n injectNgtDestroy(() => {\n subscription?.unsubscribe();\n });\n\n // give our bodyRef an NgtInjectedRef\n let bodyRef = injectNgtRef<TObject>();\n\n // re-assign bodyRef if the consumers pass a ref in\n if (ref) bodyRef = ref;\n\n // fire microQueue$\n queueMicrotask(() => {\n // waitFor assumes the consumer will be using the bodyRef on the template\n // with the model (waitFor) as a THREE instance\n if (!waitFor && !bodyRef.nativeElement) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n }\n });\n\n // start the pipeline as soon as bodyRef has a truthy value\n subscription = combineLatest([physicsStore.select('worker'), bodyRef.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, object]) => {\n const currentWorker = worker;\n\n const { events, refs } = physicsStore.get();\n let objectCount = 1;\n\n if (object instanceof THREE.InstancedMesh) {\n object.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n objectCount = object.count;\n }\n\n // consolidate our uuids into an Array so we can handle them in a more consistent way\n const uuids =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const propsList = uuids.map((uuid, index) => {\n const propsResult = getPropsFn(index);\n NgtcUtils.prepare(temp, propsResult);\n if (object instanceof THREE.InstancedMesh) {\n object.setMatrixAt(index, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n }\n refs[uuid] = object;\n debugApi?.add(uuid, propsResult, type);\n NgtcUtils.setupCollision(events, propsResult, uuid);\n return { ...propsResult, args: argsFn(propsResult.args) };\n });\n\n currentWorker.addBodies({\n props: propsList.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => ({\n onCollide: Boolean(onCollide),\n onCollideBegin: Boolean(onCollideBegin),\n onCollideEnd: Boolean(onCollideEnd),\n ...serializableProps,\n })),\n type,\n uuid: uuids,\n });\n\n return () => {\n uuids.forEach((uuid) => {\n delete refs[uuid];\n debugApi?.remove(uuid);\n delete events[uuid];\n });\n currentWorker.removeBodies({ uuid: uuids });\n };\n })\n )\n .subscribe();\n\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${NgtcUtils.capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: value, uuid } as never);\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n set: (x: number, y: number, z: number, w: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const { subscriptions, worker } = physicsStore.get();\n const id = NgtcUtils.incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: NgtcUtils.quaternionToRotation(callback) };\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n },\n };\n };\n\n const makeVec = (type: VectorName, index?: number) => {\n const op: SetOpName<VectorName> = `set${NgtcUtils.capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n get subscribe() {\n const { subscriptions, worker } = physicsStore.get();\n return NgtcUtils.subscribe(bodyRef, worker, subscriptions, type, index);\n },\n };\n };\n\n const makeRemove = (index?: number) => {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n return () => {\n if (uuid) worker.removeBodies({ uuid: [uuid] });\n };\n };\n\n function makeApi(index?: number): NgtcWorkerApi {\n return {\n allowSleep: makeAtomic('allowSleep', index),\n angularDamping: makeAtomic('angularDamping', index),\n angularFactor: makeVec('angularFactor', index),\n angularVelocity: makeVec('angularVelocity', index),\n applyForce(force: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.applyTorque({ props: [torque], uuid });\n },\n collisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n collisionFilterMask: makeAtomic('collisionFilterMask', index),\n collisionResponse: makeAtomic('collisionResponse', index),\n fixedRotation: makeAtomic('fixedRotation', index),\n isTrigger: makeAtomic('isTrigger', index),\n linearDamping: makeAtomic('linearDamping', index),\n linearFactor: makeVec('linearFactor', index),\n mass: makeAtomic('mass', index),\n material: makeAtomic('material', index),\n position: makeVec('position', index),\n quaternion: makeQuaternion(index),\n remove: makeRemove(index),\n rotation: makeRotation(index),\n scaleOverride(scale) {\n const { scaleOverrides } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.sleep({ uuid });\n },\n sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n sleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n userData: makeAtomic('userData', index),\n velocity: makeVec('velocity', index),\n wakeUp() {\n const { worker } = physicsStore.get();\n const uuid = NgtcUtils.getUUID(bodyRef, index);\n uuid && worker.wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n const api = { ...makeApi(undefined), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n return { ref: bodyRef, api };\n}\n","import { inject } from '@angular/core';\nimport {\n ConeTwistConstraintOpts,\n ConstraintOptns,\n ConstraintTypes,\n DistanceConstraintOpts,\n HingeConstraintOpts,\n LockConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, is, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcConstraintApi {\n disable: () => void;\n enable: () => void;\n remove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n disableMotor: () => void;\n enableMotor: () => void;\n setMotorMaxForce: (value: number) => void;\n setMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n ? NgtcConstraintApi\n : NgtcHingeConstraintApi;\n\nexport interface NgtcConstraintReturn<\n T extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcConstraintORHingeApi<T>;\n}\n\nexport type NgtcOptsFunction<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> = () => TOptions;\n\nexport function injectPointToPointConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, optsFn);\n}\n\nexport function injectConeTwistConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'ConeTwist', ConeTwistConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, optsFn);\n}\n\nexport function injectDistanceConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Distance', DistanceConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, optsFn);\n}\n\nexport function injectHingeConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Hinge', HingeConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, optsFn);\n}\n\nexport function injectLockConstraint<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn?: NgtcOptsFunction<'Lock', LockConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, optsFn);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<TObjectA> | TObjectA,\n bodyB: NgtInjectedRef<TObjectB> | TObjectB,\n optsFn: NgtcOptsFunction<TConstraintType, TOptions> = () => ({} as TOptions)\n): NgtcConstraintReturn<TConstraintType, TObjectA, TObjectB> {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;\n const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;\n\n combineLatest([physicsStore.select('worker'), bodyARef.$.pipe(filterEmpty()), bodyBRef.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });\n return () => worker.removeConstraint({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n disable: () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraint({ uuid });\n },\n enable: () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraint({ uuid });\n },\n remove: () => {\n const worker = physicsStore.get('worker');\n worker.removeConstraint({ uuid });\n },\n } as NgtcConstraintORHingeApi<TConstraintType>;\n\n if (type === 'Hinge') {\n const hingeApi = api as NgtcHingeConstraintApi;\n hingeApi.disableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.disableConstraintMotor({ uuid });\n };\n\n hingeApi.enableMotor = () => {\n const worker = physicsStore.get('worker');\n worker.enableConstraintMotor({ uuid });\n };\n\n hingeApi.setMotorSpeed = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorSpeed({ uuid, props: value });\n };\n\n hingeApi.setMotorMaxForce = (value: number) => {\n const worker = physicsStore.get('worker');\n worker.setConstraintMotorMaxForce({ uuid, props: value });\n };\n }\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n}\n","import { inject } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectContactMaterial(\n materialA: MaterialOptions,\n materialB: MaterialOptions,\n optionsFn: () => ContactMaterialOptions\n) {\n const { destroy$ } = injectNgtDestroy();\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const options = optionsFn();\n worker.addContactMaterial({ props: [materialA, materialB, options], uuid });\n return () => worker.removeContactMaterial({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { RayhitEvent, RayMode, RayOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { takeUntil } from 'rxjs';\n\nexport function injectRaycastClosest(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Closest', optionsFn, callback);\n}\n\nexport function injectRaycastAny(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('Any', optionsFn, callback);\n}\n\nexport function injectRaycastAll(optionsFn: () => RayOptions, callback: (e: RayhitEvent) => void) {\n injectRay('All', optionsFn, callback);\n}\n\nfunction injectRay(mode: RayMode, optionsFn: () => RayOptions, callback: (event: RayhitEvent) => void): void {\n const { destroy$ } = injectNgtDestroy();\n const uuid = makeId();\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n physicsStore\n .select('worker')\n .pipe(\n tapEffect((worker) => {\n const opts = optionsFn();\n const events = physicsStore.get('events');\n events[uuid] = { rayhit: callback };\n worker.addRay({ props: { ...opts, mode }, uuid });\n return () => {\n worker.removeRay({ uuid });\n delete events[uuid];\n };\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n}\n","import { inject } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, injectNgtRef, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore, NgtcUtils } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport * as THREE from 'three';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcRaycastVehicleProps {\n chassisBody: NgtInjectedRef<THREE.Object3D>;\n wheelInfos: WheelInfoOptions[];\n wheels: Array<NgtInjectedRef<THREE.Object3D>>;\n indexForwardAxis?: number;\n indexRightAxis?: number;\n indexUpAxis?: number;\n}\n\nexport interface NgtcRaycastVehiclePublicApi {\n applyEngineForce: (value: number, wheelIndex: number) => void;\n setBrake: (brake: number, wheelIndex: number) => void;\n setSteeringValue: (value: number, wheelIndex: number) => void;\n sliding: { subscribe: (callback: (sliding: boolean) => void) => void };\n remove: () => void;\n}\n\nexport interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {\n ref: NgtInjectedRef<TObject>;\n api: NgtcRaycastVehiclePublicApi;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n instanceRef?: NgtInjectedRef<TObject>\n): NgtcRaycastVehicleReturn<TObject> {\n const store = inject(NgtcStore, { skipSelf: true });\n const { destroy$ } = injectNgtDestroy();\n\n let ref = injectNgtRef<TObject>();\n\n if (instanceRef) ref = instanceRef;\n\n queueMicrotask(() => {\n if (!ref.nativeElement) ref.nativeElement = new THREE.Object3D() as TObject;\n });\n\n queueMicrotask(() => {\n const { chassisBody, indexForwardAxis = 2, indexRightAxis = 0, indexUpAxis = 1, wheelInfos, wheels } = fn();\n\n combineLatest([\n store.select('worker'),\n ref.$.pipe(filterEmpty()),\n chassisBody.$.pipe(filterEmpty()),\n ...wheels.map((wheel) => wheel.$.pipe(filterEmpty())),\n ])\n .pipe(\n tapEffect(([worker, object]) => {\n const uuid = object.uuid;\n const chassisBodyUUID = NgtcUtils.getUUID(chassisBody);\n const wheelUUIDs = wheels.map((wheel) => NgtcUtils.getUUID(wheel));\n\n if (!chassisBodyUUID || !wheelUUIDs.every((v) => typeof v === 'string')) return;\n\n worker.addRaycastVehicle({\n props: [\n chassisBodyUUID,\n wheelUUIDs as string[],\n wheelInfos,\n indexForwardAxis,\n indexRightAxis,\n indexUpAxis,\n ],\n uuid,\n });\n\n return () => worker.removeRaycastVehicle({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n });\n\n const api = {\n applyEngineForce: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.applyRaycastVehicleEngineForce({ props: [value, wheelIndex], uuid });\n },\n setBrake: (brake: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue: (value: number, wheelIndex: number) => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.setRaycastVehicleSteeringValue({ props: [value, wheelIndex], uuid });\n },\n sliding: {\n get subscribe() {\n const { worker, subscriptions } = store.get();\n return NgtcUtils.subscribe(ref, worker, subscriptions, 'sliding', undefined, 'vehicles');\n },\n },\n remove: () => {\n const worker = store.get('worker');\n const uuid = NgtcUtils.getUUID(ref);\n uuid && worker.removeRaycastVehicle({ uuid });\n },\n } as NgtcRaycastVehiclePublicApi;\n\n return { ref, api };\n}\n","import { inject } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { injectNgtDestroy, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, takeUntil } from 'rxjs';\nimport { filterEmpty } from './utils';\n\nexport interface NgtcSpringApi {\n setDamping: (value: number) => void;\n setRestLength: (value: number) => void;\n setStiffness: (value: number) => void;\n remove: () => void;\n}\n\nexport interface NgtcSpringReturn<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n> {\n bodyA: NgtInjectedRef<TObjectA>;\n bodyB: NgtInjectedRef<TObjectB>;\n api: NgtcSpringApi;\n}\n\nexport function injectSpring<\n TObjectA extends THREE.Object3D = THREE.Object3D,\n TObjectB extends THREE.Object3D = THREE.Object3D\n>(\n bodyA: NgtInjectedRef<TObjectA>,\n bodyB: NgtInjectedRef<TObjectB>,\n optsFn: () => SpringOptns\n): NgtcSpringReturn<TObjectA, TObjectB> {\n const store = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n const { destroy$ } = injectNgtDestroy();\n\n combineLatest([store.select('worker'), bodyA.$.pipe(filterEmpty()), bodyB.$.pipe(filterEmpty())])\n .pipe(\n tapEffect(([worker, bodyA, bodyB]) => {\n const opts = optsFn();\n worker.addSpring({ props: [bodyA.uuid, bodyB.uuid, opts], uuid });\n return () => worker.removeSpring({ uuid });\n }),\n takeUntil(destroy$)\n )\n .subscribe();\n\n const api = {\n setDamping: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringDamping({ uuid, props: value });\n },\n setRestLength: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringRestLength({ uuid, props: value });\n },\n setStiffness: (value: number) => {\n const worker = store.get('worker');\n worker.setSpringStiffness({ uuid, props: value });\n },\n remove: () => {\n const worker = store.get('worker');\n worker.removeSpring({ uuid });\n },\n } as NgtcSpringApi;\n\n return { bodyA, bodyB, api };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -18,9 +18,9 @@ class NgtcStore extends NgtRxStore {
18
18
  });
19
19
  }
20
20
  }
21
- NgtcStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
22
- NgtcStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcStore });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcStore, decorators: [{
21
+ NgtcStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
22
+ NgtcStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcStore });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcStore, decorators: [{
24
24
  type: Injectable
25
25
  }] });
26
26
 
@@ -235,9 +235,9 @@ class NgtcPhysics extends NgtRxStore {
235
235
  cb(Object.assign({ body: body ? refs[body] : null, ray: Object.assign({ uuid }, rayRest) }, rest));
236
236
  }
237
237
  }
238
- NgtcPhysics.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
239
- NgtcPhysics.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance", size: "size", isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize" }, providers: [NgtcStore], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true });
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcPhysics, decorators: [{
238
+ NgtcPhysics.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
239
+ NgtcPhysics.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance", size: "size", isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize" }, providers: [NgtcStore], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true });
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcPhysics, decorators: [{
241
241
  type: Component,
242
242
  args: [{
243
243
  selector: 'ngtc-physics',
@@ -52,8 +52,8 @@ class NgtcDebug {
52
52
  });
53
53
  }
54
54
  }
55
- NgtcDebug.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
- NgtcDebug.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
55
+ NgtcDebug.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
+ NgtcDebug.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
57
57
  {
58
58
  provide: NGTC_DEBUG_API,
59
59
  useFactory: (debug) => ({
@@ -75,7 +75,7 @@ NgtcDebug.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15
75
75
  <ngt-primitive *args="[scene]" />
76
76
  <ng-content />
77
77
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: NgtcDebug, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcDebug, decorators: [{
79
79
  type: Component,
80
80
  args: [{
81
81
  selector: 'ngtc-debug',
@@ -2,9 +2,13 @@ import { inject } from '@angular/core';
2
2
  import { injectNgtDestroy, injectNgtRef, tapEffect, makeId, is } from 'angular-three';
3
3
  import { NgtcUtils, NgtcStore } from 'angular-three-cannon';
4
4
  import { NGTC_DEBUG_API } from 'angular-three-cannon/debug';
5
- import { combineLatest, takeUntil } from 'rxjs';
5
+ import { filter, combineLatest, takeUntil } from 'rxjs';
6
6
  import * as THREE from 'three';
7
7
 
8
+ function filterEmpty() {
9
+ return filter((obj) => obj != null);
10
+ }
11
+
8
12
  function injectPlane(fn, opts) {
9
13
  return injectBody('Plane', fn, () => [], opts);
10
14
  }
@@ -66,7 +70,7 @@ function injectBody(type, getPropsFn, argsFn, { ref, waitFor } = {}) {
66
70
  }
67
71
  });
68
72
  // start the pipeline as soon as bodyRef has a truthy value
69
- subscription = combineLatest([physicsStore.select('worker'), bodyRef.$])
73
+ subscription = combineLatest([physicsStore.select('worker'), bodyRef.$.pipe(filterEmpty())])
70
74
  .pipe(tapEffect(([worker, object]) => {
71
75
  const currentWorker = worker;
72
76
  const { events, refs } = physicsStore.get();
@@ -290,7 +294,7 @@ function injectConstraint(type, bodyA, bodyB, optsFn = () => ({})) {
290
294
  const physicsStore = inject(NgtcStore, { skipSelf: true });
291
295
  const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;
292
296
  const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;
293
- combineLatest([physicsStore.select('worker'), bodyARef.$, bodyBRef.$])
297
+ combineLatest([physicsStore.select('worker'), bodyARef.$.pipe(filterEmpty()), bodyBRef.$.pipe(filterEmpty())])
294
298
  .pipe(tapEffect(([worker, bodyA, bodyB]) => {
295
299
  const opts = optsFn();
296
300
  worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });
@@ -387,7 +391,12 @@ function injectRaycastVehicle(fn, instanceRef) {
387
391
  });
388
392
  queueMicrotask(() => {
389
393
  const { chassisBody, indexForwardAxis = 2, indexRightAxis = 0, indexUpAxis = 1, wheelInfos, wheels } = fn();
390
- combineLatest([store.select('worker'), ref.$, chassisBody.$, ...wheels.map((wheel) => wheel.$)])
394
+ combineLatest([
395
+ store.select('worker'),
396
+ ref.$.pipe(filterEmpty()),
397
+ chassisBody.$.pipe(filterEmpty()),
398
+ ...wheels.map((wheel) => wheel.$.pipe(filterEmpty())),
399
+ ])
391
400
  .pipe(tapEffect(([worker, object]) => {
392
401
  const uuid = object.uuid;
393
402
  const chassisBodyUUID = NgtcUtils.getUUID(chassisBody);
@@ -444,7 +453,7 @@ function injectSpring(bodyA, bodyB, optsFn) {
444
453
  const store = inject(NgtcStore, { skipSelf: true });
445
454
  const uuid = makeId();
446
455
  const { destroy$ } = injectNgtDestroy();
447
- combineLatest([store.select('worker'), bodyA.$, bodyB.$])
456
+ combineLatest([store.select('worker'), bodyA.$.pipe(filterEmpty()), bodyB.$.pipe(filterEmpty())])
448
457
  .pipe(tapEffect(([worker, bodyA, bodyB]) => {
449
458
  const opts = optsFn();
450
459
  worker.addSpring({ props: [bodyA.uuid, bodyB.uuid, opts], uuid });