angular-three-cannon 1.1.0 → 1.2.0

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/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, isObservable, Observable, of, ReplaySubject, Subscription, switchMap } 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 | Observable<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 // a ReplaySubject that would emit once in queueMicrotask call\n const microQueue$ = new ReplaySubject<void>(1);\n // a ReplaySubject that would emit whenever our props emits. This is done so that the consumers can pass in\n // Observable to injectBody if they have reactive props (eg: Input)\n const propsSubject$ = new ReplaySubject<TBodyProps>(1);\n\n // an array of streams we want to wait to emit until we decide to give the bodyRef an empty Object3D\n const waits$ = [microQueue$] as Observable<unknown>[];\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 microQueue$.complete();\n propsSubject$.complete();\n subscription?.unsubscribe();\n });\n\n // give our bodyRef an NgtInjectedRef\n let bodyRef = injectNgtRef<TObject>();\n\n // add waitFor if the consumers pass it in\n if (waitFor) waits$.push(waitFor);\n // re-assign bodyRef if the consumers pass a ref in\n if (ref) bodyRef = ref;\n\n // fire microQueue$\n queueMicrotask(() => microQueue$.next());\n\n // when all waits$ emit, we give bodyRef an empty Object3D if it doesn't have one. Physic Object can still be affected\n // by Physics without a visual representation\n combineLatest(waits$).subscribe(() => (bodyRef.nativeElement ||= new THREE.Object3D() as TObject));\n\n // start the pipeline as soon as bodyRef has a truthy value\n subscription = bodyRef.$.pipe(\n switchMap((object) => {\n const { events, refs, worker } = physicsStore.get();\n\n const currentWorker = worker;\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 // construct an Array<Observable> from getPropsFn\n // so we can react to props changed\n const propsList$ = uuids.map((uuid, index) => {\n const propsResult = getPropsFn(index);\n // TODO we use a propsSubject$ because we want to ensure this propsResult stream is HOT\n // otherwise, tapEffect will remove everything from currentWorker#bodies because the stream completes\n (isObservable(propsResult) ? propsResult : of(propsResult)).subscribe({\n next: (props) => {\n NgtcUtils.prepare(temp, props);\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, props, type);\n NgtcUtils.setupCollision(events, props, uuid);\n propsSubject$.next({ ...props, args: argsFn(props.args) });\n },\n error: (error) => {\n console.error(`[NGT Cannon] Error with processing props: ${error}`);\n propsSubject$.error(error);\n },\n });\n\n return propsSubject$;\n });\n\n return combineLatest(propsList$).pipe(\n tapEffect((props) => {\n currentWorker.addBodies({\n props: props.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 // clean up CannonWorker whenever props changes/completes\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 })\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, isObservable, Observable, of, ReplaySubject, Subscription, 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> = () => Observable<TOptions> | 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 uuid = makeId();\n const optsSubject = new ReplaySubject<TOptions>(1);\n let subscription: Subscription | undefined = undefined;\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n const { destroy$ } = injectNgtDestroy(() => {\n optsSubject.complete();\n subscription?.unsubscribe();\n });\n\n const bodyARef = !is.ref(bodyA) ? injectNgtRef(bodyA) : bodyA;\n const bodyBRef = !is.ref(bodyB) ? injectNgtRef(bodyB) : bodyB;\n\n queueMicrotask(() => {\n const opts = optsFn();\n (isObservable(opts) ? opts : of(opts)).pipe(takeUntil(destroy$)).subscribe({\n next: optsSubject.next.bind(optsSubject),\n error: (error) => {\n console.error(`[NGT Cannon] Error processing props for injectConstraint`, error);\n optsSubject.error(error);\n },\n });\n });\n\n subscription = combineLatest([physicsStore.select('worker'), bodyARef.$, bodyBRef.$, optsSubject])\n .pipe(\n tapEffect(([worker, bodyA, bodyB, opts]) => {\n worker.addConstraint({ props: [bodyA.uuid, bodyB.uuid, opts], type, uuid });\n return () => worker.removeConstraint({ uuid });\n })\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","/**\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/body.ts","../../../../libs/angular-three-cannon/services/src/lib/utils.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, isObservable, Observable, of, ReplaySubject, Subscription, switchMap } 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 | Observable<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 // a ReplaySubject that would emit once in queueMicrotask call\n const microQueue$ = new ReplaySubject<void>(1);\n // a ReplaySubject that would emit whenever our props emits. This is done so that the consumers can pass in\n // Observable to injectBody if they have reactive props (eg: Input)\n const propsSubject$ = new ReplaySubject<TBodyProps>(1);\n\n // an array of streams we want to wait to emit until we decide to give the bodyRef an empty Object3D\n const waits$ = [microQueue$] as Observable<unknown>[];\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 microQueue$.complete();\n propsSubject$.complete();\n subscription?.unsubscribe();\n });\n\n // give our bodyRef an NgtInjectedRef\n let bodyRef = injectNgtRef<TObject>();\n\n // add waitFor if the consumers pass it in\n if (waitFor) waits$.push(waitFor);\n // re-assign bodyRef if the consumers pass a ref in\n if (ref) bodyRef = ref;\n\n // fire microQueue$\n queueMicrotask(() => microQueue$.next());\n\n // when all waits$ emit, we give bodyRef an empty Object3D if it doesn't have one. Physic Object can still be affected\n // by Physics without a visual representation\n combineLatest(waits$).subscribe(() => (bodyRef.nativeElement ||= new THREE.Object3D() as TObject));\n\n // start the pipeline as soon as bodyRef has a truthy value\n subscription = combineLatest([physicsStore.select('worker'), bodyRef.$])\n .pipe(\n switchMap(([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 // construct an Array<Observable> from getPropsFn\n // so we can react to props changed\n const propsList$ = uuids.map((uuid, index) => {\n const propsResult = getPropsFn(index);\n // TODO we use a propsSubject$ because we want to ensure this propsResult stream is HOT\n // otherwise, tapEffect will remove everything from currentWorker#bodies because the stream completes\n (isObservable(propsResult) ? propsResult : of(propsResult)).subscribe({\n next: (props) => {\n NgtcUtils.prepare(temp, props);\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, props, type);\n NgtcUtils.setupCollision(events, props, uuid);\n propsSubject$.next({ ...props, args: argsFn(props.args) });\n },\n error: (error) => {\n console.error(`[NGT Cannon] Error with processing props: ${error}`);\n propsSubject$.error(error);\n },\n });\n\n return propsSubject$;\n });\n\n return combineLatest(propsList$).pipe(\n tapEffect((props) => {\n currentWorker.addBodies({\n props: props.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 // clean up CannonWorker whenever props changes/completes\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 })\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 { injectNgtDestroy } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { isObservable, Observable, of, ReplaySubject, Subscription, takeUntil } from 'rxjs';\n\nexport function injectOptionsProcessor<TOptions extends object>(\n optsFn: () => Observable<TOptions> | TOptions,\n {\n optsTransformer,\n extraDestroyCallback,\n }: {\n optsTransformer?: (value: TOptions, sub: ReplaySubject<TOptions>) => void;\n extraDestroyCallback?: () => void;\n } = {}\n) {\n const optsSubject = new ReplaySubject<TOptions>(1);\n let subscription: Subscription | undefined = undefined;\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n const id = physicsStore.queue(() => {\n const opts = optsFn();\n subscription = (isObservable(opts) ? opts : of(opts)).subscribe({\n next: (value) => {\n if (optsTransformer) optsTransformer(value, optsSubject);\n else optsSubject.next(value);\n },\n error: (error) => {\n console.error(`[NGT Cannon] error processing options`);\n optsSubject.error(error);\n },\n });\n });\n\n const { destroy$ } = injectNgtDestroy(() => {\n optsSubject.complete();\n subscription?.unsubscribe();\n physicsStore.remove(id);\n extraDestroyCallback?.();\n });\n const opts$ = optsSubject.asObservable().pipe(takeUntil(destroy$));\n\n return { opts$, destroy$ };\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 { injectNgtRef, is, makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, Observable, takeUntil } from 'rxjs';\nimport { injectOptionsProcessor } 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> = () => Observable<TOptions> | 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 { opts$, destroy$ } = injectOptionsProcessor(optsFn);\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.$, opts$])\n .pipe(\n tapEffect(([worker, bodyA, bodyB, opts]) => {\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 { makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, Observable, takeUntil } from 'rxjs';\nimport { injectOptionsProcessor } from './utils';\n\nexport function injectContactMaterial(\n materialA: MaterialOptions,\n materialB: MaterialOptions,\n optionsFn: () => Observable<ContactMaterialOptions> | ContactMaterialOptions\n) {\n const { opts$, destroy$ } = injectOptionsProcessor(optionsFn);\n\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n\n combineLatest([physicsStore.select('worker'), opts$])\n .pipe(\n tapEffect(([worker, options]) => {\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 { makeId, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, Observable, takeUntil } from 'rxjs';\nimport { injectOptionsProcessor } from './utils';\n\nexport function injectRaycastClosest(\n optionsFn: () => Observable<RayOptions> | RayOptions,\n callback: (e: RayhitEvent) => void\n) {\n injectRay('Closest', optionsFn, callback);\n}\n\nexport function injectRaycastAny(\n optionsFn: () => Observable<RayOptions> | RayOptions,\n callback: (e: RayhitEvent) => void\n) {\n injectRay('Any', optionsFn, callback);\n}\n\nexport function injectRaycastAll(\n optionsFn: () => Observable<RayOptions> | RayOptions,\n callback: (e: RayhitEvent) => void\n) {\n injectRay('All', optionsFn, callback);\n}\n\nfunction injectRay(\n mode: RayMode,\n optionsFn: () => Observable<RayOptions> | RayOptions,\n callback: (event: RayhitEvent) => void\n): void {\n const { opts$, destroy$ } = injectOptionsProcessor(optionsFn);\n const uuid = makeId();\n const physicsStore = inject(NgtcStore, { skipSelf: true });\n\n combineLatest([physicsStore.select('worker'), opts$])\n .pipe(\n tapEffect(([worker, opts]) => {\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 { Object3D } 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) {\n ref = instanceRef;\n }\n\n queueMicrotask(() => {\n if (!ref.nativeElement) {\n ref.nativeElement = new Object3D() as TObject;\n }\n });\n\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 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 { makeId, NgtInjectedRef, tapEffect } from 'angular-three';\nimport { NgtcStore } from 'angular-three-cannon';\nimport { combineLatest, Observable, takeUntil } from 'rxjs';\nimport { injectOptionsProcessor } 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: () => Observable<SpringOptns> | SpringOptns\n): NgtcSpringReturn<TObjectA, TObjectB> {\n const store = inject(NgtcStore, { skipSelf: true });\n const uuid = makeId();\n const { opts$, destroy$ } = injectOptionsProcessor(optsFn);\n\n combineLatest([store.select('worker'), bodyA.$, bodyB.$, opts$])\n .pipe(\n tapEffect(([worker, bodyA, bodyB, opts]) => {\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,11 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, Component, Input } from '@angular/core';
3
3
  import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
