angular-three-cannon 1.5.2 → 2.0.0-beta.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.
Files changed (76) hide show
  1. package/README.md +4 -12
  2. package/debug/{lib/debug.d.ts → debug.d.ts} +10 -10
  3. package/debug/index.d.ts +1 -1
  4. package/esm2022/angular-three-cannon.mjs +5 -0
  5. package/esm2022/debug/angular-three-cannon-debug.mjs +5 -0
  6. package/esm2022/debug/debug.mjs +99 -0
  7. package/esm2022/debug/index.mjs +2 -0
  8. package/esm2022/index.mjs +2 -0
  9. package/esm2022/physics.mjs +297 -0
  10. package/esm2022/services/angular-three-cannon-services.mjs +5 -0
  11. package/esm2022/services/body.mjs +289 -0
  12. package/esm2022/services/constraint.mjs +59 -0
  13. package/esm2022/services/contact-material.mjs +20 -0
  14. package/esm2022/services/index.mjs +7 -0
  15. package/esm2022/services/ray.mjs +30 -0
  16. package/esm2022/services/raycast-vehicle.mjs +72 -0
  17. package/esm2022/services/spring.mjs +34 -0
  18. package/fesm2022/angular-three-cannon-debug.mjs +105 -0
  19. package/fesm2022/angular-three-cannon-debug.mjs.map +1 -0
  20. package/fesm2022/angular-three-cannon-services.mjs +494 -0
  21. package/fesm2022/angular-three-cannon-services.mjs.map +1 -0
  22. package/fesm2022/angular-three-cannon.mjs +303 -0
  23. package/fesm2022/angular-three-cannon.mjs.map +1 -0
  24. package/index.d.ts +1 -3
  25. package/package.json +19 -29
  26. package/physics.d.ts +97 -0
  27. package/plugin/package.json +2 -2
  28. package/plugin/src/generators/init/compat.js +1 -1
  29. package/plugin/src/generators/init/compat.js.map +1 -1
  30. package/plugin/src/generators/init/init.d.ts +2 -2
  31. package/plugin/src/generators/init/init.js +16 -20
  32. package/plugin/src/generators/init/init.js.map +1 -1
  33. package/plugin/src/index.js.map +1 -1
  34. package/services/{lib/body.d.ts → body.d.ts} +19 -39
  35. package/services/constraint.d.ts +31 -0
  36. package/services/contact-material.d.ts +9 -0
  37. package/services/index.d.ts +6 -6
  38. package/services/ray.d.ts +12 -0
  39. package/services/{lib/raycast-vehicle.d.ts → raycast-vehicle.d.ts} +8 -3
  40. package/services/{lib/spring.d.ts → spring.d.ts} +8 -3
  41. package/esm2020/angular-three-cannon.mjs +0 -5
  42. package/esm2020/debug/angular-three-cannon-debug.mjs +0 -5
  43. package/esm2020/debug/index.mjs +0 -2
  44. package/esm2020/debug/lib/debug.mjs +0 -117
  45. package/esm2020/index.mjs +0 -4
  46. package/esm2020/lib/physics.mjs +0 -261
  47. package/esm2020/lib/store.mjs +0 -21
  48. package/esm2020/lib/utils.mjs +0 -47
  49. package/esm2020/services/angular-three-cannon-services.mjs +0 -5
  50. package/esm2020/services/index.mjs +0 -7
  51. package/esm2020/services/lib/body.mjs +0 -271
  52. package/esm2020/services/lib/constraint.mjs +0 -69
  53. package/esm2020/services/lib/contact-material.mjs +0 -18
  54. package/esm2020/services/lib/ray.mjs +0 -32
  55. package/esm2020/services/lib/raycast-vehicle.mjs +0 -76
  56. package/esm2020/services/lib/spring.mjs +0 -37
  57. package/esm2020/services/lib/utils.mjs +0 -5
  58. package/fesm2015/angular-three-cannon-debug.mjs +0 -124
  59. package/fesm2015/angular-three-cannon-debug.mjs.map +0 -1
  60. package/fesm2015/angular-three-cannon-services.mjs +0 -488
  61. package/fesm2015/angular-three-cannon-services.mjs.map +0 -1
  62. package/fesm2015/angular-three-cannon.mjs +0 -333
  63. package/fesm2015/angular-three-cannon.mjs.map +0 -1
  64. package/fesm2020/angular-three-cannon-debug.mjs +0 -124
  65. package/fesm2020/angular-three-cannon-debug.mjs.map +0 -1
  66. package/fesm2020/angular-three-cannon-services.mjs +0 -489
  67. package/fesm2020/angular-three-cannon-services.mjs.map +0 -1
  68. package/fesm2020/angular-three-cannon.mjs +0 -331
  69. package/fesm2020/angular-three-cannon.mjs.map +0 -1
  70. package/lib/physics.d.ts +0 -43
  71. package/lib/store.d.ts +0 -34
  72. package/lib/utils.d.ts +0 -16
  73. package/services/lib/constraint.d.ts +0 -25
  74. package/services/lib/contact-material.d.ts +0 -3
  75. package/services/lib/ray.d.ts +0 -4
  76. package/services/lib/utils.d.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-cannon-services.mjs","sources":["../../../../libs/cannon/services/src/body.ts","../../../../libs/cannon/services/src/constraint.ts","../../../../libs/cannon/services/src/contact-material.ts","../../../../libs/cannon/services/src/ray.ts","../../../../libs/cannon/services/src/raycast-vehicle.ts","../../../../libs/cannon/services/src/spring.ts","../../../../libs/cannon/services/src/angular-three-cannon-services.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport type {\n AtomicName,\n AtomicProps,\n BodyProps,\n BodyShapeType,\n BoxProps,\n CannonWorkerAPI,\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 SubscriptionName,\n SubscriptionTarget,\n Subscriptions,\n TrimeshProps,\n Triplet,\n VectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef } from 'angular-three';\nimport { NGTC_PHYSICS_API, NgtcCannonEvents } from 'angular-three-cannon';\nimport { NGTC_DEBUG_API } from 'angular-three-cannon/debug';\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: Signal<NgtcBodyPublicApi>;\n}\n\nexport type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;\nexport type NgtcArgFn<T> = (args: T) => unknown[];\n\nconst temp = new THREE.Object3D();\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nexport function getUUID(ref: ElementRef<THREE.Object3D>, index?: number): 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\nconst e = new THREE.Euler();\nconst q = new THREE.Quaternion();\n\nconst quaternionToRotation = (callback: (v: Triplet) => void) => {\n return (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n};\n\nlet incrementingId = 0;\n\nexport function subscribe<T extends SubscriptionName>(\n ref: ElementRef<THREE.Object3D>,\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 = incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = 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\nfunction 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\nfunction setupCollision(\n events: NgtcCannonEvents,\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\nfunction makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport interface NgtcBodyOptions<TObject extends THREE.Object3D> {\n ref?: NgtInjectedRef<TObject>;\n deps?: () => NgtAnyRecord;\n injector?: Injector;\n}\n\nexport function injectPlane<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<PlaneProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Plane', fn, () => [], opts);\n}\n\nexport function injectBox<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<BoxProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n const defaultBoxArgs: Triplet = [1, 1, 1];\n return injectBody('Box', fn, (args = defaultBoxArgs): Triplet => args, opts);\n}\n\nexport function injectCylinder<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CylinderProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Cylinder', fn, (args = [] as []) => args, opts);\n}\n\nexport function injectHeightfield<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<HeightfieldProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Heightfield', fn, (args) => args, opts);\n}\n\nexport function injectParticle<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ParticleProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Particle', fn, () => [], opts);\n}\nexport function injectSphere<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<SphereProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'Sphere',\n fn,\n (args: SphereArgs = [1]): SphereArgs => {\n if (!Array.isArray(args)) throw new Error('useSphere args must be an array');\n return [args[0]];\n },\n opts\n );\n}\nexport function injectTrimesh<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<TrimeshProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Trimesh', fn, (args) => args, opts);\n}\n\nexport function injectConvexPolyhedron<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<ConvexPolyhedronProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody(\n 'ConvexPolyhedron',\n fn,\n ([vertices, faces, normals, axes, boundingSphereRadius] = []): ConvexPolyhedronArgs<Triplet> => [\n vertices && vertices.map(makeTriplet),\n faces,\n normals && normals.map(makeTriplet),\n axes && axes.map(makeTriplet),\n boundingSphereRadius,\n ],\n opts\n );\n}\nexport function injectCompoundBody<TObject extends THREE.Object3D>(\n fn: NgtcGetByIndex<CompoundBodyProps>,\n opts?: NgtcBodyOptions<TObject>\n) {\n return injectBody('Compound', fn, (args) => args as unknown[], opts);\n}\n\nfunction injectBody<TBodyProps extends BodyProps, TObject extends THREE.Object3D>(\n type: BodyShapeType,\n getPropsFn: NgtcGetByIndex<TBodyProps>,\n argsFn: NgtcArgFn<TBodyProps['args']>,\n { ref, injector, deps = () => ({}) }: NgtcBodyOptions<TObject> = {}\n): NgtcBodyReturn<TObject> {\n injector = assertInjectionContext(injectBody, injector);\n return runInInjectionContext(injector, () => {\n let bodyRef = injectNgtRef<TObject>();\n\n if (ref) bodyRef = ref;\n\n const physicsApi = inject(NGTC_PHYSICS_API);\n const debugApi = inject(NGTC_DEBUG_API, { optional: true });\n\n const { refs, worker, subscriptions, scaleOverrides, events } = physicsApi();\n const { add: debugAdd, remove: debugRemove } = debugApi?.() || {};\n\n effect(\n (onCleanup) => {\n // register deps\n deps();\n\n if (!bodyRef.untracked) {\n bodyRef.nativeElement = new THREE.Object3D() as TObject;\n }\n\n const object = bodyRef.untracked;\n const currentWorker = worker;\n\n const objectCount =\n object instanceof THREE.InstancedMesh\n ? (object.instanceMatrix.setUsage(THREE.DynamicDrawUsage), object.count)\n : 1;\n\n const uuid =\n object instanceof THREE.InstancedMesh\n ? new Array(objectCount).fill(0).map((_, i) => `${object.uuid}/${i}`)\n : [object.uuid];\n\n const props: (TBodyProps & { args: unknown })[] =\n object instanceof THREE.InstancedMesh\n ? uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(temp, props);\n object.setMatrixAt(i, temp.matrix);\n object.instanceMatrix.needsUpdate = true;\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n })\n : uuid.map((id, i) => {\n const props = getPropsFn(i);\n prepare(object, props);\n refs[id] = object;\n debugAdd?.(id, props, type);\n setupCollision(events, props, id);\n return { ...props, args: argsFn(props.args) };\n });\n\n // Register on mount, unregister on unmount\n currentWorker.addBodies({\n props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n return { onCollide: Boolean(onCollide), ...serializableProps };\n }),\n type,\n uuid,\n });\n\n onCleanup(() => {\n uuid.forEach((id) => {\n delete refs[id];\n debugRemove?.(id);\n delete events[id];\n });\n currentWorker.removeBodies({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n\n const api = computed(() => {\n const makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n const op: SetOpName<T> = `set${capitalize(type)}`;\n\n return {\n set: (value: PropValue<T>) => {\n const uuid = getUUID(bodyRef, index);\n uuid &&\n worker[op]({\n props: value,\n uuid,\n } as never);\n },\n subscribe: subscribe(bodyRef, worker, subscriptions, type, index),\n };\n };\n\n const makeQuaternion = (index?: number) => {\n const type = 'quaternion';\n return {\n copy: ({ w, x, y, z }: THREE.Quaternion) => {\n const uuid = 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 uuid = getUUID(bodyRef, index);\n uuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n },\n subscribe: subscribe(bodyRef, worker, subscriptions, type, index),\n };\n };\n\n const makeRotation = (index?: number) => {\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.setRotation({ props: [x, y, z], uuid });\n },\n subscribe: (callback: (value: Triplet) => void) => {\n const id = incrementingId++;\n const target = 'bodies';\n const type = 'quaternion';\n const uuid = getUUID(bodyRef, index);\n\n subscriptions[id] = { [type]: 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${capitalize(type)}`;\n return {\n copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n set: (x: number, y: number, z: number) => {\n const uuid = getUUID(bodyRef, index);\n uuid && worker[op]({ props: [x, y, z], uuid });\n },\n subscribe: subscribe(bodyRef, worker, subscriptions, type, index),\n };\n };\n\n const makeRemove = (index?: number) => {\n const uuid = 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 uuid = getUUID(bodyRef, index);\n uuid && worker.applyForce({ props: [force, worldPoint], uuid });\n },\n applyImpulse(impulse: Triplet, worldPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n },\n applyLocalForce(force: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n },\n applyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n },\n applyTorque(torque: Triplet) {\n const uuid = 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 rotation: makeRotation(index),\n scaleOverride(scale) {\n const uuid = getUUID(bodyRef, index);\n if (uuid) scaleOverrides[uuid] = new THREE.Vector3(...scale);\n },\n sleep() {\n const uuid = 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 remove: makeRemove(index),\n wakeUp() {\n const uuid = getUUID(bodyRef, index);\n uuid && worker.wakeUp({ uuid });\n },\n };\n }\n\n const cache: { [index: number]: NgtcWorkerApi } = {};\n return {\n ...makeApi(undefined),\n at: (index: number) => cache[index] || (cache[index] = makeApi(index)),\n };\n });\n\n return { ref: bodyRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport {\n ConstraintOptns,\n ConstraintTypes,\n HingeConstraintOpts,\n PointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\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: Signal<NgtcConstraintORHingeApi<T>>;\n}\n\nexport interface NgtcConstraintOptions<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n> {\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n opts?: () => TOptions;\n}\n\nexport function usePointToPointConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'PointToPoint', PointToPointConstraintOpts>\n) {\n return injectConstraint('PointToPoint', bodyA, bodyB, opts);\n}\nexport function useConeTwistConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'ConeTwist', PointToPointConstraintOpts>\n) {\n return injectConstraint('ConeTwist', bodyA, bodyB, opts);\n}\nexport function useDistanceConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Distance', PointToPointConstraintOpts>\n) {\n return injectConstraint('Distance', bodyA, bodyB, opts);\n}\nexport function useHingeConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Hinge', PointToPointConstraintOpts>\n) {\n return injectConstraint('Hinge', bodyA, bodyB, opts);\n}\nexport function useLockConstraint<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n opts?: NgtcConstraintOptions<'Lock', PointToPointConstraintOpts>\n) {\n return injectConstraint('Lock', bodyA, bodyB, opts);\n}\n\nfunction injectConstraint<\n TConstraintType extends 'Hinge' | ConstraintTypes,\n A extends THREE.Object3D,\n B extends THREE.Object3D,\n TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge'\n ? HingeConstraintOpts\n : ConstraintOptns\n>(\n type: TConstraintType,\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n deps = () => ({}),\n opts = () => ({} as TOptions),\n }: NgtcConstraintOptions<TConstraintType, TOptions> = {}\n): NgtcConstraintReturn<TConstraintType, A, B> {\n injector = assertInjectionContext(injectConstraint, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker.addConstraint({\n props: [bodyARef.untracked.uuid, bodyBRef.untracked.uuid, untracked(opts)],\n type,\n uuid,\n });\n onCleanup(() => worker.removeConstraint({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n const enableDisable = {\n disable: () => worker.disableConstraint({ uuid }),\n enable: () => worker.enableConstraint({ uuid }),\n remove: () => worker.removeConstraint({ uuid }),\n };\n\n if (type === 'Hinge') {\n return {\n ...enableDisable,\n disableMotor: () => worker.disableConstraintMotor({ uuid }),\n enableMotor: () => worker.enableConstraintMotor({ uuid }),\n setMotorMaxForce: (value: number) => worker.setConstraintMotorMaxForce({ props: value, uuid }),\n setMotorSpeed: (value: number) => worker.setConstraintMotorSpeed({ props: value, uuid }),\n } as NgtcConstraintORHingeApi<TConstraintType>;\n }\n\n return enableDisable as NgtcConstraintORHingeApi<TConstraintType>;\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { ContactMaterialOptions, MaterialOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport function injectContactMaterial(\n materialB: MaterialOptions,\n materialA: MaterialOptions,\n {\n opts,\n deps = () => ({}),\n injector,\n }: { opts: () => ContactMaterialOptions; deps?: () => NgtAnyRecord; injector?: Injector }\n): void {\n injector = assertInjectionContext(injectContactMaterial, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n const uuid = makeId();\n effect((onCleanup) => {\n deps();\n worker.addContactMaterial({\n props: [materialA, materialB, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker.removeContactMaterial({ uuid }));\n });\n });\n}\n","import { Injector, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { RayMode, RayOptions, RayhitEvent } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, assertInjectionContext, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\n\nexport interface NgtcRayOptions {\n options: () => RayOptions;\n callback: (e: RayhitEvent) => void;\n injector?: Injector;\n deps?: () => NgtAnyRecord;\n}\n\nexport function injectRaycastClosest(opts: NgtcRayOptions) {\n return injectRay('Closest', opts);\n}\n\nexport function injectRaycastAny(opts: NgtcRayOptions) {\n return injectRay('Any', opts);\n}\n\nexport function useRaycastAll(opts: NgtcRayOptions) {\n return injectRay('All', opts);\n}\n\nfunction injectRay(mode: RayMode, { options, callback, deps = () => ({}), injector }: NgtcRayOptions) {\n injector = assertInjectionContext(injectRay, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, events } = physicsApi();\n const uuid = makeId();\n\n effect((onCleanup) => {\n deps();\n events[uuid] = { rayhit: callback };\n worker.addRay({ props: { ...untracked(options), mode }, uuid });\n onCleanup(() => {\n worker.removeRay({ uuid });\n delete events[uuid];\n });\n });\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { WheelInfoOptions } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\nimport * as THREE from 'three';\nimport { getUUID, subscribe } from './body';\n\nfunction isString(v: unknown): v is string {\n return typeof v === 'string';\n}\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: Signal<NgtcRaycastVehiclePublicApi>;\n}\n\nexport function injectRaycastVehicle<TObject extends THREE.Object3D = THREE.Object3D>(\n fn: () => NgtcRaycastVehicleProps,\n {\n ref,\n injector,\n deps = () => ({}),\n }: { ref?: NgtInjectedRef<TObject>; injector?: Injector; deps?: () => NgtAnyRecord } = {}\n): NgtcRaycastVehicleReturn<TObject> {\n injector = assertInjectionContext(injectRaycastVehicle, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker, subscriptions } = physicsApi();\n\n let instanceRef = injectNgtRef<TObject>();\n if (ref) instanceRef = ref;\n\n effect(\n (onCleanup) => {\n deps();\n if (!instanceRef.untracked) {\n instanceRef.nativeElement = new THREE.Object3D() as TObject;\n }\n\n const currentWorker = worker;\n const uuid: string = instanceRef.nativeElement.uuid;\n const {\n chassisBody,\n indexForwardAxis = 2,\n indexRightAxis = 0,\n indexUpAxis = 1,\n wheelInfos,\n wheels,\n } = untracked(fn);\n\n const chassisBodyUUID = getUUID(chassisBody);\n const wheelUUIDs = wheels.map((ref) => getUUID(ref));\n\n if (!chassisBodyUUID || !wheelUUIDs.every(isString)) return;\n\n currentWorker.addRaycastVehicle({\n props: [chassisBodyUUID, wheelUUIDs, wheelInfos, indexForwardAxis, indexRightAxis, indexUpAxis],\n uuid,\n });\n onCleanup(() => {\n currentWorker.removeRaycastVehicle({ uuid });\n });\n },\n { allowSignalWrites: true }\n );\n\n const api = computed<NgtcRaycastVehiclePublicApi>(() => {\n deps();\n return {\n applyEngineForce(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker.applyRaycastVehicleEngineForce({\n props: [value, wheelIndex],\n uuid,\n });\n },\n setBrake(brake: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid && worker.setRaycastVehicleBrake({ props: [brake, wheelIndex], uuid });\n },\n setSteeringValue(value: number, wheelIndex: number) {\n const uuid = getUUID(instanceRef);\n uuid &&\n worker.setRaycastVehicleSteeringValue({\n props: [value, wheelIndex],\n uuid,\n });\n },\n sliding: {\n subscribe: subscribe(instanceRef, worker, subscriptions, 'sliding', undefined, 'vehicles'),\n },\n\n remove: () => {\n const uuid = getUUID(instanceRef);\n uuid && worker.removeRaycastVehicle({ uuid });\n },\n };\n });\n\n return { ref: instanceRef, api };\n });\n}\n","import { Injector, Signal, computed, effect, inject, runInInjectionContext, untracked } from '@angular/core';\nimport { SpringOptns } from '@pmndrs/cannon-worker-api';\nimport { NgtAnyRecord, NgtInjectedRef, assertInjectionContext, injectNgtRef, is, makeId } from 'angular-three';\nimport { NGTC_PHYSICS_API } from 'angular-three-cannon';\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: Signal<NgtcSpringApi>;\n}\n\nexport function injectSpring<A extends THREE.Object3D, B extends THREE.Object3D>(\n bodyA: NgtInjectedRef<A> | A,\n bodyB: NgtInjectedRef<B> | B,\n {\n injector,\n opts = () => ({}),\n deps = () => ({}),\n }: { injector?: Injector; deps?: () => NgtAnyRecord; opts?: () => SpringOptns } = {}\n): NgtcSpringReturn<A, B> {\n injector = assertInjectionContext(injectSpring, injector);\n return runInInjectionContext(injector, () => {\n const physicsApi = inject(NGTC_PHYSICS_API);\n const { worker } = physicsApi();\n\n const uuid = makeId();\n\n const bodyARef = is.ref(bodyA) ? bodyA : injectNgtRef(bodyA);\n const bodyBRef = is.ref(bodyB) ? bodyB : injectNgtRef(bodyB);\n\n effect((onCleanup) => {\n deps();\n if (bodyARef.nativeElement && bodyBRef.nativeElement) {\n worker.addSpring({\n props: [bodyARef.nativeElement.uuid, bodyBRef.nativeElement.uuid, untracked(opts)],\n uuid,\n });\n onCleanup(() => worker.removeSpring({ uuid }));\n }\n });\n\n const api = computed(() => {\n deps();\n return {\n setDamping: (value: number) => worker.setSpringDamping({ props: value, uuid }),\n setRestLength: (value: number) => worker.setSpringRestLength({ props: value, uuid }),\n setStiffness: (value: number) => worker.setSpringStiffness({ props: value, uuid }),\n remove: () => worker.removeSpring({ uuid }),\n };\n });\n\n return { bodyA: bodyARef, bodyB: bodyBRef, api };\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, computed, effect, untracked, Component, Input } from '@angular/core';
3
+ import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
+ import { NgtSignalStore, NgtStore, requestAnimationInInjectionContext, injectBeforeRender } from 'angular-three';
5
+ import * as THREE from 'three';
6
+
7
+ const v = new THREE.Vector3();
8
+ const s = new THREE.Vector3(1, 1, 1);
9
+ const q = new THREE.Quaternion();
10
+ const m = new THREE.Matrix4();
11
+ function apply(index, positions, quaternions, scale = s, object) {
12
+ if (index !== undefined) {
13
+ m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
14
+ if (object) {
15
+ object.matrixAutoUpdate = false;
16
+ object.matrix.copy(m);
17
+ }
18
+ return m;
19
+ }
20
+ return m.identity();
21
+ }
22
+ const NGTC_PHYSICS_API = new InjectionToken('NgtcPhysics API');
23
+ class NgtcPhysics extends NgtSignalStore {
24
+ set isPaused(isPaused) {
25
+ this.set({ isPaused });
26
+ }
27
+ set maxSubSteps(maxSubSteps) {
28
+ this.set({ maxSubSteps });
29
+ }
30
+ set shouldInvalidate(shouldInvalidate) {
31
+ this.set({ shouldInvalidate });
32
+ }
33
+ set stepSize(stepSize) {
34
+ this.set({ stepSize });
35
+ }
36
+ set size(size) {
37
+ this.set({ size });
38
+ }
39
+ set allowSleep(allowSleep) {
40
+ this.set({ allowSleep });
41
+ }
42
+ set axisIndex(axisIndex) {
43
+ this.set({ axisIndex });
44
+ }
45
+ set broadphase(broadphase) {
46
+ this.set({ broadphase });
47
+ }
48
+ set defaultContactMaterial(defaultContactMaterial) {
49
+ this.set({ defaultContactMaterial });
50
+ }
51
+ set frictionGravity(frictionGravity) {
52
+ this.set({ frictionGravity });
53
+ }
54
+ set gravity(gravity) {
55
+ this.set({ gravity });
56
+ }
57
+ set iterations(iterations) {
58
+ this.set({ iterations });
59
+ }
60
+ set quatNormalizeFast(quatNormalizeFast) {
61
+ this.set({ quatNormalizeFast });
62
+ }
63
+ set quatNormalizeSkip(quatNormalizeSkip) {
64
+ this.set({ quatNormalizeSkip });
65
+ }
66
+ set solver(solver) {
67
+ this.set({ solver });
68
+ }
69
+ set tolerance(tolerance) {
70
+ this.set({ tolerance });
71
+ }
72
+ #store;
73
+ #bodies;
74
+ #events;
75
+ #refs;
76
+ #scaleOverrides;
77
+ #subscriptions;
78
+ #allowSleep;
79
+ #defaultContactMaterial;
80
+ #frictionGravity;
81
+ #quatNormalizeFast;
82
+ #quatNormalizeSkip;
83
+ #size;
84
+ #solver;
85
+ #workerProps;
86
+ constructor() {
87
+ super({
88
+ allowSleep: false,
89
+ axisIndex: 0,
90
+ broadphase: 'Naive',
91
+ defaultContactMaterial: { contactEquationStiffness: 1e6 },
92
+ frictionGravity: null,
93
+ gravity: [0, -9.81, 0],
94
+ isPaused: false,
95
+ iterations: 5,
96
+ maxSubSteps: 10,
97
+ quatNormalizeFast: false,
98
+ quatNormalizeSkip: 0,
99
+ shouldInvalidate: true,
100
+ size: 1000,
101
+ solver: 'GS',
102
+ stepSize: 1 / 60,
103
+ tolerance: 0.001,
104
+ });
105
+ this.#store = inject(NgtStore);
106
+ this.#bodies = {};
107
+ this.#events = {};
108
+ this.#refs = {};
109
+ this.#scaleOverrides = {};
110
+ this.#subscriptions = {};
111
+ this.#allowSleep = this.select('allowSleep');
112
+ this.#defaultContactMaterial = this.select('defaultContactMaterial');
113
+ this.#frictionGravity = this.select('frictionGravity');
114
+ this.#quatNormalizeFast = this.select('quatNormalizeFast');
115
+ this.#quatNormalizeSkip = this.select('quatNormalizeSkip');
116
+ this.#size = this.select('size');
117
+ this.#solver = this.select('solver');
118
+ this.#workerProps = computed(() => ({
119
+ allowSleep: this.#allowSleep(),
120
+ axisIndex: this.get('axisIndex'),
121
+ broadphase: this.get('broadphase'),
122
+ defaultContactMaterial: this.#defaultContactMaterial(),
123
+ frictionGravity: this.#frictionGravity(),
124
+ gravity: this.get('gravity'),
125
+ iterations: this.get('iterations'),
126
+ quatNormalizeFast: this.#quatNormalizeFast(),
127
+ quatNormalizeSkip: this.#quatNormalizeSkip(),
128
+ size: this.#size(),
129
+ solver: this.#solver(),
130
+ tolerance: this.get('tolerance'),
131
+ }));
132
+ this.worker = computed(() => {
133
+ const workerProps = this.#workerProps();
134
+ return new CannonWorkerAPI(workerProps);
135
+ });
136
+ this.api = computed(() => ({
137
+ bodies: this.#bodies,
138
+ events: this.#events,
139
+ refs: this.#refs,
140
+ scaleOverrides: this.#scaleOverrides,
141
+ subscriptions: this.#subscriptions,
142
+ worker: this.worker(),
143
+ }));
144
+ requestAnimationInInjectionContext(() => {
145
+ this.#connectWorker();
146
+ this.#updateWorkerProp('axisIndex');
147
+ this.#updateWorkerProp('broadphase');
148
+ this.#updateWorkerProp('gravity');
149
+ this.#updateWorkerProp('iterations');
150
+ this.#updateWorkerProp('tolerance');
151
+ injectBeforeRender(this.#onBeforeRender.bind(this, 0));
152
+ });
153
+ }
154
+ #updateWorkerProp(key) {
155
+ const compute = this.select(key);
156
+ effect(() => {
157
+ const worker = untracked(this.worker);
158
+ const value = compute();
159
+ // @ts-expect-error
160
+ worker[key] = value;
161
+ });
162
+ }
163
+ #connectWorker() {
164
+ effect((onCleanup) => {
165
+ const worker = this.worker();
166
+ worker.connect();
167
+ worker.init();
168
+ worker.on('collide', this.#collideHandler.bind(this));
169
+ worker.on('collideBegin', this.#collideBeginHandler.bind(this));
170
+ worker.on('collideEnd', this.#collideEndHandler.bind(this));
171
+ worker.on('frame', this.#frameHandler.bind(this));
172
+ worker.on('rayhit', this.#rayhitHandler.bind(this));
173
+ onCleanup(() => {
174
+ worker.terminate();
175
+ worker.removeAllListeners();
176
+ });
177
+ });
178
+ }
179
+ #onBeforeRender(timeSinceLastCalled, { delta }) {
180
+ const { isPaused, maxSubSteps, stepSize } = this.get();
181
+ const worker = this.worker();
182
+ if (isPaused)
183
+ return;
184
+ timeSinceLastCalled += delta;
185
+ worker.step({ maxSubSteps, stepSize: stepSize, timeSinceLastCalled });
186
+ timeSinceLastCalled = 0;
187
+ }
188
+ #collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
189
+ const cb = this.#events[target]?.collide;
190
+ if (cb) {
191
+ cb({
192
+ body: this.#refs[body],
193
+ contact: { bi: this.#refs[bi], bj: this.#refs[bj], ...contactRest },
194
+ target: this.#refs[target],
195
+ ...rest,
196
+ });
197
+ }
198
+ }
199
+ #collideBeginHandler({ bodyA, bodyB }) {
200
+ const cbA = this.#events[bodyA]?.collideBegin;
201
+ if (cbA)
202
+ cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideBegin' });
203
+ const cbB = this.#events[bodyB]?.collideBegin;
204
+ if (cbB)
205
+ cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideBegin' });
206
+ }
207
+ #collideEndHandler({ bodyA, bodyB }) {
208
+ const cbA = this.#events[bodyA]?.collideEnd;
209
+ if (cbA)
210
+ cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideEnd' });
211
+ const cbB = this.#events[bodyB]?.collideEnd;
212
+ if (cbB)
213
+ cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideEnd' });
214
+ }
215
+ #frameHandler({ active, bodies: uuids = [], observations, positions, quaternions }) {
216
+ const invalidate = this.#store.get('invalidate');
217
+ const shouldInvalidate = this.get('shouldInvalidate');
218
+ for (let i = 0; i < uuids.length; i++) {
219
+ this.#bodies[uuids[i]] = i;
220
+ }
221
+ observations.forEach(([id, value, type]) => {
222
+ const subscription = this.#subscriptions[id] || {};
223
+ const cb = subscription[type];
224
+ // HELP: We clearly know the type of the callback, but typescript can't deal with it
225
+ cb && cb(value);
226
+ });
227
+ if (active) {
228
+ for (const ref of Object.values(this.#refs)) {
229
+ if (ref instanceof THREE.InstancedMesh) {
230
+ for (let i = 0; i < ref.count; i++) {
231
+ const uuid = `${ref.uuid}/${i}`;
232
+ const index = this.#bodies[uuid];
233
+ if (index !== undefined) {
234
+ ref.setMatrixAt(i, apply(index, positions, quaternions, this.#scaleOverrides[uuid]));
235
+ ref.instanceMatrix.needsUpdate = true;
236
+ }
237
+ }
238
+ }
239
+ else {
240
+ const scale = this.#scaleOverrides[ref.uuid] || ref.scale;
241
+ apply(this.#bodies[ref.uuid], positions, quaternions, scale, ref);
242
+ }
243
+ }
244
+ if (shouldInvalidate)
245
+ invalidate();
246
+ }
247
+ }
248
+ #rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
249
+ const cb = this.#events[uuid]?.rayhit;
250
+ if (cb)
251
+ cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
252
+ }
253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
254
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize", size: "size", allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance" }, providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true }); }
255
+ }
256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, decorators: [{
257
+ type: Component,
258
+ args: [{
259
+ selector: 'ngtc-physics',
260
+ standalone: true,
261
+ template: `<ng-content />`,
262
+ providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }],
263
+ }]
264
+ }], ctorParameters: function () { return []; }, propDecorators: { isPaused: [{
265
+ type: Input
266
+ }], maxSubSteps: [{
267
+ type: Input
268
+ }], shouldInvalidate: [{
269
+ type: Input
270
+ }], stepSize: [{
271
+ type: Input
272
+ }], size: [{
273
+ type: Input
274
+ }], allowSleep: [{
275
+ type: Input
276
+ }], axisIndex: [{
277
+ type: Input
278
+ }], broadphase: [{
279
+ type: Input
280
+ }], defaultContactMaterial: [{
281
+ type: Input
282
+ }], frictionGravity: [{
283
+ type: Input
284
+ }], gravity: [{
285
+ type: Input
286
+ }], iterations: [{
287
+ type: Input
288
+ }], quatNormalizeFast: [{
289
+ type: Input
290
+ }], quatNormalizeSkip: [{
291
+ type: Input
292
+ }], solver: [{
293
+ type: Input
294
+ }], tolerance: [{
295
+ type: Input
296
+ }] } });
297
+
298
+ /**
299
+ * Generated bundle index. Do not edit.
300
+ */
301
+
302
+ export { NGTC_PHYSICS_API, NgtcPhysics };
303
+ //# sourceMappingURL=angular-three-cannon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Component, InjectionToken, Input, computed, effect, inject, untracked, type Signal } from '@angular/core';\nimport {\n CannonWorkerAPI,\n type Broadphase,\n type CannonWorkerProps,\n type CollideBeginEvent,\n type CollideEndEvent,\n type CollideEvent,\n type ContactMaterialOptions,\n type RayhitEvent,\n type Refs,\n type Solver,\n type Subscriptions,\n type Triplet,\n type WorkerCollideBeginEvent,\n type WorkerCollideEndEvent,\n type WorkerCollideEvent,\n type WorkerFrameMessage,\n type WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport {\n NgtSignalStore,\n NgtStore,\n injectBeforeRender,\n requestAnimationInInjectionContext,\n type NgtRenderState,\n} from 'angular-three';\nimport * as THREE from 'three';\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 type NgtcPhysicsState = CannonWorkerProps & {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n};\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = { [uuid: string]: Partial<NgtcCallbackByType<NgtcCannonEvent>> };\n\nexport type ScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcPhysicsApi {\n bodies: { [uuid: string]: number };\n events: NgtcCannonEvents;\n refs: Refs;\n scaleOverrides: ScaleOverrides;\n subscriptions: Subscriptions;\n worker: CannonWorkerAPI;\n}\n\nexport const NGTC_PHYSICS_API = new InjectionToken<Signal<NgtcPhysicsApi>>('NgtcPhysics API');\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: `<ng-content />`,\n providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics: NgtcPhysics) => physics.api, deps: [NgtcPhysics] }],\n})\nexport class NgtcPhysics extends NgtSignalStore<NgtcPhysicsState> {\n @Input() set isPaused(isPaused: boolean) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: number) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: boolean) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: number) {\n this.set({ stepSize });\n }\n\n @Input() set size(size: number) {\n this.set({ size });\n }\n\n @Input() set allowSleep(allowSleep: boolean) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: 0 | 1 | 2) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: Broadphase) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: ContactMaterialOptions) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: Triplet | null) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: Triplet) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: number) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: boolean) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: number) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: Solver) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: number) {\n this.set({ tolerance });\n }\n\n readonly #store = inject(NgtStore);\n\n readonly #bodies: { [uuid: string]: number } = {};\n readonly #events: NgtcCannonEvents = {};\n readonly #refs: Refs = {};\n readonly #scaleOverrides: ScaleOverrides = {};\n readonly #subscriptions: Subscriptions = {};\n\n readonly #allowSleep = this.select('allowSleep');\n readonly #defaultContactMaterial = this.select('defaultContactMaterial');\n readonly #frictionGravity = this.select('frictionGravity');\n readonly #quatNormalizeFast = this.select('quatNormalizeFast');\n readonly #quatNormalizeSkip = this.select('quatNormalizeSkip');\n readonly #size = this.select('size');\n readonly #solver = this.select('solver');\n\n readonly #workerProps = computed(() => ({\n allowSleep: this.#allowSleep(),\n axisIndex: this.get('axisIndex'),\n broadphase: this.get('broadphase'),\n defaultContactMaterial: this.#defaultContactMaterial(),\n frictionGravity: this.#frictionGravity(),\n gravity: this.get('gravity'),\n iterations: this.get('iterations'),\n quatNormalizeFast: this.#quatNormalizeFast(),\n quatNormalizeSkip: this.#quatNormalizeSkip(),\n size: this.#size(),\n solver: this.#solver(),\n tolerance: this.get('tolerance'),\n }));\n\n readonly worker = computed(() => {\n const workerProps = this.#workerProps();\n return new CannonWorkerAPI(workerProps);\n });\n\n readonly api = computed(() => ({\n bodies: this.#bodies,\n events: this.#events,\n refs: this.#refs,\n scaleOverrides: this.#scaleOverrides,\n subscriptions: this.#subscriptions,\n worker: this.worker(),\n }));\n\n constructor() {\n super({\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 requestAnimationInInjectionContext(() => {\n this.#connectWorker();\n this.#updateWorkerProp('axisIndex');\n this.#updateWorkerProp('broadphase');\n this.#updateWorkerProp('gravity');\n this.#updateWorkerProp('iterations');\n this.#updateWorkerProp('tolerance');\n injectBeforeRender(this.#onBeforeRender.bind(this, 0));\n });\n }\n\n #updateWorkerProp(key: keyof NgtcPhysicsState) {\n const compute = this.select(key);\n effect(() => {\n const worker = untracked(this.worker);\n const value = compute();\n // @ts-expect-error\n worker[key] = value;\n });\n }\n\n #connectWorker() {\n effect((onCleanup) => {\n const worker = this.worker();\n\n worker.connect();\n worker.init();\n\n (worker as any).on('collide', this.#collideHandler.bind(this));\n (worker as any).on('collideBegin', this.#collideBeginHandler.bind(this));\n (worker as any).on('collideEnd', this.#collideEndHandler.bind(this));\n (worker as any).on('frame', this.#frameHandler.bind(this));\n (worker as any).on('rayhit', this.#rayhitHandler.bind(this));\n\n onCleanup(() => {\n worker.terminate();\n (worker as any).removeAllListeners();\n });\n });\n }\n\n #onBeforeRender(timeSinceLastCalled: number, { delta }: NgtRenderState) {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.worker();\n if (isPaused) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, stepSize: stepSize!, timeSinceLastCalled });\n timeSinceLastCalled = 0;\n }\n\n #collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const cb = this.#events[target]?.collide;\n\n if (cb) {\n cb({\n body: this.#refs[body],\n contact: { bi: this.#refs[bi], bj: this.#refs[bj], ...contactRest },\n target: this.#refs[target],\n ...rest,\n });\n }\n }\n\n #collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const cbA = this.#events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideBegin' });\n const cbB = this.#events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideBegin' });\n }\n\n #collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const cbA = this.#events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideEnd' });\n const cbB = this.#events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideEnd' });\n }\n\n #frameHandler({ active, bodies: uuids = [], observations, positions, quaternions }: WorkerFrameMessage['data']) {\n const invalidate = this.#store.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n this.#bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = this.#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(this.#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 = this.#bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, this.#scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = this.#scaleOverrides[ref.uuid] || ref.scale;\n apply(this.#bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n #rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const cb = this.#events[uuid]?.rayhit;\n if (cb) cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,3 +1 @@
1
- export * from './lib/physics';
2
- export * from './lib/store';
3
- export * from './lib/utils';
1
+ export * from './physics';
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "angular-three-cannon",
3
- "version": "1.5.2",
3
+ "version": "2.0.0-beta.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "repository": {
8
8
  "type": "git",
