angular-three-cannon 1.5.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/debug/lib/debug.d.ts +1 -1
  2. package/esm2022/debug/lib/debug.mjs +118 -0
  3. package/esm2022/lib/physics.mjs +262 -0
  4. package/esm2022/lib/store.mjs +22 -0
  5. package/esm2022/lib/utils.mjs +48 -0
  6. package/{fesm2020 → fesm2022}/angular-three-cannon-debug.mjs +23 -23
  7. package/{fesm2015 → fesm2022}/angular-three-cannon-debug.mjs.map +1 -1
  8. package/{fesm2020 → fesm2022}/angular-three-cannon.mjs +9 -9
  9. package/{fesm2020 → fesm2022}/angular-three-cannon.mjs.map +1 -1
  10. package/lib/physics.d.ts +1 -1
  11. package/package.json +18 -27
  12. package/plugin/package.json +2 -2
  13. package/plugin/src/generators/init/compat.js +1 -1
  14. package/plugin/src/generators/init/compat.js.map +1 -1
  15. package/plugin/src/generators/init/init.d.ts +1 -1
  16. package/plugin/src/generators/init/init.js +1 -1
  17. package/plugin/src/generators/init/init.js.map +1 -1
  18. package/esm2020/debug/lib/debug.mjs +0 -117
  19. package/esm2020/lib/physics.mjs +0 -261
  20. package/esm2020/lib/store.mjs +0 -21
  21. package/esm2020/lib/utils.mjs +0 -47
  22. package/fesm2015/angular-three-cannon-debug.mjs +0 -124
  23. package/fesm2015/angular-three-cannon-services.mjs +0 -488
  24. package/fesm2015/angular-three-cannon-services.mjs.map +0 -1
  25. package/fesm2015/angular-three-cannon.mjs +0 -333
  26. package/fesm2015/angular-three-cannon.mjs.map +0 -1
  27. package/fesm2020/angular-three-cannon-debug.mjs.map +0 -1
  28. /package/{esm2020 → esm2022}/angular-three-cannon.mjs +0 -0
  29. /package/{esm2020 → esm2022}/debug/angular-three-cannon-debug.mjs +0 -0
  30. /package/{esm2020 → esm2022}/debug/index.mjs +0 -0
  31. /package/{esm2020 → esm2022}/index.mjs +0 -0
  32. /package/{esm2020 → esm2022}/services/angular-three-cannon-services.mjs +0 -0
  33. /package/{esm2020 → esm2022}/services/index.mjs +0 -0
  34. /package/{esm2020 → esm2022}/services/lib/body.mjs +0 -0
  35. /package/{esm2020 → esm2022}/services/lib/constraint.mjs +0 -0
  36. /package/{esm2020 → esm2022}/services/lib/contact-material.mjs +0 -0
  37. /package/{esm2020 → esm2022}/services/lib/ray.mjs +0 -0
  38. /package/{esm2020 → esm2022}/services/lib/raycast-vehicle.mjs +0 -0
  39. /package/{esm2020 → esm2022}/services/lib/spring.mjs +0 -0
  40. /package/{esm2020 → esm2022}/services/lib/utils.mjs +0 -0
  41. /package/{fesm2020 → fesm2022}/angular-three-cannon-services.mjs +0 -0
  42. /package/{fesm2020 → fesm2022}/angular-three-cannon-services.mjs.map +0 -0