- import { NgtRxStore, NgtStore, injectBeforeRender } from 'angular-three';
4
+ import { NgtRxStore, makeId, NgtStore, injectBeforeRender } from 'angular-three';
5
5
  import { filter } from 'rxjs';
6
6
  import * as THREE from 'three';
7
7
 
8
8
  class NgtcStore extends NgtRxStore {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.optionsQueue = {};
12
+ }
9
13
  initialize() {
10
14
  super.initialize();
11
15
  this.set({
@@ -14,8 +18,33 @@ class NgtcStore extends NgtRxStore {
14
18
  refs: {},
15
19
  scaleOverrides: {},
16
20
  subscriptions: {},
21
+ optionsQueueNotifier: Date.now(),
22
+ });
23
+ queueMicrotask(() => {
24
+ this.run();
25
+ this.hold(this.select('optionsQueueNotifier'), () => {
26
+ if (Object.keys(this.optionsQueue).length) {
27
+ this.run();
28
+ }
29
+ });
17
30
  });
18
31
  }
32
+ queue(cb) {
33
+ const id = makeId();
34
+ this.optionsQueue[id] = cb;
35
+ this.set({ optionsQueueNotifier: Date.now() });
36
+ return id;
37
+ }
38
+ remove(id) {
39
+ delete this.optionsQueue[id];
40
+ }
41
+ run() {
42
+ for (const id of Object.keys(this.optionsQueue)) {
43
+ const cb = this.optionsQueue[id];
44
+ cb();
45
+ this.remove(id);
46
+ }
47
+ }
19
48
  }
