angular-three-rapier 4.0.0-next.115 → 4.0.0-next.116

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.
@@ -89,10 +89,10 @@ const defaultOptions = {
89
89
  };
90
90
  class NgtrAttractor {
91
91
  position = input([0, 0, 0], ...(ngDevMode ? [{ debugName: "position" }] : []));
92
- options = input(defaultOptions, ...(ngDevMode ? [{ debugName: "options", transform: mergeInputs(defaultOptions) }] : [{ transform: mergeInputs(defaultOptions) }]));
92
+ options = input(defaultOptions, { ...(ngDevMode ? { debugName: "options" } : {}), transform: mergeInputs(defaultOptions) });
93
93
  objectRef = inject(ElementRef);
94
94
  collisionGroups = pick(this.options, 'collisionGroups');
95
- linkedCollisionGroups = linkedSignal(this.collisionGroups);
95
+ linkedCollisionGroups = linkedSignal(this.collisionGroups, ...(ngDevMode ? [{ debugName: "linkedCollisionGroups" }] : []));
96
96
  constructor() {
97
97
  effect(() => {
98
98
  applyProps(this.objectRef.nativeElement, { position: this.position() });
@@ -115,8 +115,8 @@ class NgtrAttractor {
115
115
  });
116
116
  attractorDebug(this.objectRef.nativeElement, this.options);
117
117
  }
118
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtrAttractor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
119
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.1.7", type: NgtrAttractor, isStandalone: true, selector: "ngt-object3D[attractor]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
118
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtrAttractor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
119
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: NgtrAttractor, isStandalone: true, selector: "ngt-object3D[attractor]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
120
120
  {
121
121
  provide: COLLISION_GROUPS_HANDLER,
122
122
  useFactory: (attractor) => {
@@ -128,7 +128,7 @@ class NgtrAttractor {
128
128
  },
129
129
  ], ngImport: i0 });
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NgtrAttractor, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NgtrAttractor, decorators: [{
132
132
  type: Directive,
133
133
  args: [{
134
134
  selector: 'ngt-object3D[attractor]',
@@ -144,7 +144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
144
144
  },
145
145
  ],
146
146
  }]
147
- }], ctorParameters: () => [] });
147
+ }], ctorParameters: () => [], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }] } });
148
148
 