@@ -22,5 +22,5 @@ export declare class NgtcDebug implements OnInit {
22
22
  constructor();
23
23
  ngOnInit(): void;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": "color"; "scale": "scale"; "impl": "impl"; "disabled": "disabled"; }, {}, never, ["*"], true, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": { "alias": "color"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; "impl": { "alias": "impl"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
26
26
  }
@@ -0,0 +1,118 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, InjectionToken, Input } from '@angular/core';
2
+ import { propsToBody } from '@pmndrs/cannon-worker-api';
3
+ import { injectBeforeRender, NgtArgs } from 'angular-three';
4
+ import { NgtcStore } from 'angular-three-cannon';
5
+ import CannonDebugger from 'cannon-es-debugger';
6
+ import * as THREE from 'three';
7
+ import * as i0 from "@angular/core";
8
+ const q = new THREE.Quaternion();
9
+ const s = new THREE.Vector3(1, 1, 1);
10
+ const v = new THREE.Vector3();
11
+ const m = new THREE.Matrix4();
12
+ function getMatrix(o) {
13
+ if (o instanceof THREE.InstancedMesh) {
14
+ o.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);
15
+ return m;
16
+ }
17
+ return o.matrix;
18
+ }
19
+ export const NGTC_DEBUG_API = new InjectionToken('NgtcDebug API');
20
+ class NgtcDebug {
21
+ constructor() {
22
+ this.color = 'black';
23
+ this.scale = 1;
24
+ this.impl = CannonDebugger;
25
+ this.disabled = false;
26
+ this.bodies = [];
27
+ this.bodyMap = {};
28
+ this.scene = new THREE.Scene();
29
+ this.physicsStore = inject(NgtcStore, { skipSelf: true });
30
+ injectBeforeRender(() => {
31
+ if (!this.cannonDebugger)
32
+ return;
33
+ const refs = this.physicsStore.get('refs');
34
+ for (const uuid in this.bodyMap) {
35
+ getMatrix(refs[uuid]).decompose(v, q, s);
36
+ this.bodyMap[uuid].position.copy(v);
37
+ this.bodyMap[uuid].quaternion.copy(q);
38
+ }
39
+ for (const child of this.scene.children) {
40
+ child.visible = !this.disabled;
41
+ }
42
+ if (!this.disabled) {
43
+ this.cannonDebugger.update();
44
+ }
45
+ });
46
+ }
47
+ ngOnInit() {
48
+ this.cannonDebugger = this.impl(this.scene, { bodies: this.bodies }, {
49
+ color: this.color,
50
+ scale: this.scale,
51
+ });
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
55
+ {
56
+ provide: NGTC_DEBUG_API,
57
+ useFactory: (debug) => ({
58
+ add: (uuid, props, type) => {
59
+ const body = propsToBody({ uuid, props, type });
60
+ debug.bodies.push(body);
61
+ debug.bodyMap[uuid] = body;
62
+ },
63
+ remove: (id) => {
64
+ const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
65
+ if (debugBodyIndex > -1)
66
+ debug.bodies.splice(debugBodyIndex, 1);
67
+ delete debug.bodyMap[id];
68
+ },
69
+ }),
70
+ deps: [NgtcDebug],
71
+ },
72
+ ], ngImport: i0, template: `
73
+ <ngt-primitive *args="[scene]" />
74
+ <ng-content />
75
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
76
+ }
77
+ export { NgtcDebug };
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, decorators: [{
79
+ type: Component,
80
+ args: [{
81
+ selector: 'ngtc-debug',
82
+ standalone: true,
83
+ template: `
84
+ <ngt-primitive *args="[scene]" />
85
+ <ng-content />
86
+ `,
87
+ providers: [
88
+ {
89
+ provide: NGTC_DEBUG_API,
90
+ useFactory: (debug) => ({
91
+ add: (uuid, props, type) => {
92
+ const body = propsToBody({ uuid, props, type });
93
+ debug.bodies.push(body);
94
+ debug.bodyMap[uuid] = body;
95
+ },
96
+ remove: (id) => {
97
+ const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
98
+ if (debugBodyIndex > -1)
99
+ debug.bodies.splice(debugBodyIndex, 1);
100
+ delete debug.bodyMap[id];
101
+ },
102
+ }),
103
+ deps: [NgtcDebug],
104
+ },
105
+ ],
106
+ imports: [NgtArgs],
107
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
108
+ }]
109
+ }], ctorParameters: function () { return []; }, propDecorators: { color: [{
110
+ type: Input
111
+ }], scale: [{
112
+ type: Input
113
+ }], impl: [{
114
+ type: Input
115
+ }], disabled: [{
116
+ type: Input
117
+ }] } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnL3NyYy9saWIvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTRCLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5QixTQUFTLFNBQVMsQ0FBQyxDQUFpQjtJQUNoQyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsYUFBYSxFQUFFO1FBQ2xDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUNELE9BQU8sQ0FB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LENBQUM7NEJBQ0YsSUFBSSxFQUFFLFdBQVc7eUJBQ3BCO3FCQUNKO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlQcm9wcywgQm9keVNoYXBlVHlwZSwgcHJvcHNUb0JvZHkgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0Y1N0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgQm9keSwgUXVhdGVybmlvbiBhcyBDUXVhcnRlcm5pb24sIFZlYzMsIFdvcmxkIH0gZnJvbSAnY2Fubm9uLWVzJztcbmltcG9ydCBDYW5ub25EZWJ1Z2dlciBmcm9tICdjYW5ub24tZXMtZGVidWdnZXInO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGdldE1hdHJpeChvOiBUSFJFRS5PYmplY3QzRCk6IFRIUkVFLk1hdHJpeDQge1xuICAgIGlmIChvIGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaCkge1xuICAgICAgICBvLmdldE1hdHJpeEF0KHBhcnNlSW50KG8udXVpZC5zcGxpdCgnLycpWzFdKSwgbSk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cbiAgICByZXR1cm4gby5tYXRyaXg7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNEZWJ1Z0FwaSA9IHtcbiAgICBhZGQoaWQ6IHN0cmluZywgcHJvcHM6IEJvZHlQcm9wcywgdHlwZTogQm9keVNoYXBlVHlwZSk6IHZvaWQ7XG4gICAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IE5HVENfREVCVUdfQVBJID0gbmV3IEluamVjdGlvblRva2VuPE5ndGNEZWJ1Z0FwaT4oJ05ndGNEZWJ1ZyBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RjLWRlYnVnJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW3NjZW5lXVwiIC8+XG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdUQ19ERUJVR19BUEksXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoZGVidWc6IE5ndGNEZWJ1ZykgPT4gKHtcbiAgICAgICAgICAgICAgICBhZGQ6ICh1dWlkOiBzdHJpbmcsIHByb3BzOiBCb2R5UHJvcHMsIHR5cGU6IEJvZHlTaGFwZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHByb3BzVG9Cb2R5KHsgdXVpZCwgcHJvcHMsIHR5cGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnLmJvZGllcy5wdXNoKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5ib2R5TWFwW3V1aWRdID0gYm9keTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZTogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdCb2R5SW5kZXggPSBkZWJ1Zy5ib2RpZXMuaW5kZXhPZihkZWJ1Zy5ib2R5TWFwW2lkXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z0JvZHlJbmRleCA+IC0xKSBkZWJ1Zy5ib2RpZXMuc3BsaWNlKGRlYnVnQm9keUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlYnVnLmJvZHlNYXBbaWRdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlcHM6IFtOZ3RjRGVidWddLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Y0RlYnVnIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBjb2xvciA9ICdibGFjayc7XG4gICAgQElucHV0KCkgc2NhbGUgPSAxO1xuICAgIEBJbnB1dCgpIGltcGwgPSBDYW5ub25EZWJ1Z2dlcjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgYm9kaWVzOiBCb2R5W10gPSBbXTtcbiAgICByZWFkb25seSBib2R5TWFwOiBSZWNvcmQ8c3RyaW5nLCBCb2R5PiA9IHt9O1xuICAgIHJlYWRvbmx5IHNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBoeXNpY3NTdG9yZSA9IGluamVjdChOZ3RjU3RvcmUsIHsgc2tpcFNlbGY6IHRydWUgfSk7XG5cbiAgICBwcml2YXRlIGNhbm5vbkRlYnVnZ2VyITogUmV0dXJuVHlwZTx0eXBlb2YgQ2Fubm9uRGVidWdnZXI+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2Fubm9uRGVidWdnZXIpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJlZnMgPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoJ3JlZnMnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiB0aGlzLmJvZHlNYXApIHtcbiAgICAgICAgICAgICAgICBnZXRNYXRyaXgocmVmc1t1dWlkXSkuZGVjb21wb3NlKHYsIHEsIHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keU1hcFt1dWlkXS5wb3NpdGlvbi5jb3B5KHYgYXMgdW5rbm93biBhcyBWZWMzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHlNYXBbdXVpZF0ucXVhdGVybmlvbi5jb3B5KHEgYXMgdW5rbm93biBhcyBDUXVhcnRlcm5pb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuc2NlbmUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjaGlsZC52aXNpYmxlID0gIXRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2Fubm9uRGVidWdnZXIudXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNhbm5vbkRlYnVnZ2VyID0gdGhpcy5pbXBsKHRoaXMuc2NlbmUsIHsgYm9kaWVzOiB0aGlzLmJvZGllcyB9IGFzIFdvcmxkLCB7XG4gICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgICAgIHNjYWxlOiB0aGlzLnNjYWxlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,262 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';
3
+ import { injectBeforeRender, NgtRxStore, NgtStore } from 'angular-three';
4
+ import { filter } from 'rxjs';
5
+ import * as THREE from 'three';
6
+ import { NgtcStore } from './store';
7
+ import * as i0 from "@angular/core";
8
+ const v = new THREE.Vector3();
9
+ const s = new THREE.Vector3(1, 1, 1);
10
+ const q = new THREE.Quaternion();
11
+ const m = new THREE.Matrix4();
12
+ function apply(index, positions, quaternions, scale = s, object) {
13
+ if (index !== undefined) {
14
+ m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
15
+ if (object) {
16
+ object.matrixAutoUpdate = false;
17
+ object.matrix.copy(m);
18
+ }
19
+ return m;
20
+ }
21
+ return m.identity();
22
+ }
23
+ class NgtcPhysics extends NgtRxStore {
24
+ initialize() {
25
+ super.initialize();
26
+ this.set({
27
+ allowSleep: false,
28
+ axisIndex: 0,
29
+ broadphase: 'Naive',
30
+ defaultContactMaterial: { contactEquationStiffness: 1e6 },
31
+ frictionGravity: null,
32
+ gravity: [0, -9.81, 0],
33
+ isPaused: false,
34
+ iterations: 5,
35
+ maxSubSteps: 10,
36
+ quatNormalizeFast: false,
37
+ quatNormalizeSkip: 0,
38
+ shouldInvalidate: true,
39
+ size: 1000,
40
+ solver: 'GS',
41
+ stepSize: 1 / 60,
42
+ tolerance: 0.001,
43
+ });
44
+ }
45
+ set allowSleep(allowSleep) {
46
+ this.set({ allowSleep });
47
+ }
48
+ set axisIndex(axisIndex) {
49
+ this.set({ axisIndex });
50
+ }
51
+ set broadphase(broadphase) {
52
+ this.set({ broadphase });
53
+ }
54
+ set defaultContactMaterial(defaultContactMaterial) {
55
+ this.set({ defaultContactMaterial });
56
+ }
57
+ set frictionGravity(frictionGravity) {
58
+ this.set({ frictionGravity });
59
+ }
60
+ set gravity(gravity) {
61
+ this.set({ gravity });
62
+ }
63
+ set iterations(iterations) {
64
+ this.set({ iterations });
65
+ }
66
+ set quatNormalizeFast(quatNormalizeFast) {
67
+ this.set({ quatNormalizeFast });
68
+ }
69
+ set quatNormalizeSkip(quatNormalizeSkip) {
70
+ this.set({ quatNormalizeSkip });
71
+ }
72
+ set solver(solver) {
73
+ this.set({ solver });
74
+ }
75
+ set tolerance(tolerance) {
76
+ this.set({ tolerance });
77
+ }
78
+ set size(size) {
79
+ this.set({ size });
80
+ }
81
+ set isPaused(isPaused) {
82
+ this.set({ isPaused });
83
+ }
84
+ set maxSubSteps(maxSubSteps) {
85
+ this.set({ maxSubSteps });
86
+ }
87
+ set shouldInvalidate(shouldInvalidate) {
88
+ this.set({ shouldInvalidate });
89
+ }
90
+ set stepSize(stepSize) {
91
+ this.set({ stepSize });
92
+ }
93
+ constructor() {
94
+ super();
95
+ this.ngtStore = inject(NgtStore);
96
+ this.physicsStore = inject(NgtcStore);
97
+ let timeSinceLastCalled = 0;
98
+ injectBeforeRender(({ delta }) => {
99
+ const { isPaused, maxSubSteps, stepSize } = this.get();
100
+ const worker = this.physicsStore.get('worker');
101
+ if (isPaused || !worker)
102
+ return;
103
+ timeSinceLastCalled += delta;
104
+ worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize });
105
+ timeSinceLastCalled = 0;
106
+ });
107
+ }
108
+ ngOnInit() {
109
+ this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });
110
+ this.connectWorker();
111
+ this.updateWorkerProp('axisIndex');
112
+ this.updateWorkerProp('broadphase');
113
+ this.updateWorkerProp('gravity');
114
+ this.updateWorkerProp('iterations');
115
+ this.updateWorkerProp('tolerance');
116
+ }
117
+ ngOnDestroy() {
118
+ const worker = this.physicsStore.get('worker');
119
+ if (worker) {
120
+ worker.terminate();
121
+ worker.removeAllListeners();
122
+ }
123
+ super.ngOnDestroy();
124
+ }
125
+ connectWorker() {
126
+ this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {
127
+ const worker = this.physicsStore.get('worker');
128
+ if (worker) {
129
+ worker.connect();
130
+ worker.init();
131
+ worker.on('collide', this.collideHandler.bind(this));
132
+ worker.on('collideBegin', this.collideBeginHandler.bind(this));
133
+ worker.on('collideEnd', this.collideEndHandler.bind(this));
134
+ worker.on('frame', this.frameHandler.bind(this));
135
+ worker.on('rayhit', this.rayHitHandler.bind(this));
136
+ }
137
+ });
138
+ }
139
+ updateWorkerProp(prop) {
140
+ this.effect(this.select(prop), () => {
141
+ const value = this.get(prop);
142
+ const worker = this.physicsStore.get('worker');
143
+ if (worker)
144
+ worker[prop] = value;
145
+ });
146
+ }
147
+ collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
148
+ const { events, refs } = this.physicsStore.get();
149
+ const cb = events[target]?.collide;
150
+ if (cb) {
151
+ cb({
152
+ body: refs[body],
153
+ contact: { bi: refs[bi], bj: refs[bj], ...contactRest },
154
+ target: refs[target],
155
+ ...rest,
156
+ });
157
+ }
158
+ }
159
+ collideBeginHandler({ bodyA, bodyB }) {
160
+ const { events, refs } = this.physicsStore.get();
161
+ const cbA = events[bodyA]?.collideBegin;
162
+ if (cbA)
163
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });
164
+ const cbB = events[bodyB]?.collideBegin;
165
+ if (cbB)
166
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });
167
+ }
168
+ collideEndHandler({ bodyA, bodyB }) {
169
+ const { events, refs } = this.physicsStore.get();
170
+ const cbA = events[bodyA]?.collideEnd;
171
+ if (cbA)
172
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });
173
+ const cbB = events[bodyB]?.collideEnd;
174
+ if (cbB)
175
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });
176
+ }
177
+ frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {
178
+ const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();
179
+ const invalidate = this.ngtStore.get('invalidate');
180
+ const shouldInvalidate = this.get('shouldInvalidate');
181
+ for (let i = 0; i < uuids.length; i++) {
182
+ bodies[uuids[i]] = i;
183
+ }
184
+ observations.forEach(([id, value, type]) => {
185
+ const subscription = subscriptions[id] || {};
186
+ const cb = subscription[type];
187
+ // HELP: We clearly know the type of the callback, but typescript can't deal with it
188
+ cb && cb(value);
189
+ });
190
+ if (active) {
191
+ for (const ref of Object.values(refs)) {
192
+ if (ref instanceof THREE.InstancedMesh) {
193
+ for (let i = 0; i < ref.count; i++) {
194
+ const uuid = `${ref.uuid}/${i}`;
195
+ const index = bodies[uuid];
196
+ if (index !== undefined) {
197
+ ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));
198
+ ref.instanceMatrix.needsUpdate = true;
199
+ }
200
+ }
201
+ }
202
+ else {
203
+ const scale = scaleOverrides[ref.uuid] || ref.scale;
204
+ apply(bodies[ref.uuid], positions, quaternions, scale, ref);
205
+ }
206
+ }
207
+ if (shouldInvalidate)
208
+ invalidate();
209
+ }
210
+ }
211
+ rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
212
+ const { events, refs } = this.physicsStore.get();
213
+ const cb = events[uuid]?.rayhit;
214
+ if (cb)
215
+ cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
216
+ }
217
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance", size: "size", isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize" }, providers: [NgtcStore], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true }); }
219
+ }
220
+ export { NgtcPhysics };
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, decorators: [{
222
+ type: Component,
223
+ args: [{
224
+ selector: 'ngtc-physics',
225
+ standalone: true,
226
+ template: '<ng-content />',
227
+ providers: [NgtcStore],
228
+ }]
229
+ }], ctorParameters: function () { return []; }, propDecorators: { allowSleep: [{
230
+ type: Input
231
+ }], axisIndex: [{
232
+ type: Input
233
+ }], broadphase: [{
234
+ type: Input
235
+ }], defaultContactMaterial: [{
236
+ type: Input
237
+ }], frictionGravity: [{
238
+ type: Input
239
+ }], gravity: [{
240
+ type: Input
241
+ }], iterations: [{
242
+ type: Input
243
+ }], quatNormalizeFast: [{
244
+ type: Input
245
+ }], quatNormalizeSkip: [{
246
+ type: Input
247
+ }], solver: [{
248
+ type: Input
249
+ }], tolerance: [{
250
+ type: Input
251
+ }], size: [{
252
+ type: Input
253
+ }], isPaused: [{
254
+ type: Input
255
+ }], maxSubSteps: [{
256
+ type: Input
257
+ }], shouldInvalidate: [{
258
+ type: Input
259
+ }], stepSize: [{
260
+ type: Input
261
+ }] } });
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1jYW5ub24vc3JjL2xpYi9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUNILGVBQWUsR0FPbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVwQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5QixTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsU0FBdUIsRUFBRSxXQUF5QixFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBdUI7SUFDaEgsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxD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OzBFQTJCZ0IsVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDYW5ub25Xb3JrZXJBUEksXG4gICAgQ2Fubm9uV29ya2VyUHJvcHMsXG4gICAgV29ya2VyQ29sbGlkZUJlZ2luRXZlbnQsXG4gICAgV29ya2VyQ29sbGlkZUVuZEV2ZW50LFxuICAgIFdvcmtlckNvbGxpZGVFdmVudCxcbiAgICBXb3JrZXJGcmFtZU1lc3NhZ2UsXG4gICAgV29ya2VyUmF5aGl0RXZlbnQsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyLCBOZ3RBbnlSZWNvcmQsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndGNTdG9yZSB9IGZyb20gJy4vc3RvcmUnO1xuXG5jb25zdCB2ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGFwcGx5KGluZGV4OiBudW1iZXIsIHBvc2l0aW9uczogRmxvYXQzMkFycmF5LCBxdWF0ZXJuaW9uczogRmxvYXQzMkFycmF5LCBzY2FsZSA9IHMsIG9iamVjdD86IFRIUkVFLk9iamVjdDNEKSB7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbS5jb21wb3NlKHYuZnJvbUFycmF5KHBvc2l0aW9ucywgaW5kZXggKiAzKSwgcS5mcm9tQXJyYXkocXVhdGVybmlvbnMsIGluZGV4ICogNCksIHNjYWxlKTtcbiAgICAgICAgaWYgKG9iamVjdCkge1xuICAgICAgICAgICAgb2JqZWN0Lm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIG9iamVjdC5tYXRyaXguY29weShtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG4gICAgcmV0dXJuIG0uaWRlbnRpdHkoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjUGh5c2ljc0lucHV0cyBleHRlbmRzIENhbm5vbldvcmtlclByb3BzIHtcbiAgICBpc1BhdXNlZD86IGJvb2xlYW47XG4gICAgbWF4U3ViU3RlcHM/OiBudW1iZXI7XG4gICAgc2hvdWxkSW52YWxpZGF0ZT86IGJvb2xlYW47XG4gICAgc3RlcFNpemU/OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0Yy1waHlzaWNzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQgLz4nLFxuICAgIHByb3ZpZGVyczogW05ndGNTdG9yZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndGNQaHlzaWNzIGV4dGVuZHMgTmd0UnhTdG9yZTxOZ3RjUGh5c2ljc0lucHV0cz4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ3RTdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwaHlzaWNzU3RvcmUgPSBpbmplY3QoTmd0Y1N0b3JlKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgYWxsb3dTbGVlcDogZmFsc2UsXG4gICAgICAgICAgICBheGlzSW5kZXg6IDAsXG4gICAgICAgICAgICBicm9hZHBoYXNlOiAnTmFpdmUnLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRhY3RNYXRlcmlhbDogeyBjb250YWN0RXF1YXRpb25TdGlmZm5lc3M6IDFlNiB9LFxuICAgICAgICAgICAgZnJpY3Rpb25HcmF2aXR5OiBudWxsLFxuICAgICAgICAgICAgZ3Jhdml0eTogWzAsIC05LjgxLCAwXSxcbiAgICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGl0ZXJhdGlvbnM6IDUsXG4gICAgICAgICAgICBtYXhTdWJTdGVwczogMTAsXG4gICAgICAgICAgICBxdWF0Tm9ybWFsaXplRmFzdDogZmFsc2UsXG4gICAgICAgICAgICBxdWF0Tm9ybWFsaXplU2tpcDogMCxcbiAgICAgICAgICAgIHNob3VsZEludmFsaWRhdGU6IHRydWUsXG4gICAgICAgICAgICBzaXplOiAxMDAwLFxuICAgICAgICAgICAgc29sdmVyOiAnR1MnLFxuICAgICAgICAgICAgc3RlcFNpemU6IDEgLyA2MCxcbiAgICAgICAgICAgIHRvbGVyYW5jZTogMC4wMDEsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbGxvd1NsZWVwKGFsbG93U2xlZXA6IE5ndGNQaHlzaWNzSW5wdXRzWydhbGxvd1NsZWVwJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbGxvd1NsZWVwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBheGlzSW5kZXgoYXhpc0luZGV4OiBOZ3RjUGh5c2ljc0lucHV0c1snYXhpc0luZGV4J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBheGlzSW5kZXggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGJyb2FkcGhhc2UoYnJvYWRwaGFzZTogTmd0Y1BoeXNpY3NJbnB1dHNbJ2Jyb2FkcGhhc2UnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGJyb2FkcGhhc2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlZmF1bHRDb250YWN0TWF0ZXJpYWwoZGVmYXVsdENvbnRhY3RNYXRlcmlhbDogTmd0Y1BoeXNpY3NJbnB1dHNbJ2RlZmF1bHRDb250YWN0TWF0ZXJpYWwnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGRlZmF1bHRDb250YWN0TWF0ZXJpYWwgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGZyaWN0aW9uR3Jhdml0eShmcmljdGlvbkdyYXZpdHk6IE5ndGNQaHlzaWNzSW5wdXRzWydmcmljdGlvbkdyYXZpdHknXSkge1xuICAgICAgICB0aGlzLnNldCh7IGZyaWN0aW9uR3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZ3Jhdml0eShncmF2aXR5OiBOZ3RjUGh5c2ljc0lucHV0c1snZ3Jhdml0eSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZ3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXRlcmF0aW9ucyhpdGVyYXRpb25zOiBOZ3RjUGh5c2ljc0lucHV0c1snaXRlcmF0aW9ucyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaXRlcmF0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcXVhdE5vcm1hbGl6ZUZhc3QocXVhdE5vcm1hbGl6ZUZhc3Q6IE5ndGNQaHlzaWNzSW5wdXRzWydxdWF0Tm9ybWFsaXplRmFzdCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcXVhdE5vcm1hbGl6ZUZhc3QgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHF1YXROb3JtYWxpemVTa2lwKHF1YXROb3JtYWxpemVTa2lwOiBOZ3RjUGh5c2ljc0lucHV0c1sncXVhdE5vcm1hbGl6ZVNraXAnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHF1YXROb3JtYWxpemVTa2lwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzb2x2ZXIoc29sdmVyOiBOZ3RjUGh5c2ljc0lucHV0c1snc29sdmVyJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzb2x2ZXIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHRvbGVyYW5jZSh0b2xlcmFuY2U6IE5ndGNQaHlzaWNzSW5wdXRzWyd0b2xlcmFuY2UnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHRvbGVyYW5jZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2l6ZShzaXplOiBOZ3RjUGh5c2ljc0lucHV0c1snc2l6ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXNQYXVzZWQoaXNQYXVzZWQ6IE5ndGNQaHlzaWNzSW5wdXRzWydpc1BhdXNlZCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaXNQYXVzZWQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1heFN1YlN0ZXBzKG1heFN1YlN0ZXBzOiBOZ3RjUGh5c2ljc0lucHV0c1snbWF4U3ViU3RlcHMnXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1heFN1YlN0ZXBzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG91bGRJbnZhbGlkYXRlKHNob3VsZEludmFsaWRhdGU6IE5ndGNQaHlzaWNzSW5wdXRzWydzaG91bGRJbnZhbGlkYXRlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzaG91bGRJbnZhbGlkYXRlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdGVwU2l6ZShzdGVwU2l6ZTogTmd0Y1BoeXNpY3NJbnB1dHNbJ3N0ZXBTaXplJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzdGVwU2l6ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgbGV0IHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpc1BhdXNlZCwgbWF4U3ViU3RlcHMsIHN0ZXBTaXplIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCd3b3JrZXInKTtcbiAgICAgICAgICAgIGlmIChpc1BhdXNlZCB8fCAhd29ya2VyKSByZXR1cm47XG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0Q2FsbGVkICs9IGRlbHRhO1xuICAgICAgICAgICAgd29ya2VyLnN0ZXAoeyBtYXhTdWJTdGVwcywgdGltZVNpbmNlTGFzdENhbGxlZCwgc3RlcFNpemU6IHN0ZXBTaXplISB9KTtcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5waHlzaWNzU3RvcmUuc2V0KHsgd29ya2VyOiBuZXcgQ2Fubm9uV29ya2VyQVBJKHRoaXMuZ2V0KCkpIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3RXb3JrZXIoKTtcbiAgICAgICAgdGhpcy51cGRhdGVXb3JrZXJQcm9wKCdheGlzSW5kZXgnKTtcbiAgICAgICAgdGhpcy51cGRhdGVXb3JrZXJQcm9wKCdicm9hZHBoYXNlJyk7XG4gICAgICAgIHRoaXMudXBkYXRlV29ya2VyUHJvcCgnZ3Jhdml0eScpO1xuICAgICAgICB0aGlzLnVwZGF0ZVdvcmtlclByb3AoJ2l0ZXJhdGlvbnMnKTtcbiAgICAgICAgdGhpcy51cGRhdGVXb3JrZXJQcm9wKCd0b2xlcmFuY2UnKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCd3b3JrZXInKTtcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgKHdvcmtlciBhcyB1bmtub3duIGFzIHsgcmVtb3ZlQWxsTGlzdGVuZXJzOiAoKSA9PiB2b2lkIH0pLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25uZWN0V29ya2VyKCkge1xuICAgICAgICB0aGlzLmhvbGQodGhpcy5waHlzaWNzU3RvcmUuc2VsZWN0KCd3b3JrZXInKS5waXBlKGZpbHRlcigodykgPT4gISF3KSksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgnd29ya2VyJyk7XG4gICAgICAgICAgICBpZiAod29ya2VyKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLmNvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB3b3JrZXIuaW5pdCgpO1xuXG4gICAgICAgICAgICAgICAgdHlwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuICAgICAgICAgICAgICAgICh3b3JrZXIgYXMgdW5rbm93biBhcyB7IG9uOiBBbnlGdW5jdGlvbiB9KS5vbignY29sbGlkZScsIHRoaXMuY29sbGlkZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyB1bmtub3duIGFzIHsgb246IEFueUZ1bmN0aW9uIH0pLm9uKCdjb2xsaWRlQmVnaW4nLCB0aGlzLmNvbGxpZGVCZWdpbkhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyB1bmtub3duIGFzIHsgb246IEFueUZ1bmN0aW9uIH0pLm9uKCdjb2xsaWRlRW5kJywgdGhpcy5jb2xsaWRlRW5kSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAod29ya2VyIGFzIHVua25vd24gYXMgeyBvbjogQW55RnVuY3Rpb24gfSkub24oJ2ZyYW1lJywgdGhpcy5mcmFtZUhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyB1bmtub3duIGFzIHsgb246IEFueUZ1bmN0aW9uIH0pLm9uKCdyYXloaXQnLCB0aGlzLnJheUhpdEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlV29ya2VyUHJvcChwcm9wOiBrZXlvZiBOZ3RjUGh5c2ljc0lucHV0cykge1xuICAgICAgICB0aGlzLmVmZmVjdCh0aGlzLnNlbGVjdChwcm9wKSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChwcm9wKTtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgnd29ya2VyJyk7XG4gICAgICAgICAgICBpZiAod29ya2VyKSAod29ya2VyIGFzIE5ndEFueVJlY29yZClbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsaWRlSGFuZGxlcih7IGJvZHksIGNvbnRhY3Q6IHsgYmksIGJqLCAuLi5jb250YWN0UmVzdCB9LCB0YXJnZXQsIC4uLnJlc3QgfTogV29ya2VyQ29sbGlkZUV2ZW50WydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgeyBldmVudHMsIHJlZnMgfSA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgpO1xuICAgICAgICBjb25zdCBjYiA9IGV2ZW50c1t0YXJnZXRdPy5jb2xsaWRlO1xuXG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgY2Ioe1xuICAgICAgICAgICAgICAgIGJvZHk6IHJlZnNbYm9keV0sXG4gICAgICAgICAgICAgICAgY29udGFjdDogeyBiaTogcmVmc1tiaV0sIGJqOiByZWZzW2JqXSwgLi4uY29udGFjdFJlc3QgfSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZnNbdGFyZ2V0XSxcbiAgICAgICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxpZGVCZWdpbkhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUJlZ2luRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgY29uc3QgY2JBID0gZXZlbnRzW2JvZHlBXT8uY29sbGlkZUJlZ2luO1xuICAgICAgICBpZiAoY2JBKSBjYkEoeyBib2R5OiByZWZzW2JvZHlCXSwgb3A6ICdldmVudCcsIHRhcmdldDogcmVmc1tib2R5QV0sIHR5cGU6ICdjb2xsaWRlQmVnaW4nIH0pO1xuXG4gICAgICAgIGNvbnN0IGNiQiA9IGV2ZW50c1tib2R5Ql0/LmNvbGxpZGVCZWdpbjtcbiAgICAgICAgaWYgKGNiQikgY2JCKHsgYm9keTogcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxpZGVFbmRIYW5kbGVyKHsgYm9keUEsIGJvZHlCIH06IFdvcmtlckNvbGxpZGVFbmRFdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoKTtcblxuICAgICAgICBjb25zdCBjYkEgPSBldmVudHNbYm9keUFdPy5jb2xsaWRlRW5kO1xuICAgICAgICBpZiAoY2JBKSBjYkEoeyBib2R5OiByZWZzW2JvZHlCXSwgb3A6ICdldmVudCcsIHRhcmdldDogcmVmc1tib2R5QV0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcblxuICAgICAgICBjb25zdCBjYkIgPSBldmVudHNbYm9keUJdPy5jb2xsaWRlRW5kO1xuICAgICAgICBpZiAoY2JCKSBjYkIoeyBib2R5OiByZWZzW2JvZHlBXSwgb3A6ICdldmVudCcsIHRhcmdldDogcmVmc1tib2R5Ql0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZyYW1lSGFuZGxlcih7XG4gICAgICAgIGFjdGl2ZSxcbiAgICAgICAgYm9kaWVzOiB1dWlkcyA9IFtdLFxuICAgICAgICBvYnNlcnZhdGlvbnMsXG4gICAgICAgIHBvc2l0aW9ucyxcbiAgICAgICAgcXVhdGVybmlvbnMsXG4gICAgfTogV29ya2VyRnJhbWVNZXNzYWdlWydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgeyBib2RpZXMsIHN1YnNjcmlwdGlvbnMsIHJlZnMsIHNjYWxlT3ZlcnJpZGVzIH0gPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMubmd0U3RvcmUuZ2V0KCdpbnZhbGlkYXRlJyk7XG4gICAgICAgIGNvbnN0IHNob3VsZEludmFsaWRhdGUgPSB0aGlzLmdldCgnc2hvdWxkSW52YWxpZGF0ZScpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXVpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJvZGllc1t1dWlkc1tpXV0gPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2YXRpb25zLmZvckVhY2goKFtpZCwgdmFsdWUsIHR5cGVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25zW2lkXSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc3Vic2NyaXB0aW9uW3R5cGVdO1xuICAgICAgICAgICAgLy8gSEVMUDogV2UgY2xlYXJseSBrbm93IHRoZSB0eXBlIG9mIHRoZSBjYWxsYmFjaywgYnV0IHR5cGVzY3JpcHQgY2FuJ3QgZGVhbCB3aXRoIGl0XG4gICAgICAgICAgICBjYiAmJiBjYih2YWx1ZSBhcyBuZXZlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVmIG9mIE9iamVjdC52YWx1ZXMocmVmcykpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmIGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZi5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1dWlkID0gYCR7cmVmLnV1aWR9LyR7aX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBib2RpZXNbdXVpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5zZXRNYXRyaXhBdChpLCBhcHBseShpbmRleCwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGVPdmVycmlkZXNbdXVpZF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2VNYXRyaXgubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBzY2FsZU92ZXJyaWRlc1tyZWYudXVpZF0gfHwgcmVmLnNjYWxlO1xuICAgICAgICAgICAgICAgICAgICBhcHBseShib2RpZXNbcmVmLnV1aWRdLCBwb3NpdGlvbnMsIHF1YXRlcm5pb25zLCBzY2FsZSwgcmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZSkgaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByYXlIaXRIYW5kbGVyKHsgYm9keSwgcmF5OiB7IHV1aWQsIC4uLnJheVJlc3QgfSwgLi4ucmVzdCB9OiBXb3JrZXJSYXloaXRFdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoKTtcbiAgICAgICAgY29uc3QgY2IgPSBldmVudHNbdXVpZF0/LnJheWhpdDtcbiAgICAgICAgaWYgKGNiKSBjYih7IGJvZHk6IGJvZHkgPyByZWZzW2JvZHldIDogbnVsbCwgcmF5OiB7IHV1aWQsIC4uLnJheVJlc3QgfSwgLi4ucmVzdCB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NgtRxStore } from 'angular-three';
3
+ import * as i0 from "@angular/core";
4
+ class NgtcStore extends NgtRxStore {
5
+ initialize() {
6
+ super.initialize();
7
+ this.set({
8
+ bodies: {},
9
+ events: {},
10
+ refs: {},
11
+ scaleOverrides: {},
12
+ subscriptions: {},
13
+ });
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
16
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcStore }); }
17
+ }
18
+ export { NgtcStore };
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcStore, decorators: [{
20
+ type: Injectable
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9saWIvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQVd0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXVCM0MsTUFDYSxTQUFVLFNBQVEsVUFBcUI7SUFDdkMsVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ0wsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxFQUFFO1lBQ1IsY0FBYyxFQUFFLEVBQUU7WUFDbEIsYUFBYSxFQUFFLEVBQUU7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0FWUSxTQUFTO2tIQUFULFNBQVM7O1NBQVQsU0FBUzsyRkFBVCxTQUFTO2tCQURyQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENhbm5vbldvcmtlckFQSSxcbiAgICBDYW5ub25Xb3JrZXJQcm9wcyxcbiAgICBDb2xsaWRlQmVnaW5FdmVudCxcbiAgICBDb2xsaWRlRW5kRXZlbnQsXG4gICAgQ29sbGlkZUV2ZW50LFxuICAgIFJheWhpdEV2ZW50LFxuICAgIFJlZnMsXG4gICAgU3Vic2NyaXB0aW9ucyxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndGNFdmVudCA9IENvbGxpZGVCZWdpbkV2ZW50IHwgQ29sbGlkZUVuZEV2ZW50IHwgQ29sbGlkZUV2ZW50IHwgUmF5aGl0RXZlbnQ7XG5leHBvcnQgdHlwZSBOZ3RjQ2FsbGJhY2tCeVR5cGU8VCBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+ID0ge1xuICAgIFtLIGluIFRbJ3R5cGUnXV0/OiBUIGV4dGVuZHMgeyB0eXBlOiBLIH0gPyAoZTogVCkgPT4gdm9pZCA6IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y0V2ZW50cyA9IHtcbiAgICBbdXVpZDogc3RyaW5nXTogUGFydGlhbDxOZ3RjQ2FsbGJhY2tCeVR5cGU8Tmd0Y0V2ZW50Pj47XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjU2NhbGVPdmVycmlkZXMgPSB7IFt1dWlkOiBzdHJpbmddOiBUSFJFRS5WZWN0b3IzIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1N0YXRlIHtcbiAgICBib2RpZXM6IHsgW3V1aWQ6IHN0cmluZ106IG51bWJlciB9O1xuICAgIGV2ZW50czogTmd0Y0V2ZW50cztcbiAgICByZWZzOiBSZWZzO1xuICAgIHNjYWxlT3ZlcnJpZGVzOiBOZ3RjU2NhbGVPdmVycmlkZXM7XG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucztcbiAgICB3b3JrZXI6IENhbm5vbldvcmtlckFQSTtcbiAgICBpbml0OiAoaW5wdXRzOiBDYW5ub25Xb3JrZXJQcm9wcykgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndGNTdG9yZSBleHRlbmRzIE5ndFJ4U3RvcmU8Tmd0Y1N0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBib2RpZXM6IHt9LFxuICAgICAgICAgICAgZXZlbnRzOiB7fSxcbiAgICAgICAgICAgIHJlZnM6IHt9LFxuICAgICAgICAgICAgc2NhbGVPdmVycmlkZXM6IHt9LFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uczoge30sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,48 @@
1
+ import * as THREE from 'three';
2
+ class NgtcUtils {
3
+ static { this.incrementingId = 0; }
4
+ static { this.e = new THREE.Euler(); }
5
+ static { this.q = new THREE.Quaternion(); }
6
+ static getUUID(ref, index) {
7
+ const suffix = index === undefined ? '' : `/${index}`;
8
+ if (typeof ref === 'function')
9
+ return null;
10
+ return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;
11
+ }
12
+ static subscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
13
+ return (callback) => {
14
+ const id = this.incrementingId++;
15
+ subscriptions[id] = { [type]: callback };
16
+ const uuid = this.getUUID(ref, index);
17
+ uuid && worker.subscribe({ props: { id, target, type }, uuid });
18
+ return () => {
19
+ delete subscriptions[id];
20
+ worker.unsubscribe({ props: id });
21
+ };
22
+ };
23
+ }
24
+ static prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {
25
+ object.userData = userData;
26
+ object.position.set(...position);
27
+ object.rotation.set(...rotation);
28
+ object.updateMatrix();
29
+ }
30
+ static setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {
31
+ events[uuid] = {
32
+ collide: onCollide,
33
+ collideBegin: onCollideBegin,
34
+ collideEnd: onCollideEnd,
35
+ };
36
+ }
37
+ static capitalize(str) {
38
+ return (str.charAt(0).toUpperCase() + str.slice(1));
39
+ }
40
+ static quaternionToRotation(callback) {
41
+ return (v) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray());
42
+ }
43
+ static makeTriplet(v) {
44
+ return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;
45
+ }
46
+ }
47
+ export { NgtcUtils };
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHL0IsTUFBYSxTQUFTO2FBQ1gsbUJBQWMsR0FBRyxDQUFDLENBQUM7YUFDbkIsTUFBQyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3RCLE1BQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUVsQyxNQUFNLENBQUMsT0FBTyxDQUNWLEdBQTRCLEVBQzVCLEtBQWM7UUFFZCxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUNaLEdBQTRCLEVBQzVCLE1BQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLElBQU8sRUFDUCxLQUFjLEVBQ2QsU0FBNkIsUUFBUTtRQUVyQyxPQUFPLENBQUMsUUFBdUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqQyxhQUFhLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sR0FBRyxFQUFFO2dCQUNSLE9BQU8sYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBc0IsRUFBRSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFhO1FBQzNHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQ2pCLE1BQWtCLEVBQ2xCLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQXNCLEVBQy9ELElBQVk7UUFFWixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFDWCxPQUFPLEVBQUUsU0FBUztZQUNsQixZQUFZLEVBQUUsY0FBYztZQUM1QixVQUFVLEVBQUUsWUFBWTtTQUMzQixDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQW1CLEdBQU07UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBa0IsQ0FBQztJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQThCO1FBQ3RELE9BQU8sQ0FBQyxDQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFhLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUEwQjtRQUN6QyxPQUFPLENBQUMsWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOztTQS9EUSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICAgIEJvZHlQcm9wcyxcbiAgICBDYW5ub25Xb3JrZXJBUEksXG4gICAgUHJvcFZhbHVlLFxuICAgIFF1YWQsXG4gICAgU3Vic2NyaXB0aW9uTmFtZSxcbiAgICBTdWJzY3JpcHRpb25zLFxuICAgIFN1YnNjcmlwdGlvblRhcmdldCxcbiAgICBUcmlwbGV0LFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgdHlwZSB7IE5ndGNFdmVudHMgfSBmcm9tICcuL3N0b3JlJztcblxuZXhwb3J0IGNsYXNzIE5ndGNVdGlscyB7XG4gICAgc3RhdGljIGluY3JlbWVudGluZ0lkID0gMDtcbiAgICBzdGF0aWMgZSA9IG5ldyBUSFJFRS5FdWxlcigpO1xuICAgIHN0YXRpYyBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcblxuICAgIHN0YXRpYyBnZXRVVUlEPFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRCA9IFRIUkVFLk9iamVjdDNEPihcbiAgICAgICAgcmVmOiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0PixcbiAgICAgICAgaW5kZXg/OiBudW1iZXJcbiAgICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gaW5kZXggPT09IHVuZGVmaW5lZCA/ICcnIDogYC8ke2luZGV4fWA7XG4gICAgICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHJlZiAmJiByZWYubmF0aXZlRWxlbWVudCAmJiBgJHtyZWYubmF0aXZlRWxlbWVudC51dWlkfSR7c3VmZml4fWA7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1YnNjcmliZTxUIGV4dGVuZHMgU3Vic2NyaXB0aW9uTmFtZSwgVE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEID0gVEhSRUUuT2JqZWN0M0Q+KFxuICAgICAgICByZWY6IE5ndEluamVjdGVkUmVmPFRPYmplY3Q+LFxuICAgICAgICB3b3JrZXI6IENhbm5vbldvcmtlckFQSSxcbiAgICAgICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucyxcbiAgICAgICAgdHlwZTogVCxcbiAgICAgICAgaW5kZXg/OiBudW1iZXIsXG4gICAgICAgIHRhcmdldDogU3Vic2NyaXB0aW9uVGFyZ2V0ID0gJ2JvZGllcydcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIChjYWxsYmFjazogKHZhbHVlOiBQcm9wVmFsdWU8VD4pID0+IHZvaWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5pbmNyZW1lbnRpbmdJZCsrO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1tpZF0gPSB7IFt0eXBlXTogY2FsbGJhY2sgfTtcbiAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB0aGlzLmdldFVVSUQocmVmLCBpbmRleCk7XG4gICAgICAgICAgICB1dWlkICYmIHdvcmtlci5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdWJzY3JpcHRpb25zW2lkXTtcbiAgICAgICAgICAgICAgICB3b3JrZXIudW5zdWJzY3JpYmUoeyBwcm9wczogaWQgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlKG9iamVjdDogVEhSRUUuT2JqZWN0M0QsIHsgcG9zaXRpb24gPSBbMCwgMCwgMF0sIHJvdGF0aW9uID0gWzAsIDAsIDBdLCB1c2VyRGF0YSA9IHt9IH06IEJvZHlQcm9wcykge1xuICAgICAgICBvYmplY3QudXNlckRhdGEgPSB1c2VyRGF0YTtcbiAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi5zZXQoLi4ucm90YXRpb24pO1xuICAgICAgICBvYmplY3QudXBkYXRlTWF0cml4KCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNldHVwQ29sbGlzaW9uKFxuICAgICAgICBldmVudHM6IE5ndGNFdmVudHMsXG4gICAgICAgIHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kIH06IFBhcnRpYWw8Qm9keVByb3BzPixcbiAgICAgICAgdXVpZDogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGV2ZW50c1t1dWlkXSA9IHtcbiAgICAgICAgICAgIGNvbGxpZGU6IG9uQ29sbGlkZSxcbiAgICAgICAgICAgIGNvbGxpZGVCZWdpbjogb25Db2xsaWRlQmVnaW4sXG4gICAgICAgICAgICBjb2xsaWRlRW5kOiBvbkNvbGxpZGVFbmQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGNhcGl0YWxpemU8VCBleHRlbmRzIHN0cmluZz4oc3RyOiBUKTogQ2FwaXRhbGl6ZTxUPiB7XG4gICAgICAgIHJldHVybiAoc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpKSBhcyBDYXBpdGFsaXplPFQ+O1xuICAgIH1cblxuICAgIHN0YXRpYyBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjazogKHY6IFRyaXBsZXQpID0+IHZvaWQpIHtcbiAgICAgICAgcmV0dXJuICh2OiBRdWFkKSA9PiBjYWxsYmFjayh0aGlzLmUuc2V0RnJvbVF1YXRlcm5pb24odGhpcy5xLmZyb21BcnJheSh2KSkudG9BcnJheSgpIGFzIFRyaXBsZXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBtYWtlVHJpcGxldCh2OiBUSFJFRS5WZWN0b3IzIHwgVHJpcGxldCk6IFRyaXBsZXQge1xuICAgICAgICByZXR1cm4gdiBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBbdi54LCB2LnksIHYuel0gOiB2O1xuICAgIH1cbn1cbiJdfQ==
@@ -51,31 +51,31 @@ class NgtcDebug {
51
51
  scale: this.scale,
52
52
  });
53
53
  }
54
- }
55
- NgtcDebugfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
- NgtcDebug.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.0", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
57
- {
58
- provide: NGTC_DEBUG_API,
59
- useFactory: (debug) => ({
60
- add: (uuid, props, type) => {
61
- const body = propsToBody({ uuid, props, type });
62
- debug.bodies.push(body);
63
- debug.bodyMap[uuid] = body;
64
- },
65
- remove: (id) => {
66
- const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
67
- if (debugBodyIndex > -1)
68
- debug.bodies.splice(debugBodyIndex, 1);
69
- delete debug.bodyMap[id];
70
- },
71
- }),
72
- deps: [NgtcDebug],
73
- },
74
- ], ngImport: i0, template: `
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
56
+ {
57
+ provide: NGTC_DEBUG_API,
58
+ useFactory: (debug) => ({
59
+ add: (uuid, props, type) => {
60
+ const body = propsToBody({ uuid, props, type });
61
+ debug.bodies.push(body);
62
+ debug.bodyMap[uuid] = body;
63
+ },
64
+ remove: (id) => {
65
+ const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
66
+ if (debugBodyIndex > -1)
67
+ debug.bodies.splice(debugBodyIndex, 1);
68
+ delete debug.bodyMap[id];
69
+ },
70
+ }),
71
+ deps: [NgtcDebug],
72
+ },
73
+ ], ngImport: i0, template: `
75
74
  <ngt-primitive *args="[scene]" />
76
75
  <ng-content />
77
- `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgtcDebug, decorators: [{
76
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, decorators: [{
79
79
  type: Component,
80
80
  args: [{
81
81
  selector: 'ngtc-debug',