20
49
  NgtcStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
21
50
  NgtcStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/angular-three-cannon/src/lib/store.ts","../../../../libs/angular-three-cannon/src/lib/physics.ts","../../../../libs/angular-three-cannon/src/lib/utils.ts","../../../../libs/angular-three-cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { NgtRxStore } from 'angular-three';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport type {\n CannonWorkerAPI,\n CannonWorkerProps,\n CollideBeginEvent,\n CollideEndEvent,\n CollideEvent,\n RayhitEvent,\n Refs,\n Subscriptions,\n} from '@pmndrs/cannon-worker-api';\n\nexport type NgtcEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\nexport type NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcEvents = {\n [uuid: string]: Partial<NgtcCallbackByType<NgtcEvent>>;\n};\n\nexport type NgtcScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcState {\n bodies: { [uuid: string]: number };\n events: NgtcEvents;\n refs: Refs;\n scaleOverrides: NgtcScaleOverrides;\n subscriptions: Subscriptions;\n worker: CannonWorkerAPI;\n init: (inputs: CannonWorkerProps) => void;\n}\n\n@Injectable()\nexport class NgtcStore extends NgtRxStore<NgtcState> implements OnDestroy {\n override initialize() {\n super.initialize();\n this.set({\n bodies: {},\n events: {},\n refs: {},\n scaleOverrides: {},\n subscriptions: {},\n });\n }\n}\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n CannonWorkerAPI,\n CannonWorkerProps,\n WorkerCollideBeginEvent,\n WorkerCollideEndEvent,\n WorkerCollideEvent,\n WorkerFrameMessage,\n WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, NgtAnyRecord, NgtRxStore, NgtStore } from 'angular-three';\nimport { filter } from 'rxjs';\nimport * as THREE from 'three';\nimport { NgtcStore } from './store';\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(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\n if (index !== undefined) {\n m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);\n if (object) {\n object.matrixAutoUpdate = false;\n object.matrix.copy(m);\n }\n return m;\n }\n return m.identity();\n}\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n}\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: '<ng-content />',\n providers: [NgtcStore],\n})\nexport class NgtcPhysics extends NgtRxStore<NgtcPhysicsInputs> implements OnInit, OnDestroy {\n private readonly ngtStore = inject(NgtStore);\n private readonly physicsStore = inject(NgtcStore);\n\n override initialize() {\n super.initialize();\n this.set({\n allowSleep: false,\n axisIndex: 0,\n broadphase: 'Naive',\n defaultContactMaterial: { contactEquationStiffness: 1e6 },\n frictionGravity: null,\n gravity: [0, -9.81, 0],\n isPaused: false,\n iterations: 5,\n maxSubSteps: 10,\n quatNormalizeFast: false,\n quatNormalizeSkip: 0,\n shouldInvalidate: true,\n size: 1000,\n solver: 'GS',\n stepSize: 1 / 60,\n tolerance: 0.001,\n });\n }\n\n @Input() set allowSleep(allowSleep: NgtcPhysicsInputs['allowSleep']) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: NgtcPhysicsInputs['axisIndex']) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: NgtcPhysicsInputs['broadphase']) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: NgtcPhysicsInputs['defaultContactMaterial']) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: NgtcPhysicsInputs['frictionGravity']) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: NgtcPhysicsInputs['gravity']) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: NgtcPhysicsInputs['iterations']) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: NgtcPhysicsInputs['quatNormalizeFast']) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: NgtcPhysicsInputs['quatNormalizeSkip']) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: NgtcPhysicsInputs['solver']) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: NgtcPhysicsInputs['tolerance']) {\n this.set({ tolerance });\n }\n\n @Input() set size(size: NgtcPhysicsInputs['size']) {\n this.set({ size });\n }\n\n @Input() set isPaused(isPaused: NgtcPhysicsInputs['isPaused']) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: NgtcPhysicsInputs['maxSubSteps']) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: NgtcPhysicsInputs['shouldInvalidate']) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: NgtcPhysicsInputs['stepSize']) {\n this.set({ stepSize });\n }\n\n constructor() {\n super();\n let timeSinceLastCalled = 0;\n injectBeforeRender(({ delta }) => {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.physicsStore.get('worker');\n if (isPaused || !worker) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize! });\n timeSinceLastCalled = 0;\n });\n }\n\n ngOnInit() {\n this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });\n this.connectWorker();\n this.updateWorkerProp('axisIndex');\n this.updateWorkerProp('broadphase');\n this.updateWorkerProp('gravity');\n this.updateWorkerProp('iterations');\n this.updateWorkerProp('tolerance');\n }\n\n override ngOnDestroy() {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.terminate();\n (worker as unknown as { removeAllListeners: () => void }).removeAllListeners();\n }\n super.ngOnDestroy();\n }\n\n private connectWorker() {\n this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.connect();\n worker.init();\n\n type AnyFunction = (...args: any[]) => any;\n (worker as unknown as { on: AnyFunction }).on('collide', this.collideHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideBegin', this.collideBeginHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideEnd', this.collideEndHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('frame', this.frameHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('rayhit', this.rayHitHandler.bind(this));\n }\n });\n }\n\n private updateWorkerProp(prop: keyof NgtcPhysicsInputs) {\n this.effect(this.select(prop), () => {\n const value = this.get(prop);\n const worker = this.physicsStore.get('worker');\n if (worker) (worker as NgtAnyRecord)[prop] = value;\n });\n }\n\n private collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[target]?.collide;\n\n if (cb) {\n cb({\n body: refs[body],\n contact: { bi: refs[bi], bj: refs[bj], ...contactRest },\n target: refs[target],\n ...rest,\n });\n }\n }\n\n private collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\n const cbB = events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n }\n\n private collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\n const cbB = events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n }\n\n private frameHandler({\n active,\n bodies: uuids = [],\n observations,\n positions,\n quaternions,\n }: WorkerFrameMessage['data']) {\n const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();\n const invalidate = this.ngtStore.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = subscriptions[id] || {};\n const cb = subscription[type];\n // HELP: We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value as never);\n });\n\n if (active) {\n for (const ref of Object.values(refs)) {\n if (ref instanceof THREE.InstancedMesh) {\n for (let i = 0; i < ref.count; i++) {\n const uuid = `${ref.uuid}/${i}`;\n const index = bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = scaleOverrides[ref.uuid] || ref.scale;\n apply(bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n private rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[uuid]?.rayhit;\n if (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","import { NgtInjectedRef } from 'angular-three';\nimport type {\n BodyProps,\n CannonWorkerAPI,\n PropValue,\n Quad,\n SubscriptionName,\n Subscriptions,\n SubscriptionTarget,\n Triplet,\n} from '@pmndrs/cannon-worker-api';\nimport type { NgtcEvents } from './store';\nimport * as THREE from 'three';\n\nexport class NgtcUtils {\n static incrementingId = 0;\n static e = new THREE.Euler();\n static q = new THREE.Quaternion();\n\n static getUUID<TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n index?: number\n ): string | null {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof ref === 'function') return null;\n return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n }\n\n static subscribe<T extends SubscriptionName, TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n worker: CannonWorkerAPI,\n subscriptions: Subscriptions,\n type: T,\n index?: number,\n target: SubscriptionTarget = 'bodies'\n ) {\n return (callback: (value: PropValue<T>) => void) => {\n const id = this.incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = this.getUUID(ref, index);\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 static prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n }\n\n static setupCollision(\n events: NgtcEvents,\n { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n uuid: string\n ) {\n events[uuid] = {\n collide: onCollide,\n collideBegin: onCollideBegin,\n collideEnd: onCollideEnd,\n };\n }\n\n static capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n }\n\n static quaternionToRotation(callback: (v: Triplet) => void) {\n return (v: Quad) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray() as Triplet);\n }\n\n static makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n }\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/angular-three-cannon/src/lib/store.ts","../../../../libs/angular-three-cannon/src/lib/physics.ts","../../../../libs/angular-three-cannon/src/lib/utils.ts","../../../../libs/angular-three-cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport type {\n CannonWorkerAPI,\n CannonWorkerProps,\n CollideBeginEvent,\n CollideEndEvent,\n CollideEvent,\n RayhitEvent,\n Refs,\n Subscriptions,\n} from '@pmndrs/cannon-worker-api';\nimport { makeId, NgtRxStore } from 'angular-three';\n\nexport type NgtcEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\nexport type NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcEvents = {\n [uuid: string]: Partial<NgtcCallbackByType<NgtcEvent>>;\n};\n\nexport type NgtcScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcState {\n bodies: { [uuid: string]: number };\n events: NgtcEvents;\n refs: Refs;\n scaleOverrides: NgtcScaleOverrides;\n subscriptions: Subscriptions;\n worker: CannonWorkerAPI;\n init: (inputs: CannonWorkerProps) => void;\n}\n\n@Injectable()\nexport class NgtcStore extends NgtRxStore<NgtcState> implements OnDestroy {\n private readonly optionsQueue: Record<string, () => void> = {};\n override initialize() {\n super.initialize();\n this.set({\n bodies: {},\n events: {},\n refs: {},\n scaleOverrides: {},\n subscriptions: {},\n optionsQueueNotifier: Date.now(),\n });\n\n queueMicrotask(() => {\n this.run();\n this.hold(this.select('optionsQueueNotifier'), () => {\n if (Object.keys(this.optionsQueue).length) {\n this.run();\n }\n });\n });\n }\n\n queue(cb: () => void) {\n const id = makeId();\n this.optionsQueue[id] = cb;\n this.set({ optionsQueueNotifier: Date.now() });\n return id;\n }\n\n remove(id: string) {\n delete this.optionsQueue[id];\n }\n\n private run() {\n for (const id of Object.keys(this.optionsQueue)) {\n const cb = this.optionsQueue[id];\n cb();\n this.remove(id);\n }\n }\n}\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n CannonWorkerAPI,\n CannonWorkerProps,\n WorkerCollideBeginEvent,\n WorkerCollideEndEvent,\n WorkerCollideEvent,\n WorkerFrameMessage,\n WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, NgtAnyRecord, NgtRxStore, NgtStore } from 'angular-three';\nimport { filter } from 'rxjs';\nimport * as THREE from 'three';\nimport { NgtcStore } from './store';\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(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\n if (index !== undefined) {\n m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);\n if (object) {\n object.matrixAutoUpdate = false;\n object.matrix.copy(m);\n }\n return m;\n }\n return m.identity();\n}\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n}\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: '<ng-content />',\n providers: [NgtcStore],\n})\nexport class NgtcPhysics extends NgtRxStore<NgtcPhysicsInputs> implements OnInit, OnDestroy {\n private readonly ngtStore = inject(NgtStore);\n private readonly physicsStore = inject(NgtcStore);\n\n override initialize() {\n super.initialize();\n this.set({\n allowSleep: false,\n axisIndex: 0,\n broadphase: 'Naive',\n defaultContactMaterial: { contactEquationStiffness: 1e6 },\n frictionGravity: null,\n gravity: [0, -9.81, 0],\n isPaused: false,\n iterations: 5,\n maxSubSteps: 10,\n quatNormalizeFast: false,\n quatNormalizeSkip: 0,\n shouldInvalidate: true,\n size: 1000,\n solver: 'GS',\n stepSize: 1 / 60,\n tolerance: 0.001,\n });\n }\n\n @Input() set allowSleep(allowSleep: NgtcPhysicsInputs['allowSleep']) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: NgtcPhysicsInputs['axisIndex']) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: NgtcPhysicsInputs['broadphase']) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: NgtcPhysicsInputs['defaultContactMaterial']) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: NgtcPhysicsInputs['frictionGravity']) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: NgtcPhysicsInputs['gravity']) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: NgtcPhysicsInputs['iterations']) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: NgtcPhysicsInputs['quatNormalizeFast']) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: NgtcPhysicsInputs['quatNormalizeSkip']) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: NgtcPhysicsInputs['solver']) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: NgtcPhysicsInputs['tolerance']) {\n this.set({ tolerance });\n }\n\n @Input() set size(size: NgtcPhysicsInputs['size']) {\n this.set({ size });\n }\n\n @Input() set isPaused(isPaused: NgtcPhysicsInputs['isPaused']) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: NgtcPhysicsInputs['maxSubSteps']) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: NgtcPhysicsInputs['shouldInvalidate']) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: NgtcPhysicsInputs['stepSize']) {\n this.set({ stepSize });\n }\n\n constructor() {\n super();\n let timeSinceLastCalled = 0;\n injectBeforeRender(({ delta }) => {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.physicsStore.get('worker');\n if (isPaused || !worker) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize! });\n timeSinceLastCalled = 0;\n });\n }\n\n ngOnInit() {\n this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });\n this.connectWorker();\n this.updateWorkerProp('axisIndex');\n this.updateWorkerProp('broadphase');\n this.updateWorkerProp('gravity');\n this.updateWorkerProp('iterations');\n this.updateWorkerProp('tolerance');\n }\n\n override ngOnDestroy() {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.terminate();\n (worker as unknown as { removeAllListeners: () => void }).removeAllListeners();\n }\n super.ngOnDestroy();\n }\n\n private connectWorker() {\n this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.connect();\n worker.init();\n\n type AnyFunction = (...args: any[]) => any;\n (worker as unknown as { on: AnyFunction }).on('collide', this.collideHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideBegin', this.collideBeginHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideEnd', this.collideEndHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('frame', this.frameHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('rayhit', this.rayHitHandler.bind(this));\n }\n });\n }\n\n private updateWorkerProp(prop: keyof NgtcPhysicsInputs) {\n this.effect(this.select(prop), () => {\n const value = this.get(prop);\n const worker = this.physicsStore.get('worker');\n if (worker) (worker as NgtAnyRecord)[prop] = value;\n });\n }\n\n private collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[target]?.collide;\n\n if (cb) {\n cb({\n body: refs[body],\n contact: { bi: refs[bi], bj: refs[bj], ...contactRest },\n target: refs[target],\n ...rest,\n });\n }\n }\n\n private collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\n const cbB = events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n }\n\n private collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\n const cbB = events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n }\n\n private frameHandler({\n active,\n bodies: uuids = [],\n observations,\n positions,\n quaternions,\n }: WorkerFrameMessage['data']) {\n const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();\n const invalidate = this.ngtStore.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = subscriptions[id] || {};\n const cb = subscription[type];\n // HELP: We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value as never);\n });\n\n if (active) {\n for (const ref of Object.values(refs)) {\n if (ref instanceof THREE.InstancedMesh) {\n for (let i = 0; i < ref.count; i++) {\n const uuid = `${ref.uuid}/${i}`;\n const index = bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = scaleOverrides[ref.uuid] || ref.scale;\n apply(bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n private rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[uuid]?.rayhit;\n if (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","import { NgtInjectedRef } from 'angular-three';\nimport type {\n BodyProps,\n CannonWorkerAPI,\n PropValue,\n Quad,\n SubscriptionName,\n Subscriptions,\n SubscriptionTarget,\n Triplet,\n} from '@pmndrs/cannon-worker-api';\nimport type { NgtcEvents } from './store';\nimport * as THREE from 'three';\n\nexport class NgtcUtils {\n static incrementingId = 0;\n static e = new THREE.Euler();\n static q = new THREE.Quaternion();\n\n static getUUID<TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n index?: number\n ): string | null {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof ref === 'function') return null;\n return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n }\n\n static subscribe<T extends SubscriptionName, TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n worker: CannonWorkerAPI,\n subscriptions: Subscriptions,\n type: T,\n index?: number,\n target: SubscriptionTarget = 'bodies'\n ) {\n return (callback: (value: PropValue<T>) => void) => {\n const id = this.incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = this.getUUID(ref, index);\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 static prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n }\n\n static setupCollision(\n events: NgtcEvents,\n { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n uuid: string\n ) {\n events[uuid] = {\n collide: onCollide,\n collideBegin: onCollideBegin,\n collideEnd: onCollideEnd,\n };\n }\n\n static capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n }\n\n static quaternionToRotation(callback: (v: Triplet) => void) {\n return (v: Quad) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray() as Triplet);\n }\n\n static makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/lib/store.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { NgtRxStore } from 'angular-three';
2
1
  import { OnDestroy } from '@angular/core';
3
2
  import type { CannonWorkerAPI, CannonWorkerProps, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, Refs, Subscriptions } from '@pmndrs/cannon-worker-api';
3
+ import { NgtRxStore } from 'angular-three';
4
4
  import * as i0 from "@angular/core";
5
5
  export type NgtcEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
6
6
  export type NgtcCallbackByType<T extends {
@@ -28,7 +28,11 @@ export interface NgtcState {
28
28
  init: (inputs: CannonWorkerProps) => void;
29
29
  }
30
30
  export declare class NgtcStore extends NgtRxStore<NgtcState> implements OnDestroy {
31
+ private readonly optionsQueue;
31
32
  initialize(): void;
33
+ queue(cb: () => void): string;
34
+ remove(id: string): void;
35
+ private run;
32
36
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtcStore, never>;
33
37
  static ɵprov: i0.ɵɵInjectableDeclaration<NgtcStore>;
34
38
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three-cannon",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.1.0",
6
6
  "@angular/core": "^15.1.0",
@@ -6,5 +6,5 @@
6
6
  },
7
7
  "main": "./src/index.js",
8
8
  "types": "./src/index.d.ts",
9
- "version": "1.1.0"
9
+ "version": "1.2.0"
10
10
  }
@@ -1,2 +1,6 @@
1
1
  export * from './lib/body';
2
2
  export * from './lib/constraint';
3
+ export * from './lib/contact-material';
4
+ export * from './lib/ray';
5
+ export * from './lib/raycast-vehicle';
6
+ export * from './lib/spring';
@@ -0,0 +1,4 @@
1
+ /// <reference types="cannon-es" />
2
+ import { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';
3
+ import { Observable } from 'rxjs';
4
+ export declare function injectContactMaterial(materialA: MaterialOptions, materialB: MaterialOptions, optionsFn: () => Observable<ContactMaterialOptions> | ContactMaterialOptions): void;
@@ -0,0 +1,5 @@
1
+ import { RayhitEvent, RayOptions } from '@pmndrs/cannon-worker-api';
2
+ import { Observable } from 'rxjs';
3
+ export declare function injectRaycastClosest(optionsFn: () => Observable<RayOptions> | RayOptions, callback: (e: RayhitEvent) => void): void;
4
+ export declare function injectRaycastAny(optionsFn: () => Observable<RayOptions> | RayOptions, callback: (e: RayhitEvent) => void): void;
5
+ export declare function injectRaycastAll(optionsFn: () => Observable<RayOptions> | RayOptions, callback: (e: RayhitEvent) => void): void;
@@ -0,0 +1,24 @@
1
+ import { WheelInfoOptions } from '@pmndrs/cannon-worker-api';
2
+ import { NgtInjectedRef } from 'angular-three';
3
+ export interface NgtcRaycastVehicleProps {
4
+ chassisBody: NgtInjectedRef<THREE.Object3D>;
5
+ wheelInfos: WheelInfoOptions[];
6
+ wheels: Array<NgtInjectedRef<THREE.Object3D>>;
7
+ indexForwardAxis?: number;
8
+ indexRightAxis?: number;
9
+ indexUpAxis?: number;
10
+ }
11
+ export interface NgtcRaycastVehiclePublicApi {
12
+ applyEngineForce: (value: number, wheelIndex: number) => void;
13
+ setBrake: (brake: number, wheelIndex: number) => void;
14
+ setSteeringValue: (value: number, wheelIndex: number) => void;
15
+ sliding: {
16
+ subscribe: (callback: (sliding: boolean) => void) => void;
17
+ };
18
+ remove: () => void;
19
+ }
20
+ export interface NgtcRaycastVehicleReturn<TObject extends THREE.Object3D = THREE.Object3D> {
21
+ ref: NgtInjectedRef<TObject>;
22
+ api: NgtcRaycastVehiclePublicApi;
23
+ }
24
+ export declare function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(fn: () => NgtcRaycastVehicleProps, instanceRef?: NgtInjectedRef<TObject>): NgtcRaycastVehicleReturn<TObject>;
@@ -0,0 +1,15 @@
1
+ import { SpringOptns } from '@pmndrs/cannon-worker-api';
2
+ import { NgtInjectedRef } from 'angular-three';
3
+ import { Observable } from 'rxjs';
4
+ export interface NgtcSpringApi {
5
+ setDamping: (value: number) => void;
6
+ setRestLength: (value: number) => void;
7
+ setStiffness: (value: number) => void;
8
+ remove: () => void;
9
+ }
10
+ export interface NgtcSpringReturn<TObjectA extends THREE.Object3D = THREE.Object3D, TObjectB extends THREE.Object3D = THREE.Object3D> {
11
+ bodyA: NgtInjectedRef<TObjectA>;
12
+ bodyB: NgtInjectedRef<TObjectB>;
13
+ api: NgtcSpringApi;
14
+ }
15
+ export declare function injectSpring<TObjectA extends THREE.Object3D = THREE.Object3D, TObjectB extends THREE.Object3D = THREE.Object3D>(bodyA: NgtInjectedRef<TObjectA>, bodyB: NgtInjectedRef<TObjectB>, optsFn: () => Observable<SpringOptns> | SpringOptns): NgtcSpringReturn<TObjectA, TObjectB>;
@@ -0,0 +1,8 @@
1
+ import { Observable, ReplaySubject } from 'rxjs';
2
+ export declare function injectOptionsProcessor<TOptions extends object>(optsFn: () => Observable<TOptions> | TOptions, { optsTransformer, extraDestroyCallback, }?: {
3
+ optsTransformer?: (value: TOptions, sub: ReplaySubject<TOptions>) => void;
4
+ extraDestroyCallback?: () => void;
5
+ }): {
6
+ opts$: Observable<TOptions>;
7
+ destroy$: Observable<void>;
8
+ };