angular-three-cannon 2.0.0-beta.254 → 2.0.0-beta.256
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.
- package/README.md +0 -19
- package/debug/lib/debug.d.ts +4 -25
- package/esm2022/body/lib/body.mjs +15 -15
- package/esm2022/constraint/lib/constraint.mjs +6 -6
- package/esm2022/debug/lib/debug.mjs +20 -22
- package/esm2022/lib/physics.mjs +3 -5
- package/fesm2022/angular-three-cannon-body.mjs +14 -14
- package/fesm2022/angular-three-cannon-body.mjs.map +1 -1
- package/fesm2022/angular-three-cannon-constraint.mjs +5 -5
- package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -1
- package/fesm2022/angular-three-cannon-debug.mjs +20 -22
- package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
- package/fesm2022/angular-three-cannon.mjs +3 -5
- package/fesm2022/angular-three-cannon.mjs.map +1 -1
- package/lib/physics.d.ts +1 -12
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -61,25 +61,6 @@ export class SceneGraph {}
|
|
|
61
61
|
- `stepSize?: number`
|
|
62
62
|
- `tolerance?: number`
|
|
63
63
|
|
|
64
|
-
## NgtcPhysicsApi
|
|
65
|
-
|
|
66
|
-
`NgtcPhysicsApi` is an interface that provides access to the internal state and functionality of the `ngtc-physics` component. You can use it to interact with the physics simulation, subscribe to events, and access references to physics bodies.
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
export class Box {
|
|
70
|
-
physicsApi = injectPhysicsApi();
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
The `NgtcPhysicsApi` provides the following properties:
|
|
75
|
-
|
|
76
|
-
- `bodies`: A dictionary mapping object UUIDs to their corresponding body indices in the physics simulation.
|
|
77
|
-
- `events`: An object for subscribing to physics events (e.g., collide, collideBegin, collideEnd, rayhit).
|
|
78
|
-
- `refs`: An object containing references to the THREE.js objects that are part of the physics simulation.
|
|
79
|
-
- `scaleOverrides`: An object for setting custom scale values for specific objects in the simulation.
|
|
80
|
-
- `subscriptions`: An object for managing event subscriptions.
|
|
81
|
-
- `worker`: A signal representing the Cannon.js worker used for physics calculations.
|
|
82
|
-
|
|
83
64
|
## Debug
|
|
84
65
|
|
|
85
66
|
Read the [debug documentation](./debug/README.md) for more information on how to enable debug mode and view debug information.
|
package/debug/lib/debug.d.ts
CHANGED
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
import { BodyProps, BodyShapeType } from '@pmndrs/cannon-worker-api';
|
|
2
2
|
import CannonDebugger from 'cannon-es-debugger';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare const injectNgtcDebugApi: {
|
|
5
|
-
(): {
|
|
6
|
-
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
7
|
-
remove: (uuid: string) => void;
|
|
8
|
-
};
|
|
9
|
-
(injectOptions: import("@angular/core").InjectOptions & {
|
|
10
|
-
optional?: false | undefined;
|
|
11
|
-
} & {
|
|
12
|
-
injector?: import("@angular/core").Injector | undefined;
|
|
13
|
-
}): {
|
|
14
|
-
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
15
|
-
remove: (uuid: string) => void;
|
|
16
|
-
};
|
|
17
|
-
(injectOptions: import("@angular/core").InjectOptions & {
|
|
18
|
-
injector?: import("@angular/core").Injector | undefined;
|
|
19
|
-
}): {
|
|
20
|
-
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
21
|
-
remove: (uuid: string) => void;
|
|
22
|
-
} | null;
|
|
23
|
-
}, provideNgtcDebugApi: () => import("@angular/core").Provider;
|
|
24
4
|
export interface NgtcDebugInputs {
|
|
25
5
|
enabled: boolean;
|
|
26
6
|
color: string;
|
|
@@ -29,18 +9,17 @@ export interface NgtcDebugInputs {
|
|
|
29
9
|
}
|
|
30
10
|
export declare class NgtcDebug {
|
|
31
11
|
private store;
|
|
32
|
-
private
|
|
12
|
+
private physics;
|
|
33
13
|
debug: import("@angular/core").InputSignalWithTransform<NgtcDebugInputs, "" | Partial<NgtcDebugInputs>>;
|
|
34
14
|
private defaultScene;
|
|
35
15
|
private scene;
|
|
36
16
|
private bodies;
|
|
37
17
|
private bodyMap;
|
|
38
18
|
private cannonDebugger;
|
|
39
|
-
api: {
|
|
40
|
-
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
41
|
-
remove: (uuid: string) => void;
|
|
42
|
-
};
|
|
19
|
+
api: {};
|
|
43
20
|
constructor();
|
|
21
|
+
add(uuid: string, props: BodyProps, type: BodyShapeType): void;
|
|
22
|
+
remove(uuid: string): void;
|
|
44
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
|
|
45
24
|
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtcDebug, "ngtc-physics[debug]", never, { "debug": { "alias": "debug"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
46
25
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { afterNextRender, computed, isSignal, signal, untracked, } from '@angular/core';
|
|
1
|
+
import { afterNextRender, computed, inject, isSignal, signal, untracked, } from '@angular/core';
|
|
2
2
|
import { resolveRef } from 'angular-three';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
4
|
+
import { NgtcDebug } from 'angular-three-cannon/debug';
|
|
5
5
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
6
6
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
7
7
|
import { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';
|
|
@@ -11,13 +11,13 @@ function createInjectBody(type) {
|
|
|
11
11
|
}
|
|
12
12
|
function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
13
13
|
return assertInjector(injectBody, injector, () => {
|
|
14
|
-
const
|
|
15
|
-
if (!
|
|
14
|
+
const physics = inject(NgtcPhysics, { optional: true });
|
|
15
|
+
if (!physics) {
|
|
16
16
|
throw new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);
|
|
17
17
|
}
|
|
18
18
|
const autoEffect = injectAutoEffect();
|
|
19
|
-
const
|
|
20
|
-
const { add: addToDebug, remove: removeFromDebug } =
|
|
19
|
+
const debug = inject(NgtcDebug, { optional: true });
|
|
20
|
+
const { add: addToDebug, remove: removeFromDebug } = debug || {};
|
|
21
21
|
const transform = transformArgs ?? defaultTransformArgs[type];
|
|
22
22
|
const bodyRef = isSignal(ref) ? ref : signal(ref);
|
|
23
23
|
const body = computed(() => resolveRef(bodyRef()));
|
|
@@ -25,14 +25,14 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
25
25
|
const _body = body();
|
|
26
26
|
if (!_body)
|
|
27
27
|
return null;
|
|
28
|
-
const { worker, ...rest } =
|
|
28
|
+
const { worker, ...rest } = physics.api;
|
|
29
29
|
if (!worker())
|
|
30
30
|
return null;
|
|
31
|
-
return makeBodyApi(_body, worker(),
|
|
31
|
+
return makeBodyApi(_body, worker(), physics.api);
|
|
32
32
|
});
|
|
33
33
|
afterNextRender(() => {
|
|
34
34
|
autoEffect(() => {
|
|
35
|
-
const currentWorker =
|
|
35
|
+
const currentWorker = physics.api.worker();
|
|
36
36
|
if (!currentWorker)
|
|
37
37
|
return;
|
|
38
38
|
const object = body();
|
|
@@ -67,9 +67,9 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
67
67
|
else {
|
|
68
68
|
prepare(object, props);
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
physics.api.refs[id] = object;
|
|
71
71
|
addToDebug?.(id, props, type);
|
|
72
|
-
setupCollision(
|
|
72
|
+
setupCollision(physics.api.events, props, id);
|
|
73
73
|
// @ts-expect-error - if args is undefined, there's default
|
|
74
74
|
return { ...props, args: transform(props.args) };
|
|
75
75
|
}),
|
|
@@ -85,9 +85,9 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
85
85
|
});
|
|
86
86
|
return () => {
|
|
87
87
|
uuid.forEach((id) => {
|
|
88
|
-
delete
|
|
88
|
+
delete physics.api.refs[id];
|
|
89
89
|
removeFromDebug?.(id);
|
|
90
|
-
delete
|
|
90
|
+
delete physics.api.events[id];
|
|
91
91
|
});
|
|
92
92
|
currentWorker.removeBodies({ uuid });
|
|
93
93
|
};
|
|
@@ -105,4 +105,4 @@ export const injectPlane = createInjectBody('Plane');
|
|
|
105
105
|
export const injectSphere = createInjectBody('Sphere');
|
|
106
106
|
export const injectTrimesh = createInjectBody('Trimesh');
|
|
107
107
|
export const injectCompound = createInjectBody('Compound');
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTixlQUFlLEVBQ2YsUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9yRixTQUFTLGdCQUFnQixDQUErQixJQUFZO0lBQ25FLE9BQU8sQ0FDTixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixPQUFpQyxFQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFrQixJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2xCLElBQVksRUFDWixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFekQsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsRUFB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRXcml0YWJsZVNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aXNTaWduYWwsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlTaGFwZVR5cGUgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdFBoeXNpY3NBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBpbmplY3ROZ3RjRGVidWdBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbi9kZWJ1Zyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IER5bmFtaWNEcmF3VXNhZ2UsIEluc3RhbmNlZE1lc2gsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y0FyZ0ZuLCBOZ3RjQm9keVByb3BzTWFwLCBOZ3RjQm9keVB1YmxpY0FwaSwgTmd0Y0dldEJ5SW5kZXggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2Zvcm1BcmdzLCBtYWtlQm9keUFwaSwgcHJlcGFyZSwgc2V0dXBDb2xsaXNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4ge1xuXHR0cmFuc2Zvcm1BcmdzPzogTmd0Y0FyZ0ZuPE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT47XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4odHlwZTogVFNoYXBlKSB7XG5cdHJldHVybiA8VE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0XHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdFx0cmVmOiBFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IFNpZ25hbDxFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IHVuZGVmaW5lZD4sXG5cdFx0b3B0aW9ucz86IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+LFxuXHQpID0+IGluamVjdEJvZHk8VFNoYXBlLCBUT2JqZWN0Pih0eXBlLCBnZXRQcm9wRm4sIHJlZiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZSwgVE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0dHlwZTogVFNoYXBlLFxuXHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdHJlZjogRWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCBTaWduYWw8RWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCB1bmRlZmluZWQ+LFxuXHR7IHRyYW5zZm9ybUFyZ3MsIGluamVjdG9yIH06IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+ID0ge30sXG4pOiBTaWduYWw8Tmd0Y0JvZHlQdWJsaWNBcGkgfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RCb2R5LCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBoeXNpY3NBcGkgPSBpbmplY3RQaHlzaWNzQXBpKHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0XHRpZiAoIXBoeXNpY3NBcGkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgW05HVCBDYW5ub25dIGluamVjdEJvZHkgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIDxuZ3RjLXBoeXNpY3M+YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBkZWJ1Z0FwaSA9IGluamVjdE5ndGNEZWJ1Z0FwaSh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgeyBhZGQ6IGFkZFRvRGVidWcsIHJlbW92ZTogcmVtb3ZlRnJvbURlYnVnIH0gPSBkZWJ1Z0FwaSB8fCB7fTtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1BcmdzID8/IGRlZmF1bHRUcmFuc2Zvcm1BcmdzW3R5cGVdO1xuXHRcdGNvbnN0IGJvZHlSZWYgPSBpc1NpZ25hbChyZWYpID8gcmVmIDogc2lnbmFsKHJlZik7XG5cdFx0Y29uc3QgYm9keSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keVJlZigpKSk7XG5cblx0XHRjb25zdCBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfYm9keSA9IGJvZHkoKTtcblx0XHRcdGlmICghX2JvZHkpIHJldHVybiBudWxsO1xuXHRcdFx0Y29uc3QgeyB3b3JrZXIsIC4uLnJlc3QgfSA9IHBoeXNpY3NBcGk7XG5cdFx0XHRpZiAoIXdvcmtlcigpKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiBtYWtlQm9keUFwaShfYm9keSwgd29ya2VyKCksIHBoeXNpY3NBcGkpO1xuXHRcdH0pO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gcGh5c2ljc0FwaS53b3JrZXIoKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50V29ya2VyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keSgpO1xuXG5cdFx0XHRcdGlmICghaXNTaWduYWwocmVmKSAmJiAhb2JqZWN0KSB7XG5cdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdChib2R5UmVmIGFzIFdyaXRhYmxlU2lnbmFsPFRPYmplY3QgfCB1bmRlZmluZWQ+KS5zZXQocmVzb2x2ZVJlZihyZWYpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRcdGxldCB1dWlkczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRsZXQgdGVtcDogT2JqZWN0M0Q7XG5cdFx0XHRcdFx0aWYgKG9iamVjdCBpbnN0YW5jZW9mIEluc3RhbmNlZE1lc2gpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcblx0XHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0XHR0ZW1wID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdHV1aWRzLFxuXHRcdFx0XHRcdFx0dXVpZHMubWFwKChpZCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wRm4oaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0XHRcdHByZXBhcmUodGVtcCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5zZXRNYXRyaXhBdChpbmRleCwgdGVtcC5tYXRyaXgpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwaHlzaWNzQXBpLnJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRhZGRUb0RlYnVnPy4oaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdFx0c2V0dXBDb2xsaXNpb24ocGh5c2ljc0FwaS5ldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpZiBhcmdzIGlzIHVuZGVmaW5lZCwgdGhlcmUncyBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiB0cmFuc2Zvcm0ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH0pKCk7XG5cdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdFx0Y3VycmVudFdvcmtlci5hZGRCb2RpZXMoe1xuXHRcdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdHV1aWQsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0dXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHBoeXNpY3NBcGkucmVmc1tpZF07XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tRGVidWc/LihpZCk7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljc0FwaS5ldmVudHNbaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIucmVtb3ZlQm9kaWVzKHsgdXVpZCB9KTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fSk7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RCb3ggPSBjcmVhdGVJbmplY3RCb2R5KCdCb3gnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDb252ZXhQb2x5aGVkcm9uID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29udmV4UG9seWhlZHJvbicpO1xuZXhwb3J0IGNvbnN0IGluamVjdEN5bGluZGVyID0gY3JlYXRlSW5qZWN0Qm9keSgnQ3lsaW5kZXInKTtcbmV4cG9ydCBjb25zdCBpbmplY3RIZWlnaHRmaWVsZCA9IGNyZWF0ZUluamVjdEJvZHkoJ0hlaWdodGZpZWxkJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0UGFydGljbGUgPSBjcmVhdGVJbmplY3RCb2R5KCdQYXJ0aWNsZScpO1xuZXhwb3J0IGNvbnN0IGluamVjdFBsYW5lID0gY3JlYXRlSW5qZWN0Qm9keSgnUGxhbmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RTcGhlcmUgPSBjcmVhdGVJbmplY3RCb2R5KCdTcGhlcmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RUcmltZXNoID0gY3JlYXRlSW5qZWN0Qm9keSgnVHJpbWVzaCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdENvbXBvdW5kID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29tcG91bmQnKTtcbiJdfQ==
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9yRixTQUFTLGdCQUFnQixDQUErQixJQUFZO0lBQ25FLE9BQU8sQ0FDTixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixPQUFpQyxFQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFrQixJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2xCLElBQVksRUFDWixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFekQsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFD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TSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdFNpZ25hbCxcblx0V3JpdGFibGVTaWduYWwsXG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Y29tcHV0ZWQsXG5cdGluamVjdCxcblx0aXNTaWduYWwsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlTaGFwZVR5cGUgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndGNQaHlzaWNzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgTmd0Y0RlYnVnIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24vZGVidWcnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBEeW5hbWljRHJhd1VzYWdlLCBJbnN0YW5jZWRNZXNoLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndGNBcmdGbiwgTmd0Y0JvZHlQcm9wc01hcCwgTmd0Y0JvZHlQdWJsaWNBcGksIE5ndGNHZXRCeUluZGV4IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNmb3JtQXJncywgbWFrZUJvZHlBcGksIHByZXBhcmUsIHNldHVwQ29sbGlzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlPcHRpb25zPFRTaGFwZSBleHRlbmRzIEJvZHlTaGFwZVR5cGU+IHtcblx0dHJhbnNmb3JtQXJncz86IE5ndGNBcmdGbjxOZ3RjQm9keVByb3BzTWFwW1RTaGFwZV0+O1xuXHRpbmplY3Rvcj86IEluamVjdG9yO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbmplY3RCb2R5PFRTaGFwZSBleHRlbmRzIEJvZHlTaGFwZVR5cGU+KHR5cGU6IFRTaGFwZSkge1xuXHRyZXR1cm4gPFRPYmplY3QgZXh0ZW5kcyBPYmplY3QzRD4oXG5cdFx0Z2V0UHJvcEZuOiBOZ3RjR2V0QnlJbmRleDxOZ3RjQm9keVByb3BzTWFwW1RTaGFwZV0+LFxuXHRcdHJlZjogRWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCBTaWduYWw8RWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCB1bmRlZmluZWQ+LFxuXHRcdG9wdGlvbnM/OiBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlPixcblx0KSA9PiBpbmplY3RCb2R5PFRTaGFwZSwgVE9iamVjdD4odHlwZSwgZ2V0UHJvcEZuLCByZWYsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBpbmplY3RCb2R5PFRTaGFwZSBleHRlbmRzIEJvZHlTaGFwZVR5cGUsIFRPYmplY3QgZXh0ZW5kcyBPYmplY3QzRD4oXG5cdHR5cGU6IFRTaGFwZSxcblx0Z2V0UHJvcEZuOiBOZ3RjR2V0QnlJbmRleDxOZ3RjQm9keVByb3BzTWFwW1RTaGFwZV0+LFxuXHRyZWY6IEVsZW1lbnRSZWY8VE9iamVjdD4gfCBUT2JqZWN0IHwgU2lnbmFsPEVsZW1lbnRSZWY8VE9iamVjdD4gfCBUT2JqZWN0IHwgdW5kZWZpbmVkPixcblx0eyB0cmFuc2Zvcm1BcmdzLCBpbmplY3RvciB9OiBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlPiA9IHt9LFxuKTogU2lnbmFsPE5ndGNCb2R5UHVibGljQXBpIHwgbnVsbD4ge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Qm9keSwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwaHlzaWNzID0gaW5qZWN0KE5ndGNQaHlzaWNzLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0aWYgKCFwaHlzaWNzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFtOR1QgQ2Fubm9uXSBpbmplY3RCb2R5IHdhcyBjYWxsZWQgb3V0c2lkZSBvZiA8bmd0Yy1waHlzaWNzPmApO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0Y29uc3QgZGVidWcgPSBpbmplY3QoTmd0Y0RlYnVnLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgeyBhZGQ6IGFkZFRvRGVidWcsIHJlbW92ZTogcmVtb3ZlRnJvbURlYnVnIH0gPSBkZWJ1ZyB8fCB7fTtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1BcmdzID8/IGRlZmF1bHRUcmFuc2Zvcm1BcmdzW3R5cGVdO1xuXHRcdGNvbnN0IGJvZHlSZWYgPSBpc1NpZ25hbChyZWYpID8gcmVmIDogc2lnbmFsKHJlZik7XG5cdFx0Y29uc3QgYm9keSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keVJlZigpKSk7XG5cblx0XHRjb25zdCBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfYm9keSA9IGJvZHkoKTtcblx0XHRcdGlmICghX2JvZHkpIHJldHVybiBudWxsO1xuXHRcdFx0Y29uc3QgeyB3b3JrZXIsIC4uLnJlc3QgfSA9IHBoeXNpY3MuYXBpO1xuXHRcdFx0aWYgKCF3b3JrZXIoKSkgcmV0dXJuIG51bGw7XG5cdFx0XHRyZXR1cm4gbWFrZUJvZHlBcGkoX2JvZHksIHdvcmtlcigpLCBwaHlzaWNzLmFwaSk7XG5cdFx0fSk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRXb3JrZXIgPSBwaHlzaWNzLmFwaS53b3JrZXIoKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50V29ya2VyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keSgpO1xuXG5cdFx0XHRcdGlmICghaXNTaWduYWwocmVmKSAmJiAhb2JqZWN0KSB7XG5cdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdChib2R5UmVmIGFzIFdyaXRhYmxlU2lnbmFsPFRPYmplY3QgfCB1bmRlZmluZWQ+KS5zZXQocmVzb2x2ZVJlZihyZWYpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRcdGxldCB1dWlkczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRsZXQgdGVtcDogT2JqZWN0M0Q7XG5cdFx0XHRcdFx0aWYgKG9iamVjdCBpbnN0YW5jZW9mIEluc3RhbmNlZE1lc2gpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcblx0XHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0XHR0ZW1wID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdHV1aWRzLFxuXHRcdFx0XHRcdFx0dXVpZHMubWFwKChpZCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wRm4oaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0XHRcdHByZXBhcmUodGVtcCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5zZXRNYXRyaXhBdChpbmRleCwgdGVtcC5tYXRyaXgpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwaHlzaWNzLmFwaS5yZWZzW2lkXSA9IG9iamVjdDtcblx0XHRcdFx0XHRcdFx0YWRkVG9EZWJ1Zz8uKGlkLCBwcm9wcywgdHlwZSk7XG5cdFx0XHRcdFx0XHRcdHNldHVwQ29sbGlzaW9uKHBoeXNpY3MuYXBpLmV2ZW50cywgcHJvcHMsIGlkKTtcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIGlmIGFyZ3MgaXMgdW5kZWZpbmVkLCB0aGVyZSdzIGRlZmF1bHRcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcHMsIGFyZ3M6IHRyYW5zZm9ybShwcm9wcy5hcmdzKSB9O1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fSkoKTtcblx0XHRcdFx0Ly8gUmVnaXN0ZXIgb24gbW91bnQsIHVucmVnaXN0ZXIgb24gdW5tb3VudFxuXHRcdFx0XHRjdXJyZW50V29ya2VyLmFkZEJvZGllcyh7XG5cdFx0XHRcdFx0cHJvcHM6IHByb3BzLm1hcCgoeyBvbkNvbGxpZGUsIG9uQ29sbGlkZUJlZ2luLCBvbkNvbGxpZGVFbmQsIC4uLnNlcmlhbGl6YWJsZVByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB7IG9uQ29sbGlkZTogQm9vbGVhbihvbkNvbGxpZGUpLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9O1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0dXVpZCxcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHR1dWlkLmZvckVhY2goKGlkKSA9PiB7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5hcGkucmVmc1tpZF07XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tRGVidWc/LihpZCk7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5hcGkuZXZlbnRzW2lkXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRjdXJyZW50V29ya2VyLnJlbW92ZUJvZGllcyh7IHV1aWQgfSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBhcGk7XG5cdH0pO1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0Qm94ID0gY3JlYXRlSW5qZWN0Qm9keSgnQm94Jyk7XG5leHBvcnQgY29uc3QgaW5qZWN0Q29udmV4UG9seWhlZHJvbiA9IGNyZWF0ZUluamVjdEJvZHkoJ0NvbnZleFBvbHloZWRyb24nKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDeWxpbmRlciA9IGNyZWF0ZUluamVjdEJvZHkoJ0N5bGluZGVyJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0SGVpZ2h0ZmllbGQgPSBjcmVhdGVJbmplY3RCb2R5KCdIZWlnaHRmaWVsZCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdFBhcnRpY2xlID0gY3JlYXRlSW5qZWN0Qm9keSgnUGFydGljbGUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RQbGFuZSA9IGNyZWF0ZUluamVjdEJvZHkoJ1BsYW5lJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0U3BoZXJlID0gY3JlYXRlSW5qZWN0Qm9keSgnU3BoZXJlJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0VHJpbWVzaCA9IGNyZWF0ZUluamVjdEJvZHkoJ1RyaW1lc2gnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDb21wb3VuZCA9IGNyZWF0ZUluamVjdEJvZHkoJ0NvbXBvdW5kJyk7XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { afterNextRender, computed, isSignal, signal, untracked } from '@angular/core';
|
|
1
|
+
import { afterNextRender, computed, inject, isSignal, signal, untracked, } from '@angular/core';
|
|
2
2
|
import { makeId, resolveRef } from 'angular-three';
|
|
3
|
-
import {
|
|
3
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
4
4
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
5
5
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
6
|
function createInjectConstraint(type) {
|
|
@@ -8,12 +8,12 @@ function createInjectConstraint(type) {
|
|
|
8
8
|
}
|
|
9
9
|
function injectConstraint(type, bodyA, bodyB, { injector, options = {}, disableOnStart = false } = {}) {
|
|
10
10
|
return assertInjector(injectConstraint, injector, () => {
|
|
11
|
-
const
|
|
12
|
-
if (!
|
|
11
|
+
const physics = inject(NgtcPhysics, { optional: true });
|
|
12
|
+
if (!physics) {
|
|
13
13
|
throw new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);
|
|
14
14
|
}
|
|
15
15
|
const autoEffect = injectAutoEffect();
|
|
16
|
-
const worker =
|
|
16
|
+
const worker = physics.api.worker;
|
|
17
17
|
const uuid = makeId();
|
|
18
18
|
const bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);
|
|
19
19
|
const bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);
|
|
@@ -69,4 +69,4 @@ export const injectConeTwist = createInjectConstraint('ConeTwist');
|
|
|
69
69
|
export const injectDistance = createInjectConstraint('Distance');
|
|
70
70
|
export const injectLock = createInjectConstraint('Lock');
|
|
71
71
|
export const injectHinge = createInjectConstraint('Hinge');
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2NvbnN0cmFpbnQvc3JjL2xpYi9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVNySCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFrQzFELFNBQVMsc0JBQXNCLENBQWdELElBQWlCO0lBQy9GLE9BQU8sQ0FDTixLQUFnRSxFQUNoRSxLQUFnRSxFQUNoRSxPQUE0QyxFQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQW9CLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUt4QixJQUFpQixFQUNqQixLQUFnRSxFQUNoRSxLQUFnRSxFQUNoRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsRUFBUyxFQUFFLGNBQWMsR0FBRyxLQUFLLEtBQXlDLEVBQUU7SUFFbEcsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUN0RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDdkYs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ZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUMzQixDQUFDO29CQUVELE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztnQkFFRCxPQUFPO1lBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDekUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0b3IsIFNpZ25hbCwgYWZ0ZXJOZXh0UmVuZGVyLCBjb21wdXRlZCwgaXNTaWduYWwsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRDb25lVHdpc3RDb25zdHJhaW50T3B0cyxcblx0Q29uc3RyYWludFR5cGVzLFxuXHREaXN0YW5jZUNvbnN0cmFpbnRPcHRzLFxuXHRIaW5nZUNvbnN0cmFpbnRPcHRzLFxuXHRMb2NrQ29uc3RyYWludE9wdHMsXG5cdFBvaW50VG9Qb2ludENvbnN0cmFpbnRPcHRzLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IG1ha2VJZCwgcmVzb2x2ZVJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0UGh5c2ljc0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0NvbnN0cmFpbnRBcGkge1xuXHRkaXNhYmxlOiAoKSA9PiB2b2lkO1xuXHRlbmFibGU6ICgpID0+IHZvaWQ7XG5cdHJlbW92ZTogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjSGluZ2VDb25zdHJhaW50QXBpIGV4dGVuZHMgTmd0Y0NvbnN0cmFpbnRBcGkge1xuXHRkaXNhYmxlTW90b3I6ICgpID0+IHZvaWQ7XG5cdGVuYWJsZU1vdG9yOiAoKSA9PiB2b2lkO1xuXHRzZXRNb3Rvck1heEZvcmNlOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblx0c2V0TW90b3JTcGVlZDogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNDb25zdHJhaW50T1JIaW5nZUFwaTxUIGV4dGVuZHMgJ0hpbmdlJyB8IENvbnN0cmFpbnRUeXBlcz4gPSBUIGV4dGVuZHMgQ29uc3RyYWludFR5cGVzXG5cdD8gTmd0Y0NvbnN0cmFpbnRBcGlcblx0OiBOZ3RjSGluZ2VDb25zdHJhaW50QXBpO1xuXG5leHBvcnQgdHlwZSBOZ3RjQ29uc3RyYWludE9wdGlvbnNNYXAgPSB7XG5cdENvbmVUd2lzdDogQ29uZVR3aXN0Q29uc3RyYWludE9wdHM7XG5cdFBvaW50VG9Qb2ludDogUG9pbnRUb1BvaW50Q29uc3RyYWludE9wdHM7XG5cdERpc3RhbmNlOiBEaXN0YW5jZUNvbnN0cmFpbnRPcHRzO1xuXHRMb2NrOiBMb2NrQ29uc3RyYWludE9wdHM7XG5cdEhpbmdlOiBIaW5nZUNvbnN0cmFpbnRPcHRzO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y0NvbnN0cmFpbnRPcHRpb25zPFRDb25zdHJhaW50VHlwZSBleHRlbmRzICdIaW5nZScgfCBDb25zdHJhaW50VHlwZXM+ID0ge1xuXHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHRkaXNhYmxlT25TdGFydD86IGJvb2xlYW47XG5cdG9wdGlvbnM/OiBOZ3RjQ29uc3RyYWludE9wdGlvbnNNYXBbVENvbnN0cmFpbnRUeXBlXTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUluamVjdENvbnN0cmFpbnQ8VENvbnN0cmFpbnQgZXh0ZW5kcyBDb25zdHJhaW50VHlwZXMgfCAnSGluZ2UnPih0eXBlOiBUQ29uc3RyYWludCkge1xuXHRyZXR1cm4gPEEgZXh0ZW5kcyBPYmplY3QzRCA9IE9iamVjdDNELCBCIGV4dGVuZHMgT2JqZWN0M0QgPSBPYmplY3QzRD4oXG5cdFx0Ym9keUE6IEVsZW1lbnRSZWY8QT4gfCBBIHwgU2lnbmFsPEVsZW1lbnRSZWY8QT4gfCBBIHwgdW5kZWZpbmVkPixcblx0XHRib2R5QjogRWxlbWVudFJlZjxCPiB8IEIgfCBTaWduYWw8RWxlbWVudFJlZjxCPiB8IEIgfCB1bmRlZmluZWQ+LFxuXHRcdG9wdGlvbnM/OiBOZ3RjQ29uc3RyYWludE9wdGlvbnM8VENvbnN0cmFpbnQ+LFxuXHQpID0+IGluamVjdENvbnN0cmFpbnQ8VENvbnN0cmFpbnQsIEEsIEI+KHR5cGUsIGJvZHlBLCBib2R5Qiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdENvbnN0cmFpbnQ8XG5cdFRDb25zdHJhaW50IGV4dGVuZHMgQ29uc3RyYWludFR5cGVzIHwgJ0hpbmdlJyxcblx0QSBleHRlbmRzIE9iamVjdDNEID0gT2JqZWN0M0QsXG5cdEIgZXh0ZW5kcyBPYmplY3QzRCA9IE9iamVjdDNELFxuPihcblx0dHlwZTogVENvbnN0cmFpbnQsXG5cdGJvZHlBOiBFbGVtZW50UmVmPEE+IHwgQSB8IFNpZ25hbDxFbGVtZW50UmVmPEE+IHwgQSB8IHVuZGVmaW5lZD4sXG5cdGJvZHlCOiBFbGVtZW50UmVmPEI+IHwgQiB8IFNpZ25hbDxFbGVtZW50UmVmPEI+IHwgQiB8IHVuZGVmaW5lZD4sXG5cdHsgaW5qZWN0b3IsIG9wdGlvbnMgPSB7fSBhcyBhbnksIGRpc2FibGVPblN0YXJ0ID0gZmFsc2UgfTogTmd0Y0NvbnN0cmFpbnRPcHRpb25zPFRDb25zdHJhaW50PiA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RDb25zdHJhaW50LCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBoeXNpY3NBcGkgPSBpbmplY3RQaHlzaWNzQXBpKHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0XHRpZiAoIXBoeXNpY3NBcGkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgW05HVCBDYW5ub25dIGluamVjdENvbnN0cmFpbnQgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIDxuZ3RjLXBoeXNpY3M+YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCB3b3JrZXIgPSBwaHlzaWNzQXBpLndvcmtlcjtcblxuXHRcdGNvbnN0IHV1aWQgPSBtYWtlSWQoKTtcblx0XHRjb25zdCBib2R5QVJlZiA9IGlzU2lnbmFsKGJvZHlBKSA/IGJvZHlBIDogc2lnbmFsKGJvZHlBKTtcblx0XHRjb25zdCBib2R5QlJlZiA9IGlzU2lnbmFsKGJvZHlCKSA/IGJvZHlCIDogc2lnbmFsKGJvZHlCKTtcblx0XHRjb25zdCBib2R5QVZhbHVlID0gY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZVJlZihib2R5QVJlZigpKSk7XG5cdFx0Y29uc3QgYm9keUJWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keUJSZWYoKSkpO1xuXG5cdFx0Y29uc3QgYXBpID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgX3dvcmtlciA9IHdvcmtlcigpO1xuXHRcdFx0aWYgKCFfd29ya2VyKSByZXR1cm4gbnVsbDtcblxuXHRcdFx0Y29uc3QgZW5hYmxlRGlzYWJsZSA9IHtcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gX3dvcmtlci5kaXNhYmxlQ29uc3RyYWludCh7IHV1aWQgfSksXG5cdFx0XHRcdGVuYWJsZTogKCkgPT4gX3dvcmtlci5lbmFibGVDb25zdHJhaW50KHsgdXVpZCB9KSxcblx0XHRcdFx0cmVtb3ZlOiAoKSA9PiBfd29ya2VyLnJlbW92ZUNvbnN0cmFpbnQoeyB1dWlkIH0pLFxuXHRcdFx0fTtcblx0XHRcdGlmICh0eXBlID09PSAnSGluZ2UnKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4uZW5hYmxlRGlzYWJsZSxcblx0XHRcdFx0XHRkaXNhYmxlTW90b3I6ICgpID0+IF93b3JrZXIuZGlzYWJsZUNvbnN0cmFpbnRNb3Rvcih7IHV1aWQgfSksXG5cdFx0XHRcdFx0ZW5hYmxlTW90b3I6ICgpID0+IF93b3JrZXIuZW5hYmxlQ29uc3RyYWludE1vdG9yKHsgdXVpZCB9KSxcblx0XHRcdFx0XHRzZXRNb3Rvck1heEZvcmNlOiAodmFsdWU6IG51bWJlcikgPT4gX3dvcmtlci5zZXRDb25zdHJhaW50TW90b3JNYXhGb3JjZSh7IHByb3BzOiB2YWx1ZSwgdXVpZCB9KSxcblx0XHRcdFx0XHRzZXRNb3RvclNwZWVkOiAodmFsdWU6IG51bWJlcikgPT4gX3dvcmtlci5zZXRDb25zdHJhaW50TW90b3JTcGVlZCh7IHByb3BzOiB2YWx1ZSwgdXVpZCB9KSxcblx0XHRcdFx0fSBhcyBOZ3RjSGluZ2VDb25zdHJhaW50QXBpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZURpc2FibGUgYXMgTmd0Y0NvbnN0cmFpbnRBcGk7XG5cdFx0fSk7XG5cblx0XHRsZXQgYWxyZWFkeURpc2FibGVkID0gZmFsc2U7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gd29ya2VyKCk7XG5cdFx0XHRcdGlmICghY3VycmVudFdvcmtlcikgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFthLCBiXSA9IFtib2R5QVZhbHVlKCksIGJvZHlCVmFsdWUoKV07XG5cblx0XHRcdFx0aWYgKGEgJiYgYikge1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIuYWRkQ29uc3RyYWludCh7XG5cdFx0XHRcdFx0XHRwcm9wczogW2EudXVpZCwgYi51dWlkLCBvcHRpb25zXSxcblx0XHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0XHR1dWlkLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGRpc2FibGVPblN0YXJ0ICYmICFhbHJlYWR5RGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdGFscmVhZHlEaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR1bnRyYWNrZWQoYXBpKT8uZGlzYWJsZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoKSA9PiBjdXJyZW50V29ya2VyLnJlbW92ZUNvbnN0cmFpbnQoeyB1dWlkIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdFBvaW50VG9Qb2ludCA9IGNyZWF0ZUluamVjdENvbnN0cmFpbnQoJ1BvaW50VG9Qb2ludCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdENvbmVUd2lzdCA9IGNyZWF0ZUluamVjdENvbnN0cmFpbnQoJ0NvbmVUd2lzdCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdERpc3RhbmNlID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnRGlzdGFuY2UnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RMb2NrID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnTG9jaycpO1xuZXhwb3J0IGNvbnN0IGluamVjdEhpbmdlID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnSGluZ2UnKTtcbiJdfQ==
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2NvbnN0cmFpbnQvc3JjL2xpYi9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQVN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBa0MxRCxTQUFTLHNCQUFzQixDQUFnRCxJQUFpQjtJQUMvRixPQUFPLENBQ04sS0FBZ0UsRUFDaEUsS0FBZ0UsRUFDaEUsT0FBNEMsRUFDM0MsRUFBRSxDQUFDLGdCQUFnQixDQUFvQixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FLeEIsSUFBaUIsRUFDakIsS0FBZ0UsRUFDaEUsS0FBZ0UsRUFDaEUsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQVMsRUFBRSxjQUFjLEdBQUcsS0FBSyxLQUF5QyxFQUFFO0lBRWxHLE9BQU8sY0FBYyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENB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QUFlLEVBQUUsQ0FBQzt3QkFDeEMsZUFBZSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUMzQixDQUFDO29CQUVELE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztnQkFFRCxPQUFPO1lBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDekUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdFNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5qZWN0LFxuXHRpc1NpZ25hbCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Q29uZVR3aXN0Q29uc3RyYWludE9wdHMsXG5cdENvbnN0cmFpbnRUeXBlcyxcblx0RGlzdGFuY2VDb25zdHJhaW50T3B0cyxcblx0SGluZ2VDb25zdHJhaW50T3B0cyxcblx0TG9ja0NvbnN0cmFpbnRPcHRzLFxuXHRQb2ludFRvUG9pbnRDb25zdHJhaW50T3B0cyxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBtYWtlSWQsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndGNQaHlzaWNzIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQ29uc3RyYWludEFwaSB7XG5cdGRpc2FibGU6ICgpID0+IHZvaWQ7XG5cdGVuYWJsZTogKCkgPT4gdm9pZDtcblx0cmVtb3ZlOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNIaW5nZUNvbnN0cmFpbnRBcGkgZXh0ZW5kcyBOZ3RjQ29uc3RyYWludEFwaSB7XG5cdGRpc2FibGVNb3RvcjogKCkgPT4gdm9pZDtcblx0ZW5hYmxlTW90b3I6ICgpID0+IHZvaWQ7XG5cdHNldE1vdG9yTWF4Rm9yY2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkO1xuXHRzZXRNb3RvclNwZWVkOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y0NvbnN0cmFpbnRPUkhpbmdlQXBpPFQgZXh0ZW5kcyAnSGluZ2UnIHwgQ29uc3RyYWludFR5cGVzPiA9IFQgZXh0ZW5kcyBDb25zdHJhaW50VHlwZXNcblx0PyBOZ3RjQ29uc3RyYWludEFwaVxuXHQ6IE5ndGNIaW5nZUNvbnN0cmFpbnRBcGk7XG5cbmV4cG9ydCB0eXBlIE5ndGNDb25zdHJhaW50T3B0aW9uc01hcCA9IHtcblx0Q29uZVR3aXN0OiBDb25lVHdpc3RDb25zdHJhaW50T3B0cztcblx0UG9pbnRUb1BvaW50OiBQb2ludFRvUG9pbnRDb25zdHJhaW50T3B0cztcblx0RGlzdGFuY2U6IERpc3RhbmNlQ29uc3RyYWludE9wdHM7XG5cdExvY2s6IExvY2tDb25zdHJhaW50T3B0cztcblx0SGluZ2U6IEhpbmdlQ29uc3RyYWludE9wdHM7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjQ29uc3RyYWludE9wdGlvbnM8VENvbnN0cmFpbnRUeXBlIGV4dGVuZHMgJ0hpbmdlJyB8IENvbnN0cmFpbnRUeXBlcz4gPSB7XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG5cdGRpc2FibGVPblN0YXJ0PzogYm9vbGVhbjtcblx0b3B0aW9ucz86IE5ndGNDb25zdHJhaW50T3B0aW9uc01hcFtUQ29uc3RyYWludFR5cGVdO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlSW5qZWN0Q29uc3RyYWludDxUQ29uc3RyYWludCBleHRlbmRzIENvbnN0cmFpbnRUeXBlcyB8ICdIaW5nZSc+KHR5cGU6IFRDb25zdHJhaW50KSB7XG5cdHJldHVybiA8QSBleHRlbmRzIE9iamVjdDNEID0gT2JqZWN0M0QsIEIgZXh0ZW5kcyBPYmplY3QzRCA9IE9iamVjdDNEPihcblx0XHRib2R5QTogRWxlbWVudFJlZjxBPiB8IEEgfCBTaWduYWw8RWxlbWVudFJlZjxBPiB8IEEgfCB1bmRlZmluZWQ+LFxuXHRcdGJvZHlCOiBFbGVtZW50UmVmPEI+IHwgQiB8IFNpZ25hbDxFbGVtZW50UmVmPEI+IHwgQiB8IHVuZGVmaW5lZD4sXG5cdFx0b3B0aW9ucz86IE5ndGNDb25zdHJhaW50T3B0aW9uczxUQ29uc3RyYWludD4sXG5cdCkgPT4gaW5qZWN0Q29uc3RyYWludDxUQ29uc3RyYWludCwgQSwgQj4odHlwZSwgYm9keUEsIGJvZHlCLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0Q29uc3RyYWludDxcblx0VENvbnN0cmFpbnQgZXh0ZW5kcyBDb25zdHJhaW50VHlwZXMgfCAnSGluZ2UnLFxuXHRBIGV4dGVuZHMgT2JqZWN0M0QgPSBPYmplY3QzRCxcblx0QiBleHRlbmRzIE9iamVjdDNEID0gT2JqZWN0M0QsXG4+KFxuXHR0eXBlOiBUQ29uc3RyYWludCxcblx0Ym9keUE6IEVsZW1lbnRSZWY8QT4gfCBBIHwgU2lnbmFsPEVsZW1lbnRSZWY8QT4gfCBBIHwgdW5kZWZpbmVkPixcblx0Ym9keUI6IEVsZW1lbnRSZWY8Qj4gfCBCIHwgU2lnbmFsPEVsZW1lbnRSZWY8Qj4gfCBCIHwgdW5kZWZpbmVkPixcblx0eyBpbmplY3Rvciwgb3B0aW9ucyA9IHt9IGFzIGFueSwgZGlzYWJsZU9uU3RhcnQgPSBmYWxzZSB9OiBOZ3RjQ29uc3RyYWludE9wdGlvbnM8VENvbnN0cmFpbnQ+ID0ge30sXG4pIHtcblx0cmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdENvbnN0cmFpbnQsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcGh5c2ljcyA9IGluamVjdChOZ3RjUGh5c2ljcywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRcdGlmICghcGh5c2ljcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBbTkdUIENhbm5vbl0gaW5qZWN0Q29uc3RyYWludCB3YXMgY2FsbGVkIG91dHNpZGUgb2YgPG5ndGMtcGh5c2ljcz5gKTtcblx0XHR9XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGNvbnN0IHdvcmtlciA9IHBoeXNpY3MuYXBpLndvcmtlcjtcblxuXHRcdGNvbnN0IHV1aWQgPSBtYWtlSWQoKTtcblx0XHRjb25zdCBib2R5QVJlZiA9IGlzU2lnbmFsKGJvZHlBKSA/IGJvZHlBIDogc2lnbmFsKGJvZHlBKTtcblx0XHRjb25zdCBib2R5QlJlZiA9IGlzU2lnbmFsKGJvZHlCKSA/IGJvZHlCIDogc2lnbmFsKGJvZHlCKTtcblx0XHRjb25zdCBib2R5QVZhbHVlID0gY29tcHV0ZWQoKCkgPT4gcmVzb2x2ZVJlZihib2R5QVJlZigpKSk7XG5cdFx0Y29uc3QgYm9keUJWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keUJSZWYoKSkpO1xuXG5cdFx0Y29uc3QgYXBpID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgX3dvcmtlciA9IHdvcmtlcigpO1xuXHRcdFx0aWYgKCFfd29ya2VyKSByZXR1cm4gbnVsbDtcblxuXHRcdFx0Y29uc3QgZW5hYmxlRGlzYWJsZSA9IHtcblx0XHRcdFx0ZGlzYWJsZTogKCkgPT4gX3dvcmtlci5kaXNhYmxlQ29uc3RyYWludCh7IHV1aWQgfSksXG5cdFx0XHRcdGVuYWJsZTogKCkgPT4gX3dvcmtlci5lbmFibGVDb25zdHJhaW50KHsgdXVpZCB9KSxcblx0XHRcdFx0cmVtb3ZlOiAoKSA9PiBfd29ya2VyLnJlbW92ZUNvbnN0cmFpbnQoeyB1dWlkIH0pLFxuXHRcdFx0fTtcblx0XHRcdGlmICh0eXBlID09PSAnSGluZ2UnKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4uZW5hYmxlRGlzYWJsZSxcblx0XHRcdFx0XHRkaXNhYmxlTW90b3I6ICgpID0+IF93b3JrZXIuZGlzYWJsZUNvbnN0cmFpbnRNb3Rvcih7IHV1aWQgfSksXG5cdFx0XHRcdFx0ZW5hYmxlTW90b3I6ICgpID0+IF93b3JrZXIuZW5hYmxlQ29uc3RyYWludE1vdG9yKHsgdXVpZCB9KSxcblx0XHRcdFx0XHRzZXRNb3Rvck1heEZvcmNlOiAodmFsdWU6IG51bWJlcikgPT4gX3dvcmtlci5zZXRDb25zdHJhaW50TW90b3JNYXhGb3JjZSh7IHByb3BzOiB2YWx1ZSwgdXVpZCB9KSxcblx0XHRcdFx0XHRzZXRNb3RvclNwZWVkOiAodmFsdWU6IG51bWJlcikgPT4gX3dvcmtlci5zZXRDb25zdHJhaW50TW90b3JTcGVlZCh7IHByb3BzOiB2YWx1ZSwgdXVpZCB9KSxcblx0XHRcdFx0fSBhcyBOZ3RjSGluZ2VDb25zdHJhaW50QXBpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZURpc2FibGUgYXMgTmd0Y0NvbnN0cmFpbnRBcGk7XG5cdFx0fSk7XG5cblx0XHRsZXQgYWxyZWFkeURpc2FibGVkID0gZmFsc2U7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gd29ya2VyKCk7XG5cdFx0XHRcdGlmICghY3VycmVudFdvcmtlcikgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFthLCBiXSA9IFtib2R5QVZhbHVlKCksIGJvZHlCVmFsdWUoKV07XG5cblx0XHRcdFx0aWYgKGEgJiYgYikge1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIuYWRkQ29uc3RyYWludCh7XG5cdFx0XHRcdFx0XHRwcm9wczogW2EudXVpZCwgYi51dWlkLCBvcHRpb25zXSxcblx0XHRcdFx0XHRcdHR5cGUsXG5cdFx0XHRcdFx0XHR1dWlkLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKGRpc2FibGVPblN0YXJ0ICYmICFhbHJlYWR5RGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdGFscmVhZHlEaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR1bnRyYWNrZWQoYXBpKT8uZGlzYWJsZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoKSA9PiBjdXJyZW50V29ya2VyLnJlbW92ZUNvbnN0cmFpbnQoeyB1dWlkIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGluamVjdFBvaW50VG9Qb2ludCA9IGNyZWF0ZUluamVjdENvbnN0cmFpbnQoJ1BvaW50VG9Qb2ludCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdENvbmVUd2lzdCA9IGNyZWF0ZUluamVjdENvbnN0cmFpbnQoJ0NvbmVUd2lzdCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdERpc3RhbmNlID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnRGlzdGFuY2UnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RMb2NrID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnTG9jaycpO1xuZXhwb3J0IGNvbnN0IGluamVjdEhpbmdlID0gY3JlYXRlSW5qZWN0Q29uc3RyYWludCgnSGluZ2UnKTtcbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Directive, afterNextRender, input } from '@angular/core';
|
|
1
|
+
import { Directive, afterNextRender, inject, input } from '@angular/core';
|
|
2
2
|
import { propsToBody } from '@pmndrs/cannon-worker-api';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { injectBeforeRender, injectStore } from 'angular-three';
|
|
4
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
5
5
|
import CannonDebugger from 'cannon-es-debugger';
|
|
6
6
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
7
|
import { InstancedMesh, Matrix4, Quaternion, Scene, Vector3 } from 'three';
|
|
@@ -17,7 +17,6 @@ function getMatrix(o) {
|
|
|
17
17
|
}
|
|
18
18
|
return o.matrix;
|
|
19
19
|
}
|
|
20
|
-
export const [injectNgtcDebugApi, provideNgtcDebugApi] = createApiToken(() => NgtcDebug);
|
|
21
20
|
const defaultOptions = {
|
|
22
21
|
enabled: true,
|
|
23
22
|
scale: 1,
|
|
@@ -27,25 +26,13 @@ const defaultOptions = {
|
|
|
27
26
|
export class NgtcDebug {
|
|
28
27
|
constructor() {
|
|
29
28
|
this.store = injectStore();
|
|
30
|
-
this.
|
|
29
|
+
this.physics = inject(NgtcPhysics);
|
|
31
30
|
this.debug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
32
31
|
this.defaultScene = this.store.select('scene');
|
|
33
32
|
this.scene = new Scene();
|
|
34
33
|
this.bodies = [];
|
|
35
34
|
this.bodyMap = {};
|
|
36
|
-
this.api = {
|
|
37
|
-
add: (uuid, props, type) => {
|
|
38
|
-
const body = propsToBody({ uuid, props, type });
|
|
39
|
-
this.bodies.push(body);
|
|
40
|
-
this.bodyMap[uuid] = body;
|
|
41
|
-
},
|
|
42
|
-
remove: (uuid) => {
|
|
43
|
-
const debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);
|
|
44
|
-
if (debugBodyIndex > -1)
|
|
45
|
-
this.bodies.splice(debugBodyIndex, 1);
|
|
46
|
-
delete this.bodyMap[uuid];
|
|
47
|
-
},
|
|
48
|
-
};
|
|
35
|
+
this.api = {};
|
|
49
36
|
afterNextRender(() => {
|
|
50
37
|
this.defaultScene().add(this.scene);
|
|
51
38
|
this.cannonDebugger = this.debug().impl(this.scene, { bodies: this.bodies }, {
|
|
@@ -56,7 +43,7 @@ export class NgtcDebug {
|
|
|
56
43
|
injectBeforeRender(() => {
|
|
57
44
|
if (!this.cannonDebugger)
|
|
58
45
|
return;
|
|
59
|
-
const refs = this.
|
|
46
|
+
const refs = this.physics.api.refs;
|
|
60
47
|
for (const uuid in this.bodyMap) {
|
|
61
48
|
const ref = refs[uuid];
|
|
62
49
|
const body = this.bodyMap[uuid];
|
|
@@ -74,11 +61,22 @@ export class NgtcDebug {
|
|
|
74
61
|
}
|
|
75
62
|
});
|
|
76
63
|
}
|
|
64
|
+
add(uuid, props, type) {
|
|
65
|
+
const body = propsToBody({ uuid, props, type });
|
|
66
|
+
this.bodies.push(body);
|
|
67
|
+
this.bodyMap[uuid] = body;
|
|
68
|
+
}
|
|
69
|
+
remove(uuid) {
|
|
70
|
+
const debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);
|
|
71
|
+
if (debugBodyIndex > -1)
|
|
72
|
+
this.bodies.splice(debugBodyIndex, 1);
|
|
73
|
+
delete this.bodyMap[uuid];
|
|
74
|
+
}
|
|
77
75
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
78
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } },
|
|
76
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
79
77
|
}
|
|
80
78
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcDebug, decorators: [{
|
|
81
79
|
type: Directive,
|
|
82
|
-
args: [{ selector: 'ngtc-physics[debug]', standalone: true
|
|
80
|
+
args: [{ selector: 'ngtc-physics[debug]', standalone: true }]
|
|
83
81
|
}], ctorParameters: () => [] });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvbGliL2RlYnVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLGNBQWMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXJGLE1BQU0sQ0FBQyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDM0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDeEIsU0FBUyxTQUFTLENBQUMsQ0FBVztJQUM3QixJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFDO0lB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LElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDOzhHQXpEVyxTQUFTO2tHQUFULFNBQVM7OzJGQUFULFNBQVM7a0JBRHJCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgYWZ0ZXJOZXh0UmVuZGVyLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb2R5UHJvcHMsIEJvZHlTaGFwZVR5cGUsIHByb3BzVG9Cb2R5IH0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RjUGh5c2ljcyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IEJvZHksIFF1YXRlcm5pb24gYXMgQ1F1YXJ0ZXJuaW9uLCBWZWMzLCBXb3JsZCB9IGZyb20gJ2Nhbm5vbi1lcyc7XG5pbXBvcnQgQ2Fubm9uRGVidWdnZXIgZnJvbSAnY2Fubm9uLWVzLWRlYnVnZ2VyJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEluc3RhbmNlZE1lc2gsIE1hdHJpeDQsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBTY2VuZSwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgcSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5jb25zdCBzID0gbmV3IFZlY3RvcjMoMSwgMSwgMSk7XG5jb25zdCB2ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IG0gPSBuZXcgTWF0cml4NCgpO1xuZnVuY3Rpb24gZ2V0TWF0cml4KG86IE9iamVjdDNEKSB7XG5cdGlmIChvIGluc3RhbmNlb2YgSW5zdGFuY2VkTWVzaCkge1xuXHRcdG8uZ2V0TWF0cml4QXQocGFyc2VJbnQoby51dWlkLnNwbGl0KCcvJylbMV0pLCBtKTtcblx0XHRyZXR1cm4gbTtcblx0fVxuXHRyZXR1cm4gby5tYXRyaXg7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0RlYnVnSW5wdXRzIHtcblx0ZW5hYmxlZDogYm9vbGVhbjtcblx0Y29sb3I6IHN0cmluZztcblx0aW1wbDogdHlwZW9mIENhbm5vbkRlYnVnZ2VyO1xuXHRzY2FsZTogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0Y0RlYnVnSW5wdXRzID0ge1xuXHRlbmFibGVkOiB0cnVlLFxuXHRzY2FsZTogMSxcblx0Y29sb3I6ICdibGFjaycsXG5cdGltcGw6IENhbm5vbkRlYnVnZ2VyLFxufTtcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmd0Yy1waHlzaWNzW2RlYnVnXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RjRGVidWcge1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBwaHlzaWNzID0gaW5qZWN0KE5ndGNQaHlzaWNzKTtcblxuXHRkZWJ1ZyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdHByaXZhdGUgZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cblx0cHJpdmF0ZSBzY2VuZSA9IG5ldyBTY2VuZSgpO1xuXHRwcml2YXRlIGJvZGllczogQm9keVtdID0gW107XG5cdHByaXZhdGUgYm9keU1hcDogUmVjb3JkPHN0cmluZywgQm9keT4gPSB7fTtcblxuXHRwcml2YXRlIGNhbm5vbkRlYnVnZ2VyITogUmV0dXJuVHlwZTx0eXBlb2YgQ2Fubm9uRGVidWdnZXI+O1xuXG5cdGFwaSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmRlZmF1bHRTY2VuZSgpLmFkZCh0aGlzLnNjZW5lKTtcblx0XHRcdHRoaXMuY2Fubm9uRGVidWdnZXIgPSB0aGlzLmRlYnVnKCkuaW1wbCh0aGlzLnNjZW5lLCB7IGJvZGllczogdGhpcy5ib2RpZXMgfSBhcyBXb3JsZCwge1xuXHRcdFx0XHRjb2xvcjogdGhpcy5kZWJ1ZygpLmNvbG9yLFxuXHRcdFx0XHRzY2FsZTogdGhpcy5kZWJ1ZygpLnNjYWxlLFxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLmNhbm5vbkRlYnVnZ2VyKSByZXR1cm47XG5cdFx0XHRjb25zdCByZWZzID0gdGhpcy5waHlzaWNzLmFwaS5yZWZzO1xuXHRcdFx0Zm9yIChjb25zdCB1dWlkIGluIHRoaXMuYm9keU1hcCkge1xuXHRcdFx0XHRjb25zdCByZWYgPSByZWZzW3V1aWRdO1xuXHRcdFx0XHRjb25zdCBib2R5ID0gdGhpcy5ib2R5TWFwW3V1aWRdO1xuXHRcdFx0XHRpZiAocmVmKSB7XG5cdFx0XHRcdFx0Z2V0TWF0cml4KHJlZikuZGVjb21wb3NlKHYsIHEsIHMpO1xuXHRcdFx0XHRcdGJvZHkucG9zaXRpb24uY29weSh2IGFzIHVua25vd24gYXMgVmVjMyk7XG5cdFx0XHRcdFx0Ym9keS5xdWF0ZXJuaW9uLmNvcHkocSBhcyB1bmtub3duIGFzIENRdWFydGVybmlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5zY2VuZS5jaGlsZHJlbikge1xuXHRcdFx0XHRjaGlsZC52aXNpYmxlID0gdGhpcy5kZWJ1ZygpLmVuYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmRlYnVnKCkuZW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLmNhbm5vbkRlYnVnZ2VyLnVwZGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0YWRkKHV1aWQ6IHN0cmluZywgcHJvcHM6IEJvZHlQcm9wcywgdHlwZTogQm9keVNoYXBlVHlwZSkge1xuXHRcdGNvbnN0IGJvZHkgPSBwcm9wc1RvQm9keSh7IHV1aWQsIHByb3BzLCB0eXBlIH0pO1xuXHRcdHRoaXMuYm9kaWVzLnB1c2goYm9keSk7XG5cdFx0dGhpcy5ib2R5TWFwW3V1aWRdID0gYm9keTtcblx0fVxuXG5cdHJlbW92ZSh1dWlkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBkZWJ1Z0JvZHlJbmRleCA9IHRoaXMuYm9kaWVzLmluZGV4T2YodGhpcy5ib2R5TWFwW3V1aWRdKTtcblx0XHRpZiAoZGVidWdCb2R5SW5kZXggPiAtMSkgdGhpcy5ib2RpZXMuc3BsaWNlKGRlYnVnQm9keUluZGV4LCAxKTtcblx0XHRkZWxldGUgdGhpcy5ib2R5TWFwW3V1aWRdO1xuXHR9XG59XG4iXX0=
|
package/esm2022/lib/physics.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, DestroyRef, Injector, NgZone, afterNextRender, computed, inject, input, signal, untracked, } from '@angular/core';
|
|
2
2
|
import { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';
|
|
3
|
-
import {
|
|
3
|
+
import { injectBeforeRender, injectStore } from 'angular-three';
|
|
4
4
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
5
5
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
6
6
|
import { InstancedMesh, Matrix4, Quaternion, Vector3 } from 'three';
|
|
@@ -24,7 +24,6 @@ function unique() {
|
|
|
24
24
|
const values = [];
|
|
25
25
|
return (value) => (values.includes(value) ? false : !!values.push(value));
|
|
26
26
|
}
|
|
27
|
-
export const [injectPhysicsApi, providePhysicsApi] = createApiToken(() => NgtcPhysics);
|
|
28
27
|
const defaultOptions = {
|
|
29
28
|
allowSleep: false,
|
|
30
29
|
axisIndex: 0,
|
|
@@ -181,7 +180,7 @@ export class NgtcPhysics {
|
|
|
181
180
|
cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
182
181
|
}
|
|
183
182
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
184
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } },
|
|
183
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
185
184
|
<ng-content />
|
|
186
185
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
187
186
|
}
|
|
@@ -194,7 +193,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
194
193
|
<ng-content />
|
|
195
194
|
`,
|
|
196
195
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
197
|
-
providers: [providePhysicsApi()],
|
|
198
196
|
}]
|
|
199
197
|
}], ctorParameters: () => [] });
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBRVYsUUFBUSxFQUNSLE1BQU0sRUFFTixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sZUFBZSxHQWFmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFZLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRTlFLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFeEIsU0FBUyxLQUFLLENBQ2IsS0FBYSxFQUNiLFNBQTRCLEVBQzVCLFdBQThCLEVBQzlCLEtBQUssR0FBRyxDQUFDLEVBQ1QsTUFBaUI7SUFFakIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNB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LEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7OEdBN0pXLFdBQVc7a0dBQVgsV0FBVyxxTUFGWixDQUFDLGlCQUFpQixFQUFFLENBQUMsMEJBSnRCOztFQUVUOzsyRkFJVyxXQUFXO2tCQVR2QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOztFQUVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdERlc3Ryb3lSZWYsXG5cdEVtYmVkZGVkVmlld1JlZixcblx0SW5qZWN0b3IsXG5cdE5nWm9uZSxcblx0U2lnbmFsLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRDYW5ub25Xb3JrZXJBUEksXG5cdENhbm5vbldvcmtlclByb3BzLFxuXHRDb2xsaWRlQmVnaW5FdmVudCxcblx0Q29sbGlkZUVuZEV2ZW50LFxuXHRDb2xsaWRlRXZlbnQsXG5cdFJheWhpdEV2ZW50LFxuXHRSZWZzLFxuXHRTdWJzY3JpcHRpb25zLFxuXHRXb3JrZXJDb2xsaWRlQmVnaW5FdmVudCxcblx0V29ya2VyQ29sbGlkZUVuZEV2ZW50LFxuXHRXb3JrZXJDb2xsaWRlRXZlbnQsXG5cdFdvcmtlckZyYW1lTWVzc2FnZSxcblx0V29ya2VyUmF5aGl0RXZlbnQsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgY3JlYXRlQXBpVG9rZW4sIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEluc3RhbmNlZE1lc2gsIE1hdHJpeDQsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuXG5jb25zdCB2ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHEgPSBuZXcgUXVhdGVybmlvbigpO1xuY29uc3QgbSA9IG5ldyBNYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGFwcGx5KFxuXHRpbmRleDogbnVtYmVyLFxuXHRwb3NpdGlvbnM6IEFycmF5TGlrZTxudW1iZXI+LFxuXHRxdWF0ZXJuaW9uczogQXJyYXlMaWtlPG51bWJlcj4sXG5cdHNjYWxlID0gcyxcblx0b2JqZWN0PzogT2JqZWN0M0QsXG4pIHtcblx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRtLmNvbXBvc2Uodi5mcm9tQXJyYXkocG9zaXRpb25zLCBpbmRleCAqIDMpLCBxLmZyb21BcnJheShxdWF0ZXJuaW9ucywgaW5kZXggKiA0KSwgc2NhbGUpO1xuXHRcdGlmIChvYmplY3QpIHtcblx0XHRcdG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRvYmplY3QubWF0cml4LmNvcHkobSk7XG5cdFx0fVxuXHRcdHJldHVybiBtO1xuXHR9XG5cdHJldHVybiBtLmlkZW50aXR5KCk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcblx0Y29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcblx0cmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKHZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPyBmYWxzZSA6ICEhdmFsdWVzLnB1c2godmFsdWUpKTtcbn1cblxuZXhwb3J0IGNvbnN0IFtpbmplY3RQaHlzaWNzQXBpLCBwcm92aWRlUGh5c2ljc0FwaV0gPSBjcmVhdGVBcGlUb2tlbigoKSA9PiBOZ3RjUGh5c2ljcyk7XG5cbnR5cGUgTmd0Y0Nhbm5vbkV2ZW50ID0gQ29sbGlkZUJlZ2luRXZlbnQgfCBDb2xsaWRlRW5kRXZlbnQgfCBDb2xsaWRlRXZlbnQgfCBSYXloaXRFdmVudDtcbnR5cGUgTmd0Y0NhbGxiYWNrQnlUeXBlPFQgZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PiA9IHtcblx0W0sgaW4gVFsndHlwZSddXT86IFQgZXh0ZW5kcyB7IHR5cGU6IEsgfSA/IChlOiBUKSA9PiB2b2lkIDogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjQ2Fubm9uRXZlbnRzID0gUmVjb3JkPHN0cmluZywgUGFydGlhbDxOZ3RjQ2FsbGJhY2tCeVR5cGU8Tmd0Y0Nhbm5vbkV2ZW50Pj4+O1xuXG5leHBvcnQgdHlwZSBTY2FsZU92ZXJyaWRlcyA9IFJlY29yZDxzdHJpbmcsIFZlY3RvcjM+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNQaHlzaWNzSW5wdXRzIGV4dGVuZHMgQ2Fubm9uV29ya2VyUHJvcHMge1xuXHRpc1BhdXNlZD86IGJvb2xlYW47XG5cdG1heFN1YlN0ZXBzPzogbnVtYmVyO1xuXHRzaG91bGRJbnZhbGlkYXRlPzogYm9vbGVhbjtcblx0c3RlcFNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1BoeXNpY3NBcGkge1xuXHRib2RpZXM6IHsgW3V1aWQ6IHN0cmluZ106IG51bWJlciB9O1xuXHRldmVudHM6IE5ndGNDYW5ub25FdmVudHM7XG5cdHJlZnM6IFJlZnM7XG5cdHNjYWxlT3ZlcnJpZGVzOiBTY2FsZU92ZXJyaWRlcztcblx0c3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucztcblx0d29ya2VyOiBTaWduYWw8Q2Fubm9uV29ya2VyQVBJPjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndGNQaHlzaWNzSW5wdXRzID0ge1xuXHRhbGxvd1NsZWVwOiBmYWxzZSxcblx0YXhpc0luZGV4OiAwLFxuXHRicm9hZHBoYXNlOiAnTmFpdmUnLFxuXHRkZWZhdWx0Q29udGFjdE1hdGVyaWFsOiB7IGNvbnRhY3RFcXVhdGlvblN0aWZmbmVzczogMWU2IH0sXG5cdGZyaWN0aW9uR3Jhdml0eTogbnVsbCxcblx0Z3Jhdml0eTogWzAsIC05LjgxLCAwXSxcblx0aXNQYXVzZWQ6IGZhbHNlLFxuXHRpdGVyYXRpb25zOiA1LFxuXHRtYXhTdWJTdGVwczogMTAsXG5cdHF1YXROb3JtYWxpemVGYXN0OiBmYWxzZSxcblx0cXVhdE5vcm1hbGl6ZVNraXA6IDAsXG5cdHNob3VsZEludmFsaWRhdGU6IHRydWUsXG5cdHNpemU6IDEwMDAsXG5cdHNvbHZlcjogJ0dTJyxcblx0c3RlcFNpemU6IDEgLyA2MCxcblx0dG9sZXJhbmNlOiAwLjAwMSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndGMtcGh5c2ljcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVQaHlzaWNzQXBpKCldLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RjUGh5c2ljcyB7XG5cdHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXHRwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblx0cHJpdmF0ZSB3b3JrZXIgPSBzaWduYWw8Q2Fubm9uV29ya2VyQVBJPihudWxsISk7XG5cblx0YXBpOiBOZ3RjUGh5c2ljc0FwaSA9IHtcblx0XHRib2RpZXM6IHt9LFxuXHRcdGV2ZW50czoge30sXG5cdFx0cmVmczoge30sXG5cdFx0c2NhbGVPdmVycmlkZXM6IHt9LFxuXHRcdHN1YnNjcmlwdGlvbnM6IHt9LFxuXHRcdHdvcmtlcjogdGhpcy53b3JrZXIuYXNSZWFkb25seSgpLFxuXHR9O1xuXG5cdHByaXZhdGUgcmVmPzogRW1iZWRkZWRWaWV3UmVmPHsgJGltcGxpY2l0OiBOZ3RjUGh5c2ljc0FwaSB9PjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0dGhpcy53b3JrZXIuc2V0KG5ldyBDYW5ub25Xb3JrZXJBUEkodGhpcy5vcHRpb25zKCkpKTtcblx0XHRcdFx0dGhpcy5jb25uZWN0V29ya2VyKCk7XG5cdFx0XHRcdHRoaXMudXBkYXRlV29ya2VyU3RhdGUoJ2F4aXNJbmRleCcpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVdvcmtlclN0YXRlKCdicm9hZHBoYXNlJyk7XG5cdFx0XHRcdHRoaXMudXBkYXRlV29ya2VyU3RhdGUoJ2dyYXZpdHknKTtcblx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZSgnaXRlcmF0aW9ucycpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVdvcmtlclN0YXRlKCd0b2xlcmFuY2UnKTtcblx0XHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnJlZj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25uZWN0V29ya2VyKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoaW5qZWN0b3IpID0+IHtcblx0XHRcdGNvbnN0IHdvcmtlciA9IHRoaXMud29ya2VyKCkgYXMgQ2Fubm9uV29ya2VyQVBJICYge1xuXHRcdFx0XHRvbjogKGV2ZW50OiBzdHJpbmcsIGNiOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpID0+IHZvaWQ7XG5cdFx0XHRcdHJlbW92ZUFsbExpc3RlbmVyczogKCkgPT4gdm9pZDtcblx0XHRcdH07XG5cdFx0XHRpZiAoIXdvcmtlcikgcmV0dXJuO1xuXG5cdFx0XHR3b3JrZXIuY29ubmVjdCgpO1xuXHRcdFx0d29ya2VyLmluaXQoKTtcblxuXHRcdFx0d29ya2VyLm9uKCdjb2xsaWRlJywgdGhpcy5jb2xsaWRlSGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHdvcmtlci5vbignY29sbGlkZUJlZ2luJywgdGhpcy5jb2xsaWRlQmVnaW5IYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0d29ya2VyLm9uKCdjb2xsaWRlRW5kJywgdGhpcy5jb2xsaWRlRW5kSGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHdvcmtlci5vbignZnJhbWUnLCB0aGlzLmZyYW1lSGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHdvcmtlci5vbigncmF5aGl0JywgdGhpcy5yYXloaXRIYW5kbGVyLmJpbmQodGhpcykpO1xuXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHR3b3JrZXIudGVybWluYXRlKCk7XG5cdFx0XHRcdHdvcmtlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVdvcmtlclN0YXRlKGtleToga2V5b2YgTmd0Y1BoeXNpY3NJbnB1dHMpIHtcblx0XHRjb25zdCBjb21wdXRlZFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKClba2V5XSk7XG5cblx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW3dvcmtlciwgdmFsdWVdID0gW3VudHJhY2tlZCh0aGlzLndvcmtlciksIGNvbXB1dGVkVmFsdWUoKV07XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yXG5cdFx0XHR3b3JrZXJba2V5XSA9IHZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoKSB7XG5cdFx0bGV0IHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdFx0Y29uc3QgW3sgaXNQYXVzZWQsIG1heFN1YlN0ZXBzLCBzdGVwU2l6ZSB9LCB3b3JrZXJdID0gW3RoaXMub3B0aW9ucygpLCB0aGlzLndvcmtlcigpXTtcblx0XHRcdFx0aWYgKGlzUGF1c2VkIHx8ICF3b3JrZXIpIHJldHVybjtcblx0XHRcdFx0dGltZVNpbmNlTGFzdENhbGxlZCArPSBkZWx0YTtcblx0XHRcdFx0d29ya2VyLnN0ZXAoeyBtYXhTdWJTdGVwcywgc3RlcFNpemU6IHN0ZXBTaXplISwgdGltZVNpbmNlTGFzdENhbGxlZCB9KTtcblx0XHRcdFx0dGltZVNpbmNlTGFzdENhbGxlZCA9IDA7XG5cdFx0XHR9LFxuXHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxpZGVIYW5kbGVyKHsgYm9keSwgY29udGFjdDogeyBiaSwgYmosIC4uLmNvbnRhY3RSZXN0IH0sIHRhcmdldCwgLi4ucmVzdCB9OiBXb3JrZXJDb2xsaWRlRXZlbnRbJ2RhdGEnXSkge1xuXHRcdGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLmFwaTtcblx0XHRjb25zdCBjYiA9IGV2ZW50c1t0YXJnZXRdPy5jb2xsaWRlO1xuXHRcdGlmIChjYikge1xuXHRcdFx0Y2IoeyBib2R5OiByZWZzW2JvZHldLCBjb250YWN0OiB7IGJpOiByZWZzW2JpXSwgYmo6IHJlZnNbYmpdLCAuLi5jb250YWN0UmVzdCB9LCB0YXJnZXQ6IHJlZnNbdGFyZ2V0XSwgLi4ucmVzdCB9KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNvbGxpZGVCZWdpbkhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUJlZ2luRXZlbnRbJ2RhdGEnXSkge1xuXHRcdGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLmFwaTtcblx0XHRjb25zdCBjYkEgPSBldmVudHNbYm9keUFdPy5jb2xsaWRlQmVnaW47XG5cdFx0aWYgKGNiQSkgY2JBKHsgYm9keTogcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcblx0XHRjb25zdCBjYkIgPSBldmVudHNbYm9keUJdPy5jb2xsaWRlQmVnaW47XG5cdFx0aWYgKGNiQikgY2JCKHsgYm9keTogcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGlkZUVuZEhhbmRsZXIoeyBib2R5QSwgYm9keUIgfTogV29ya2VyQ29sbGlkZUVuZEV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5hcGk7XG5cdFx0Y29uc3QgY2JBID0gZXZlbnRzW2JvZHlBXT8uY29sbGlkZUVuZDtcblx0XHRpZiAoY2JBKSBjYkEoeyBib2R5OiByZWZzW2JvZHlCXSwgb3A6ICdldmVudCcsIHRhcmdldDogcmVmc1tib2R5QV0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcblx0XHRjb25zdCBjYkIgPSBldmVudHNbYm9keUJdPy5jb2xsaWRlRW5kO1xuXHRcdGlmIChjYkIpIGNiQih7IGJvZHk6IHJlZnNbYm9keUFdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiByZWZzW2JvZHlCXSwgdHlwZTogJ2NvbGxpZGVFbmQnIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBmcmFtZUhhbmRsZXIoe1xuXHRcdGFjdGl2ZSxcblx0XHRib2RpZXM6IHV1aWRzID0gW10sXG5cdFx0b2JzZXJ2YXRpb25zLFxuXHRcdHBvc2l0aW9ucyxcblx0XHRxdWF0ZXJuaW9ucyxcblx0fTogV29ya2VyRnJhbWVNZXNzYWdlWydkYXRhJ10pIHtcblx0XHRjb25zdCBbeyBzaG91bGRJbnZhbGlkYXRlIH0sIHsgYm9kaWVzLCBzdWJzY3JpcHRpb25zLCByZWZzLCBzY2FsZU92ZXJyaWRlcyB9LCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpLFxuXHRcdFx0dGhpcy5hcGksXG5cdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdXVpZHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGJvZGllc1t1dWlkc1tpXV0gPSBpO1xuXHRcdH1cblx0XHRvYnNlcnZhdGlvbnMuZm9yRWFjaCgoW2lkLCB2YWx1ZSwgdHlwZV0pID0+IHtcblx0XHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbnNbaWRdIHx8IHt9O1xuXHRcdFx0Y29uc3QgY2IgPSBzdWJzY3JpcHRpb25bdHlwZV07XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gV2UgY2xlYXJseSBrbm93IHRoZSB0eXBlIG9mIHRoZSBjYWxsYmFjaywgYnV0IHR5cGVzY3JpcHQgY2FuJ3QgZGVhbCB3aXRoIGl0XG5cdFx0XHRjYiAmJiBjYih2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0aWYgKCFhY3RpdmUpIHJldHVybjtcblx0XHRmb3IgKGNvbnN0IHJlZiBvZiBPYmplY3QudmFsdWVzKHJlZnMpLmZpbHRlcih1bmlxdWUoKSkpIHtcblx0XHRcdGlmIChyZWYgaW5zdGFuY2VvZiBJbnN0YW5jZWRNZXNoKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcmVmLmNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCB1dWlkID0gYCR7cmVmLnV1aWR9LyR7aX1gO1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gYm9kaWVzW3V1aWRdO1xuXHRcdFx0XHRcdGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRyZWYuc2V0TWF0cml4QXQoaSwgYXBwbHkoaW5kZXgsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHNjYWxlT3ZlcnJpZGVzW3V1aWRdKSk7XG5cdFx0XHRcdFx0XHRyZWYuaW5zdGFuY2VNYXRyaXgubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc2NhbGUgPSBzY2FsZU92ZXJyaWRlc1tyZWYudXVpZF0gfHwgcmVmLnNjYWxlO1xuXHRcdFx0XHRhcHBseShib2RpZXNbcmVmLnV1aWRdLCBwb3NpdGlvbnMsIHF1YXRlcm5pb25zLCBzY2FsZSwgcmVmKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNob3VsZEludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgcmF5aGl0SGFuZGxlcih7IGJvZHksIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfTogV29ya2VyUmF5aGl0RXZlbnRbJ2RhdGEnXSkge1xuXHRcdGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLmFwaTtcblx0XHRjb25zdCBjYiA9IGV2ZW50c1t1dWlkXT8ucmF5aGl0O1xuXHRcdGlmIChjYikgY2IoeyBib2R5OiBib2R5ID8gcmVmc1tib2R5XSA6IG51bGwsIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfSk7XG5cdH1cbn1cbiJdfQ==
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9saWIvcGh5c2ljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBRVYsUUFBUSxFQUNSLE1BQU0sRUFFTixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sZUFBZSxHQWFmLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFOUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN4QixNQUFNLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDM0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUV4QixTQUFTLEtBQUssQ0FDYixLQUFhLEVBQ2IsU0FBNEIsRUFDNUIsV0FBOEIsRUFDOUIsS0FBSyxHQUFHLENBQUMsRUFDVCxNQUFpQjtJQUVqQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtB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VDs7MkZBR1csV0FBVztrQkFSdkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHREZXN0cm95UmVmLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG5cdEluamVjdG9yLFxuXHROZ1pvbmUsXG5cdFNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Q2Fubm9uV29ya2VyQVBJLFxuXHRDYW5ub25Xb3JrZXJQcm9wcyxcblx0Q29sbGlkZUJlZ2luRXZlbnQsXG5cdENvbGxpZGVFbmRFdmVudCxcblx0Q29sbGlkZUV2ZW50LFxuXHRSYXloaXRFdmVudCxcblx0UmVmcyxcblx0U3Vic2NyaXB0aW9ucyxcblx0V29ya2VyQ29sbGlkZUJlZ2luRXZlbnQsXG5cdFdvcmtlckNvbGxpZGVFbmRFdmVudCxcblx0V29ya2VyQ29sbGlkZUV2ZW50LFxuXHRXb3JrZXJGcmFtZU1lc3NhZ2UsXG5cdFdvcmtlclJheWhpdEV2ZW50LFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEluc3RhbmNlZE1lc2gsIE1hdHJpeDQsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuXG5jb25zdCB2ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHEgPSBuZXcgUXVhdGVybmlvbigpO1xuY29uc3QgbSA9IG5ldyBNYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGFwcGx5KFxuXHRpbmRleDogbnVtYmVyLFxuXHRwb3NpdGlvbnM6IEFycmF5TGlrZTxudW1iZXI+LFxuXHRxdWF0ZXJuaW9uczogQXJyYXlMaWtlPG51bWJlcj4sXG5cdHNjYWxlID0gcyxcblx0b2JqZWN0PzogT2JqZWN0M0QsXG4pIHtcblx0aWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcblx0XHRtLmNvbXBvc2Uodi5mcm9tQXJyYXkocG9zaXRpb25zLCBpbmRleCAqIDMpLCBxLmZyb21BcnJheShxdWF0ZXJuaW9ucywgaW5kZXggKiA0KSwgc2NhbGUpO1xuXHRcdGlmIChvYmplY3QpIHtcblx0XHRcdG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRvYmplY3QubWF0cml4LmNvcHkobSk7XG5cdFx0fVxuXHRcdHJldHVybiBtO1xuXHR9XG5cdHJldHVybiBtLmlkZW50aXR5KCk7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcblx0Y29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcblx0cmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKHZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkgPyBmYWxzZSA6ICEhdmFsdWVzLnB1c2godmFsdWUpKTtcbn1cblxudHlwZSBOZ3RjQ2Fubm9uRXZlbnQgPSBDb2xsaWRlQmVnaW5FdmVudCB8IENvbGxpZGVFbmRFdmVudCB8IENvbGxpZGVFdmVudCB8IFJheWhpdEV2ZW50O1xudHlwZSBOZ3RjQ2FsbGJhY2tCeVR5cGU8VCBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+ID0ge1xuXHRbSyBpbiBUWyd0eXBlJ11dPzogVCBleHRlbmRzIHsgdHlwZTogSyB9ID8gKGU6IFQpID0+IHZvaWQgOiBuZXZlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndGNDYW5ub25FdmVudHMgPSBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPE5ndGNDYWxsYmFja0J5VHlwZTxOZ3RjQ2Fubm9uRXZlbnQ+Pj47XG5cbmV4cG9ydCB0eXBlIFNjYWxlT3ZlcnJpZGVzID0gUmVjb3JkPHN0cmluZywgVmVjdG9yMz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1BoeXNpY3NJbnB1dHMgZXh0ZW5kcyBDYW5ub25Xb3JrZXJQcm9wcyB7XG5cdGlzUGF1c2VkPzogYm9vbGVhbjtcblx0bWF4U3ViU3RlcHM/OiBudW1iZXI7XG5cdHNob3VsZEludmFsaWRhdGU/OiBib29sZWFuO1xuXHRzdGVwU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjUGh5c2ljc0FwaSB7XG5cdGJvZGllczogeyBbdXVpZDogc3RyaW5nXTogbnVtYmVyIH07XG5cdGV2ZW50czogTmd0Y0Nhbm5vbkV2ZW50cztcblx0cmVmczogUmVmcztcblx0c2NhbGVPdmVycmlkZXM6IFNjYWxlT3ZlcnJpZGVzO1xuXHRzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zO1xuXHR3b3JrZXI6IFNpZ25hbDxDYW5ub25Xb3JrZXJBUEk+O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0Y1BoeXNpY3NJbnB1dHMgPSB7XG5cdGFsbG93U2xlZXA6IGZhbHNlLFxuXHRheGlzSW5kZXg6IDAsXG5cdGJyb2FkcGhhc2U6ICdOYWl2ZScsXG5cdGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHsgY29udGFjdEVxdWF0aW9uU3RpZmZuZXNzOiAxZTYgfSxcblx0ZnJpY3Rpb25HcmF2aXR5OiBudWxsLFxuXHRncmF2aXR5OiBbMCwgLTkuODEsIDBdLFxuXHRpc1BhdXNlZDogZmFsc2UsXG5cdGl0ZXJhdGlvbnM6IDUsXG5cdG1heFN1YlN0ZXBzOiAxMCxcblx0cXVhdE5vcm1hbGl6ZUZhc3Q6IGZhbHNlLFxuXHRxdWF0Tm9ybWFsaXplU2tpcDogMCxcblx0c2hvdWxkSW52YWxpZGF0ZTogdHJ1ZSxcblx0c2l6ZTogMTAwMCxcblx0c29sdmVyOiAnR1MnLFxuXHRzdGVwU2l6ZTogMSAvIDYwLFxuXHR0b2xlcmFuY2U6IDAuMDAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0Yy1waHlzaWNzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGVudCAvPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Y1BoeXNpY3Mge1xuXHRwcml2YXRlIHpvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgd29ya2VyID0gc2lnbmFsPENhbm5vbldvcmtlckFQST4obnVsbCEpO1xuXG5cdGFwaTogTmd0Y1BoeXNpY3NBcGkgPSB7XG5cdFx0Ym9kaWVzOiB7fSxcblx0XHRldmVudHM6IHt9LFxuXHRcdHJlZnM6IHt9LFxuXHRcdHNjYWxlT3ZlcnJpZGVzOiB7fSxcblx0XHRzdWJzY3JpcHRpb25zOiB7fSxcblx0XHR3b3JrZXI6IHRoaXMud29ya2VyLmFzUmVhZG9ubHkoKSxcblx0fTtcblxuXHRwcml2YXRlIHJlZj86IEVtYmVkZGVkVmlld1JlZjx7ICRpbXBsaWNpdDogTmd0Y1BoeXNpY3NBcGkgfT47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdHRoaXMud29ya2VyLnNldChuZXcgQ2Fubm9uV29ya2VyQVBJKHRoaXMub3B0aW9ucygpKSk7XG5cdFx0XHRcdHRoaXMuY29ubmVjdFdvcmtlcigpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVdvcmtlclN0YXRlKCdheGlzSW5kZXgnKTtcblx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZSgnYnJvYWRwaGFzZScpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVdvcmtlclN0YXRlKCdncmF2aXR5Jyk7XG5cdFx0XHRcdHRoaXMudXBkYXRlV29ya2VyU3RhdGUoJ2l0ZXJhdGlvbnMnKTtcblx0XHRcdFx0dGhpcy51cGRhdGVXb3JrZXJTdGF0ZSgndG9sZXJhbmNlJyk7XG5cdFx0XHRcdHRoaXMuYmVmb3JlUmVuZGVyKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0dGhpcy5yZWY/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgY29ubmVjdFdvcmtlcigpIHtcblx0XHR0aGlzLmF1dG9FZmZlY3QoKGluamVjdG9yKSA9PiB7XG5cdFx0XHRjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlcigpIGFzIENhbm5vbldvcmtlckFQSSAmIHtcblx0XHRcdFx0b246IChldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSA9PiB2b2lkO1xuXHRcdFx0XHRyZW1vdmVBbGxMaXN0ZW5lcnM6ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdFx0aWYgKCF3b3JrZXIpIHJldHVybjtcblxuXHRcdFx0d29ya2VyLmNvbm5lY3QoKTtcblx0XHRcdHdvcmtlci5pbml0KCk7XG5cblx0XHRcdHdvcmtlci5vbignY29sbGlkZScsIHRoaXMuY29sbGlkZUhhbmRsZXIuYmluZCh0aGlzKSk7XG5cdFx0XHR3b3JrZXIub24oJ2NvbGxpZGVCZWdpbicsIHRoaXMuY29sbGlkZUJlZ2luSGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHdvcmtlci5vbignY29sbGlkZUVuZCcsIHRoaXMuY29sbGlkZUVuZEhhbmRsZXIuYmluZCh0aGlzKSk7XG5cdFx0XHR3b3JrZXIub24oJ2ZyYW1lJywgdGhpcy5mcmFtZUhhbmRsZXIuYmluZCh0aGlzKSk7XG5cdFx0XHR3b3JrZXIub24oJ3JheWhpdCcsIHRoaXMucmF5aGl0SGFuZGxlci5iaW5kKHRoaXMpKTtcblxuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0d29ya2VyLnRlcm1pbmF0ZSgpO1xuXHRcdFx0XHR3b3JrZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVXb3JrZXJTdGF0ZShrZXk6IGtleW9mIE5ndGNQaHlzaWNzSW5wdXRzKSB7XG5cdFx0Y29uc3QgY29tcHV0ZWRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpW2tleV0pO1xuXG5cdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt3b3JrZXIsIHZhbHVlXSA9IFt1bnRyYWNrZWQodGhpcy53b3JrZXIpLCBjb21wdXRlZFZhbHVlKCldO1xuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvclxuXHRcdFx0d29ya2VyW2tleV0gPSB2YWx1ZTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGxldCB0aW1lU2luY2VMYXN0Q2FsbGVkID0gMDtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoXG5cdFx0XHQoeyBkZWx0YSB9KSA9PiB7XG5cdFx0XHRcdGNvbnN0IFt7IGlzUGF1c2VkLCBtYXhTdWJTdGVwcywgc3RlcFNpemUgfSwgd29ya2VyXSA9IFt0aGlzLm9wdGlvbnMoKSwgdGhpcy53b3JrZXIoKV07XG5cdFx0XHRcdGlmIChpc1BhdXNlZCB8fCAhd29ya2VyKSByZXR1cm47XG5cdFx0XHRcdHRpbWVTaW5jZUxhc3RDYWxsZWQgKz0gZGVsdGE7XG5cdFx0XHRcdHdvcmtlci5zdGVwKHsgbWF4U3ViU3RlcHMsIHN0ZXBTaXplOiBzdGVwU2l6ZSEsIHRpbWVTaW5jZUxhc3RDYWxsZWQgfSk7XG5cdFx0XHRcdHRpbWVTaW5jZUxhc3RDYWxsZWQgPSAwO1xuXHRcdFx0fSxcblx0XHRcdHsgaW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSxcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb2xsaWRlSGFuZGxlcih7IGJvZHksIGNvbnRhY3Q6IHsgYmksIGJqLCAuLi5jb250YWN0UmVzdCB9LCB0YXJnZXQsIC4uLnJlc3QgfTogV29ya2VyQ29sbGlkZUV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5hcGk7XG5cdFx0Y29uc3QgY2IgPSBldmVudHNbdGFyZ2V0XT8uY29sbGlkZTtcblx0XHRpZiAoY2IpIHtcblx0XHRcdGNiKHsgYm9keTogcmVmc1tib2R5XSwgY29udGFjdDogeyBiaTogcmVmc1tiaV0sIGJqOiByZWZzW2JqXSwgLi4uY29udGFjdFJlc3QgfSwgdGFyZ2V0OiByZWZzW3RhcmdldF0sIC4uLnJlc3QgfSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb2xsaWRlQmVnaW5IYW5kbGVyKHsgYm9keUEsIGJvZHlCIH06IFdvcmtlckNvbGxpZGVCZWdpbkV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5hcGk7XG5cdFx0Y29uc3QgY2JBID0gZXZlbnRzW2JvZHlBXT8uY29sbGlkZUJlZ2luO1xuXHRcdGlmIChjYkEpIGNiQSh7IGJvZHk6IHJlZnNbYm9keUJdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiByZWZzW2JvZHlBXSwgdHlwZTogJ2NvbGxpZGVCZWdpbicgfSk7XG5cdFx0Y29uc3QgY2JCID0gZXZlbnRzW2JvZHlCXT8uY29sbGlkZUJlZ2luO1xuXHRcdGlmIChjYkIpIGNiQih7IGJvZHk6IHJlZnNbYm9keUFdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiByZWZzW2JvZHlCXSwgdHlwZTogJ2NvbGxpZGVCZWdpbicgfSk7XG5cdH1cblxuXHRwcml2YXRlIGNvbGxpZGVFbmRIYW5kbGVyKHsgYm9keUEsIGJvZHlCIH06IFdvcmtlckNvbGxpZGVFbmRFdmVudFsnZGF0YSddKSB7XG5cdFx0Y29uc3QgeyBldmVudHMsIHJlZnMgfSA9IHRoaXMuYXBpO1xuXHRcdGNvbnN0IGNiQSA9IGV2ZW50c1tib2R5QV0/LmNvbGxpZGVFbmQ7XG5cdFx0aWYgKGNiQSkgY2JBKHsgYm9keTogcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG5cdFx0Y29uc3QgY2JCID0gZXZlbnRzW2JvZHlCXT8uY29sbGlkZUVuZDtcblx0XHRpZiAoY2JCKSBjYkIoeyBib2R5OiByZWZzW2JvZHlBXSwgb3A6ICdldmVudCcsIHRhcmdldDogcmVmc1tib2R5Ql0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcblx0fVxuXG5cdHByaXZhdGUgZnJhbWVIYW5kbGVyKHtcblx0XHRhY3RpdmUsXG5cdFx0Ym9kaWVzOiB1dWlkcyA9IFtdLFxuXHRcdG9ic2VydmF0aW9ucyxcblx0XHRwb3NpdGlvbnMsXG5cdFx0cXVhdGVybmlvbnMsXG5cdH06IFdvcmtlckZyYW1lTWVzc2FnZVsnZGF0YSddKSB7XG5cdFx0Y29uc3QgW3sgc2hvdWxkSW52YWxpZGF0ZSB9LCB7IGJvZGllcywgc3Vic2NyaXB0aW9ucywgcmVmcywgc2NhbGVPdmVycmlkZXMgfSwgaW52YWxpZGF0ZV0gPSBbXG5cdFx0XHR1bnRyYWNrZWQodGhpcy5vcHRpb25zKSxcblx0XHRcdHRoaXMuYXBpLFxuXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHV1aWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRib2RpZXNbdXVpZHNbaV1dID0gaTtcblx0XHR9XG5cdFx0b2JzZXJ2YXRpb25zLmZvckVhY2goKFtpZCwgdmFsdWUsIHR5cGVdKSA9PiB7XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25zW2lkXSB8fCB7fTtcblx0XHRcdGNvbnN0IGNiID0gc3Vic2NyaXB0aW9uW3R5cGVdO1xuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIFdlIGNsZWFybHkga25vdyB0aGUgdHlwZSBvZiB0aGUgY2FsbGJhY2ssIGJ1dCB0eXBlc2NyaXB0IGNhbid0IGRlYWwgd2l0aCBpdFxuXHRcdFx0Y2IgJiYgY2IodmFsdWUpO1xuXHRcdH0pO1xuXHRcdGlmICghYWN0aXZlKSByZXR1cm47XG5cdFx0Zm9yIChjb25zdCByZWYgb2YgT2JqZWN0LnZhbHVlcyhyZWZzKS5maWx0ZXIodW5pcXVlKCkpKSB7XG5cdFx0XHRpZiAocmVmIGluc3RhbmNlb2YgSW5zdGFuY2VkTWVzaCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHJlZi5jb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgdXVpZCA9IGAke3JlZi51dWlkfS8ke2l9YDtcblx0XHRcdFx0XHRjb25zdCBpbmRleCA9IGJvZGllc1t1dWlkXTtcblx0XHRcdFx0XHRpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cmVmLnNldE1hdHJpeEF0KGksIGFwcGx5KGluZGV4LCBwb3NpdGlvbnMsIHF1YXRlcm5pb25zLCBzY2FsZU92ZXJyaWRlc1t1dWlkXSkpO1xuXHRcdFx0XHRcdFx0cmVmLmluc3RhbmNlTWF0cml4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNjYWxlID0gc2NhbGVPdmVycmlkZXNbcmVmLnV1aWRdIHx8IHJlZi5zY2FsZTtcblx0XHRcdFx0YXBwbHkoYm9kaWVzW3JlZi51dWlkXSwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGUsIHJlZik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChzaG91bGRJbnZhbGlkYXRlKSBpbnZhbGlkYXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIHJheWhpdEhhbmRsZXIoeyBib2R5LCByYXk6IHsgdXVpZCwgLi4ucmF5UmVzdCB9LCAuLi5yZXN0IH06IFdvcmtlclJheWhpdEV2ZW50WydkYXRhJ10pIHtcblx0XHRjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5hcGk7XG5cdFx0Y29uc3QgY2IgPSBldmVudHNbdXVpZF0/LnJheWhpdDtcblx0XHRpZiAoY2IpIGNiKHsgYm9keTogYm9keSA/IHJlZnNbYm9keV0gOiBudWxsLCByYXk6IHsgdXVpZCwgLi4ucmF5UmVzdCB9LCAuLi5yZXN0IH0pO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { isSignal, signal, computed, afterNextRender, untracked } from '@angular/core';
|
|
1
|
+
import { inject, isSignal, signal, computed, afterNextRender, untracked } from '@angular/core';
|
|
2
2
|
import { resolveRef } from 'angular-three';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
4
|
+
import { NgtcDebug } from 'angular-three-cannon/debug';
|
|
5
5
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
6
6
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
7
7
|
import { Euler, Quaternion, Vector3, InstancedMesh, DynamicDrawUsage, Object3D } from 'three';
|
|
@@ -203,13 +203,13 @@ function createInjectBody(type) {
|
|
|
203
203
|
}
|
|
204
204
|
function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
205
205
|
return assertInjector(injectBody, injector, () => {
|
|
206
|
-
const
|
|
207
|
-
if (!
|
|
206
|
+
const physics = inject(NgtcPhysics, { optional: true });
|
|
207
|
+
if (!physics) {
|
|
208
208
|
throw new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);
|
|
209
209
|
}
|
|
210
210
|
const autoEffect = injectAutoEffect();
|
|
211
|
-
const
|
|
212
|
-
const { add: addToDebug, remove: removeFromDebug } =
|
|
211
|
+
const debug = inject(NgtcDebug, { optional: true });
|
|
212
|
+
const { add: addToDebug, remove: removeFromDebug } = debug || {};
|
|
213
213
|
const transform = transformArgs ?? defaultTransformArgs[type];
|
|
214
214
|
const bodyRef = isSignal(ref) ? ref : signal(ref);
|
|
215
215
|
const body = computed(() => resolveRef(bodyRef()));
|
|
@@ -217,14 +217,14 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
217
217
|
const _body = body();
|
|
218
218
|
if (!_body)
|
|
219
219
|
return null;
|
|
220
|
-
const { worker, ...rest } =
|
|
220
|
+
const { worker, ...rest } = physics.api;
|
|
221
221
|
if (!worker())
|
|
222
222
|
return null;
|
|
223
|
-
return makeBodyApi(_body, worker(),
|
|
223
|
+
return makeBodyApi(_body, worker(), physics.api);
|
|
224
224
|
});
|
|
225
225
|
afterNextRender(() => {
|
|
226
226
|
autoEffect(() => {
|
|
227
|
-
const currentWorker =
|
|
227
|
+
const currentWorker = physics.api.worker();
|
|
228
228
|
if (!currentWorker)
|
|
229
229
|
return;
|
|
230
230
|
const object = body();
|
|
@@ -259,9 +259,9 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
259
259
|
else {
|
|
260
260
|
prepare(object, props);
|
|
261
261
|
}
|
|
262
|
-
|
|
262
|
+
physics.api.refs[id] = object;
|
|
263
263
|
addToDebug?.(id, props, type);
|
|
264
|
-
setupCollision(
|
|
264
|
+
setupCollision(physics.api.events, props, id);
|
|
265
265
|
// @ts-expect-error - if args is undefined, there's default
|
|
266
266
|
return { ...props, args: transform(props.args) };
|
|
267
267
|
}),
|
|
@@ -277,9 +277,9 @@ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
|
|
|
277
277
|
});
|
|
278
278
|
return () => {
|
|
279
279
|
uuid.forEach((id) => {
|
|
280
|
-
delete
|
|
280
|
+
delete physics.api.refs[id];
|
|
281
281
|
removeFromDebug?.(id);
|
|
282
|
-
delete
|
|
282
|
+
delete physics.api.events[id];
|
|
283
283
|
});
|
|
284
284
|
currentWorker.removeBodies({ uuid });
|
|
285
285
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-three-cannon-body.mjs","sources":["../../../../libs/cannon/body/src/lib/utils.ts","../../../../libs/cannon/body/src/lib/body.ts","../../../../libs/cannon/body/src/angular-three-cannon-body.ts"],"sourcesContent":["import {\n\tAtomicName,\n\tBodyProps,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tCylinderArgs,\n\tHeightfieldArgs,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshArgs,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtcCannonEvents, NgtcPhysicsApi } from 'angular-three-cannon';\nimport { Euler, Object3D, Quaternion, Vector3 } from 'three';\nimport { NgtcWorkerApi } from './types';\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nfunction getUUID(body: Object3D, index?: number) {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof body === 'function') return null;\n\treturn body && body && `${body.uuid}${suffix}`;\n}\n\nconst e = new Euler();\nconst q = new Quaternion();\n\nfunction quaternionToRotation(callback: (v: Triplet) => void) {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n}\n\nlet incrementingId = 0;\nexport function createSubscribe<T extends SubscriptionName>(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(body, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction makeTriplet(v: Vector3 | Triplet): Triplet {\n\treturn v instanceof Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport function prepare(object: Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nexport function setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\n\nexport function makeBodyApi(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\t{ subscriptions, scaleOverrides }: NgtcPhysicsApi,\n) {\n\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\treturn {\n\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: value, uuid } as never);\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeQuaternion = (index?: number) => {\n\t\tconst type = 'quaternion';\n\t\treturn {\n\t\t\tcopy: ({ w, x, y, z }: Quaternion) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRotation = (index?: number) => {\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\tconst id = incrementingId++;\n\t\t\t\tconst target = 'bodies';\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\t\t\treturn () => {\n\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\tworker.unsubscribe({ props: id });\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst makeVec = (type: VectorName, index?: number) => {\n\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRemove = (index?: number) => {\n\t\tconst uuid = getUUID(body, index);\n\t\treturn () => {\n\t\t\tif (uuid) worker.removeBodies({ uuid: [uuid] });\n\t\t};\n\t};\n\n\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\treturn {\n\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyForce({ props: [force, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyTorque({ props: [torque], uuid });\n\t\t\t},\n\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\tmass: makeAtomic('mass', index),\n\t\t\tmaterial: makeAtomic('material', index),\n\t\t\tposition: makeVec('position', index),\n\t\t\tquaternion: makeQuaternion(index),\n\t\t\trotation: makeRotation(index),\n\t\t\tscaleOverride(scale) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tif (uuid) scaleOverrides[uuid] = new Vector3(...scale);\n\t\t\t},\n\t\t\tsleep() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.sleep({ uuid });\n\t\t\t},\n\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\tuserData: makeAtomic('userData', index),\n\t\t\tvelocity: makeVec('velocity', index),\n\t\t\tremove: makeRemove(index),\n\t\t\twakeUp() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.wakeUp({ uuid });\n\t\t\t},\n\t\t};\n\t}\n\tconst cache: Record<number, NgtcWorkerApi> = {};\n\treturn { ...makeApi(), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n}\n\nexport const defaultTransformArgs = {\n\tPlane: (args: PlaneProps['args']) => [],\n\tBox: (args: BoxProps['args'] = [1, 1, 1]) => args,\n\tTrimesh: (args: TrimeshArgs) => args,\n\tCylinder: (args: CylinderArgs = []) => [],\n\tHeightfield: (args: HeightfieldArgs) => args,\n\tConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]: ConvexPolyhedronArgs = []) => [\n\t\tvertices && vertices.map(makeTriplet),\n\t\tfaces,\n\t\tnormals && normals.map(makeTriplet),\n\t\taxes && axes.map(makeTriplet),\n\t\tboundingSphereRadius,\n\t],\n\tParticle: (args: ParticleProps['args']) => [],\n\tSphere: (args: SphereArgs = [1]) => {\n\t\tif (!Array.isArray(args)) throw new Error('Sphere body args must be an array');\n\t\treturn [args[0]];\n\t},\n\tCompound: (args: CompoundBodyProps['args']) => args,\n};\n","import {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tWritableSignal,\n\tafterNextRender,\n\tcomputed,\n\tisSignal,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { resolveRef } from 'angular-three';\nimport { injectPhysicsApi } from 'angular-three-cannon';\nimport { injectNgtcDebugApi } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';\nimport { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\n\nexport interface NgtcBodyOptions<TShape extends BodyShapeType> {\n\ttransformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;\n\tinjector?: Injector;\n}\n\nfunction createInjectBody<TShape extends BodyShapeType>(type: TShape) {\n\treturn <TObject extends Object3D>(\n\t\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\t\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t\toptions?: NgtcBodyOptions<TShape>,\n\t) => injectBody<TShape, TObject>(type, getPropFn, ref, options);\n}\n\nfunction injectBody<TShape extends BodyShapeType, TObject extends Object3D>(\n\ttype: TShape,\n\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t{ transformArgs, injector }: NgtcBodyOptions<TShape> = {},\n): Signal<NgtcBodyPublicApi | null> {\n\treturn assertInjector(injectBody, injector, () => {\n\t\tconst physicsApi = injectPhysicsApi({ optional: true });\n\n\t\tif (!physicsApi) {\n\t\t\tthrow new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst autoEffect = injectAutoEffect();\n\t\tconst debugApi = injectNgtcDebugApi({ optional: true });\n\n\t\tconst { add: addToDebug, remove: removeFromDebug } = debugApi || {};\n\t\tconst transform = transformArgs ?? defaultTransformArgs[type];\n\t\tconst bodyRef = isSignal(ref) ? ref : signal(ref);\n\t\tconst body = computed(() => resolveRef(bodyRef()));\n\n\t\tconst api = computed(() => {\n\t\t\tconst _body = body();\n\t\t\tif (!_body) return null;\n\t\t\tconst { worker, ...rest } = physicsApi;\n\t\t\tif (!worker()) return null;\n\t\t\treturn makeBodyApi(_body, worker(), physicsApi);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\tautoEffect(() => {\n\t\t\t\tconst currentWorker = physicsApi.worker();\n\t\t\t\tif (!currentWorker) return;\n\n\t\t\t\tconst object = body();\n\n\t\t\t\tif (!isSignal(ref) && !object) {\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\t(bodyRef as WritableSignal<TObject | undefined>).set(resolveRef(ref));\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!object) return;\n\n\t\t\t\tconst [uuid, props] = (() => {\n\t\t\t\t\tlet uuids: string[] = [];\n\t\t\t\t\tlet temp: Object3D;\n\t\t\t\t\tif (object instanceof InstancedMesh) {\n\t\t\t\t\t\tobject.instanceMatrix.setUsage(DynamicDrawUsage);\n\t\t\t\t\t\tuuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n\t\t\t\t\t\ttemp = new Object3D();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuuids = [object.uuid];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tuuids,\n\t\t\t\t\t\tuuids.map((id, index) => {\n\t\t\t\t\t\t\tconst props = getPropFn(index);\n\t\t\t\t\t\t\tif (temp) {\n\t\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\t\t(object as unknown as InstancedMesh).setMatrixAt(index, temp.matrix);\n\t\t\t\t\t\t\t\t(object as unknown as InstancedMesh).instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tphysicsApi.refs[id] = object;\n\t\t\t\t\t\t\taddToDebug?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(physicsApi.events, props, id);\n\t\t\t\t\t\t\t// @ts-expect-error - if args is undefined, there's default\n\t\t\t\t\t\t\treturn { ...props, args: transform(props.args) };\n\t\t\t\t\t\t}),\n\t\t\t\t\t];\n\t\t\t\t})();\n\t\t\t\t// Register on mount, unregister on unmount\n\t\t\t\tcurrentWorker.addBodies({\n\t\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\t\treturn { onCollide: Boolean(onCollide), ...serializableProps };\n\t\t\t\t\t}),\n\t\t\t\t\ttype,\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\n\t\t\t\treturn () => {\n\t\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\t\tdelete physicsApi.refs[id];\n\t\t\t\t\t\tremoveFromDebug?.(id);\n\t\t\t\t\t\tdelete physicsApi.events[id];\n\t\t\t\t\t});\n\t\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\treturn api;\n\t});\n}\n\nexport const injectBox = createInjectBody('Box');\nexport const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');\nexport const injectCylinder = createInjectBody('Cylinder');\nexport const injectHeightfield = createInjectBody('Heightfield');\nexport const injectParticle = createInjectBody('Particle');\nexport const injectPlane = createInjectBody('Plane');\nexport const injectSphere = createInjectBody('Sphere');\nexport const injectTrimesh = createInjectBody('Trimesh');\nexport const injectCompound = createInjectBody('Compound');\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-body.mjs","sources":["../../../../libs/cannon/body/src/lib/utils.ts","../../../../libs/cannon/body/src/lib/body.ts","../../../../libs/cannon/body/src/angular-three-cannon-body.ts"],"sourcesContent":["import {\n\tAtomicName,\n\tBodyProps,\n\tBoxProps,\n\tCannonWorkerAPI,\n\tCompoundBodyProps,\n\tConvexPolyhedronArgs,\n\tCylinderArgs,\n\tHeightfieldArgs,\n\tParticleProps,\n\tPlaneProps,\n\tPropValue,\n\tQuad,\n\tSetOpName,\n\tSphereArgs,\n\tSubscriptionName,\n\tSubscriptionTarget,\n\tSubscriptions,\n\tTrimeshArgs,\n\tTriplet,\n\tVectorName,\n} from '@pmndrs/cannon-worker-api';\nimport { NgtcCannonEvents, NgtcPhysicsApi } from 'angular-three-cannon';\nimport { Euler, Object3D, Quaternion, Vector3 } from 'three';\nimport { NgtcWorkerApi } from './types';\n\nfunction capitalize<T extends string>(str: T): Capitalize<T> {\n\treturn (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n}\n\nfunction getUUID(body: Object3D, index?: number) {\n\tconst suffix = index === undefined ? '' : `/${index}`;\n\tif (typeof body === 'function') return null;\n\treturn body && body && `${body.uuid}${suffix}`;\n}\n\nconst e = new Euler();\nconst q = new Quaternion();\n\nfunction quaternionToRotation(callback: (v: Triplet) => void) {\n\treturn (v: Quad) => callback(e.setFromQuaternion(q.fromArray(v)).toArray() as Triplet);\n}\n\nlet incrementingId = 0;\nexport function createSubscribe<T extends SubscriptionName>(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\tsubscriptions: Subscriptions,\n\ttype: T,\n\tindex?: number,\n\ttarget: SubscriptionTarget = 'bodies',\n) {\n\treturn (callback: (value: PropValue<T>) => void) => {\n\t\tconst id = incrementingId++;\n\t\tsubscriptions[id] = { [type]: callback };\n\t\tconst uuid = getUUID(body, index);\n\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\treturn () => {\n\t\t\tdelete subscriptions[id];\n\t\t\tworker.unsubscribe({ props: id });\n\t\t};\n\t};\n}\n\nfunction makeTriplet(v: Vector3 | Triplet): Triplet {\n\treturn v instanceof Vector3 ? [v.x, v.y, v.z] : v;\n}\n\nexport function prepare(object: Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n\tobject.userData = userData;\n\tobject.position.set(...position);\n\tobject.rotation.set(...rotation);\n\tobject.updateMatrix();\n}\n\nexport function setupCollision(\n\tevents: NgtcCannonEvents,\n\t{ onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n\tuuid: string,\n) {\n\tevents[uuid] = { collide: onCollide, collideBegin: onCollideBegin, collideEnd: onCollideEnd };\n}\n\nexport function makeBodyApi(\n\tbody: Object3D,\n\tworker: CannonWorkerAPI,\n\t{ subscriptions, scaleOverrides }: NgtcPhysicsApi,\n) {\n\tconst makeAtomic = <T extends AtomicName>(type: T, index?: number) => {\n\t\tconst op: SetOpName<T> = `set${capitalize(type)}`;\n\n\t\treturn {\n\t\t\tset: (value: PropValue<T>) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: value, uuid } as never);\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeQuaternion = (index?: number) => {\n\t\tconst type = 'quaternion';\n\t\treturn {\n\t\t\tcopy: ({ w, x, y, z }: Quaternion) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number, w: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setQuaternion({ props: [x, y, z, w], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRotation = (index?: number) => {\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.setRotation({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: (callback: (value: Triplet) => void) => {\n\t\t\t\tconst id = incrementingId++;\n\t\t\t\tconst target = 'bodies';\n\t\t\t\tconst type = 'quaternion';\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tsubscriptions[id] = { [type]: quaternionToRotation(callback) };\n\t\t\t\tuuid && worker.subscribe({ props: { id, target, type }, uuid });\n\t\t\t\treturn () => {\n\t\t\t\t\tdelete subscriptions[id];\n\t\t\t\t\tworker.unsubscribe({ props: id });\n\t\t\t\t};\n\t\t\t},\n\t\t};\n\t};\n\tconst makeVec = (type: VectorName, index?: number) => {\n\t\tconst op: SetOpName<VectorName> = `set${capitalize(type)}`;\n\t\treturn {\n\t\t\tcopy: ({ x, y, z }: Vector3 | Euler) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tset: (x: number, y: number, z: number) => {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker[op]({ props: [x, y, z], uuid });\n\t\t\t},\n\t\t\tsubscribe: createSubscribe(body, worker, subscriptions, type, index),\n\t\t};\n\t};\n\n\tconst makeRemove = (index?: number) => {\n\t\tconst uuid = getUUID(body, index);\n\t\treturn () => {\n\t\t\tif (uuid) worker.removeBodies({ uuid: [uuid] });\n\t\t};\n\t};\n\n\tfunction makeApi(index?: number): NgtcWorkerApi {\n\t\treturn {\n\t\t\tallowSleep: makeAtomic('allowSleep', index),\n\t\t\tangularDamping: makeAtomic('angularDamping', index),\n\t\t\tangularFactor: makeVec('angularFactor', index),\n\t\t\tangularVelocity: makeVec('angularVelocity', index),\n\t\t\tapplyForce(force: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyForce({ props: [force, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyImpulse(impulse: Triplet, worldPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyImpulse({ props: [impulse, worldPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalForce(force: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalForce({ props: [force, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyLocalImpulse(impulse: Triplet, localPoint: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyLocalImpulse({ props: [impulse, localPoint], uuid });\n\t\t\t},\n\t\t\tapplyTorque(torque: Triplet) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.applyTorque({ props: [torque], uuid });\n\t\t\t},\n\t\t\tcollisionFilterGroup: makeAtomic('collisionFilterGroup', index),\n\t\t\tcollisionFilterMask: makeAtomic('collisionFilterMask', index),\n\t\t\tcollisionResponse: makeAtomic('collisionResponse', index),\n\t\t\tfixedRotation: makeAtomic('fixedRotation', index),\n\t\t\tisTrigger: makeAtomic('isTrigger', index),\n\t\t\tlinearDamping: makeAtomic('linearDamping', index),\n\t\t\tlinearFactor: makeVec('linearFactor', index),\n\t\t\tmass: makeAtomic('mass', index),\n\t\t\tmaterial: makeAtomic('material', index),\n\t\t\tposition: makeVec('position', index),\n\t\t\tquaternion: makeQuaternion(index),\n\t\t\trotation: makeRotation(index),\n\t\t\tscaleOverride(scale) {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tif (uuid) scaleOverrides[uuid] = new Vector3(...scale);\n\t\t\t},\n\t\t\tsleep() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.sleep({ uuid });\n\t\t\t},\n\t\t\tsleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),\n\t\t\tsleepTimeLimit: makeAtomic('sleepTimeLimit', index),\n\t\t\tuserData: makeAtomic('userData', index),\n\t\t\tvelocity: makeVec('velocity', index),\n\t\t\tremove: makeRemove(index),\n\t\t\twakeUp() {\n\t\t\t\tconst uuid = getUUID(body, index);\n\t\t\t\tuuid && worker.wakeUp({ uuid });\n\t\t\t},\n\t\t};\n\t}\n\tconst cache: Record<number, NgtcWorkerApi> = {};\n\treturn { ...makeApi(), at: (index: number) => cache[index] || (cache[index] = makeApi(index)) };\n}\n\nexport const defaultTransformArgs = {\n\tPlane: (args: PlaneProps['args']) => [],\n\tBox: (args: BoxProps['args'] = [1, 1, 1]) => args,\n\tTrimesh: (args: TrimeshArgs) => args,\n\tCylinder: (args: CylinderArgs = []) => [],\n\tHeightfield: (args: HeightfieldArgs) => args,\n\tConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]: ConvexPolyhedronArgs = []) => [\n\t\tvertices && vertices.map(makeTriplet),\n\t\tfaces,\n\t\tnormals && normals.map(makeTriplet),\n\t\taxes && axes.map(makeTriplet),\n\t\tboundingSphereRadius,\n\t],\n\tParticle: (args: ParticleProps['args']) => [],\n\tSphere: (args: SphereArgs = [1]) => {\n\t\tif (!Array.isArray(args)) throw new Error('Sphere body args must be an array');\n\t\treturn [args[0]];\n\t},\n\tCompound: (args: CompoundBodyProps['args']) => args,\n};\n","import {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tWritableSignal,\n\tafterNextRender,\n\tcomputed,\n\tinject,\n\tisSignal,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport { BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { resolveRef } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { NgtcDebug } from 'angular-three-cannon/debug';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';\nimport { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';\nimport { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';\n\nexport interface NgtcBodyOptions<TShape extends BodyShapeType> {\n\ttransformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;\n\tinjector?: Injector;\n}\n\nfunction createInjectBody<TShape extends BodyShapeType>(type: TShape) {\n\treturn <TObject extends Object3D>(\n\t\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\t\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t\toptions?: NgtcBodyOptions<TShape>,\n\t) => injectBody<TShape, TObject>(type, getPropFn, ref, options);\n}\n\nfunction injectBody<TShape extends BodyShapeType, TObject extends Object3D>(\n\ttype: TShape,\n\tgetPropFn: NgtcGetByIndex<NgtcBodyPropsMap[TShape]>,\n\tref: ElementRef<TObject> | TObject | Signal<ElementRef<TObject> | TObject | undefined>,\n\t{ transformArgs, injector }: NgtcBodyOptions<TShape> = {},\n): Signal<NgtcBodyPublicApi | null> {\n\treturn assertInjector(injectBody, injector, () => {\n\t\tconst physics = inject(NgtcPhysics, { optional: true });\n\n\t\tif (!physics) {\n\t\t\tthrow new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);\n\t\t}\n\n\t\tconst autoEffect = injectAutoEffect();\n\t\tconst debug = inject(NgtcDebug, { optional: true });\n\n\t\tconst { add: addToDebug, remove: removeFromDebug } = debug || {};\n\t\tconst transform = transformArgs ?? defaultTransformArgs[type];\n\t\tconst bodyRef = isSignal(ref) ? ref : signal(ref);\n\t\tconst body = computed(() => resolveRef(bodyRef()));\n\n\t\tconst api = computed(() => {\n\t\t\tconst _body = body();\n\t\t\tif (!_body) return null;\n\t\t\tconst { worker, ...rest } = physics.api;\n\t\t\tif (!worker()) return null;\n\t\t\treturn makeBodyApi(_body, worker(), physics.api);\n\t\t});\n\n\t\tafterNextRender(() => {\n\t\t\tautoEffect(() => {\n\t\t\t\tconst currentWorker = physics.api.worker();\n\t\t\t\tif (!currentWorker) return;\n\n\t\t\t\tconst object = body();\n\n\t\t\t\tif (!isSignal(ref) && !object) {\n\t\t\t\t\tuntracked(() => {\n\t\t\t\t\t\t(bodyRef as WritableSignal<TObject | undefined>).set(resolveRef(ref));\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!object) return;\n\n\t\t\t\tconst [uuid, props] = (() => {\n\t\t\t\t\tlet uuids: string[] = [];\n\t\t\t\t\tlet temp: Object3D;\n\t\t\t\t\tif (object instanceof InstancedMesh) {\n\t\t\t\t\t\tobject.instanceMatrix.setUsage(DynamicDrawUsage);\n\t\t\t\t\t\tuuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);\n\t\t\t\t\t\ttemp = new Object3D();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tuuids = [object.uuid];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tuuids,\n\t\t\t\t\t\tuuids.map((id, index) => {\n\t\t\t\t\t\t\tconst props = getPropFn(index);\n\t\t\t\t\t\t\tif (temp) {\n\t\t\t\t\t\t\t\tprepare(temp, props);\n\t\t\t\t\t\t\t\t(object as unknown as InstancedMesh).setMatrixAt(index, temp.matrix);\n\t\t\t\t\t\t\t\t(object as unknown as InstancedMesh).instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprepare(object, props);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tphysics.api.refs[id] = object;\n\t\t\t\t\t\t\taddToDebug?.(id, props, type);\n\t\t\t\t\t\t\tsetupCollision(physics.api.events, props, id);\n\t\t\t\t\t\t\t// @ts-expect-error - if args is undefined, there's default\n\t\t\t\t\t\t\treturn { ...props, args: transform(props.args) };\n\t\t\t\t\t\t}),\n\t\t\t\t\t];\n\t\t\t\t})();\n\t\t\t\t// Register on mount, unregister on unmount\n\t\t\t\tcurrentWorker.addBodies({\n\t\t\t\t\tprops: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {\n\t\t\t\t\t\treturn { onCollide: Boolean(onCollide), ...serializableProps };\n\t\t\t\t\t}),\n\t\t\t\t\ttype,\n\t\t\t\t\tuuid,\n\t\t\t\t});\n\n\t\t\t\treturn () => {\n\t\t\t\t\tuuid.forEach((id) => {\n\t\t\t\t\t\tdelete physics.api.refs[id];\n\t\t\t\t\t\tremoveFromDebug?.(id);\n\t\t\t\t\t\tdelete physics.api.events[id];\n\t\t\t\t\t});\n\t\t\t\t\tcurrentWorker.removeBodies({ uuid });\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\treturn api;\n\t});\n}\n\nexport const injectBox = createInjectBody('Box');\nexport const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');\nexport const injectCylinder = createInjectBody('Cylinder');\nexport const injectHeightfield = createInjectBody('Heightfield');\nexport const injectParticle = createInjectBody('Particle');\nexport const injectPlane = createInjectBody('Plane');\nexport const injectSphere = createInjectBody('Sphere');\nexport const injectTrimesh = createInjectBody('Trimesh');\nexport const injectCompound = createInjectBody('Compound');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { isSignal, signal, computed, afterNextRender, untracked } from '@angular/core';
|
|
1
|
+
import { inject, isSignal, signal, computed, afterNextRender, untracked } from '@angular/core';
|
|
2
2
|
import { makeId, resolveRef } from 'angular-three';
|
|
3
|
-
import {
|
|
3
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
4
4
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
5
5
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
6
|
|
|
@@ -9,12 +9,12 @@ function createInjectConstraint(type) {
|
|
|
9
9
|
}
|
|
10
10
|
function injectConstraint(type, bodyA, bodyB, { injector, options = {}, disableOnStart = false } = {}) {
|
|
11
11
|
return assertInjector(injectConstraint, injector, () => {
|
|
12
|
-
const
|
|
13
|
-
if (!
|
|
12
|
+
const physics = inject(NgtcPhysics, { optional: true });
|
|
13
|
+
if (!physics) {
|
|
14
14
|
throw new Error(`[NGT Cannon] injectConstraint was called outside of <ngtc-physics>`);
|
|
15
15
|
}
|
|
16
16
|
const autoEffect = injectAutoEffect();
|
|
17
|
-
const worker =
|
|
17
|
+
const worker = physics.api.worker;
|
|
18
18
|
const uuid = makeId();
|
|
19
19
|
const bodyARef = isSignal(bodyA) ? bodyA : signal(bodyA);
|
|
20
20
|
const bodyBRef = isSignal(bodyB) ? bodyB : signal(bodyB);
|
|
@@ -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 {
|
|
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 {\n\tElementRef,\n\tInjector,\n\tSignal,\n\tafterNextRender,\n\tcomputed,\n\tinject,\n\tisSignal,\n\tsignal,\n\tuntracked,\n} 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 { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { Object3D } 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 Object3D = Object3D, B extends Object3D = 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 Object3D = Object3D,\n\tB extends Object3D = 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{ injector, options = {} as any, disableOnStart = false }: 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 autoEffect = injectAutoEffect();\n\t\tconst worker = physics.api.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 api = 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\tafterNextRender(() => {\n\t\t\tautoEffect(() => {\n\t\t\t\tconst currentWorker = worker();\n\t\t\t\tif (!currentWorker) return;\n\n\t\t\t\tconst [a, b] = [bodyAValue(), bodyBValue()];\n\n\t\t\t\tif (a && b) {\n\t\t\t\t\tcurrentWorker.addConstraint({\n\t\t\t\t\t\tprops: [a.uuid, b.uuid, options],\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tuuid,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (disableOnStart && !alreadyDisabled) {\n\t\t\t\t\t\talreadyDisabled = true;\n\t\t\t\t\t\tuntracked(api)?.disable();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn () => currentWorker.removeConstraint({ uuid });\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t});\n\t\t});\n\n\t\treturn api;\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,8 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, afterNextRender, Directive } from '@angular/core';
|
|
2
|
+
import { inject, input, afterNextRender, Directive } from '@angular/core';
|
|
3
3
|
import { propsToBody } from '@pmndrs/cannon-worker-api';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { injectStore, injectBeforeRender } from 'angular-three';
|
|
5
|
+
import { NgtcPhysics } from 'angular-three-cannon';
|
|
6
6
|
import CannonDebugger from 'cannon-es-debugger';
|
|
7
7
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
8
8
|
import { Quaternion, Vector3, Matrix4, InstancedMesh, Scene } from 'three';
|
|
@@ -18,7 +18,6 @@ function getMatrix(o) {
|
|
|
18
18
|
}
|
|
19
19
|
return o.matrix;
|
|
20
20
|
}
|
|
21
|
-
const [injectNgtcDebugApi, provideNgtcDebugApi] = createApiToken(() => NgtcDebug);
|
|
22
21
|
const defaultOptions = {
|
|
23
22
|
enabled: true,
|
|
24
23
|
scale: 1,
|
|
@@ -28,25 +27,13 @@ const defaultOptions = {
|
|
|
28
27
|
class NgtcDebug {
|
|
29
28
|
constructor() {
|
|
30
29
|
this.store = injectStore();
|
|
31
|
-
this.
|
|
30
|
+
this.physics = inject(NgtcPhysics);
|
|
32
31
|
this.debug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
33
32
|
this.defaultScene = this.store.select('scene');
|
|
34
33
|
this.scene = new Scene();
|
|
35
34
|
this.bodies = [];
|
|
36
35
|
this.bodyMap = {};
|
|
37
|
-
this.api = {
|
|
38
|
-
add: (uuid, props, type) => {
|
|
39
|
-
const body = propsToBody({ uuid, props, type });
|
|
40
|
-
this.bodies.push(body);
|
|
41
|
-
this.bodyMap[uuid] = body;
|
|
42
|
-
},
|
|
43
|
-
remove: (uuid) => {
|
|
44
|
-
const debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);
|
|
45
|
-
if (debugBodyIndex > -1)
|
|
46
|
-
this.bodies.splice(debugBodyIndex, 1);
|
|
47
|
-
delete this.bodyMap[uuid];
|
|
48
|
-
},
|
|
49
|
-
};
|
|
36
|
+
this.api = {};
|
|
50
37
|
afterNextRender(() => {
|
|
51
38
|
this.defaultScene().add(this.scene);
|
|
52
39
|
this.cannonDebugger = this.debug().impl(this.scene, { bodies: this.bodies }, {
|
|
@@ -57,7 +44,7 @@ class NgtcDebug {
|
|
|
57
44
|
injectBeforeRender(() => {
|
|
58
45
|
if (!this.cannonDebugger)
|
|
59
46
|
return;
|
|
60
|
-
const refs = this.
|
|
47
|
+
const refs = this.physics.api.refs;
|
|
61
48
|
for (const uuid in this.bodyMap) {
|
|
62
49
|
const ref = refs[uuid];
|
|
63
50
|
const body = this.bodyMap[uuid];
|
|
@@ -75,17 +62,28 @@ class NgtcDebug {
|
|
|
75
62
|
}
|
|
76
63
|
});
|
|
77
64
|
}
|
|
65
|
+
add(uuid, props, type) {
|
|
66
|
+
const body = propsToBody({ uuid, props, type });
|
|
67
|
+
this.bodies.push(body);
|
|
68
|
+
this.bodyMap[uuid] = body;
|
|
69
|
+
}
|
|
70
|
+
remove(uuid) {
|
|
71
|
+
const debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);
|
|
72
|
+
if (debugBodyIndex > -1)
|
|
73
|
+
this.bodies.splice(debugBodyIndex, 1);
|
|
74
|
+
delete this.bodyMap[uuid];
|
|
75
|
+
}
|
|
78
76
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
79
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } },
|
|
77
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: NgtcDebug, isStandalone: true, selector: "ngtc-physics[debug]", inputs: { debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
80
78
|
}
|
|
81
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcDebug, decorators: [{
|
|
82
80
|
type: Directive,
|
|
83
|
-
args: [{ selector: 'ngtc-physics[debug]', standalone: true
|
|
81
|
+
args: [{ selector: 'ngtc-physics[debug]', standalone: true }]
|
|
84
82
|
}], ctorParameters: () => [] });
|
|
85
83
|
|
|
86
84
|
/**
|
|
87
85
|
* Generated bundle index. Do not edit.
|
|
88
86
|
*/
|
|
89
87
|
|
|
90
|
-
export { NgtcDebug
|
|
88
|
+
export { NgtcDebug };
|
|
91
89
|
//# sourceMappingURL=angular-three-cannon-debug.mjs.map
|
|
@@ -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, input } from '@angular/core';\nimport { BodyProps, BodyShapeType, propsToBody } from '@pmndrs/cannon-worker-api';\nimport {
|
|
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 } 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 { InstancedMesh, Matrix4, Object3D, Quaternion, Scene, Vector3 } from 'three';\n\nconst q = new Quaternion();\nconst s = new Vector3(1, 1, 1);\nconst v = new Vector3();\nconst m = new Matrix4();\nfunction getMatrix(o: Object3D) {\n\tif (o instanceof InstancedMesh) {\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]', standalone: true })\nexport class NgtcDebug {\n\tprivate store = injectStore();\n\tprivate physics = inject(NgtcPhysics);\n\n\tdebug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate defaultScene = this.store.select('scene');\n\n\tprivate scene = new Scene();\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tapi = {};\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.defaultScene().add(this.scene);\n\t\t\tthis.cannonDebugger = this.debug().impl(this.scene, { 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\t\t\tconst refs = this.physics.api.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\t\t\tfor (const child of this.scene.children) {\n\t\t\t\tchild.visible = this.debug().enabled;\n\t\t\t}\n\n\t\t\tif (this.debug().enabled) {\n\t\t\t\tthis.cannonDebugger.update();\n\t\t\t}\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,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, NgZone, Injector, input, signal, afterNextRender, DestroyRef, computed, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
3
3
|
import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
|
|
4
|
-
import {
|
|
4
|
+
import { injectStore, injectBeforeRender } from 'angular-three';
|
|
5
5
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
6
|
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
7
|
import { Vector3, Quaternion, Matrix4, InstancedMesh } from 'three';
|
|
@@ -25,7 +25,6 @@ function unique() {
|
|
|
25
25
|
const values = [];
|
|
26
26
|
return (value) => (values.includes(value) ? false : !!values.push(value));
|
|
27
27
|
}
|
|
28
|
-
const [injectPhysicsApi, providePhysicsApi] = createApiToken(() => NgtcPhysics);
|
|
29
28
|
const defaultOptions = {
|
|
30
29
|
allowSleep: false,
|
|
31
30
|
axisIndex: 0,
|
|
@@ -182,7 +181,7 @@ class NgtcPhysics {
|
|
|
182
181
|
cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
183
182
|
}
|
|
184
183
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
185
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } },
|
|
184
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.6", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
186
185
|
<ng-content />
|
|
187
186
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
188
187
|
}
|
|
@@ -195,7 +194,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
195
194
|
<ng-content />
|
|
196
195
|
`,
|
|
197
196
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
198
|
-
providers: [providePhysicsApi()],
|
|
199
197
|
}]
|
|
200
198
|
}], ctorParameters: () => [] });
|
|
201
199
|
|
|
@@ -203,5 +201,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
203
201
|
* Generated bundle index. Do not edit.
|
|
204
202
|
*/
|
|
205
203
|
|
|
206
|
-
export { NgtcPhysics
|
|
204
|
+
export { NgtcPhysics };
|
|
207
205
|
//# sourceMappingURL=angular-three-cannon.mjs.map
|
|
@@ -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 {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tEmbeddedViewRef,\n\tInjector,\n\tNgZone,\n\tSignal,\n\tafterNextRender,\n\tcomputed,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n} 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 { createApiToken, injectBeforeRender, injectStore } from 'angular-three';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, Vector3 } from 'three';\n\nconst v = new Vector3();\nconst s = new Vector3(1, 1, 1);\nconst q = new Quaternion();\nconst m = new Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, 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\nexport const [injectPhysicsApi, providePhysicsApi] = createApiToken(() => NgtcPhysics);\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, Vector3>;\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nexport interface NgtcPhysicsApi {\n\tbodies: { [uuid: string]: number };\n\tevents: NgtcCannonEvents;\n\trefs: Refs;\n\tscaleOverrides: ScaleOverrides;\n\tsubscriptions: Subscriptions;\n\tworker: Signal<CannonWorkerAPI>;\n}\n\nconst defaultOptions: NgtcPhysicsInputs = {\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\n@Component({\n\tselector: 'ngtc-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [providePhysicsApi()],\n})\nexport class NgtcPhysics {\n\tprivate zone = inject(NgZone);\n\tprivate injector = inject(Injector);\n\tprivate autoEffect = injectAutoEffect();\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate invalidate = this.store.select('invalidate');\n\tprivate worker = signal<CannonWorkerAPI>(null!);\n\n\tapi: NgtcPhysicsApi = {\n\t\tbodies: {},\n\t\tevents: {},\n\t\trefs: {},\n\t\tscaleOverrides: {},\n\t\tsubscriptions: {},\n\t\tworker: this.worker.asReadonly(),\n\t};\n\n\tprivate ref?: EmbeddedViewRef<{ $implicit: NgtcPhysicsApi }>;\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tthis.worker.set(new CannonWorkerAPI(this.options()));\n\t\t\t\tthis.connectWorker();\n\t\t\t\tthis.updateWorkerState('axisIndex');\n\t\t\t\tthis.updateWorkerState('broadphase');\n\t\t\t\tthis.updateWorkerState('gravity');\n\t\t\t\tthis.updateWorkerState('iterations');\n\t\t\t\tthis.updateWorkerState('tolerance');\n\t\t\t\tthis.beforeRender();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.ref?.destroy();\n\t\t});\n\t}\n\n\tprivate connectWorker() {\n\t\tthis.autoEffect((injector) => {\n\t\t\tconst worker = this.worker() as CannonWorkerAPI & {\n\t\t\t\ton: (event: string, cb: (...args: any[]) => void) => void;\n\t\t\t\tremoveAllListeners: () => void;\n\t\t\t};\n\t\t\tif (!worker) return;\n\n\t\t\tworker.connect();\n\t\t\tworker.init();\n\n\t\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\t\treturn () => {\n\t\t\t\tworker.terminate();\n\t\t\t\tworker.removeAllListeners();\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate updateWorkerState(key: keyof NgtcPhysicsInputs) {\n\t\tconst computedValue = computed(() => this.options()[key]);\n\n\t\tthis.autoEffect(() => {\n\t\t\tconst [worker, value] = [untracked(this.worker), computedValue()];\n\t\t\t// @ts-expect-error\n\t\t\tworker[key] = value;\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(\n\t\t\t({ delta }) => {\n\t\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.worker()];\n\t\t\t\tif (isPaused || !worker) return;\n\t\t\t\ttimeSinceLastCalled += delta;\n\t\t\t\tworker.step({ maxSubSteps, stepSize: stepSize!, timeSinceLastCalled });\n\t\t\t\ttimeSinceLastCalled = 0;\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this.api;\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.api;\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.api;\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.api,\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 (ref instanceof InstancedMesh) {\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.api;\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":";;;;;;;;AAmCA,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC;AAC3B,MAAM,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AAExB,SAAS,KAAK,CACb,KAAa,EACb,SAA4B,EAC5B,WAA8B,EAC9B,KAAK,GAAG,CAAC,EACT,MAAiB,EAAA;AAEjB,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;QACxB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,MAAM,EAAE;AACX,YAAA,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACtB;AACD,QAAA,OAAO,CAAC,CAAC;KACT;AACD,IAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,MAAM,GAAA;IACd,MAAM,MAAM,GAAc,EAAE,CAAC;AAC7B,IAAA,OAAO,CAAC,KAAc,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC;AAEM,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,GAAG,cAAc,CAAC,MAAM,WAAW,EAAE;AA2BvF,MAAM,cAAc,GAAsB;AACzC,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,OAAO;AACnB,IAAA,sBAAsB,EAAE,EAAE,wBAAwB,EAAE,GAAG,EAAE;AACzD,IAAA,eAAe,EAAE,IAAI;IACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACtB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,CAAC,GAAG,EAAE;AAChB,IAAA,SAAS,EAAE,KAAK;CAChB,CAAC;MAWW,WAAW,CAAA;AAsBvB,IAAA,WAAA,GAAA;AArBQ,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,IAAU,CAAA,UAAA,GAAG,gBAAgB,EAAE,CAAC;QAChC,IAAK,CAAA,KAAA,GAAG,WAAW,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAEpE,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAkB,IAAK,CAAC,CAAC;AAEhD,QAAA,IAAA,CAAA,GAAG,GAAmB;AACrB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;SAChC,CAAC;QAKD,eAAe,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAChC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACpC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACH;IAEO,aAAa,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,KAAI;AAC5B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAGzB,CAAC;AACF,YAAA,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,EAAE,CAAC;AAEd,YAAA,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,YAAA,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,YAAA,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnD,YAAA,OAAO,MAAK;gBACX,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,kBAAkB,EAAE,CAAC;AAC7B,aAAC,CAAC;AACH,SAAC,CAAC,CAAC;KACH;AAEO,IAAA,iBAAiB,CAAC,GAA4B,EAAA;AACrD,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAK;AACpB,YAAA,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;;AAElE,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrB,SAAC,CAAC,CAAC;KACH;IAEO,YAAY,GAAA;QACnB,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,QAAA,kBAAkB,CACjB,CAAC,EAAE,KAAK,EAAE,KAAI;YACb,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,IAAI,QAAQ,IAAI,CAAC,MAAM;gBAAE,OAAO;YAChC,mBAAmB,IAAI,KAAK,CAAC;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACvE,mBAAmB,GAAG,CAAC,CAAC;SACxB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC3B,CAAC;KACF;AAEO,IAAA,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAA8B,EAAA;QAChH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QACnC,IAAI,EAAE,EAAE;AACP,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;SACjH;KACD;AAEO,IAAA,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAmC,EAAA;QAC5E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AACxC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AACxC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;KAC5F;AAEO,IAAA,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAiC,EAAA;QACxE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AACtC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AACtC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;KAC1F;AAEO,IAAA,YAAY,CAAC,EACpB,MAAM,EACN,MAAM,EAAE,KAAK,GAAG,EAAE,EAClB,YAAY,EACZ,SAAS,EACT,WAAW,GACiB,EAAA;AAC5B,QAAA,MAAM,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,GAAG;AAC3F,YAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,UAAU,EAAE;SACjB,CAAC;AACF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB;AACD,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAI;YAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AAC7C,YAAA,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;;AAE9B,YAAA,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AACjB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;AACpB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AACvD,YAAA,IAAI,GAAG,YAAY,aAAa,EAAE;AACjC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,IAAI,GAAG,CAAG,EAAA,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;AAChC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,oBAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACxB,wBAAA,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E,wBAAA,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;qBACtC;iBACD;aACD;iBAAM;AACN,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;AACpD,gBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aAC5D;SACD;AACD,QAAA,IAAI,gBAAgB;AAAE,YAAA,UAAU,EAAE,CAAC;KACnC;AAEO,IAAA,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAA6B,EAAA;QAC5F,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;QAClC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AAChC,QAAA,IAAI,EAAE;AAAE,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KACnF;8GA7JW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAFZ,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,iBAAiB,EAAE,CAAC,EAJtB,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAET,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIW,WAAW,EAAA,UAAA,EAAA,CAAA;kBATvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAA;;AAET,CAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE,CAAC,iBAAiB,EAAE,CAAC;AAChC,iBAAA,CAAA;;;ACrHD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tEmbeddedViewRef,\n\tInjector,\n\tNgZone,\n\tSignal,\n\tafterNextRender,\n\tcomputed,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n} 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 } from 'angular-three';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, Vector3 } from 'three';\n\nconst v = new Vector3();\nconst s = new Vector3(1, 1, 1);\nconst q = new Quaternion();\nconst m = new Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, 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, Vector3>;\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nexport interface NgtcPhysicsApi {\n\tbodies: { [uuid: string]: number };\n\tevents: NgtcCannonEvents;\n\trefs: Refs;\n\tscaleOverrides: ScaleOverrides;\n\tsubscriptions: Subscriptions;\n\tworker: Signal<CannonWorkerAPI>;\n}\n\nconst defaultOptions: NgtcPhysicsInputs = {\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\n@Component({\n\tselector: 'ngtc-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtcPhysics {\n\tprivate zone = inject(NgZone);\n\tprivate injector = inject(Injector);\n\tprivate autoEffect = injectAutoEffect();\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate invalidate = this.store.select('invalidate');\n\tprivate worker = signal<CannonWorkerAPI>(null!);\n\n\tapi: NgtcPhysicsApi = {\n\t\tbodies: {},\n\t\tevents: {},\n\t\trefs: {},\n\t\tscaleOverrides: {},\n\t\tsubscriptions: {},\n\t\tworker: this.worker.asReadonly(),\n\t};\n\n\tprivate ref?: EmbeddedViewRef<{ $implicit: NgtcPhysicsApi }>;\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tthis.worker.set(new CannonWorkerAPI(this.options()));\n\t\t\t\tthis.connectWorker();\n\t\t\t\tthis.updateWorkerState('axisIndex');\n\t\t\t\tthis.updateWorkerState('broadphase');\n\t\t\t\tthis.updateWorkerState('gravity');\n\t\t\t\tthis.updateWorkerState('iterations');\n\t\t\t\tthis.updateWorkerState('tolerance');\n\t\t\t\tthis.beforeRender();\n\t\t\t});\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.ref?.destroy();\n\t\t});\n\t}\n\n\tprivate connectWorker() {\n\t\tthis.autoEffect((injector) => {\n\t\t\tconst worker = this.worker() as CannonWorkerAPI & {\n\t\t\t\ton: (event: string, cb: (...args: any[]) => void) => void;\n\t\t\t\tremoveAllListeners: () => void;\n\t\t\t};\n\t\t\tif (!worker) return;\n\n\t\t\tworker.connect();\n\t\t\tworker.init();\n\n\t\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\t\treturn () => {\n\t\t\t\tworker.terminate();\n\t\t\t\tworker.removeAllListeners();\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate updateWorkerState(key: keyof NgtcPhysicsInputs) {\n\t\tconst computedValue = computed(() => this.options()[key]);\n\n\t\tthis.autoEffect(() => {\n\t\t\tconst [worker, value] = [untracked(this.worker), computedValue()];\n\t\t\t// @ts-expect-error\n\t\t\tworker[key] = value;\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(\n\t\t\t({ delta }) => {\n\t\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.worker()];\n\t\t\t\tif (isPaused || !worker) return;\n\t\t\t\ttimeSinceLastCalled += delta;\n\t\t\t\tworker.step({ maxSubSteps, stepSize: stepSize!, timeSinceLastCalled });\n\t\t\t\ttimeSinceLastCalled = 0;\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this.api;\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.api;\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.api;\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.api,\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 (ref instanceof InstancedMesh) {\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.api;\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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"}
|
package/lib/physics.d.ts
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
2
|
import { CannonWorkerAPI, CannonWorkerProps, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, Refs, Subscriptions } from '@pmndrs/cannon-worker-api';
|
|
3
3
|
import { Vector3 } from 'three';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare const injectPhysicsApi: {
|
|
6
|
-
(): NgtcPhysicsApi;
|
|
7
|
-
(injectOptions: import("@angular/core").InjectOptions & {
|
|
8
|
-
optional?: false | undefined;
|
|
9
|
-
} & {
|
|
10
|
-
injector?: Injector | undefined;
|
|
11
|
-
}): NgtcPhysicsApi;
|
|
12
|
-
(injectOptions: import("@angular/core").InjectOptions & {
|
|
13
|
-
injector?: Injector | undefined;
|
|
14
|
-
}): NgtcPhysicsApi | null;
|
|
15
|
-
}, providePhysicsApi: () => import("@angular/core").Provider;
|
|
16
5
|
type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
|
|
17
6
|
type NgtcCallbackByType<T extends {
|
|
18
7
|
type: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "angular-three-cannon",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.256",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -53,17 +53,17 @@
|
|
|
53
53
|
"esm": "./esm2022/body/angular-three-cannon-body.mjs",
|
|
54
54
|
"default": "./fesm2022/angular-three-cannon-body.mjs"
|
|
55
55
|
},
|
|
56
|
-
"./debug": {
|
|
57
|
-
"types": "./debug/index.d.ts",
|
|
58
|
-
"esm2022": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
59
|
-
"esm": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
60
|
-
"default": "./fesm2022/angular-three-cannon-debug.mjs"
|
|
61
|
-
},
|
|
62
56
|
"./constraint": {
|
|
63
57
|
"types": "./constraint/index.d.ts",
|
|
64
58
|
"esm2022": "./esm2022/constraint/angular-three-cannon-constraint.mjs",
|
|
65
59
|
"esm": "./esm2022/constraint/angular-three-cannon-constraint.mjs",
|
|
66
60
|
"default": "./fesm2022/angular-three-cannon-constraint.mjs"
|
|
61
|
+
},
|
|
62
|
+
"./debug": {
|
|
63
|
+
"types": "./debug/index.d.ts",
|
|
64
|
+
"esm2022": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
65
|
+
"esm": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
66
|
+
"default": "./fesm2022/angular-three-cannon-debug.mjs"
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|