149
149
  /**
150
150
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-rapier-addons.mjs","sources":["../tmp-esm2022/addons/lib/attractor-debug.js","../tmp-esm2022/addons/lib/attractor.js","../tmp-esm2022/addons/angular-three-rapier-addons.js"],"sourcesContent":["import { computed, effect, inject } from '@angular/core';\nimport { beforeRender, injectStore, pick } from 'angular-three';\nimport { NgtrPhysics } from 'angular-three-rapier';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { VertexNormalsHelper } from 'three-stdlib';\nconst _v3 = new THREE.Vector3();\nexport function attractorDebug(object, options, injector) {\n return assertInjector(attractorDebug, injector, () => {\n const physics = inject(NgtrPhysics);\n const store = injectStore();\n const strength = pick(options, 'strength');\n const range = pick(options, 'range');\n const color = computed(() => (strength() > 0 ? 0x0000ff : 0xff0000), ...(ngDevMode ? [{ debugName: \"color\" }] : []));\n let mesh;\n let normalsHelper;\n effect((onCleanup) => {\n if (!physics['debug']())\n return;\n mesh = new THREE.Mesh(new THREE.SphereGeometry(0.2, 6, 6), new THREE.MeshBasicMaterial({ color: color(), wireframe: true }));\n normalsHelper = new VertexNormalsHelper(mesh, range(), color());\n normalsHelper.frustumCulled = false;\n store.snapshot.scene.add(mesh);\n store.snapshot.scene.add(normalsHelper);\n onCleanup(() => {\n if (mesh) {\n store.snapshot.scene.remove(mesh);\n }\n if (normalsHelper) {\n store.snapshot.scene.remove(normalsHelper);\n }\n });\n });\n beforeRender(() => {\n if (!physics['debug']())\n return;\n if (mesh) {\n const worldPosition = object.getWorldPosition(_v3);\n mesh.position.copy(worldPosition);\n normalsHelper?.update();\n }\n });\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmFjdG9yLWRlYnVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yYXBpZXIvYWRkb25zL3NyYy9saWIvYXR0cmFjdG9yLWRlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFaEMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFzQixFQUFFLE9BQWtDLEVBQUUsUUFBbUI7SUFDN0csT0FBTyxjQUFjLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRTVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlEQUFDLENBQUM7UUFFckUsSUFBSSxJQUFnQixDQUFDO1FBQ3JCLElBQUksYUFBa0MsQ0FBQztRQUV2QyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUFFLE9BQU87WUFFaEMsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FDcEIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ25DLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNoRSxDQUFDO1lBRUYsYUFBYSxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEUsYUFBYSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV4QyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO2dCQUVELElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ25CLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUVoQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xDLGFBQWEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN6QixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBiZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlLCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RyUGh5c2ljcyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtcmFwaWVyJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgVmVydGV4Tm9ybWFsc0hlbHBlciB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RyQXR0YWN0b3JPcHRpb25zIH0gZnJvbSAnLi9hdHRyYWN0b3InO1xuXG5jb25zdCBfdjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0cmFjdG9yRGVidWcob2JqZWN0OiBUSFJFRS5PYmplY3QzRCwgb3B0aW9uczogKCkgPT4gTmd0ckF0dGFjdG9yT3B0aW9ucywgaW5qZWN0b3I/OiBJbmplY3Rvcikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoYXR0cmFjdG9yRGVidWcsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcGh5c2ljcyA9IGluamVjdChOZ3RyUGh5c2ljcyk7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdFx0Y29uc3Qgc3RyZW5ndGggPSBwaWNrKG9wdGlvbnMsICdzdHJlbmd0aCcpO1xuXHRcdGNvbnN0IHJhbmdlID0gcGljayhvcHRpb25zLCAncmFuZ2UnKTtcblx0XHRjb25zdCBjb2xvciA9IGNvbXB1dGVkKCgpID0+IChzdHJlbmd0aCgpID4gMCA/IDB4MDAwMGZmIDogMHhmZjAwMDApKTtcblxuXHRcdGxldCBtZXNoOiBUSFJFRS5NZXNoO1xuXHRcdGxldCBub3JtYWxzSGVscGVyOiBWZXJ0ZXhOb3JtYWxzSGVscGVyO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGlmICghcGh5c2ljc1snZGVidWcnXSgpKSByZXR1cm47XG5cblx0XHRcdG1lc2ggPSBuZXcgVEhSRUUuTWVzaChcblx0XHRcdFx0bmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KDAuMiwgNiwgNiksXG5cdFx0XHRcdG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7IGNvbG9yOiBjb2xvcigpLCB3aXJlZnJhbWU6IHRydWUgfSksXG5cdFx0XHQpO1xuXG5cdFx0XHRub3JtYWxzSGVscGVyID0gbmV3IFZlcnRleE5vcm1hbHNIZWxwZXIobWVzaCwgcmFuZ2UoKSwgY29sb3IoKSk7XG5cdFx0XHRub3JtYWxzSGVscGVyLmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcblxuXHRcdFx0c3RvcmUuc25hcHNob3Quc2NlbmUuYWRkKG1lc2gpO1xuXHRcdFx0c3RvcmUuc25hcHNob3Quc2NlbmUuYWRkKG5vcm1hbHNIZWxwZXIpO1xuXG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRpZiAobWVzaCkge1xuXHRcdFx0XHRcdHN0b3JlLnNuYXBzaG90LnNjZW5lLnJlbW92ZShtZXNoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChub3JtYWxzSGVscGVyKSB7XG5cdFx0XHRcdFx0c3RvcmUuc25hcHNob3Quc2NlbmUucmVtb3ZlKG5vcm1hbHNIZWxwZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRpZiAoIXBoeXNpY3NbJ2RlYnVnJ10oKSkgcmV0dXJuO1xuXG5cdFx0XHRpZiAobWVzaCkge1xuXHRcdFx0XHRjb25zdCB3b3JsZFBvc2l0aW9uID0gb2JqZWN0LmdldFdvcmxkUG9zaXRpb24oX3YzKTtcblx0XHRcdFx0bWVzaC5wb3NpdGlvbi5jb3B5KHdvcmxkUG9zaXRpb24pO1xuXHRcdFx0XHRub3JtYWxzSGVscGVyPy51cGRhdGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59XG4iXX0=","import { Directive, effect, ElementRef, inject, input, linkedSignal, untracked } from '@angular/core';\nimport { applyProps, pick } from 'angular-three';\nimport { beforePhysicsStep, COLLISION_GROUPS_HANDLER } from 'angular-three-rapier';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { attractorDebug } from './attractor-debug';\nimport * as i0 from \"@angular/core\";\nconst calcForceByType = {\n static: (s, m2, r, d, G) => s,\n linear: (s, m2, r, d, G) => s * (d / r),\n newtonian: (s, m2, r, d, G) => (G * s * m2) / Math.pow(d, 2),\n};\nconst _position = new THREE.Vector3();\nconst _vector3 = new THREE.Vector3();\nexport function applyAttractorForceOnRigidBody(rigidBody, { object, strength, range, gravitationalConstant, collisionGroups, type, }) {\n const rbPosition = rigidBody.translation();\n _position.set(rbPosition.x, rbPosition.y, rbPosition.z);\n const worldPosition = object.getWorldPosition(new THREE.Vector3());\n const distance = worldPosition.distanceTo(_position);\n if (distance < range) {\n let force = calcForceByType[type](strength, rigidBody.mass(), range, distance, gravitationalConstant);\n // Prevent wild forces when Attractors collide\n force = force === Infinity ? strength : force;\n // Naively test if the rigidBody contains a collider in one of the collision groups\n let isRigidBodyInCollisionGroup = collisionGroups === undefined;\n if (collisionGroups !== undefined) {\n for (let i = 0; i < rigidBody.numColliders(); i++) {\n const collider = rigidBody.collider(i);\n const colliderCollisionGroups = collider.collisionGroups();\n if (((collisionGroups >> 16) & colliderCollisionGroups) != 0 &&\n ((colliderCollisionGroups >> 16) & collisionGroups) != 0) {\n isRigidBodyInCollisionGroup = true;\n break;\n }\n }\n }\n if (isRigidBodyInCollisionGroup) {\n _vector3.set(0, 0, 0).subVectors(worldPosition, _position).normalize().multiplyScalar(force);\n rigidBody.applyImpulse(_vector3, true);\n }\n }\n}\nconst defaultOptions = {\n strength: 1,\n range: 10,\n type: 'static',\n gravitationalConstant: 6.673e-11,\n};\nexport class NgtrAttractor {\n position = input([0, 0, 0], ...(ngDevMode ? [{ debugName: \"position\" }] : []));\n options = input(defaultOptions, ...(ngDevMode ? [{ debugName: \"options\", transform: mergeInputs(defaultOptions) }] : [{ transform: mergeInputs(defaultOptions) }]));\n objectRef = inject(ElementRef);\n collisionGroups = pick(this.options, 'collisionGroups');\n linkedCollisionGroups = linkedSignal(this.collisionGroups);\n constructor() {\n effect(() => {\n applyProps(this.objectRef.nativeElement, { position: this.position() });\n });\n beforePhysicsStep((world) => {\n const { strength, range, type, gravitationalConstant } = untracked(this.options);\n const collisionGroups = untracked(this.linkedCollisionGroups);\n world.bodies.forEach((body) => {\n if (body.isDynamic()) {\n applyAttractorForceOnRigidBody(body, {\n object: this.objectRef.nativeElement,\n strength,\n range,\n type,\n gravitationalConstant,\n collisionGroups,\n });\n }\n });\n });\n attractorDebug(this.objectRef.nativeElement, this.options);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtrAttractor, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: NgtrAttractor, isStandalone: true, selector: \"ngt-object3D[attractor]\", inputs: { position: { classPropertyName: \"position\", publicName: \"position\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null } }, providers: [\n {\n provide: COLLISION_GROUPS_HANDLER,\n useFactory: (attractor) => {\n return () => (interactionGroups) => {\n attractor.linkedCollisionGroups.set(interactionGroups);\n };\n },\n deps: [NgtrAttractor],\n },\n ], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: NgtrAttractor, decorators: [{\n type: Directive,\n args: [{\n selector: 'ngt-object3D[attractor]',\n providers: [\n {\n provide: COLLISION_GROUPS_HANDLER,\n useFactory: (attractor) => {\n return () => (interactionGroups) => {\n attractor.linkedCollisionGroups.set(interactionGroups);\n };\n },\n deps: [NgtrAttractor],\n },\n ],\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9yYXBpZXIvYWRkb25zL3NyYy9saWIvYXR0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEcsT0FBTyxFQUFFLFVBQVUsRUFBYyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbkQsTUFBTSxlQUFlLEdBQUc7SUFDdkIsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQVUsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBVSxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9FLFNBQVMsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFVLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDcEcsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksS0FB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RSx3QkFBd0I7Z0JBQ2pDLFVBQVUsRUFBRSxDQUFDLFNBQXdCLEVBQUUsRUFBRTtvQkFDeEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlCQUFvQyxFQUFFLEVBQUU7d0JBQ3JELFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDeEQsQ0FBQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxFQUFFLENBQUMsYUFBYSxDQUFDO2FBQ3JCO1NBQ0Q7OzJGQUVXLGFBQWE7a0JBZHpCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSx3QkFBd0I7NEJBQ2pDLFVBQVUsRUFBRSxDQUFDLFNBQXdCLEVBQUUsRUFBRTtnQ0FDeEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGlCQUFvQyxFQUFFLEVBQUU7b0NBQ3JELFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQ0FDeEQsQ0FBQyxDQUFDOzRCQUNILENBQUM7NEJBQ0QsSUFBSSxFQUFFLGVBQWU7eUJBQ3JCO3FCQUNEO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIGxpbmtlZFNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbkdyb3VwcywgUmlnaWRCb2R5IH0gZnJvbSAnQGRpbWZvcmdlL3JhcGllcjNkLWNvbXBhdCc7XG5pbXBvcnQgeyBhcHBseVByb3BzLCBOZ3RWZWN0b3IzLCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBiZWZvcmVQaHlzaWNzU3RlcCwgQ09MTElTSU9OX0dST1VQU19IQU5ETEVSIH0gZnJvbSAnYW5ndWxhci10aHJlZS1yYXBpZXInO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgYXR0cmFjdG9yRGVidWcgfSBmcm9tICcuL2F0dHJhY3Rvci1kZWJ1Zyc7XG5cbmNvbnN0IGNhbGNGb3JjZUJ5VHlwZSA9IHtcblx0c3RhdGljOiAoczogbnVtYmVyLCBtMjogbnVtYmVyLCByOiBudW1iZXIsIGQ6IG51bWJlciwgRzogbnVtYmVyKSA9PiBzLFxuXHRsaW5lYXI6IChzOiBudW1iZXIsIG0yOiBudW1iZXIsIHI6IG51bWJlciwgZDogbnVtYmVyLCBHOiBudW1iZXIpID0+IHMgKiAoZCAvIHIpLFxuXHRuZXd0b25pYW46IChzOiBudW1iZXIsIG0yOiBudW1iZXIsIHI6IG51bWJlciwgZDogbnVtYmVyLCBHOiBudW1iZXIpID0+IChHICogcyAqIG0yKSAvIE1hdGgucG93KGQsIDIpLFxufTtcblxuY29uc3QgX3Bvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IF92ZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QXR0cmFjdG9yRm9yY2VPblJpZ2lkQm9keShcblx0cmlnaWRCb2R5OiBSaWdpZEJvZHksXG5cdHtcblx0XHRvYmplY3QsXG5cdFx0c3RyZW5ndGgsXG5cdFx0cmFuZ2UsXG5cdFx0Z3Jhdml0YXRpb25hbENvbnN0YW50LFxuXHRcdGNvbGxpc2lvbkdyb3Vwcyxcblx0XHR0eXBlLFxuXHR9OiBOZ3RyQXR0YWN0b3JPcHRpb25zICYgeyBvYmplY3Q6IFRIUkVFLk9iamVjdDNEIH0sXG4pIHtcblx0Y29uc3QgcmJQb3NpdGlvbiA9IHJpZ2lkQm9keS50cmFuc2xhdGlvbigpO1xuXHRfcG9zaXRpb24uc2V0KHJiUG9zaXRpb24ueCwgcmJQb3NpdGlvbi55LCByYlBvc2l0aW9uLnopO1xuXG5cdGNvbnN0IHdvcmxkUG9zaXRpb24gPSBvYmplY3QuZ2V0V29ybGRQb3NpdGlvbihuZXcgVEhSRUUuVmVjdG9yMygpKTtcblxuXHRjb25zdCBkaXN0YW5jZTogbnVtYmVyID0gd29ybGRQb3NpdGlvbi5kaXN0YW5jZVRvKF9wb3NpdGlvbik7XG5cblx0aWYgKGRpc3RhbmNlIDwgcmFuZ2UpIHtcblx0XHRsZXQgZm9yY2UgPSBjYWxjRm9yY2VCeVR5cGVbdHlwZV0oc3RyZW5ndGgsIHJpZ2lkQm9keS5tYXNzKCksIHJhbmdlLCBkaXN0YW5jZSwgZ3Jhdml0YXRpb25hbENvbnN0YW50KTtcblxuXHRcdC8vIFByZXZlbnQgd2lsZCBmb3JjZXMgd2hlbiBBdHRyYWN0b3JzIGNvbGxpZGVcblx0XHRmb3JjZSA9IGZvcmNlID09PSBJbmZpbml0eSA/IHN0cmVuZ3RoIDogZm9yY2U7XG5cblx0XHQvLyBOYWl2ZWx5IHRlc3QgaWYgdGhlIHJpZ2lkQm9keSBjb250YWlucyBhIGNvbGxpZGVyIGluIG9uZSBvZiB0aGUgY29sbGlzaW9uIGdyb3Vwc1xuXHRcdGxldCBpc1JpZ2lkQm9keUluQ29sbGlzaW9uR3JvdXAgPSBjb2xsaXNpb25Hcm91cHMgPT09IHVuZGVmaW5lZDtcblx0XHRpZiAoY29sbGlzaW9uR3JvdXBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmlnaWRCb2R5Lm51bUNvbGxpZGVycygpOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgY29sbGlkZXIgPSByaWdpZEJvZHkuY29sbGlkZXIoaSk7XG5cdFx0XHRcdGNvbnN0IGNvbGxpZGVyQ29sbGlzaW9uR3JvdXBzID0gY29sbGlkZXIuY29sbGlzaW9uR3JvdXBzKCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoKGNvbGxpc2lvbkdyb3VwcyA+PiAxNikgJiBjb2xsaWRlckNvbGxpc2lvbkdyb3VwcykgIT0gMCAmJlxuXHRcdFx0XHRcdCgoY29sbGlkZXJDb2xsaXNpb25Hcm91cHMgPj4gMTYpICYgY29sbGlzaW9uR3JvdXBzKSAhPSAwXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlzUmlnaWRCb2R5SW5Db2xsaXNpb25Hcm91cCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNSaWdpZEJvZHlJbkNvbGxpc2lvbkdyb3VwKSB7XG5cdFx0XHRfdmVjdG9yMy5zZXQoMCwgMCwgMCkuc3ViVmVjdG9ycyh3b3JsZFBvc2l0aW9uLCBfcG9zaXRpb24pLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGZvcmNlKTtcblxuXHRcdFx0cmlnaWRCb2R5LmFwcGx5SW1wdWxzZShfdmVjdG9yMywgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIE5ndHJBdHRyYWN0b3JHcmF2aXR5VHlwZSA9ICdzdGF0aWMnIHwgJ2xpbmVhcicgfCAnbmV3dG9uaWFuJztcbmV4cG9ydCBpbnRlcmZhY2UgTmd0ckF0dGFjdG9yT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBUaGUgc3RyZW5ndGggb2YgdGhlIGF0dHJhY3Rvci5cblx0ICogUG9zaXRpdmUgdmFsdWVzIGF0dHJhY3QsIG5lZ2F0aXZlIHZhbHVlcyByZXBlbC5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSAxXG5cdCAqL1xuXHRzdHJlbmd0aDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgcmFuZ2Ugb2YgdGhlIGF0dHJhY3Rvci4gV2lsbCBub3QgYWZmZWN0IG9iamVjdHMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIDEwXG5cdCAqIEBtaW4gMFxuXHQgKi9cblx0cmFuZ2U6IG51bWJlcjtcblxuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgZ3Jhdml0eSB0byB1c2UuXG5cdCAqIC0gc3RhdGljOiBUaGUgZ3Jhdml0eSBpcyBjb25zdGFudCBhbmQgZG9lcyBub3QgY2hhbmdlIG92ZXIgdGltZS5cblx0ICogLSBsaW5lYXI6IFRoZSBncmF2aXR5IGlzIGxpbmVhcmx5IGludGVycG9sYXRlZCB0aGUgY2xvc2VyIHRoZSBvYmplY3QgaXMgdG8gdGhlIGF0dHJhY3Rvci5cblx0ICogLSBuZXd0b25pYW46IFRoZSBncmF2aXR5IGlzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIG5ld3RvbmlhbiBncmF2aXR5IGZvcm11bGEuXG5cdCAqIEBkZWZhdWx0VmFsdWUgXCJzdGF0aWNcIlxuXHQgKi9cblx0dHlwZTogTmd0ckF0dHJhY3RvckdyYXZpdHlUeXBlO1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFzcyBvZiB0aGUgYXR0cmFjdG9yLiBVc2VkIHdoZW4gdHlwZSBpcyBgbmV3dG9uaWFuYC5cblx0ICogQGRlZmF1bHRWYWx1ZSA2LjY3M2UtMTFcblx0ICovXG5cdGdyYXZpdGF0aW9uYWxDb25zdGFudDogbnVtYmVyO1xuXG5cdC8qKlxuXHQgKiBUaGUgY29sbGlzaW9uIGdyb3VwcyB0aGF0IHRoaXMgYXR0cmFjdG9yIHdpbGwgYXBwbHkgZWZmZWN0cyB0by4gSWYgYSBSaWdpZEJvZHkgY29udGFpbnMgb25lIG9yIG1vcmUgY29sbGlkZXJzIHRoYXQgYXJlIGluIG9uZSBvZiB0aGUgbWFzayBncm91cCwgaXQgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGlzIGF0dHJhY3Rvci5cblx0ICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGF0dHJhY3RvciB3aWxsIGFwcGx5IGVmZmVjdHMgdG8gYWxsIFJpZ2lkQm9kaWVzLlxuXHQgKi9cblx0Y29sbGlzaW9uR3JvdXBzPzogSW50ZXJhY3Rpb25Hcm91cHM7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RyQXR0YWN0b3JPcHRpb25zID0ge1xuXHRzdHJlbmd0aDogMSxcblx0cmFuZ2U6IDEwLFxuXHR0eXBlOiAnc3RhdGljJyxcblx0Z3Jhdml0YXRpb25hbENvbnN0YW50OiA2LjY3M2UtMTEsXG59O1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICduZ3Qtb2JqZWN0M0RbYXR0cmFjdG9yXScsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IENPTExJU0lPTl9HUk9VUFNfSEFORExFUixcblx0XHRcdHVzZUZhY3Rvcnk6IChhdHRyYWN0b3I6IE5ndHJBdHRyYWN0b3IpID0+IHtcblx0XHRcdFx0cmV0dXJuICgpID0+IChpbnRlcmFjdGlvbkdyb3VwczogSW50ZXJhY3Rpb25Hcm91cHMpID0+IHtcblx0XHRcdFx0XHRhdHRyYWN0b3IubGlua2VkQ29sbGlzaW9uR3JvdXBzLnNldChpbnRlcmFjdGlvbkdyb3Vwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9LFxuXHRcdFx0ZGVwczogW05ndHJBdHRyYWN0b3JdLFxuXHRcdH0sXG5cdF0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHJBdHRyYWN0b3Ige1xuXHRwb3NpdGlvbiA9IGlucHV0PE5ndFZlY3RvcjM+KFswLCAwLCAwXSk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIG9iamVjdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPFRIUkVFLk9iamVjdDNEPj4oRWxlbWVudFJlZik7XG5cdHByaXZhdGUgY29sbGlzaW9uR3JvdXBzID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xsaXNpb25Hcm91cHMnKTtcblx0bGlua2VkQ29sbGlzaW9uR3JvdXBzID0gbGlua2VkU2lnbmFsKHRoaXMuY29sbGlzaW9uR3JvdXBzKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0YXBwbHlQcm9wcyh0aGlzLm9iamVjdFJlZi5uYXRpdmVFbGVtZW50LCB7IHBvc2l0aW9uOiB0aGlzLnBvc2l0aW9uKCkgfSk7XG5cdFx0fSk7XG5cblx0XHRiZWZvcmVQaHlzaWNzU3RlcCgod29ybGQpID0+IHtcblx0XHRcdGNvbnN0IHsgc3RyZW5ndGgsIHJhbmdlLCB0eXBlLCBncmF2aXRhdGlvbmFsQ29uc3RhbnQgfSA9IHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpO1xuXHRcdFx0Y29uc3QgY29sbGlzaW9uR3JvdXBzID0gdW50cmFja2VkKHRoaXMubGlua2VkQ29sbGlzaW9uR3JvdXBzKTtcblx0XHRcdHdvcmxkLmJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7XG5cdFx0XHRcdGlmIChib2R5LmlzRHluYW1pYygpKSB7XG5cdFx0XHRcdFx0YXBwbHlBdHRyYWN0b3JGb3JjZU9uUmlnaWRCb2R5KGJvZHksIHtcblx0XHRcdFx0XHRcdG9iamVjdDogdGhpcy5vYmplY3RSZWYubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0XHRcdHN0cmVuZ3RoLFxuXHRcdFx0XHRcdFx0cmFuZ2UsXG5cdFx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdFx0Z3Jhdml0YXRpb25hbENvbnN0YW50LFxuXHRcdFx0XHRcdFx0Y29sbGlzaW9uR3JvdXBzLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGF0dHJhY3RvckRlYnVnKHRoaXMub2JqZWN0UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMub3B0aW9ucyk7XG5cdH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1yYXBpZXItYWRkb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9yYXBpZXIvYWRkb25zL3NyYy9hbmd1bGFyLXRocmVlLXJhcGllci1hZGRvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-rapier-addons.mjs","sources":["../../../../libs/rapier/addons/src/lib/attractor-debug.ts","../../../../libs/rapier/addons/src/lib/attractor.ts","../../../../libs/rapier/addons/src/angular-three-rapier-addons.ts"],"sourcesContent":["import { computed, effect, inject, Injector } from '@angular/core';\nimport { beforeRender, injectStore, pick } from 'angular-three';\nimport { NgtrPhysics } from 'angular-three-rapier';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { VertexNormalsHelper } from 'three-stdlib';\nimport { NgtrAttactorOptions } from './attractor';\n\nconst _v3 = new THREE.Vector3();\n\nexport function attractorDebug(object: THREE.Object3D, options: () => NgtrAttactorOptions, injector?: Injector) {\n\treturn assertInjector(attractorDebug, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\t\tconst store = injectStore();\n\n\t\tconst strength = pick(options, 'strength');\n\t\tconst range = pick(options, 'range');\n\t\tconst color = computed(() => (strength() > 0 ? 0x0000ff : 0xff0000));\n\n\t\tlet mesh: THREE.Mesh;\n\t\tlet normalsHelper: VertexNormalsHelper;\n\n\t\teffect((onCleanup) => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tmesh = new THREE.Mesh(\n\t\t\t\tnew THREE.SphereGeometry(0.2, 6, 6),\n\t\t\t\tnew THREE.MeshBasicMaterial({ color: color(), wireframe: true }),\n\t\t\t);\n\n\t\t\tnormalsHelper = new VertexNormalsHelper(mesh, range(), color());\n\t\t\tnormalsHelper.frustumCulled = false;\n\n\t\t\tstore.snapshot.scene.add(mesh);\n\t\t\tstore.snapshot.scene.add(normalsHelper);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (mesh) {\n\t\t\t\t\tstore.snapshot.scene.remove(mesh);\n\t\t\t\t}\n\n\t\t\t\tif (normalsHelper) {\n\t\t\t\t\tstore.snapshot.scene.remove(normalsHelper);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tbeforeRender(() => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tif (mesh) {\n\t\t\t\tconst worldPosition = object.getWorldPosition(_v3);\n\t\t\t\tmesh.position.copy(worldPosition);\n\t\t\t\tnormalsHelper?.update();\n\t\t\t}\n\t\t});\n\t});\n}\n","import { Directive, effect, ElementRef, inject, input, linkedSignal, untracked } from '@angular/core';\nimport { InteractionGroups, RigidBody } from '@dimforge/rapier3d-compat';\nimport { applyProps, NgtVector3, pick } from 'angular-three';\nimport { beforePhysicsStep, COLLISION_GROUPS_HANDLER } from 'angular-three-rapier';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { attractorDebug } from './attractor-debug';\n\nconst calcForceByType = {\n\tstatic: (s: number, m2: number, r: number, d: number, G: number) => s,\n\tlinear: (s: number, m2: number, r: number, d: number, G: number) => s * (d / r),\n\tnewtonian: (s: number, m2: number, r: number, d: number, G: number) => (G * s * m2) / Math.pow(d, 2),\n};\n\nconst _position = new THREE.Vector3();\nconst _vector3 = new THREE.Vector3();\n\nexport function applyAttractorForceOnRigidBody(\n\trigidBody: RigidBody,\n\t{\n\t\tobject,\n\t\tstrength,\n\t\trange,\n\t\tgravitationalConstant,\n\t\tcollisionGroups,\n\t\ttype,\n\t}: NgtrAttactorOptions & { object: THREE.Object3D },\n) {\n\tconst rbPosition = rigidBody.translation();\n\t_position.set(rbPosition.x, rbPosition.y, rbPosition.z);\n\n\tconst worldPosition = object.getWorldPosition(new THREE.Vector3());\n\n\tconst distance: number = worldPosition.distanceTo(_position);\n\n\tif (distance < range) {\n\t\tlet force = calcForceByType[type](strength, rigidBody.mass(), range, distance, gravitationalConstant);\n\n\t\t// Prevent wild forces when Attractors collide\n\t\tforce = force === Infinity ? strength : force;\n\n\t\t// Naively test if the rigidBody contains a collider in one of the collision groups\n\t\tlet isRigidBodyInCollisionGroup = collisionGroups === undefined;\n\t\tif (collisionGroups !== undefined) {\n\t\t\tfor (let i = 0; i < rigidBody.numColliders(); i++) {\n\t\t\t\tconst collider = rigidBody.collider(i);\n\t\t\t\tconst colliderCollisionGroups = collider.collisionGroups();\n\t\t\t\tif (\n\t\t\t\t\t((collisionGroups >> 16) & colliderCollisionGroups) != 0 &&\n\t\t\t\t\t((colliderCollisionGroups >> 16) & collisionGroups) != 0\n\t\t\t\t) {\n\t\t\t\t\tisRigidBodyInCollisionGroup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isRigidBodyInCollisionGroup) {\n\t\t\t_vector3.set(0, 0, 0).subVectors(worldPosition, _position).normalize().multiplyScalar(force);\n\n\t\t\trigidBody.applyImpulse(_vector3, true);\n\t\t}\n\t}\n}\n\nexport type NgtrAttractorGravityType = 'static' | 'linear' | 'newtonian';\nexport interface NgtrAttactorOptions {\n\t/**\n\t * The strength of the attractor.\n\t * Positive values attract, negative values repel.\n\t *\n\t * @defaultValue 1\n\t */\n\tstrength: number;\n\n\t/**\n\t * The range of the attractor. Will not affect objects outside of this range.\n\t *\n\t * @defaultValue 10\n\t * @min 0\n\t */\n\trange: number;\n\n\t/**\n\t * The type of gravity to use.\n\t * - static: The gravity is constant and does not change over time.\n\t * - linear: The gravity is linearly interpolated the closer the object is to the attractor.\n\t * - newtonian: The gravity is calculated using the newtonian gravity formula.\n\t * @defaultValue \"static\"\n\t */\n\ttype: NgtrAttractorGravityType;\n\n\t/**\n\t * The mass of the attractor. Used when type is `newtonian`.\n\t * @defaultValue 6.673e-11\n\t */\n\tgravitationalConstant: number;\n\n\t/**\n\t * The collision groups that this attractor will apply effects to. If a RigidBody contains one or more colliders that are in one of the mask group, it will be affected by this attractor.\n\t * If not specified, the attractor will apply effects to all RigidBodies.\n\t */\n\tcollisionGroups?: InteractionGroups;\n}\n\nconst defaultOptions: NgtrAttactorOptions = {\n\tstrength: 1,\n\trange: 10,\n\ttype: 'static',\n\tgravitationalConstant: 6.673e-11,\n};\n\n@Directive({\n\tselector: 'ngt-object3D[attractor]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (attractor: NgtrAttractor) => {\n\t\t\t\treturn () => (interactionGroups: InteractionGroups) => {\n\t\t\t\t\tattractor.linkedCollisionGroups.set(interactionGroups);\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrAttractor],\n\t\t},\n\t],\n})\nexport class NgtrAttractor {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tlinkedCollisionGroups = linkedSignal(this.collisionGroups);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tapplyProps(this.objectRef.nativeElement, { position: this.position() });\n\t\t});\n\n\t\tbeforePhysicsStep((world) => {\n\t\t\tconst { strength, range, type, gravitationalConstant } = untracked(this.options);\n\t\t\tconst collisionGroups = untracked(this.linkedCollisionGroups);\n\t\t\tworld.bodies.forEach((body) => {\n\t\t\t\tif (body.isDynamic()) {\n\t\t\t\t\tapplyAttractorForceOnRigidBody(body, {\n\t\t\t\t\t\tobject: this.objectRef.nativeElement,\n\t\t\t\t\t\tstrength,\n\t\t\t\t\t\trange,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tgravitationalConstant,\n\t\t\t\t\t\tcollisionGroups,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tattractorDebug(this.objectRef.nativeElement, this.options);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}