9
- "url": "https://github.com/angular-threejs/cannon"
9
+ "url": "https://github.com/angular-threejs/angular-three/tree/main/libs/cannon"
10
10
  },
11
11
  "author": {
12
12
  "name": "Chau Tran",
@@ -23,27 +23,23 @@
23
23
  ],
24
24
  "license": "MIT",
25
25
  "peerDependencies": {
26
- "@angular/common": "^15.1.0",
27
- "@angular/core": "^15.1.0",
26
+ "@angular/common": " ^16.0.0",
27
+ "@angular/core": " ^16.0.0",
28
28
  "@pmndrs/cannon-worker-api": "^2.3.2",
29
- "angular-three": "^1.0.0",
29
+ "angular-three": "^2.0.0",
30
30
  "cannon-es": "^0.20.0",
31
31
  "cannon-es-debugger": "^1.0.0",
32
- "three": "^0.148.0 || ^0.149.0 || ^0.150.0",
33
- "rxjs": "~7.8.0"
32
+ "three": "^0.148.0 || ^0.149.0 || ^0.150.0 || ^0.151.0 || ^0.152.0"
34
33
  },
35
34
  "dependencies": {
36
- "@nrwl/devkit": "^15.0.0",
37
- "tslib": "^2.3.0"
35
+ "tslib": "^2.3.0",
36
+ "@nx/devkit": "^16.0.0",
37
+ "nx": "^16.0.0"
38
38
  },
