angular-three-cannon 4.0.0-next.11 → 4.0.0-next.110

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.
@@ -3,11 +3,11 @@ import { makeId, resolveRef } from 'angular-three';
3
3
  import { NgtcPhysics } from 'angular-three-cannon';
4
4
  import { assertInjector } from 'ngxtension/assert-injector';
5
5
 
6
- function createInjectConstraint(type) {
7
- return (bodyA, bodyB, options) => injectConstraint(type, bodyA, bodyB, options);
6
+ function createConstraint(type) {
7
+ return (bodyA, bodyB, options) => constraint(type, bodyA, bodyB, options);
8
8
  }
9
- function injectConstraint(type, bodyA, bodyB, { injector, options = {}, disableOnStart = false, } = {}) {
10
- return assertInjector(injectConstraint, injector, () => {
9
+ function constraint(type, bodyA, bodyB, { injector, options = {}, disableOnStart = false, } = {}) {
10
+ return assertInjector(constraint, injector, () => {
11
11
  const physics = inject(NgtcPhysics, { optional: true });
12
12
  if (!physics) {
13
13
  throw new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);
@@ -60,15 +60,40 @@ function injectConstraint(type, bodyA, bodyB, { injector, options = {}, disableO
60
60
  return constraintApi;
61
61
  });
62
62
  }
63
- const injectPointToPoint = createInjectConstraint('PointToPoint');
64
- const injectConeTwist = createInjectConstraint('ConeTwist');
65
- const injectDistance = createInjectConstraint('Distance');
66
- const injectLock = createInjectConstraint('Lock');
67
- const injectHinge = createInjectConstraint('Hinge');
63
+ const pointToPoint = createConstraint('PointToPoint');
64
+ const coneTwist = createConstraint('ConeTwist');
65
+ const distance = createConstraint('Distance');
66
+ const lock = createConstraint('Lock');
67
+ const hinge = createConstraint('Hinge');
68
+ /**
69
+ * @deprecated Use `pointToPoint` instead. Will be removed in v5.0.0
70
+ * @since v4.0.0
71
+ */
72
+ const injectPointToPoint = pointToPoint;
73
+ /**
74
+ * @deprecated Use `coneTwist` instead. Will be removed in v5.0.0
75
+ * @since v4.0.0
76
+ */
77
+ const injectConeTwist = coneTwist;
78
+ /**
79
+ * @deprecated Use `distance` instead. Will be removed in v5.0.0
80
+ * @since v4.0.0
81
+ */
82
+ const injectDistance = distance;
83
+ /**
84
+ * @deprecated Use `lock` instead. Will be removed in v5.0.0
85
+ * @since v4.0.0
86
+ */
87
+ const injectLock = lock;
88
+ /**
89
+ * @deprecated Use `hinge` instead. Will be removed in v5.0.0
90
+ * @since v4.0.0
91
+ */
92
+ const injectHinge = hinge;
68
93
 
69
94
  /**
70
95
  * Generated bundle index. Do not edit.
71
96
  */
72
97
 
73
- export { injectConeTwist, injectDistance, injectHinge, injectLock, injectPointToPoint };
98
+ export { coneTwist, distance, hinge, injectConeTwist, injectDistance, injectHinge, injectLock, injectPointToPoint, lock, pointToPoint };
74
99
  //# sourceMappingURL=angular-three-cannon-constraint.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-constraint.mjs","sources":["../../../../libs/cannon/constraint/src/lib/constraint.ts","../../../../libs/cannon/constraint/src/angular-three-cannon-constraint.ts"],"sourcesContent":["import { ElementRef, Injector, Signal, computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport {\n\tConeTwistConstraintOpts,\n\tConstraintTypes,\n\tDistanceConstraintOpts,\n\tHingeConstraintOpts,\n\tLockConstraintOpts,\n\tPointToPointConstraintOpts,\n} from '@pmndrs/cannon-worker-api';\nimport { makeId, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\n\nexport interface NgtcConstraintApi {\n\tdisable: () => void;\n\tenable: () => void;\n\tremove: () => void;\n}\n\nexport interface NgtcHingeConstraintApi extends NgtcConstraintApi {\n\tdisableMotor: () => void;\n\tenableMotor: () => void;\n\tsetMotorMaxForce: (value: number) => void;\n\tsetMotorSpeed: (value: number) => void;\n}\n\nexport type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes\n\t? NgtcConstraintApi\n\t: NgtcHingeConstraintApi;\n\nexport type NgtcConstraintOptionsMap = {\n\tConeTwist: ConeTwistConstraintOpts;\n\tPointToPoint: PointToPointConstraintOpts;\n\tDistance: DistanceConstraintOpts;\n\tLock: LockConstraintOpts;\n\tHinge: HingeConstraintOpts;\n};\n\nexport type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes> = {\n\tinjector?: Injector;\n\tdisableOnStart?: boolean;\n\toptions?: NgtcConstraintOptionsMap[TConstraintType];\n};\n\nfunction createInjectConstraint<TConstraint extends ConstraintTypes | 'Hinge'>(type: TConstraint) {\n\treturn <A extends THREE.Object3D = THREE.Object3D, B extends THREE.Object3D = THREE.Object3D>(\n\t\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\t\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t\toptions?: NgtcConstraintOptions<TConstraint>,\n\t) => injectConstraint<TConstraint, A, B>(type, bodyA, bodyB, options);\n}\n\nfunction injectConstraint<\n\tTConstraint extends ConstraintTypes | 'Hinge',\n\tA extends THREE.Object3D = THREE.Object3D,\n\tB extends THREE.Object3D = THREE.Object3D,\n>(\n\ttype: TConstraint,\n\tbodyA: ElementRef<A> | A | Signal<ElementRef<A> | A | undefined>,\n\tbodyB: ElementRef<B> | B | Signal<ElementRef<B> | B | undefined>,\n\t{\n\t\tinjector,\n\t\toptions = {} as NgtcConstraintOptionsMap[TConstraint],\n\t\tdisableOnStart = false,\n\t}: NgtcConstraintOptions<TConstraint> = {},\n) {\n\treturn assertInjector(injectConstraint, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst worker = physics.worker;\n\n\t\tconst uuid = makeId();\n\t\tconst bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);\n\t\tconst bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);\n\t\tconst bodyAValue = computed(() => resolveRef(bodyARef()));\n\t\tconst bodyBValue = computed(() => resolveRef(bodyBRef()));\n\n\t\tconst constraintApi = computed(() => {\n\t\t\tconst _worker = worker();\n\t\t\tif (!_worker) return null;\n\n\t\t\tconst enableDisable = {\n\t\t\t\tdisable: () => _worker.disableConstraint({ uuid }),\n\t\t\t\tenable: () => _worker.enableConstraint({ uuid }),\n\t\t\t\tremove: () => _worker.removeConstraint({ uuid }),\n\t\t\t};\n\t\t\tif (type === 'Hinge') {\n\t\t\t\treturn {\n\t\t\t\t\t...enableDisable,\n\t\t\t\t\tdisableMotor: () => _worker.disableConstraintMotor({ uuid }),\n\t\t\t\t\tenableMotor: () => _worker.enableConstraintMotor({ uuid }),\n\t\t\t\t\tsetMotorMaxForce: (value: number) => _worker.setConstraintMotorMaxForce({ props: value, uuid }),\n\t\t\t\t\tsetMotorSpeed: (value: number) => _worker.setConstraintMotorSpeed({ props: value, uuid }),\n\t\t\t\t} as NgtcHingeConstraintApi;\n\t\t\t}\n\t\t\treturn enableDisable as NgtcConstraintApi;\n\t\t});\n\n\t\tlet alreadyDisabled = false;\n\t\teffect((onCleanup) => {\n\t\t\tconst currentWorker = worker();\n\t\t\tif (!currentWorker) return;\n\n\t\t\tconst [a, b, api] = [bodyAValue(), bodyBValue(), untracked(constraintApi)];\n\t\t\tif (!a || !b) return;\n\n\t\t\tcurrentWorker.addConstraint({\n\t\t\t\tprops: [a.uuid, b.uuid, options],\n\t\t\t\ttype,\n\t\t\t\tuuid,\n\t\t\t});\n\n\t\t\tif (disableOnStart && !alreadyDisabled) {\n\t\t\t\talreadyDisabled = true;\n\t\t\t\tapi?.disable();\n\t\t\t}\n\n\t\t\tonCleanup(() => currentWorker.removeConstraint({ uuid }));\n\t\t});\n\n\t\treturn constraintApi;\n\t});\n}\n\nexport const injectPointToPoint = createInjectConstraint('PointToPoint');\nexport const injectConeTwist = createInjectConstraint('ConeTwist');\nexport const injectDistance = createInjectConstraint('Distance');\nexport const injectLock = createInjectConstraint('Lock');\nexport const injectHinge = createInjectConstraint('Hinge');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-constraint.mjs","sources":["../tmp-esm2022/constraint/lib/constraint.js","../tmp-esm2022/constraint/angular-three-cannon-constraint.js"],"sourcesContent":["import { computed, effect, inject, isSignal, signal, untracked } from '@angular/core';\nimport { makeId, resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { assertInjector } from 'ngxtension/assert-injector';\nfunction createConstraint(type) {\n return (bodyA, bodyB, options) => constraint(type, bodyA, bodyB, options);\n}\nfunction constraint(type, bodyA, bodyB, { injector, options = {}, disableOnStart = false, } = {}) {\n return assertInjector(constraint, injector, () => {\n const physics = inject(NgtcPhysics, { optional: true });\n if (!physics) {\n throw new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);\n }\n const worker = physics.worker;\n const uuid = makeId();\n const bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);\n const bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);\n const bodyAValue = computed(() => resolveRef(bodyARef()));\n const bodyBValue = computed(() => resolveRef(bodyBRef()));\n const constraintApi = computed(() => {\n const _worker = worker();\n if (!_worker)\n return null;\n const enableDisable = {\n disable: () => _worker.disableConstraint({ uuid }),\n enable: () => _worker.enableConstraint({ uuid }),\n remove: () => _worker.removeConstraint({ uuid }),\n };\n if (type === 'Hinge') {\n return {\n ...enableDisable,\n disableMotor: () => _worker.disableConstraintMotor({ uuid }),\n enableMotor: () => _worker.enableConstraintMotor({ uuid }),\n setMotorMaxForce: (value) => _worker.setConstraintMotorMaxForce({ props: value, uuid }),\n setMotorSpeed: (value) => _worker.setConstraintMotorSpeed({ props: value, uuid }),\n };\n }\n return enableDisable;\n });\n let alreadyDisabled = false;\n effect((onCleanup) => {\n const currentWorker = worker();\n if (!currentWorker)\n return;\n const [a, b, api] = [bodyAValue(), bodyBValue(), untracked(constraintApi)];\n if (!a || !b)\n return;\n currentWorker.addConstraint({\n props: [a.uuid, b.uuid, options],\n type,\n uuid,\n });\n if (disableOnStart && !alreadyDisabled) {\n alreadyDisabled = true;\n api?.disable();\n }\n onCleanup(() => currentWorker.removeConstraint({ uuid }));\n });\n return constraintApi;\n });\n}\nexport const pointToPoint = createConstraint('PointToPoint');\nexport const coneTwist = createConstraint('ConeTwist');\nexport const distance = createConstraint('Distance');\nexport const lock = createConstraint('Lock');\nexport const hinge = createConstraint('Hinge');\n/**\n * @deprecated Use `pointToPoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectPointToPoint = pointToPoint;\n/**\n * @deprecated Use `coneTwist` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectConeTwist = coneTwist;\n/**\n * @deprecated Use `distance` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectDistance = distance;\n/**\n * @deprecated Use `lock` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectLock = lock;\n/**\n * @deprecated Use `hinge` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectHinge = hinge;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2NvbnN0cmFpbnQvc3JjL2xpYi9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTcEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWtDNUQsU0FBUyxnQkFBZ0IsQ0FBZ0QsSUFBaUI7SUFDekYsT0FBTyxDQUNOLEtBQWdFLEVBQ2hFLEtBQWdFLEVBQ2hFLE9BQTRDLEVBQzNDLEVBQUUsQ0FBQyxVQUFVLENBQW9CLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FLbEIsSUFBaUIsRUFDakIsS0FBZ0UsRUFDaEUsS0FBZ0UsRUFDaEUsRUFDQyxRQUFRLEVBQ1IsT0FBTyxHQUFHLEVBQTJDLEVBQ3JELGNBQWMsR0FBRyxLQUFLLE1BQ2lCLEVBQUU7SUFFMUMsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFD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QztZQUNoQixDQUFDO1lBRUQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0M7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDO0FBRS9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUV2Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBRS9COzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RvciwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlzU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Q29uZVR3aXN0Q29uc3RyYWludE9wdHMsXG5cdENvbnN0cmFpbnRUeXBlcyxcblx0RGlzdGFuY2VDb25zdHJhaW50T3B0cyxcblx0SGluZ2VDb25zdHJhaW50T3B0cyxcblx0TG9ja0NvbnN0cmFpbnRPcHRzLFxuXHRQb2ludFRvUG9pbnRDb25zdHJhaW50T3B0cyxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBtYWtlSWQsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndGNQaHlzaWNzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0NvbnN0cmFpbnRBcGkge1xuXHRkaXNhYmxlOiAoKSA9PiB2b2lkO1xuXHRlbmFibGU6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjSGluZ2VDb25zdHJhaW50QXBpIGV4dGVuZHMgTmd0Y0NvbnN0cmFpbnRBcGkge1xuXHRkaXNhYmxlTW90b3I6ICgpID0+IHZvaWQ7XG5cdGVuYWJsZU1vdG9yOiAoKSA9PiB2b2lkO1xuXHRzZXRNb3Rvck1heEZvcmNlOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblx0c2V0TW90b3JTcGVlZDogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNDb25zdHJhaW50T1JIaW5nZUFwaTxUIGV4dGVuZHMgJ0hpbmdlJyB8IENvbnN0cmFpbnRUeXBlcz4gPSBUIGV4dGVuZHMgQ29uc3RyYWludFR5cGVzXG5cdD8gTmd0Y0NvbnN0cmFpbnRBcGlcblx0OiBOZ3RjSGluZ2VDb25zdHJhaW50QXBpO1xuXG5leHBvcnQgdHlwZSBOZ3RjQ29uc3RyYWludE9wdGlvbnNNYXAgPSB7XG5cdENvbmVUd2lzdDogQ29uZVR3aXN0Q29uc3RyYWludE9wdHM7XG5cdFBvaW50VG9Qb2ludDogUG9pbnRUb1BvaW50Q29uc3RyYWludE9wdHM7XG5cdERpc3RhbmNlOiBEaXN0YW5jZUNvbnN0cmFpbnRPcHRzO1xuXHRMb2NrOiBMb2NrQ29uc3RyYWludE9wdHM7XG5cdEhpbmdlOiBIaW5nZUNvbnN0cmFpbnRPcHRzO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y0NvbnN0cmFpbnRPcHRpb25zPFRDb25zdHJhaW50VHlwZSBleHRlbmRzICdIaW5nZScgfCBDb25zdHJhaW50VHlwZXM+ID0ge1xuXHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHRkaXNhYmxlT25TdGFydD86IGJvb2xlYW47XG5cdG9wdGlvbnM/OiBOZ3RjQ29uc3RyYWludE9wdGlvbnNNYXBbVENvbnN0cmFpbnRUeXBlXTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQ8VENvbnN0cmFpbnQgZXh0ZW5kcyBDb25zdHJhaW50VHlwZXMgfCAnSGluZ2UnPih0eXBlOiBUQ29uc3RyYWludCkge1xuXHRyZXR1cm4gPEEgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRCA9IFRIUkVFLk9iamVjdDNELCBCIGV4dGVuZHMgVEhSRUUuT2JqZWN0M0QgPSBUSFJFRS5PYmplY3QzRD4oXG5cdFx0Ym9keUE6IEVsZW1lbnRSZWY8QT4gfCBBIHwgU2lnbmFsPEVsZW1lbnRSZWY8QT4gfCBBIHwgdW5kZWZpbmVkPixcblx0XHRib2R5QjogRWxlbWVudFJlZjxCPiB8IEIgfCBTaWduYWw8RWxlbWVudFJlZjxCPiB8IEIgfCB1bmRlZmluZWQ+LFxuXHRcdG9wdGlvbnM/OiBOZ3RjQ29uc3RyYWludE9wdGlvbnM8VENvbnN0cmFpbnQ+LFxuXHQpID0+IGNvbnN0cmFpbnQ8VENvbnN0cmFpbnQsIEEsIEI+KHR5cGUsIGJvZHlBLCBib2R5Qiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cmFpbnQ8XG5cdFRDb25zdHJhaW50IGV4dGVuZHMgQ29uc3RyYWludFR5cGVzIHwgJ0hpbmdlJyxcblx0QSBleHRlbmRzIFRIUkVFLk9iamVjdDNEID0gVEhSRUUuT2JqZWN0M0QsXG5cdEIgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRCA9IFRIUkVFLk9iamVjdDNELFxuPihcblx0dHlwZTogVENvbnN0cmFpbnQsXG5cdGJvZHlBOiBFbGVtZW50UmVmPEE+IHwgQSB8IFNpZ25hbDxFbGVtZW50UmVmPEE+IHwgQSB8IHVuZGVmaW5lZD4sXG5cdGJvZHlCOiBFbGVtZW50UmVmPEI+IHwgQiB8IFNpZ25hbDxFbGVtZW50UmVmPEI+IHwgQiB8IHVuZGVmaW5lZD4sXG5cdHtcblx0XHRpbmplY3Rvcixcblx0XHRvcHRpb25zID0ge30gYXMgTmd0Y0NvbnN0cmFpbnRPcHRpb25zTWFwW1RDb25zdHJhaW50XSxcblx0XHRkaXNhYmxlT25TdGFydCA9IGZhbHNlLFxuXHR9OiBOZ3RjQ29uc3RyYWludE9wdGlvbnM8VENvbnN0cmFpbnQ+ID0ge30sXG4pIHtcblx0cmV0dXJuIGFzc2VydEluamVjdG9yKGNvbnN0cmFpbnQsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcGh5c2ljcyA9IGluamVjdChOZ3RjUGh5c2ljcywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRcdGlmICghcGh5c2ljcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBbTkdUIENhbm5vbl0gaW5qZWN0Q29uc3RyYWludCB3YXMgY2FsbGVkIG91dHNpZGUgb2YgPG5ndGMtcGh5c2ljcz5gKTtcblx0XHR9XG5cblx0XHRjb25zdCB3b3JrZXIgPSBwaHlzaWNzLndvcmtlcjtcblxuXHRcdGNvbnN0IHV1aWQgPSBtYWtlSWQoKTtcblx0XHRjb25zdCBib2R5QVJlZiA9IGlzU2lnbmFsKGJvZHlBKSA/IGJvZHlBIDogc2lnbmFsKGJvZHlBKTtcblx0XHRjb25zdCBib2R5QlJlZiA9IGlzU2lnbmFsKGJvZHlCKSA/IGJvZHlCIDogc2lnbmFsKGJvZHlCKTtcblx0XHRjb25zdCBib2R5QVZhbHVlID0gY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZVJlZihib2R5QVJlZigpKSk7XG5cdFx0Y29uc3QgYm9keUJWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keUJSZWYoKSkpO1xuXG5cdFx0Y29uc3QgY29uc3RyYWludEFwaSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IF93b3JrZXIgPSB3b3JrZXIoKTtcblx0XHRcdGlmICghX3dvcmtlcikgcmV0dXJuIG51bGw7XG5cblx0XHRcdGNvbnN0IGVuYWJsZURpc2FibGUgPSB7XG5cdFx0XHRcdGRpc2FibGU6ICgpID0+IF93b3JrZXIuZGlzYWJsZUNvbnN0cmFpbnQoeyB1dWlkIH0pLFxuXHRcdFx0XHRlbmFibGU6ICgpID0+IF93b3JrZXIuZW5hYmxlQ29uc3RyYWludCh7IHV1aWQgfSksXG5cdFx0XHRcdHJlbW92ZTogKCkgPT4gX3dvcmtlci5yZW1vdmVDb25zdHJhaW50KHsgdXVpZCB9KSxcblx0XHRcdH07XG5cdFx0XHRpZiAodHlwZSA9PT0gJ0hpbmdlJykge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLmVuYWJsZURpc2FibGUsXG5cdFx0XHRcdFx0ZGlzYWJsZU1vdG9yOiAoKSA9PiBfd29ya2VyLmRpc2FibGVDb25zdHJhaW50TW90b3IoeyB1dWlkIH0pLFxuXHRcdFx0XHRcdGVuYWJsZU1vdG9yOiAoKSA9PiBfd29ya2VyLmVuYWJsZUNvbnN0cmFpbnRNb3Rvcih7IHV1aWQgfSksXG5cdFx0XHRcdFx0c2V0TW90b3JNYXhGb3JjZTogKHZhbHVlOiBudW1iZXIpID0+IF93b3JrZXIuc2V0Q29uc3RyYWludE1vdG9yTWF4Rm9yY2UoeyBwcm9wczogdmFsdWUsIHV1aWQgfSksXG5cdFx0XHRcdFx0c2V0TW90b3JTcGVlZDogKHZhbHVlOiBudW1iZXIpID0+IF93b3JrZXIuc2V0Q29uc3RyYWludE1vdG9yU3BlZWQoeyBwcm9wczogdmFsdWUsIHV1aWQgfSksXG5cdFx0XHRcdH0gYXMgTmd0Y0hpbmdlQ29uc3RyYWludEFwaTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbmFibGVEaXNhYmxlIGFzIE5ndGNDb25zdHJhaW50QXBpO1xuXHRcdH0pO1xuXG5cdFx0bGV0IGFscmVhZHlEaXNhYmxlZCA9IGZhbHNlO1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gd29ya2VyKCk7XG5cdFx0XHRpZiAoIWN1cnJlbnRXb3JrZXIpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgW2EsIGIsIGFwaV0gPSBbYm9keUFWYWx1ZSgpLCBib2R5QlZhbHVlKCksIHVudHJhY2tlZChjb25zdHJhaW50QXBpKV07XG5cdFx0XHRpZiAoIWEgfHwgIWIpIHJldHVybjtcblxuXHRcdFx0Y3VycmVudFdvcmtlci5hZGRDb25zdHJhaW50KHtcblx0XHRcdFx0cHJvcHM6IFthLnV1aWQsIGIudXVpZCwgb3B0aW9uc10sXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdHV1aWQsXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGRpc2FibGVPblN0YXJ0ICYmICFhbHJlYWR5RGlzYWJsZWQpIHtcblx0XHRcdFx0YWxyZWFkeURpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0YXBpPy5kaXNhYmxlKCk7XG5cdFx0XHR9XG5cblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjdXJyZW50V29ya2VyLnJlbW92ZUNvbnN0cmFpbnQoeyB1dWlkIH0pKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBjb25zdHJhaW50QXBpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHBvaW50VG9Qb2ludCA9IGNyZWF0ZUNvbnN0cmFpbnQoJ1BvaW50VG9Qb2ludCcpO1xuZXhwb3J0IGNvbnN0IGNvbmVUd2lzdCA9IGNyZWF0ZUNvbnN0cmFpbnQoJ0NvbmVUd2lzdCcpO1xuZXhwb3J0IGNvbnN0IGRpc3RhbmNlID0gY3JlYXRlQ29uc3RyYWludCgnRGlzdGFuY2UnKTtcbmV4cG9ydCBjb25zdCBsb2NrID0gY3JlYXRlQ29uc3RyYWludCgnTG9jaycpO1xuZXhwb3J0IGNvbnN0IGhpbmdlID0gY3JlYXRlQ29uc3RyYWludCgnSGluZ2UnKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYHBvaW50VG9Qb2ludGAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY1LjAuMFxuICogQHNpbmNlIHY0LjAuMFxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0UG9pbnRUb1BvaW50ID0gcG9pbnRUb1BvaW50O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29uZVR3aXN0YCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjUuMC4wXG4gKiBAc2luY2UgdjQuMC4wXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RDb25lVHdpc3QgPSBjb25lVHdpc3Q7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBkaXN0YW5jZWAgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIGluIHY1LjAuMFxuICogQHNpbmNlIHY0LjAuMFxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGxvY2tgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2NS4wLjBcbiAqIEBzaW5jZSB2NC4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdExvY2sgPSBsb2NrO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgaGluZ2VgIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCBpbiB2NS4wLjBcbiAqIEBzaW5jZSB2NC4wLjBcbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEhpbmdlID0gaGluZ2U7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2NvbnN0cmFpbnQvc3JjL2FuZ3VsYXItdGhyZWUtY2Fubm9uLWNvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, inject, afterNextRender, Directive } from '@angular/core';
3
3
  import { propsToBody } from '@pmndrs/cannon-worker-api';
4
- import { is, injectStore, injectBeforeRender } from 'angular-three';
4
+ import { is, injectStore, beforeRender } from 'angular-three';
5
5
  import { NgtcPhysics } from 'angular-three-cannon';
6
6
  import CannonDebugger from 'cannon-es-debugger';
7
7
  import { mergeInputs } from 'ngxtension/inject-inputs';
@@ -41,7 +41,7 @@ class NgtcDebug {
41
41
  scale: this.debug().scale,
42
42
  });
43
43
  });
44
- injectBeforeRender(() => {
44
+ beforeRender(() => {
45
45
  if (!this.cannonDebugger)
46
46
  return;
47
47
  const enabled = this.debug().enabled;
@@ -72,10 +72,10 @@ class NgtcDebug {
72
72
  this.bodies.splice(debugBodyIndex, 1);
73
73
  delete this.bodyMap[uuid];
74
74
  }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
76
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.4", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
76
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.3", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NgtcDebug, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgtcDebug, decorators: [{
79
79
  type: Directive,
80
80
  args: [{ selector: 'ngtc-physics[debug]' }]
81
81
  }], ctorParameters: () => [] });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-debug.mjs","sources":["../../../../libs/cannon/debug/src/lib/debug.ts","../../../../libs/cannon/debug/src/angular-three-cannon-debug.ts"],"sourcesContent":["import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { BodyProps, BodyShapeType, propsToBody } from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore, is } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { Body, Quaternion as CQuarternion, Vec3, World } from 'cannon-es';\nimport CannonDebugger from 'cannon-es-debugger';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nconst q = new THREE.Quaternion();\nconst s = new THREE.Vector3(1, 1, 1);\nconst v = new THREE.Vector3();\nconst m = new THREE.Matrix4();\n\nfunction getMatrix(o: THREE.Object3D) {\n\tif (is.three<THREE.InstancedMesh>(o, 'isInstancedMesh')) {\n\t\to.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n\t\treturn m;\n\t}\n\treturn o.matrix;\n}\n\nexport interface NgtcDebugInputs {\n\tenabled: boolean;\n\tcolor: string;\n\timpl: typeof CannonDebugger;\n\tscale: number;\n}\n\nconst defaultOptions: NgtcDebugInputs = {\n\tenabled: true,\n\tscale: 1,\n\tcolor: 'black',\n\timpl: CannonDebugger,\n};\n\n@Directive({ selector: 'ngtc-physics[debug]' })\nexport class NgtcDebug {\n\tdebug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate physics = inject(NgtcPhysics);\n\n\tprivate store = injectStore();\n\tprivate defaultScene = this.store.scene;\n\n\tprivate debuggerScene = new THREE.Scene();\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tconstructor() {\n\t\t// NOTE: afterNextRender so we only instantiate once after inputs have been resolved\n\t\tafterNextRender(() => {\n\t\t\tthis.defaultScene().add(this.debuggerScene);\n\t\t\tthis.cannonDebugger = this.debug().impl(this.debuggerScene, { bodies: this.bodies } as World, {\n\t\t\t\tcolor: this.debug().color,\n\t\t\t\tscale: this.debug().scale,\n\t\t\t});\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!this.cannonDebugger) return;\n\n\t\t\tconst enabled = this.debug().enabled;\n\t\t\tconst refs = this.physics.refs;\n\t\t\tfor (const uuid in this.bodyMap) {\n\t\t\t\tconst ref = refs[uuid];\n\t\t\t\tconst body = this.bodyMap[uuid];\n\t\t\t\tif (ref) {\n\t\t\t\t\tgetMatrix(ref).decompose(v, q, s);\n\t\t\t\t\tbody.position.copy(v as unknown as Vec3);\n\t\t\t\t\tbody.quaternion.copy(q as unknown as CQuarternion);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const child of this.debuggerScene.children) child.visible = enabled;\n\t\t\tif (enabled) this.cannonDebugger.update();\n\t\t});\n\t}\n\n\tadd(uuid: string, props: BodyProps, type: BodyShapeType) {\n\t\tconst body = propsToBody({ uuid, props, type });\n\t\tthis.bodies.push(body);\n\t\tthis.bodyMap[uuid] = body;\n\t}\n\n\tremove(uuid: string) {\n\t\tconst debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);\n\t\tif (debugBodyIndex > -1) this.bodies.splice(debugBodyIndex, 1);\n\t\tdelete this.bodyMap[uuid];\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon-debug.mjs","sources":["../tmp-esm2022/debug/lib/debug.js","../tmp-esm2022/debug/angular-three-cannon-debug.js"],"sourcesContent":["import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { propsToBody } from '@pmndrs/cannon-worker-api';\nimport { beforeRender, injectStore, is } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport CannonDebugger from 'cannon-es-debugger';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport * as i0 from \"@angular/core\";\nconst q = new THREE.Quaternion();\nconst s = new THREE.Vector3(1, 1, 1);\nconst v = new THREE.Vector3();\nconst m = new THREE.Matrix4();\nfunction getMatrix(o) {\n if (is.three(o, 'isInstancedMesh')) {\n o.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n return m;\n }\n return o.matrix;\n}\nconst defaultOptions = {\n enabled: true,\n scale: 1,\n color: 'black',\n impl: CannonDebugger,\n};\nexport class NgtcDebug {\n constructor() {\n this.debug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n this.physics = inject(NgtcPhysics);\n this.store = injectStore();\n this.defaultScene = this.store.scene;\n this.debuggerScene = new THREE.Scene();\n this.bodies = [];\n this.bodyMap = {};\n // NOTE: afterNextRender so we only instantiate once after inputs have been resolved\n afterNextRender(() => {\n this.defaultScene().add(this.debuggerScene);\n this.cannonDebugger = this.debug().impl(this.debuggerScene, { bodies: this.bodies }, {\n color: this.debug().color,\n scale: this.debug().scale,\n });\n });\n beforeRender(() => {\n if (!this.cannonDebugger)\n return;\n const enabled = this.debug().enabled;\n const refs = this.physics.refs;\n for (const uuid in this.bodyMap) {\n const ref = refs[uuid];\n const body = this.bodyMap[uuid];\n if (ref) {\n getMatrix(ref).decompose(v, q, s);\n body.position.copy(v);\n body.quaternion.copy(q);\n }\n }\n for (const child of this.debuggerScene.children)\n child.visible = enabled;\n if (enabled)\n this.cannonDebugger.update();\n });\n }\n add(uuid, props, type) {\n const body = propsToBody({ uuid, props, type });\n this.bodies.push(body);\n this.bodyMap[uuid] = body;\n }\n remove(uuid) {\n const debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);\n if (debugBodyIndex > -1)\n this.bodies.splice(debugBodyIndex, 1);\n delete this.bodyMap[uuid];\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.3\", type: NgtcDebug, isStandalone: true, selector: \"ngtc-physics[debug]\", inputs: { debug: { classPropertyName: \"debug\", publicName: \"debug\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgtcDebug, decorators: [{\n type: Directive,\n args: [{ selector: 'ngtc-physics[debug]' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvbGliL2RlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUIsU0FBUyxTQUFTLENBQUMsQ0FBaUI7SUFDbkMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFzQixDQUFDLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQ3pELENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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QUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDOzhHQXREVyxTQUFTO2tHQUFULFNBQVM7OzJGQUFULFNBQVM7a0JBRHJCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGFmdGVyTmV4dFJlbmRlciwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9keVByb3BzLCBCb2R5U2hhcGVUeXBlLCBwcm9wc1RvQm9keSB9IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgYmVmb3JlUmVuZGVyLCBpbmplY3RTdG9yZSwgaXMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndGNQaHlzaWNzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgQm9keSwgUXVhdGVybmlvbiBhcyBDUXVhcnRlcm5pb24sIFZlYzMsIFdvcmxkIH0gZnJvbSAnY2Fubm9uLWVzJztcbmltcG9ydCBDYW5ub25EZWJ1Z2dlciBmcm9tICdjYW5ub24tZXMtZGVidWdnZXInO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGdldE1hdHJpeChvOiBUSFJFRS5PYmplY3QzRCkge1xuXHRpZiAoaXMudGhyZWU8VEhSRUUuSW5zdGFuY2VkTWVzaD4obywgJ2lzSW5zdGFuY2VkTWVzaCcpKSB7XG5cdFx0by5nZXRNYXRyaXhBdChwYXJzZUludChvLnV1aWQuc3BsaXQoJy8nKVsxXSksIG0pO1xuXHRcdHJldHVybiBtO1xuXHR9XG5cdHJldHVybiBvLm1hdHJpeDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjRGVidWdJbnB1dHMge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRjb2xvcjogc3RyaW5nO1xuXHRpbXBsOiB0eXBlb2YgQ2Fubm9uRGVidWdnZXI7XG5cdHNjYWxlOiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RjRGVidWdJbnB1dHMgPSB7XG5cdGVuYWJsZWQ6IHRydWUsXG5cdHNjYWxlOiAxLFxuXHRjb2xvcjogJ2JsYWNrJyxcblx0aW1wbDogQ2Fubm9uRGVidWdnZXIsXG59O1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RjLXBoeXNpY3NbZGVidWddJyB9KVxuZXhwb3J0IGNsYXNzIE5ndGNEZWJ1ZyB7XG5cdGRlYnVnID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cblx0cHJpdmF0ZSBwaHlzaWNzID0gaW5qZWN0KE5ndGNQaHlzaWNzKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBkZWZhdWx0U2NlbmUgPSB0aGlzLnN0b3JlLnNjZW5lO1xuXG5cdHByaXZhdGUgZGVidWdnZXJTY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpO1xuXHRwcml2YXRlIGJvZGllczogQm9keVtdID0gW107XG5cdHByaXZhdGUgYm9keU1hcDogUmVjb3JkPHN0cmluZywgQm9keT4gPSB7fTtcblxuXHRwcml2YXRlIGNhbm5vbkRlYnVnZ2VyITogUmV0dXJuVHlwZTx0eXBlb2YgQ2Fubm9uRGVidWdnZXI+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdC8vIE5PVEU6IGFmdGVyTmV4dFJlbmRlciBzbyB3ZSBvbmx5IGluc3RhbnRpYXRlIG9uY2UgYWZ0ZXIgaW5wdXRzIGhhdmUgYmVlbiByZXNvbHZlZFxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmRlZmF1bHRTY2VuZSgpLmFkZCh0aGlzLmRlYnVnZ2VyU2NlbmUpO1xuXHRcdFx0dGhpcy5jYW5ub25EZWJ1Z2dlciA9IHRoaXMuZGVidWcoKS5pbXBsKHRoaXMuZGVidWdnZXJTY2VuZSwgeyBib2RpZXM6IHRoaXMuYm9kaWVzIH0gYXMgV29ybGQsIHtcblx0XHRcdFx0Y29sb3I6IHRoaXMuZGVidWcoKS5jb2xvcixcblx0XHRcdFx0c2NhbGU6IHRoaXMuZGVidWcoKS5zY2FsZSxcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0YmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGlmICghdGhpcy5jYW5ub25EZWJ1Z2dlcikgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBlbmFibGVkID0gdGhpcy5kZWJ1ZygpLmVuYWJsZWQ7XG5cdFx0XHRjb25zdCByZWZzID0gdGhpcy5waHlzaWNzLnJlZnM7XG5cdFx0XHRmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5ib2R5TWFwKSB7XG5cdFx0XHRcdGNvbnN0IHJlZiA9IHJlZnNbdXVpZF07XG5cdFx0XHRcdGNvbnN0IGJvZHkgPSB0aGlzLmJvZHlNYXBbdXVpZF07XG5cdFx0XHRcdGlmIChyZWYpIHtcblx0XHRcdFx0XHRnZXRNYXRyaXgocmVmKS5kZWNvbXBvc2UodiwgcSwgcyk7XG5cdFx0XHRcdFx0Ym9keS5wb3NpdGlvbi5jb3B5KHYgYXMgdW5rbm93biBhcyBWZWMzKTtcblx0XHRcdFx0XHRib2R5LnF1YXRlcm5pb24uY29weShxIGFzIHVua25vd24gYXMgQ1F1YXJ0ZXJuaW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZGVidWdnZXJTY2VuZS5jaGlsZHJlbikgY2hpbGQudmlzaWJsZSA9IGVuYWJsZWQ7XG5cdFx0XHRpZiAoZW5hYmxlZCkgdGhpcy5jYW5ub25EZWJ1Z2dlci51cGRhdGUoKTtcblx0XHR9KTtcblx0fVxuXG5cdGFkZCh1dWlkOiBzdHJpbmcsIHByb3BzOiBCb2R5UHJvcHMsIHR5cGU6IEJvZHlTaGFwZVR5cGUpIHtcblx0XHRjb25zdCBib2R5ID0gcHJvcHNUb0JvZHkoeyB1dWlkLCBwcm9wcywgdHlwZSB9KTtcblx0XHR0aGlzLmJvZGllcy5wdXNoKGJvZHkpO1xuXHRcdHRoaXMuYm9keU1hcFt1dWlkXSA9IGJvZHk7XG5cdH1cblxuXHRyZW1vdmUodXVpZDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZGVidWdCb2R5SW5kZXggPSB0aGlzLmJvZGllcy5pbmRleE9mKHRoaXMuYm9keU1hcFt1dWlkXSk7XG5cdFx0aWYgKGRlYnVnQm9keUluZGV4ID4gLTEpIHRoaXMuYm9kaWVzLnNwbGljZShkZWJ1Z0JvZHlJbmRleCwgMSk7XG5cdFx0ZGVsZXRlIHRoaXMuYm9keU1hcFt1dWlkXTtcblx0fVxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24tZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, signal, inject, Injector, afterNextRender, effect, untracked, Directive } from '@angular/core';
3
3
  import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
- import { injectStore, pick, injectBeforeRender, is } from 'angular-three';
4
+ import { injectStore, pick, beforeRender, is } from 'angular-three';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
6
  import * as THREE from 'three';
7
7
 
@@ -80,7 +80,7 @@ class NgtcPhysics {
80
80
  }, { injector });
81
81
  });
82
82
  let timeSinceLastCalled = 0;
83
- injectBeforeRender(({ delta }) => {
83
+ beforeRender(({ delta }) => {
84
84
  const [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.cannonWorker()];
85
85
  if (isPaused || !worker || stepSize == null)
86
86
  return;
@@ -115,7 +115,12 @@ class NgtcPhysics {
115
115
  const { events, refs } = this;
116
116
  const cb = events[target]?.collide;
117
117
  if (cb) {
118
- cb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });
118
+ cb({
119
+ body: refs[body],
120
+ contact: { bi: refs[bi], bj: refs[bj], ...contactRest },
121
+ target: refs[target],
122
+ ...rest,
123
+ });
119
124
  }
120
125
  }
121
126
  collideBeginHandler({ bodyA, bodyB }) {
@@ -178,10 +183,10 @@ class NgtcPhysics {
178
183
  if (cb)
179
184
  cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
180
185
  }
181
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
182
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.4", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
187
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.3", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
183
188
  }
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: NgtcPhysics, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgtcPhysics, decorators: [{
185
190
  type: Directive,
186
191
  args: [{ selector: 'ngtc-physics' }]
187
192
  }], ctorParameters: () => [] });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { Directive, Injector, afterNextRender, effect, inject, input, signal, untracked } from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\tCannonWorkerProps,\n\tCollideBeginEvent,\n\tCollideEndEvent,\n\tCollideEvent,\n\tRayhitEvent,\n\tRefs,\n\tSubscriptions,\n\tWorkerCollideBeginEvent,\n\tWorkerCollideEndEvent,\n\tWorkerCollideEvent,\n\tWorkerFrameMessage,\n\tWorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore, is, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport interface NgtcCannonWorkerEvents {\n\tcollide: WorkerCollideEvent;\n\tcollideBegin: WorkerCollideBeginEvent;\n\tcollideEnd: WorkerCollideEndEvent;\n\tframe: WorkerFrameMessage;\n\trayhit: WorkerRayhitEvent;\n}\n\nexport type NgtcCannonWorker = CannonWorkerAPI & {\n\ton: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;\n\tremoveAllListeners: () => void;\n};\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: THREE.Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions as THREE.QuaternionTuple, index * 4), scale);\n\t\tif (object) {\n\t\t\tobject.matrixAutoUpdate = false;\n\t\t\tobject.matrix.copy(m);\n\t\t}\n\t\treturn m;\n\t}\n\treturn m.identity();\n}\n\nfunction unique() {\n\tconst values: unknown[] = [];\n\treturn (value: unknown) => (values.includes(value) ? false : !!values.push(value));\n}\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n\t[K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;\n\nexport type ScaleOverrides = Record<string, THREE.Vector3>;\n\nexport interface NgtcPhysicsOptions extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nconst defaultOptions: NgtcPhysicsOptions = {\n\tallowSleep: false,\n\taxisIndex: 0,\n\tbroadphase: 'Naive',\n\tdefaultContactMaterial: { contactEquationStiffness: 1e6 },\n\tfrictionGravity: null,\n\tgravity: [0, -9.81, 0],\n\tisPaused: false,\n\titerations: 5,\n\tmaxSubSteps: 10,\n\tquatNormalizeFast: false,\n\tquatNormalizeSkip: 0,\n\tshouldInvalidate: true,\n\tsize: 1000,\n\tsolver: 'GS',\n\tstepSize: 1 / 60,\n\ttolerance: 0.001,\n};\n\ntype NgtsPhysicsUpdatableOptions = Extract<\n\tkeyof NgtcPhysicsOptions,\n\t'gravity' | 'iterations' | 'tolerance' | 'broadphase' | 'axisIndex'\n>;\n\n@Directive({ selector: 'ngtc-physics' })\nexport class NgtcPhysics {\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate axisIndex = pick(this.options, 'axisIndex');\n\tprivate broadphase = pick(this.options, 'broadphase');\n\tprivate gravity = pick(this.options, 'gravity');\n\tprivate iterations = pick(this.options, 'iterations');\n\tprivate tolerance = pick(this.options, 'tolerance');\n\n\tprivate invalidate = this.store.invalidate;\n\t// @ts-expect-error - worker is not nullable, and we don't want to use ! operator.\n\tprivate cannonWorker = signal<CannonWorkerAPI>(null);\n\n\tbodies: { [uuid: string]: number } = {};\n\tevents: NgtcCannonEvents = {};\n\trefs: Refs = {};\n\tscaleOverrides: ScaleOverrides = {};\n\tsubscriptions: Subscriptions = {};\n\tworker = this.cannonWorker.asReadonly();\n\n\tconstructor() {\n\t\tconst injector = inject(Injector);\n\n\t\t// NOTE: set new cannonworker in afterNextRender\n\t\t// - so inputs are resolved\n\t\t// - so the worker is instantiated only once\n\t\t// - effects are started after worker is instantiated\n\t\tafterNextRender(() => {\n\t\t\tthis.cannonWorker.set(new CannonWorkerAPI(this.options()));\n\n\t\t\teffect(\n\t\t\t\t(onCleanup) => {\n\t\t\t\t\tconst cleanup = this.connectWorkerEffect();\n\t\t\t\t\tonCleanup(() => cleanup?.());\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\n\t\t\teffect(\n\t\t\t\t() => {\n\t\t\t\t\tthis.updateWorkerStateEffect('axisIndex', this.axisIndex);\n\t\t\t\t\tthis.updateWorkerStateEffect('broadphase', this.broadphase);\n\t\t\t\t\tthis.updateWorkerStateEffect('gravity', this.gravity);\n\t\t\t\t\tthis.updateWorkerStateEffect('iterations', this.iterations);\n\t\t\t\t\tthis.updateWorkerStateEffect('tolerance', this.tolerance);\n\t\t\t\t},\n\t\t\t\t{ injector },\n\t\t\t);\n\t\t});\n\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.cannonWorker()];\n\t\t\tif (isPaused || !worker || stepSize == null) return;\n\t\t\ttimeSinceLastCalled += delta;\n\t\t\tworker.step({ maxSubSteps, stepSize, timeSinceLastCalled });\n\t\t\ttimeSinceLastCalled = 0;\n\t\t});\n\t}\n\n\tprivate connectWorkerEffect() {\n\t\tconst worker = this.cannonWorker() as NgtcCannonWorker;\n\t\tif (!worker) return;\n\n\t\tworker.connect();\n\t\tworker.init();\n\n\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\treturn () => {\n\t\t\tworker.terminate();\n\t\t\tworker.removeAllListeners();\n\t\t};\n\t}\n\n\tprivate updateWorkerStateEffect<TUpdatableKey extends NgtsPhysicsUpdatableOptions>(\n\t\tkey: TUpdatableKey,\n\t\toption: () => NgtcPhysicsOptions[TUpdatableKey],\n\t) {\n\t\tconst worker = this.cannonWorker();\n\t\tif (!worker) return;\n\t\tObject.assign(worker, { [key]: option() });\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[target]?.collide;\n\t\tif (cb) {\n\t\t\tcb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideBegin;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\t\tconst cbB = events[bodyB]?.collideBegin;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n\t}\n\n\tprivate collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cbA = events[bodyA]?.collideEnd;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\t\tconst cbB = events[bodyB]?.collideEnd;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n\t}\n\n\tprivate frameHandler({\n\t\tactive,\n\t\tbodies: uuids = [],\n\t\tobservations,\n\t\tpositions,\n\t\tquaternions,\n\t}: WorkerFrameMessage['data']) {\n\t\tconst [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [\n\t\t\tuntracked(this.options),\n\t\t\tthis,\n\t\t\tthis.invalidate(),\n\t\t];\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\t\tobservations.forEach(([id, value, type]) => {\n\t\t\tconst subscription = subscriptions[id] || {};\n\t\t\tconst cb = subscription[type];\n\t\t\t// @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value);\n\t\t});\n\t\tif (!active) return;\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (is.three<THREE.InstancedMesh>(ref, 'isInstancedMesh')) {\n\t\t\t\tfor (let i = 0; i < ref.count; i++) {\n\t\t\t\t\tconst uuid = `${ref.uuid}/${i}`;\n\t\t\t\t\tconst index = bodies[uuid];\n\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\tref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n\t\t\t\t\t\tref.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst scale = scaleOverrides[ref.uuid] || ref.scale;\n\t\t\t\tapply(bodies[ref.uuid], positions, quaternions, scale, ref);\n\t\t\t}\n\t\t}\n\t\tif (shouldInvalidate) invalidate();\n\t}\n\n\tprivate rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n\t\tconst { events, refs } = this;\n\t\tconst cb = events[uuid]?.rayhit;\n\t\tif (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-cannon.mjs","sources":["../tmp-esm2022/lib/physics.js","../tmp-esm2022/angular-three-cannon.js"],"sourcesContent":["import { Directive, Injector, afterNextRender, effect, inject, input, signal, untracked } from '@angular/core';\nimport { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';\nimport { beforeRender, injectStore, is, pick } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport * as i0 from \"@angular/core\";\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\nfunction apply(index, positions, quaternions, scale = s, object) {\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}\nfunction unique() {\n const values = [];\n return (value) => (values.includes(value) ? false : !!values.push(value));\n}\nconst defaultOptions = {\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};\nexport class NgtcPhysics {\n constructor() {\n this.store = injectStore();\n this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n this.axisIndex = pick(this.options, 'axisIndex');\n this.broadphase = pick(this.options, 'broadphase');\n this.gravity = pick(this.options, 'gravity');\n this.iterations = pick(this.options, 'iterations');\n this.tolerance = pick(this.options, 'tolerance');\n this.invalidate = this.store.invalidate;\n // @ts-expect-error - worker is not nullable, and we don't want to use ! operator.\n this.cannonWorker = signal(null);\n this.bodies = {};\n this.events = {};\n this.refs = {};\n this.scaleOverrides = {};\n this.subscriptions = {};\n this.worker = this.cannonWorker.asReadonly();\n const injector = inject(Injector);\n // NOTE: set new cannonworker in afterNextRender\n // - so inputs are resolved\n // - so the worker is instantiated only once\n // - effects are started after worker is instantiated\n afterNextRender(() => {\n this.cannonWorker.set(new CannonWorkerAPI(this.options()));\n effect((onCleanup) => {\n const cleanup = this.connectWorkerEffect();\n onCleanup(() => cleanup?.());\n }, { injector });\n effect(() => {\n this.updateWorkerStateEffect('axisIndex', this.axisIndex);\n this.updateWorkerStateEffect('broadphase', this.broadphase);\n this.updateWorkerStateEffect('gravity', this.gravity);\n this.updateWorkerStateEffect('iterations', this.iterations);\n this.updateWorkerStateEffect('tolerance', this.tolerance);\n }, { injector });\n });\n let timeSinceLastCalled = 0;\n beforeRender(({ delta }) => {\n const [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.cannonWorker()];\n if (isPaused || !worker || stepSize == null)\n return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, stepSize, timeSinceLastCalled });\n timeSinceLastCalled = 0;\n });\n }\n connectWorkerEffect() {\n const worker = this.cannonWorker();\n if (!worker)\n return;\n worker.connect();\n worker.init();\n worker.on('collide', this.collideHandler.bind(this));\n worker.on('collideBegin', this.collideBeginHandler.bind(this));\n worker.on('collideEnd', this.collideEndHandler.bind(this));\n worker.on('frame', this.frameHandler.bind(this));\n worker.on('rayhit', this.rayhitHandler.bind(this));\n return () => {\n worker.terminate();\n worker.removeAllListeners();\n };\n }\n updateWorkerStateEffect(key, option) {\n const worker = this.cannonWorker();\n if (!worker)\n return;\n Object.assign(worker, { [key]: option() });\n }\n collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {\n const { events, refs } = this;\n const cb = events[target]?.collide;\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 collideBeginHandler({ bodyA, bodyB }) {\n const { events, refs } = this;\n const cbA = events[bodyA]?.collideBegin;\n if (cbA)\n cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n const cbB = events[bodyB]?.collideBegin;\n if (cbB)\n cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n }\n collideEndHandler({ bodyA, bodyB }) {\n const { events, refs } = this;\n const cbA = events[bodyA]?.collideEnd;\n if (cbA)\n cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n const cbB = events[bodyB]?.collideEnd;\n if (cbB)\n cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n }\n frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {\n const [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [\n untracked(this.options),\n this,\n this.invalidate(),\n ];\n for (let i = 0; i < uuids.length; i++) {\n bodies[uuids[i]] = i;\n }\n observations.forEach(([id, value, type]) => {\n const subscription = subscriptions[id] || {};\n const cb = subscription[type];\n // @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value);\n });\n if (!active)\n return;\n for (const ref of Object.values(refs).filter(unique())) {\n if (is.three(ref, 'isInstancedMesh')) {\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 }\n else {\n const scale = scaleOverrides[ref.uuid] || ref.scale;\n apply(bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate)\n invalidate();\n }\n rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {\n const { events, refs } = this;\n const cb = events[uuid]?.rayhit;\n if (cb)\n cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.3\", type: NgtcPhysics, isStandalone: true, selector: \"ngtc-physics\", inputs: { options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgtcPhysics, decorators: [{\n type: Directive,\n args: [{ selector: 'ngtc-physics' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQ04sZUFBZSxHQWFmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBa0IvQixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5QixTQUFTLEtBQUssQ0FDYixLQUFhLEVBQ2IsU0FBNEIsRUFDNUIsV0FBOEIsRUFDOUIsS0FBSyxHQUFHLENBQUMsRUFDVCxNQUF1QjtJQUV2QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsT0FBTyxDQUNSLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFDakMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFvQyxFQUFF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RyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQzs4R0FuS1csV0FBVztrR0FBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0b3IsIGFmdGVyTmV4dFJlbmRlciwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Q2Fubm9uV29ya2VyQVBJLFxuXHRDYW5ub25Xb3JrZXJQcm9wcyxcblx0Q29sbGlkZUJlZ2luRXZlbnQsXG5cdENvbGxpZGVFbmRFdmVudCxcblx0Q29sbGlkZUV2ZW50LFxuXHRSYXloaXRFdmVudCxcblx0UmVmcyxcblx0U3Vic2NyaXB0aW9ucyxcblx0V29ya2VyQ29sbGlkZUJlZ2luRXZlbnQsXG5cdFdvcmtlckNvbGxpZGVFbmRFdmVudCxcblx0V29ya2VyQ29sbGlkZUV2ZW50LFxuXHRXb3JrZXJGcmFtZU1lc3NhZ2UsXG5cdFdvcmtlclJheWhpdEV2ZW50LFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIGlzLCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0Nhbm5vbldvcmtlckV2ZW50cyB7XG5cdGNvbGxpZGU6IFdvcmtlckNvbGxpZGVFdmVudDtcblx0Y29sbGlkZUJlZ2luOiBXb3JrZXJDb2xsaWRlQmVnaW5FdmVudDtcblx0Y29sbGlkZUVuZDogV29ya2VyQ29sbGlkZUVuZEV2ZW50O1xuXHRmcmFtZTogV29ya2VyRnJhbWVNZXNzYWdlO1xuXHRyYXloaXQ6IFdvcmtlclJheWhpdEV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RjQ2Fubm9uV29ya2VyID0gQ2Fubm9uV29ya2VyQVBJICYge1xuXHRvbjogPEsgZXh0ZW5kcyBrZXlvZiBOZ3RjQ2Fubm9uV29ya2VyRXZlbnRzPihcblx0XHRldmVudDogSyxcblx0XHRjYjogKGRhdGE6IE5ndGNDYW5ub25Xb3JrZXJFdmVudHNbS11bJ2RhdGEnXSkgPT4gdm9pZCxcblx0KSA9PiB2b2lkO1xuXHRyZW1vdmVBbGxMaXN0ZW5lcnM6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCB2ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGFwcGx5KFxuXHRpbmRleDogbnVtYmVyLFxuXHRwb3NpdGlvbnM6IEFycmF5TGlrZTxudW1iZXI+LFxuXHRxdWF0ZXJuaW9uczogQXJyYXlMaWtlPG51bWJlcj4sXG5cdHNjYWxlID0gcyxcblx0b2JqZWN0PzogVEhSRUUuT2JqZWN0M0QsXG4pIHtcblx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRtLmNvbXBvc2UoXG5cdFx0XHR2LmZyb21BcnJheShwb3NpdGlvbnMsIGluZGV4ICogMyksXG5cdFx0XHRxLmZyb21BcnJheShxdWF0ZXJuaW9ucyBhcyBUSFJFRS5RdWF0ZXJuaW9uVHVwbGUsIGluZGV4ICogNCksXG5cdFx0XHRzY2FsZSxcblx0XHQpO1xuXHRcdGlmIChvYmplY3QpIHtcblx0XHRcdG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRvYmplY3QubWF0cml4LmNvcHkobSk7XG5cdFx0fVxuXHRcdHJldHVybiBtO1xuXHR9XG5cdHJldHVybiBtLmlkZW50aXR5KCk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcblx0Y29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcblx0cmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKHZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPyBmYWxzZSA6ICEhdmFsdWVzLnB1c2godmFsdWUpKTtcbn1cblxudHlwZSBOZ3RjQ2Fubm9uRXZlbnQgPSBDb2xsaWRlQmVnaW5FdmVudCB8IENvbGxpZGVFbmRFdmVudCB8IENvbGxpZGVFdmVudCB8IFJheWhpdEV2ZW50O1xudHlwZSBOZ3RjQ2FsbGJhY2tCeVR5cGU8VCBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+ID0ge1xuXHRbSyBpbiBUWyd0eXBlJ11dPzogVCBleHRlbmRzIHsgdHlwZTogSyB9ID8gKGU6IFQpID0+IHZvaWQgOiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNDYW5ub25FdmVudHMgPSBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPE5ndGNDYWxsYmFja0J5VHlwZTxOZ3RjQ2Fubm9uRXZlbnQ+Pj47XG5cbmV4cG9ydCB0eXBlIFNjYWxlT3ZlcnJpZGVzID0gUmVjb3JkPHN0cmluZywgVEhSRUUuVmVjdG9yMz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1BoeXNpY3NPcHRpb25zIGV4dGVuZHMgQ2Fubm9uV29ya2VyUHJvcHMge1xuXHRpc1BhdXNlZD86IGJvb2xlYW47XG5cdG1heFN1YlN0ZXBzPzogbnVtYmVyO1xuXHRzaG91bGRJbnZhbGlkYXRlPzogYm9vbGVhbjtcblx0c3RlcFNpemU/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RjUGh5c2ljc09wdGlvbnMgPSB7XG5cdGFsbG93U2xlZXA6IGZhbHNlLFxuXHRheGlzSW5kZXg6IDAsXG5cdGJyb2FkcGhhc2U6ICdOYWl2ZScsXG5cdGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHsgY29udGFjdEVxdWF0aW9uU3RpZmZuZXNzOiAxZTYgfSxcblx0ZnJpY3Rpb25HcmF2aXR5OiBudWxsLFxuXHRncmF2aXR5OiBbMCwgLTkuODEsIDBdLFxuXHRpc1BhdXNlZDogZmFsc2UsXG5cdGl0ZXJhdGlvbnM6IDUsXG5cdG1heFN1YlN0ZXBzOiAxMCxcblx0cXVhdE5vcm1hbGl6ZUZhc3Q6IGZhbHNlLFxuXHRxdWF0Tm9ybWFsaXplU2tpcDogMCxcblx0c2hvdWxkSW52YWxpZGF0ZTogdHJ1ZSxcblx0c2l6ZTogMTAwMCxcblx0c29sdmVyOiAnR1MnLFxuXHRzdGVwU2l6ZTogMSAvIDYwLFxuXHR0b2xlcmFuY2U6IDAuMDAxLFxufTtcblxudHlwZSBOZ3RzUGh5c2ljc1VwZGF0YWJsZU9wdGlvbnMgPSBFeHRyYWN0PFxuXHRrZXlvZiBOZ3RjUGh5c2ljc09wdGlvbnMsXG5cdCdncmF2aXR5JyB8ICdpdGVyYXRpb25zJyB8ICd0b2xlcmFuY2UnIHwgJ2Jyb2FkcGhhc2UnIHwgJ2F4aXNJbmRleCdcbj47XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndGMtcGh5c2ljcycgfSlcbmV4cG9ydCBjbGFzcyBOZ3RjUGh5c2ljcyB7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIGF4aXNJbmRleCA9IHBpY2sodGhpcy5vcHRpb25zLCAnYXhpc0luZGV4Jyk7XG5cdHByaXZhdGUgYnJvYWRwaGFzZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnYnJvYWRwaGFzZScpO1xuXHRwcml2YXRlIGdyYXZpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2dyYXZpdHknKTtcblx0cHJpdmF0ZSBpdGVyYXRpb25zID0gcGljayh0aGlzLm9wdGlvbnMsICdpdGVyYXRpb25zJyk7XG5cdHByaXZhdGUgdG9sZXJhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICd0b2xlcmFuY2UnKTtcblxuXHRwcml2YXRlIGludmFsaWRhdGUgPSB0aGlzLnN0b3JlLmludmFsaWRhdGU7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3b3JrZXIgaXMgbm90IG51bGxhYmxlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2UgISBvcGVyYXRvci5cblx0cHJpdmF0ZSBjYW5ub25Xb3JrZXIgPSBzaWduYWw8Q2Fubm9uV29ya2VyQVBJPihudWxsKTtcblxuXHRib2RpZXM6IHsgW3V1aWQ6IHN0cmluZ106IG51bWJlciB9ID0ge307XG5cdGV2ZW50czogTmd0Y0Nhbm5vbkV2ZW50cyA9IHt9O1xuXHRyZWZzOiBSZWZzID0ge307XG5cdHNjYWxlT3ZlcnJpZGVzOiBTY2FsZU92ZXJyaWRlcyA9IHt9O1xuXHRzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zID0ge307XG5cdHdvcmtlciA9IHRoaXMuY2Fubm9uV29ya2VyLmFzUmVhZG9ubHkoKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0XHQvLyBOT1RFOiBzZXQgbmV3IGNhbm5vbndvcmtlciBpbiBhZnRlck5leHRSZW5kZXJcblx0XHQvLyAtIHNvIGlucHV0cyBhcmUgcmVzb2x2ZWRcblx0XHQvLyAtIHNvIHRoZSB3b3JrZXIgaXMgaW5zdGFudGlhdGVkIG9ubHkgb25jZVxuXHRcdC8vIC0gZWZmZWN0cyBhcmUgc3RhcnRlZCBhZnRlciB3b3JrZXIgaXMgaW5zdGFudGlhdGVkXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuY2Fubm9uV29ya2VyLnNldChuZXcgQ2Fubm9uV29ya2VyQVBJKHRoaXMub3B0aW9ucygpKSk7XG5cblx0XHRcdGVmZmVjdChcblx0XHRcdFx0KG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNsZWFudXAgPSB0aGlzLmNvbm5lY3RXb3JrZXJFZmZlY3QoKTtcblx0XHRcdFx0XHRvbkNsZWFudXAoKCkgPT4gY2xlYW51cD8uKCkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGluamVjdG9yIH0sXG5cdFx0XHQpO1xuXG5cdFx0XHRlZmZlY3QoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVdvcmtlclN0YXRlRWZmZWN0KCdheGlzSW5kZXgnLCB0aGlzLmF4aXNJbmRleCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZUVmZmVjdCgnYnJvYWRwaGFzZScsIHRoaXMuYnJvYWRwaGFzZSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZUVmZmVjdCgnZ3Jhdml0eScsIHRoaXMuZ3Jhdml0eSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZUVmZmVjdCgnaXRlcmF0aW9ucycsIHRoaXMuaXRlcmF0aW9ucyk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZUVmZmVjdCgndG9sZXJhbmNlJywgdGhpcy50b2xlcmFuY2UpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGluamVjdG9yIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXG5cdFx0bGV0IHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuXHRcdGJlZm9yZVJlbmRlcigoeyBkZWx0YSB9KSA9PiB7XG5cdFx0XHRjb25zdCBbeyBpc1BhdXNlZCwgbWF4U3ViU3RlcHMsIHN0ZXBTaXplIH0sIHdvcmtlcl0gPSBbdGhpcy5vcHRpb25zKCksIHRoaXMuY2Fubm9uV29ya2VyKCldO1xuXHRcdFx0aWYgKGlzUGF1c2VkIHx8ICF3b3JrZXIgfHwgc3RlcFNpemUgPT0gbnVsbCkgcmV0dXJuO1xuXHRcdFx0dGltZVNpbmNlTGFzdENhbGxlZCArPSBkZWx0YTtcblx0XHRcdHdvcmtlci5zdGVwKHsgbWF4U3ViU3RlcHMsIHN0ZXBTaXplLCB0aW1lU2luY2VMYXN0Q2FsbGVkIH0pO1xuXHRcdFx0dGltZVNpbmNlTGFzdENhbGxlZCA9IDA7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGNvbm5lY3RXb3JrZXJFZmZlY3QoKSB7XG5cdFx0Y29uc3Qgd29ya2VyID0gdGhpcy5jYW5ub25Xb3JrZXIoKSBhcyBOZ3RjQ2Fubm9uV29ya2VyO1xuXHRcdGlmICghd29ya2VyKSByZXR1cm47XG5cblx0XHR3b3JrZXIuY29ubmVjdCgpO1xuXHRcdHdvcmtlci5pbml0KCk7XG5cblx0XHR3b3JrZXIub24oJ2NvbGxpZGUnLCB0aGlzLmNvbGxpZGVIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdHdvcmtlci5vbignY29sbGlkZUJlZ2luJywgdGhpcy5jb2xsaWRlQmVnaW5IYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdHdvcmtlci5vbignY29sbGlkZUVuZCcsIHRoaXMuY29sbGlkZUVuZEhhbmRsZXIuYmluZCh0aGlzKSk7XG5cdFx0d29ya2VyLm9uKCdmcmFtZScsIHRoaXMuZnJhbWVIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdHdvcmtlci5vbigncmF5aGl0JywgdGhpcy5yYXloaXRIYW5kbGVyLmJpbmQodGhpcykpO1xuXG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHdvcmtlci50ZXJtaW5hdGUoKTtcblx0XHRcdHdvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVXb3JrZXJTdGF0ZUVmZmVjdDxUVXBkYXRhYmxlS2V5IGV4dGVuZHMgTmd0c1BoeXNpY3NVcGRhdGFibGVPcHRpb25zPihcblx0XHRrZXk6IFRVcGRhdGFibGVLZXksXG5cdFx0b3B0aW9uOiAoKSA9PiBOZ3RjUGh5c2ljc09wdGlvbnNbVFVwZGF0YWJsZUtleV0sXG5cdCkge1xuXHRcdGNvbnN0IHdvcmtlciA9IHRoaXMuY2Fubm9uV29ya2VyKCk7XG5cdFx0aWYgKCF3b3JrZXIpIHJldHVybjtcblx0XHRPYmplY3QuYXNzaWduKHdvcmtlciwgeyBba2V5XTogb3B0aW9uKCkgfSk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxpZGVIYW5kbGVyKHsgYm9keSwgY29udGFjdDogeyBiaSwgYmosIC4uLmNvbnRhY3RSZXN0IH0sIHRhcmdldCwgLi4ucmVzdCB9OiBXb3JrZXJDb2xsaWRlRXZlbnRbJ2RhdGEnXSkge1xuXHRcdGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzO1xuXHRcdGNvbnN0IGNiID0gZXZlbnRzW3RhcmdldF0/LmNvbGxpZGU7XG5cdFx0aWYgKGNiKSB7XG5cdFx0XHRjYih7XG5cdFx0XHRcdGJvZHk6IHJlZnNbYm9keV0sXG5cdFx0XHRcdGNvbnRhY3Q6IHsgYmk6IHJlZnNbYmldLCBiajogcmVmc1tial0sIC4uLmNvbnRhY3RSZXN0IH0sXG5cdFx0XHRcdHRhcmdldDogcmVmc1t0YXJnZXRdLFxuXHRcdFx0XHQuLi5yZXN0LFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb2xsaWRlQmVnaW5IYW5kbGVyKHsgYm9keUEsIGJvZHlCIH06IFdvcmtlckNvbGxpZGVCZWdpbkV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcztcblx0XHRjb25zdCBjYkEgPSBldmVudHNbYm9keUFdPy5jb2xsaWRlQmVnaW47XG5cdFx0aWYgKGNiQSkgY2JBKHsgYm9keTogcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcblx0XHRjb25zdCBjYkIgPSBldmVudHNbYm9keUJdPy5jb2xsaWRlQmVnaW47XG5cdFx0aWYgKGNiQikgY2JCKHsgYm9keTogcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGlkZUVuZEhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUVuZEV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcztcblx0XHRjb25zdCBjYkEgPSBldmVudHNbYm9keUFdPy5jb2xsaWRlRW5kO1xuXHRcdGlmIChjYkEpIGNiQSh7IGJvZHk6IHJlZnNbYm9keUJdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiByZWZzW2JvZHlBXSwgdHlwZTogJ2NvbGxpZGVFbmQnIH0pO1xuXHRcdGNvbnN0IGNiQiA9IGV2ZW50c1tib2R5Ql0/LmNvbGxpZGVFbmQ7XG5cdFx0aWYgKGNiQikgY2JCKHsgYm9keTogcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG5cdH1cblxuXHRwcml2YXRlIGZyYW1lSGFuZGxlcih7XG5cdFx0YWN0aXZlLFxuXHRcdGJvZGllczogdXVpZHMgPSBbXSxcblx0XHRvYnNlcnZhdGlvbnMsXG5cdFx0cG9zaXRpb25zLFxuXHRcdHF1YXRlcm5pb25zLFxuXHR9OiBXb3JrZXJGcmFtZU1lc3NhZ2VbJ2RhdGEnXSkge1xuXHRcdGNvbnN0IFt7IHNob3VsZEludmFsaWRhdGUgfSwgeyBib2RpZXMsIHN1YnNjcmlwdGlvbnMsIHJlZnMsIHNjYWxlT3ZlcnJpZGVzIH0sIGludmFsaWRhdGVdID0gW1xuXHRcdFx0dW50cmFja2VkKHRoaXMub3B0aW9ucyksXG5cdFx0XHR0aGlzLFxuXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHV1aWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRib2RpZXNbdXVpZHNbaV1dID0gaTtcblx0XHR9XG5cdFx0b2JzZXJ2YXRpb25zLmZvckVhY2goKFtpZCwgdmFsdWUsIHR5cGVdKSA9PiB7XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25zW2lkXSB8fCB7fTtcblx0XHRcdGNvbnN0IGNiID0gc3Vic2NyaXB0aW9uW3R5cGVdO1xuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIFdlIGNsZWFybHkga25vdyB0aGUgdHlwZSBvZiB0aGUgY2FsbGJhY2ssIGJ1dCB0eXBlc2NyaXB0IGNhbid0IGRlYWwgd2l0aCBpdFxuXHRcdFx0Y2IgJiYgY2IodmFsdWUpO1xuXHRcdH0pO1xuXHRcdGlmICghYWN0aXZlKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCByZWYgb2YgT2JqZWN0LnZhbHVlcyhyZWZzKS5maWx0ZXIodW5pcXVlKCkpKSB7XG5cdFx0XHRpZiAoaXMudGhyZWU8VEhSRUUuSW5zdGFuY2VkTWVzaD4ocmVmLCAnaXNJbnN0YW5jZWRNZXNoJykpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCByZWYuY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHV1aWQgPSBgJHtyZWYudXVpZH0vJHtpfWA7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXggPSBib2RpZXNbdXVpZF07XG5cdFx0XHRcdFx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJlZi5zZXRNYXRyaXhBdChpLCBhcHBseShpbmRleCwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGVPdmVycmlkZXNbdXVpZF0pKTtcblx0XHRcdFx0XHRcdHJlZi5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBzY2FsZSA9IHNjYWxlT3ZlcnJpZGVzW3JlZi51dWlkXSB8fCByZWYuc2NhbGU7XG5cdFx0XHRcdGFwcGx5KGJvZGllc1tyZWYudXVpZF0sIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHNjYWxlLCByZWYpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc2hvdWxkSW52YWxpZGF0ZSkgaW52YWxpZGF0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByYXloaXRIYW5kbGVyKHsgYm9keSwgcmF5OiB7IHV1aWQsIC4uLnJheVJlc3QgfSwgLi4ucmVzdCB9OiBXb3JrZXJSYXloaXRFdmVudFsnZGF0YSddKSB7XG5cdFx0Y29uc3QgeyBldmVudHMsIHJlZnMgfSA9IHRoaXM7XG5cdFx0Y29uc3QgY2IgPSBldmVudHNbdXVpZF0/LnJheWhpdDtcblx0XHRpZiAoY2IpIGNiKHsgYm9keTogYm9keSA/IHJlZnNbYm9keV0gOiBudWxsLCByYXk6IHsgdXVpZCwgLi4ucmF5UmVzdCB9LCAuLi5yZXN0IH0pO1xuXHR9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1 +1,63 @@
1
- export * from './lib/physics';
1
+ import * as _angular_core from '@angular/core';
2
+ import { WorkerCollideEvent, WorkerCollideBeginEvent, WorkerCollideEndEvent, WorkerFrameMessage, WorkerRayhitEvent, CannonWorkerAPI, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, CannonWorkerProps, Refs, Subscriptions } from '@pmndrs/cannon-worker-api';
3
+ import * as THREE from 'three';
4
+
5
+ interface NgtcCannonWorkerEvents {
6
+ collide: WorkerCollideEvent;
7
+ collideBegin: WorkerCollideBeginEvent;
8
+ collideEnd: WorkerCollideEndEvent;
9
+ frame: WorkerFrameMessage;
10
+ rayhit: WorkerRayhitEvent;
11
+ }
12
+ type NgtcCannonWorker = CannonWorkerAPI & {
13
+ on: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;
14
+ removeAllListeners: () => void;
15
+ };
16
+ type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
17
+ type NgtcCallbackByType<T extends {
18
+ type: string;
19
+ }> = {
20
+ [K in T['type']]?: T extends {
21
+ type: K;
22
+ } ? (e: T) => void : never;
23
+ };
24
+ type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;
25
+ type ScaleOverrides = Record<string, THREE.Vector3>;
26
+ interface NgtcPhysicsOptions extends CannonWorkerProps {
27
+ isPaused?: boolean;
28
+ maxSubSteps?: number;
29
+ shouldInvalidate?: boolean;
30
+ stepSize?: number;
31
+ }
32
+ declare class NgtcPhysics {
33
+ private store;
34
+ options: _angular_core.InputSignalWithTransform<NgtcPhysicsOptions, "" | Partial<NgtcPhysicsOptions>>;
35
+ private axisIndex;
36
+ private broadphase;
37
+ private gravity;
38
+ private iterations;
39
+ private tolerance;
40
+ private invalidate;
41
+ private cannonWorker;
42
+ bodies: {
43
+ [uuid: string]: number;
44
+ };
45
+ events: NgtcCannonEvents;
46
+ refs: Refs;
47
+ scaleOverrides: ScaleOverrides;
48
+ subscriptions: Subscriptions;
49
+ worker: _angular_core.Signal<CannonWorkerAPI>;
50
+ constructor();
51
+ private connectWorkerEffect;
52
+ private updateWorkerStateEffect;
53
+ private collideHandler;
54
+ private collideBeginHandler;
55
+ private collideEndHandler;
56
+ private frameHandler;
57
+ private rayhitHandler;
58
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgtcPhysics, never>;
59
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgtcPhysics, "ngtc-physics", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
60
+ }
61
+
62
+ export { NgtcPhysics };
63
+ export type { NgtcCannonEvents, NgtcCannonWorker, NgtcCannonWorkerEvents, NgtcPhysicsOptions, ScaleOverrides };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three-cannon",
3
- "version": "4.0.0-next.11",
3
+ "version": "4.0.0-next.110",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,12 +23,12 @@
23
23
  ],
24
24
  "license": "MIT",
25
25
  "peerDependencies": {
26
- "@angular/common": ">=19.0.0 <20.0.0",
27
- "@angular/core": ">=19.0.0 <20.0.0",
26
+ "@angular/common": ">=19.0.0 <21.0.0",
27
+ "@angular/core": ">=19.0.0 <21.0.0",
28
28
  "@pmndrs/cannon-worker-api": "^2.0.0",
29
29
  "cannon-es": ">=0.20.0 <0.21.0",
30
30
  "cannon-es-debugger": "^1.0.0",
31
- "three": ">=0.148.0 <0.174.0"
31
+ "three": ">=0.157.0 <0.178.0"
32
32
  },
33
33
  "peerDependenciesMeta": {
34
34
  "cannon-es-debugger": {
@@ -1,17 +0,0 @@
1
- import { ElementRef, Injector, Signal } from '@angular/core';
2
- import { BodyShapeType } from '@pmndrs/cannon-worker-api';
3
- import * as THREE from 'three';
4
- import { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';
5
- export interface NgtcBodyOptions<TShape extends BodyShapeType> {
6
- transformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;
7
- injector?: Injector;
8
- }
9
- export declare const injectBox: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
10
- export declare const injectConvexPolyhedron: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
11
- export declare const injectCylinder: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
12
- export declare const injectHeightfield: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
13
- export declare const injectParticle: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
14
- export declare const injectPlane: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
15
- export declare const injectSphere: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
16
- export declare const injectTrimesh: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
17
- export declare const injectCompound: <TObject extends THREE.Object3D>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
@@ -1,49 +0,0 @@
1
- import type { AtomicName, AtomicProps, BodyProps, BoxProps, CompoundBodyProps, ConvexPolyhedronProps, CylinderProps, HeightfieldProps, ParticleProps, PlaneProps, Quad, SphereProps, TrimeshProps, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
2
- import type * as THREE from 'three';
3
- export interface NgtcAtomicApi<K extends AtomicName> {
4
- set: (value: AtomicProps[K]) => void;
5
- subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
6
- }
7
- export interface NgtcQuaternionApi {
8
- copy: ({ w, x, y, z }: THREE.Quaternion) => void;
9
- set: (x: number, y: number, z: number, w: number) => void;
10
- subscribe: (callback: (value: Quad) => void) => () => void;
11
- }
12
- export interface NgtcVectorApi {
13
- copy: ({ x, y, z }: THREE.Vector3 | THREE.Euler) => void;
14
- set: (x: number, y: number, z: number) => void;
15
- subscribe: (callback: (value: Triplet) => void) => () => void;
16
- }
17
- export type NgtcWorkerApi = {
18
- [K in AtomicName]: NgtcAtomicApi<K>;
19
- } & {
20
- [K in VectorName]: NgtcVectorApi;
21
- } & {
22
- applyForce: (force: Triplet, worldPoint: Triplet) => void;
23
- applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;
24
- applyLocalForce: (force: Triplet, localPoint: Triplet) => void;
25
- applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;
26
- applyTorque: (torque: Triplet) => void;
27
- quaternion: NgtcQuaternionApi;
28
- rotation: NgtcVectorApi;
29
- scaleOverride: (scale: Triplet) => void;
30
- sleep: () => void;
31
- wakeUp: () => void;
32
- remove: () => void;
33
- };
34
- export interface NgtcBodyPublicApi extends NgtcWorkerApi {
35
- at: (index: number) => NgtcWorkerApi;
36
- }
37
- export interface NgtcBodyPropsMap {
38
- Plane: PlaneProps;
39
- Box: BoxProps;
40
- Particle: ParticleProps;
41
- Cylinder: CylinderProps;
42
- Sphere: SphereProps;
43
- Trimesh: TrimeshProps;
44
- Heightfield: HeightfieldProps;
45
- ConvexPolyhedron: ConvexPolyhedronProps;
46
- Compound: CompoundBodyProps;
47
- }
48
- export type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
49
- export type NgtcArgFn<T extends BodyProps> = (args: NonNullable<T['args']>) => typeof args;
@@ -1,50 +0,0 @@
1
- import { BodyProps, BoxProps, CannonWorkerAPI, CompoundBodyProps, ConvexPolyhedronArgs, CylinderArgs, HeightfieldArgs, ParticleProps, PlaneProps, PropValue, SphereArgs, SubscriptionName, SubscriptionTarget, Subscriptions, TrimeshArgs, Triplet } from '@pmndrs/cannon-worker-api';
2
- import { NgtcCannonEvents, NgtcPhysics } from 'angular-three-cannon';
3
- import * as THREE from 'three';
4
- import { NgtcWorkerApi } from './types';
5
- export declare function createSubscribe<T extends SubscriptionName>(body: THREE.Object3D, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
6
- export declare function prepare(object: THREE.Object3D, { position, rotation, userData }: BodyProps): void;
7
- export declare function setupCollision(events: NgtcCannonEvents, { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>, uuid: string): void;
8
- export declare function makeBodyApi(body: THREE.Object3D, worker: CannonWorkerAPI, { subscriptions, scaleOverrides }: Pick<NgtcPhysics, 'subscriptions' | 'scaleOverrides'>): {
9
- at: (index: number) => NgtcWorkerApi;
10
- allowSleep: import("angular-three-cannon/body").NgtcAtomicApi<"allowSleep">;
11
- angularDamping: import("angular-three-cannon/body").NgtcAtomicApi<"angularDamping">;
12
- collisionFilterGroup: import("angular-three-cannon/body").NgtcAtomicApi<"collisionFilterGroup">;
13
- collisionFilterMask: import("angular-three-cannon/body").NgtcAtomicApi<"collisionFilterMask">;
14
- collisionResponse: import("angular-three-cannon/body").NgtcAtomicApi<"collisionResponse">;
15
- fixedRotation: import("angular-three-cannon/body").NgtcAtomicApi<"fixedRotation">;
16
- isTrigger: import("angular-three-cannon/body").NgtcAtomicApi<"isTrigger">;
17
- linearDamping: import("angular-three-cannon/body").NgtcAtomicApi<"linearDamping">;
18
- mass: import("angular-three-cannon/body").NgtcAtomicApi<"mass">;
19
- material: import("angular-three-cannon/body").NgtcAtomicApi<"material">;
20
- sleepSpeedLimit: import("angular-three-cannon/body").NgtcAtomicApi<"sleepSpeedLimit">;
21
- sleepTimeLimit: import("angular-three-cannon/body").NgtcAtomicApi<"sleepTimeLimit">;
22
- userData: import("angular-three-cannon/body").NgtcAtomicApi<"userData">;
23
- angularFactor: import("angular-three-cannon/body").NgtcVectorApi;
24
- angularVelocity: import("angular-three-cannon/body").NgtcVectorApi;
25
- linearFactor: import("angular-three-cannon/body").NgtcVectorApi;
26
- position: import("angular-three-cannon/body").NgtcVectorApi;
27
- velocity: import("angular-three-cannon/body").NgtcVectorApi;
28
- applyForce: (force: Triplet, worldPoint: Triplet) => void;
29
- applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;
30
- applyLocalForce: (force: Triplet, localPoint: Triplet) => void;
31
- applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;
32
- applyTorque: (torque: Triplet) => void;
33
- quaternion: import("angular-three-cannon/body").NgtcQuaternionApi;
34
- rotation: import("angular-three-cannon/body").NgtcVectorApi;
35
- scaleOverride: (scale: Triplet) => void;
36
- sleep: () => void;
37
- wakeUp: () => void;
38
- remove: () => void;
39
- };
40
- export declare const defaultTransformArgs: {
41
- Plane: (_: PlaneProps["args"]) => never[];
42
- Box: (args?: BoxProps["args"]) => Triplet;
43
- Trimesh: (args: TrimeshArgs) => TrimeshArgs;
44
- Cylinder: (_?: CylinderArgs) => never[];
45
- Heightfield: (args: HeightfieldArgs) => HeightfieldArgs;
46
- ConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]?: ConvexPolyhedronArgs) => (number | number[][] | undefined)[];
47
- Particle: (_: ParticleProps["args"]) => never[];
48
- Sphere: (args?: SphereArgs) => number[];
49
- Compound: (args: CompoundBodyProps["args"]) => unknown[] | undefined;
50
- };