39
39
  "sideEffects": false,
40
40
  "generators": "./plugin/generators.json",
41
41
  "schematics": "./plugin/generators.json",
42
- "module": "fesm2015/angular-three-cannon.mjs",
43
- "es2020": "fesm2020/angular-three-cannon.mjs",
44
- "esm2020": "esm2020/angular-three-cannon.mjs",
45
- "fesm2020": "fesm2020/angular-three-cannon.mjs",
46
- "fesm2015": "fesm2015/angular-three-cannon.mjs",
42
+ "module": "fesm2022/angular-three-cannon.mjs",
47
43
  "typings": "index.d.ts",
48
44
  "exports": {
49
45
  "./package.json": {
@@ -51,27 +47,21 @@
51
47
  },
52
48
  ".": {
53
49
  "types": "./index.d.ts",
54
- "esm2020": "./esm2020/angular-three-cannon.mjs",
55
- "es2020": "./fesm2020/angular-three-cannon.mjs",
56
- "es2015": "./fesm2015/angular-three-cannon.mjs",
57
- "node": "./fesm2015/angular-three-cannon.mjs",
58
- "default": "./fesm2020/angular-three-cannon.mjs"
50
+ "esm2022": "./esm2022/angular-three-cannon.mjs",
51
+ "esm": "./esm2022/angular-three-cannon.mjs",
52
+ "default": "./fesm2022/angular-three-cannon.mjs"
59
53
  },
60
54
  "./debug": {
61
55
  "types": "./debug/index.d.ts",
62
- "esm2020": "./esm2020/debug/angular-three-cannon-debug.mjs",
63
- "es2020": "./fesm2020/angular-three-cannon-debug.mjs",
64
- "es2015": "./fesm2015/angular-three-cannon-debug.mjs",
65
- "node": "./fesm2015/angular-three-cannon-debug.mjs",
66
- "default": "./fesm2020/angular-three-cannon-debug.mjs"
56
+ "esm2022": "./esm2022/debug/angular-three-cannon-debug.mjs",
57
+ "esm": "./esm2022/debug/angular-three-cannon-debug.mjs",
58
+ "default": "./fesm2022/angular-three-cannon-debug.mjs"
67
59
  },
68
60
  "./services": {
69
61
  "types": "./services/index.d.ts",
70
- "esm2020": "./esm2020/services/angular-three-cannon-services.mjs",
71
- "es2020": "./fesm2020/angular-three-cannon-services.mjs",
72
- "es2015": "./fesm2015/angular-three-cannon-services.mjs",
73
- "node": "./fesm2015/angular-three-cannon-services.mjs",
74
- "default": "./fesm2020/angular-three-cannon-services.mjs"
62
+ "esm2022": "./esm2022/services/angular-three-cannon-services.mjs",
63
+ "esm": "./esm2022/services/angular-three-cannon-services.mjs",
64
+ "default": "./fesm2022/angular-three-cannon-services.mjs"
75
65
  }
76
66
  }
77
67
  }