angular-three-cannon 1.5.2 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -12
- package/debug/{lib/debug.d.ts → debug.d.ts} +10 -10
- package/debug/index.d.ts +1 -1
- package/esm2022/angular-three-cannon.mjs +5 -0
- package/esm2022/debug/angular-three-cannon-debug.mjs +5 -0
- package/esm2022/debug/debug.mjs +99 -0
- package/esm2022/debug/index.mjs +2 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/physics.mjs +297 -0
- package/esm2022/services/angular-three-cannon-services.mjs +5 -0
- package/esm2022/services/body.mjs +289 -0
- package/esm2022/services/constraint.mjs +59 -0
- package/esm2022/services/contact-material.mjs +20 -0
- package/esm2022/services/index.mjs +7 -0
- package/esm2022/services/ray.mjs +30 -0
- package/esm2022/services/raycast-vehicle.mjs +72 -0
- package/esm2022/services/spring.mjs +34 -0
- package/fesm2022/angular-three-cannon-debug.mjs +105 -0
- package/fesm2022/angular-three-cannon-debug.mjs.map +1 -0
- package/fesm2022/angular-three-cannon-services.mjs +494 -0
- package/fesm2022/angular-three-cannon-services.mjs.map +1 -0
- package/fesm2022/angular-three-cannon.mjs +303 -0
- package/fesm2022/angular-three-cannon.mjs.map +1 -0
- package/index.d.ts +1 -3
- package/package.json +19 -29
- package/physics.d.ts +97 -0
- package/plugin/package.json +2 -2
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +2 -2
- package/plugin/src/generators/init/init.js +16 -20
- package/plugin/src/generators/init/init.js.map +1 -1
- package/plugin/src/index.js.map +1 -1
- package/services/{lib/body.d.ts → body.d.ts} +19 -39
- package/services/constraint.d.ts +31 -0
- package/services/contact-material.d.ts +9 -0
- package/services/index.d.ts +6 -6
- package/services/ray.d.ts +12 -0
- package/services/{lib/raycast-vehicle.d.ts → raycast-vehicle.d.ts} +8 -3
- package/services/{lib/spring.d.ts → spring.d.ts} +8 -3
- package/esm2020/angular-three-cannon.mjs +0 -5
- package/esm2020/debug/angular-three-cannon-debug.mjs +0 -5
- package/esm2020/debug/index.mjs +0 -2
- package/esm2020/debug/lib/debug.mjs +0 -117
- package/esm2020/index.mjs +0 -4
- package/esm2020/lib/physics.mjs +0 -261
- package/esm2020/lib/store.mjs +0 -21
- package/esm2020/lib/utils.mjs +0 -47
- package/esm2020/services/angular-three-cannon-services.mjs +0 -5
- package/esm2020/services/index.mjs +0 -7
- package/esm2020/services/lib/body.mjs +0 -271
- package/esm2020/services/lib/constraint.mjs +0 -69
- package/esm2020/services/lib/contact-material.mjs +0 -18
- package/esm2020/services/lib/ray.mjs +0 -32
- package/esm2020/services/lib/raycast-vehicle.mjs +0 -76
- package/esm2020/services/lib/spring.mjs +0 -37
- package/esm2020/services/lib/utils.mjs +0 -5
- package/fesm2015/angular-three-cannon-debug.mjs +0 -124
- package/fesm2015/angular-three-cannon-debug.mjs.map +0 -1
- package/fesm2015/angular-three-cannon-services.mjs +0 -488
- package/fesm2015/angular-three-cannon-services.mjs.map +0 -1
- package/fesm2015/angular-three-cannon.mjs +0 -333
- package/fesm2015/angular-three-cannon.mjs.map +0 -1
- package/fesm2020/angular-three-cannon-debug.mjs +0 -124
- package/fesm2020/angular-three-cannon-debug.mjs.map +0 -1
- package/fesm2020/angular-three-cannon-services.mjs +0 -489
- package/fesm2020/angular-three-cannon-services.mjs.map +0 -1
- package/fesm2020/angular-three-cannon.mjs +0 -331
- package/fesm2020/angular-three-cannon.mjs.map +0 -1
- package/lib/physics.d.ts +0 -43
- package/lib/store.d.ts +0 -34
- package/lib/utils.d.ts +0 -16
- package/services/lib/constraint.d.ts +0 -25
- package/services/lib/contact-material.d.ts +0 -3
- package/services/lib/ray.d.ts +0 -4
- package/services/lib/utils.d.ts +0 -2
package/README.md
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# cannon
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This library was generated with [Nx](https://nx.dev).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
ng add angular-three-cannon
|
|
7
|
-
```
|
|
5
|
+
## Running unit tests
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Read more about Angular Three Cannon usages in [TBD: Documentations](#)
|
|
12
|
-
|
|
13
|
-
## Contributions
|
|
14
|
-
|
|
15
|
-
Contributions are welcomed
|
|
7
|
+
Run `nx test cannon` to execute the unit tests.
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { InjectionToken, OnInit } from '@angular/core';
|
|
1
|
+
import { InjectionToken, OnInit, Signal } from '@angular/core';
|
|
2
2
|
import { BodyProps, BodyShapeType } from '@pmndrs/cannon-worker-api';
|
|
3
|
-
import { Body } from 'cannon-es';
|
|
4
3
|
import CannonDebugger from 'cannon-es-debugger';
|
|
5
4
|
import * as THREE from 'three';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
|
-
export
|
|
6
|
+
export interface NgtcDebugApi {
|
|
8
7
|
add(id: string, props: BodyProps, type: BodyShapeType): void;
|
|
9
8
|
remove(id: string): void;
|
|
10
|
-
}
|
|
11
|
-
export declare const NGTC_DEBUG_API: InjectionToken<NgtcDebugApi
|
|
9
|
+
}
|
|
10
|
+
export declare const NGTC_DEBUG_API: InjectionToken<Signal<NgtcDebugApi>>;
|
|
12
11
|
export declare class NgtcDebug implements OnInit {
|
|
12
|
+
#private;
|
|
13
13
|
color: string;
|
|
14
14
|
scale: number;
|
|
15
15
|
impl: typeof CannonDebugger;
|
|
16
16
|
disabled: boolean;
|
|
17
|
-
readonly bodies: Body[];
|
|
18
|
-
readonly bodyMap: Record<string, Body>;
|
|
19
17
|
readonly scene: THREE.Scene;
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
readonly api: Signal<{
|
|
19
|
+
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
20
|
+
remove: (id: string) => void;
|
|
21
|
+
}>;
|
|
22
22
|
constructor();
|
|
23
23
|
ngOnInit(): void;
|
|
24
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": "color"; "scale": "scale"; "impl": "impl"; "disabled": "disabled"; }, {}, never, ["*"], true, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": { "alias": "color"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; "impl": { "alias": "impl"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
26
26
|
}
|
package/debug/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './debug';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24tZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, InjectionToken, Input, } from '@angular/core';
|
|
2
|
+
import { propsToBody } from '@pmndrs/cannon-worker-api';
|
|
3
|
+
import { injectBeforeRender, NgtArgs } from 'angular-three';
|
|
4
|
+
import { NGTC_PHYSICS_API } from 'angular-three-cannon';
|
|
5
|
+
import CannonDebugger from 'cannon-es-debugger';
|
|
6
|
+
import * as THREE from 'three';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const q = new THREE.Quaternion();
|
|
9
|
+
const s = new THREE.Vector3(1, 1, 1);
|
|
10
|
+
const v = new THREE.Vector3();
|
|
11
|
+
const m = new THREE.Matrix4();
|
|
12
|
+
function getMatrix(o) {
|
|
13
|
+
if (o instanceof THREE.InstancedMesh) {
|
|
14
|
+
o.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);
|
|
15
|
+
return m;
|
|
16
|
+
}
|
|
17
|
+
return o.matrix;
|
|
18
|
+
}
|
|
19
|
+
export const NGTC_DEBUG_API = new InjectionToken('NgtcDebug API');
|
|
20
|
+
class NgtcDebug {
|
|
21
|
+
#bodies;
|
|
22
|
+
#bodyMap;
|
|
23
|
+
#physicsApi;
|
|
24
|
+
#cannonDebugger;
|
|
25
|
+
constructor() {
|
|
26
|
+
this.color = 'black';
|
|
27
|
+
this.scale = 1;
|
|
28
|
+
this.impl = CannonDebugger;
|
|
29
|
+
this.disabled = false;
|
|
30
|
+
this.#bodies = [];
|
|
31
|
+
this.#bodyMap = {};
|
|
32
|
+
this.scene = new THREE.Scene();
|
|
33
|
+
this.#physicsApi = inject(NGTC_PHYSICS_API);
|
|
34
|
+
this.api = computed(() => ({
|
|
35
|
+
add: (uuid, props, type) => {
|
|
36
|
+
const body = propsToBody({ uuid, props, type });
|
|
37
|
+
this.#bodies.push(body);
|
|
38
|
+
this.#bodyMap[uuid] = body;
|
|
39
|
+
},
|
|
40
|
+
remove: (id) => {
|
|
41
|
+
const debugBodyIndex = this.#bodies.indexOf(this.#bodyMap[id]);
|
|
42
|
+
if (debugBodyIndex > -1)
|
|
43
|
+
this.#bodies.splice(debugBodyIndex, 1);
|
|
44
|
+
delete this.#bodyMap[id];
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
injectBeforeRender(() => {
|
|
48
|
+
if (!this.#cannonDebugger)
|
|
49
|
+
return;
|
|
50
|
+
const refs = this.#physicsApi().refs;
|
|
51
|
+
for (const uuid in this.#bodyMap) {
|
|
52
|
+
getMatrix(refs[uuid]).decompose(v, q, s);
|
|
53
|
+
this.#bodyMap[uuid].position.copy(v);
|
|
54
|
+
this.#bodyMap[uuid].quaternion.copy(q);
|
|
55
|
+
}
|
|
56
|
+
for (const child of this.scene.children) {
|
|
57
|
+
child.visible = !this.disabled;
|
|
58
|
+
}
|
|
59
|
+
if (!this.disabled) {
|
|
60
|
+
this.#cannonDebugger.update();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
this.#cannonDebugger = this.impl(this.scene, { bodies: this.#bodies }, {
|
|
66
|
+
color: this.color,
|
|
67
|
+
scale: this.scale,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [{ provide: NGTC_DEBUG_API, useFactory: (debug) => debug.api, deps: [NgtcDebug] }], ngImport: i0, template: `
|
|
72
|
+
<ngt-primitive *args="[scene]" />
|
|
73
|
+
<ng-content />
|
|
74
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
|
|
75
|
+
}
|
|
76
|
+
export { NgtcDebug };
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcDebug, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{
|
|
80
|
+
selector: 'ngtc-debug',
|
|
81
|
+
standalone: true,
|
|
82
|
+
template: `
|
|
83
|
+
<ngt-primitive *args="[scene]" />
|
|
84
|
+
<ng-content />
|
|
85
|
+
`,
|
|
86
|
+
providers: [{ provide: NGTC_DEBUG_API, useFactory: (debug) => debug.api, deps: [NgtcDebug] }],
|
|
87
|
+
imports: [NgtArgs],
|
|
88
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
89
|
+
}]
|
|
90
|
+
}], ctorParameters: function () { return []; }, propDecorators: { color: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], scale: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], impl: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], disabled: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}] } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUdSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLGNBQWMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUIsU0FBUyxTQUFTLENBQUMsQ0FBaUI7SUFDaEMsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLGFBQWEsRUFBRTtRQUNsQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLENBQUMsQ0FBQyxN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LEtBQUs7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ3BCLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBcERRLFNBQVM7a0dBQVQsU0FBUyx5SUFKUCxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsMEJBSjlGOzs7S0FHVCw0REFFUyxPQUFPOztTQUdSLFNBQVM7MkZBQVQsU0FBUztrQkFYckIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7O0tBR1Q7b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUN4RyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFWSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb2R5UHJvcHMsIEJvZHlTaGFwZVR5cGUsIHByb3BzVG9Cb2R5IH0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIE5ndEFyZ3MgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5HVENfUEhZU0lDU19BUEkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBCb2R5LCBRdWF0ZXJuaW9uIGFzIENRdWFydGVybmlvbiwgVmVjMywgV29ybGQgfSBmcm9tICdjYW5ub24tZXMnO1xuaW1wb3J0IENhbm5vbkRlYnVnZ2VyIGZyb20gJ2Nhbm5vbi1lcy1kZWJ1Z2dlcic7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IHEgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xuY29uc3QgcyA9IG5ldyBUSFJFRS5WZWN0b3IzKDEsIDEsIDEpO1xuY29uc3QgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5jb25zdCBtID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcblxuZnVuY3Rpb24gZ2V0TWF0cml4KG86IFRIUkVFLk9iamVjdDNEKTogVEhSRUUuTWF0cml4NCB7XG4gICAgaWYgKG8gaW5zdGFuY2VvZiBUSFJFRS5JbnN0YW5jZWRNZXNoKSB7XG4gICAgICAgIG8uZ2V0TWF0cml4QXQocGFyc2VJbnQoby51dWlkLnNwbGl0KCcvJylbMV0pLCBtKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuICAgIHJldHVybiBvLm1hdHJpeDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjRGVidWdBcGkge1xuICAgIGFkZChpZDogc3RyaW5nLCBwcm9wczogQm9keVByb3BzLCB0eXBlOiBCb2R5U2hhcGVUeXBlKTogdm9pZDtcbiAgICByZW1vdmUoaWQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOR1RDX0RFQlVHX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTaWduYWw8Tmd0Y0RlYnVnQXBpPj4oJ05ndGNEZWJ1ZyBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RjLWRlYnVnJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW3NjZW5lXVwiIC8+XG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HVENfREVCVUdfQVBJLCB1c2VGYWN0b3J5OiAoZGVidWc6IE5ndGNEZWJ1ZykgPT4gZGVidWcuYXBpLCBkZXBzOiBbTmd0Y0RlYnVnXSB9XSxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RjRGVidWcgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIGNvbG9yID0gJ2JsYWNrJztcbiAgICBASW5wdXQoKSBzY2FsZSA9IDE7XG4gICAgQElucHV0KCkgaW1wbCA9IENhbm5vbkRlYnVnZ2VyO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICByZWFkb25seSAjYm9kaWVzOiBCb2R5W10gPSBbXTtcbiAgICByZWFkb25seSAjYm9keU1hcDogUmVjb3JkPHN0cmluZywgQm9keT4gPSB7fTtcbiAgICByZWFkb25seSBzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpO1xuXG4gICAgcmVhZG9ubHkgI3BoeXNpY3NBcGkgPSBpbmplY3QoTkdUQ19QSFlTSUNTX0FQSSk7XG5cbiAgICAjY2Fubm9uRGVidWdnZXIhOiBSZXR1cm5UeXBlPHR5cGVvZiBDYW5ub25EZWJ1Z2dlcj47XG5cbiAgICByZWFkb25seSBhcGkgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICBhZGQ6ICh1dWlkOiBzdHJpbmcsIHByb3BzOiBCb2R5UHJvcHMsIHR5cGU6IEJvZHlTaGFwZVR5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wc1RvQm9keSh7IHV1aWQsIHByb3BzLCB0eXBlIH0pO1xuICAgICAgICAgICAgdGhpcy4jYm9kaWVzLnB1c2goYm9keSk7XG4gICAgICAgICAgICB0aGlzLiNib2R5TWFwW3V1aWRdID0gYm9keTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVidWdCb2R5SW5kZXggPSB0aGlzLiNib2RpZXMuaW5kZXhPZih0aGlzLiNib2R5TWFwW2lkXSk7XG4gICAgICAgICAgICBpZiAoZGVidWdCb2R5SW5kZXggPiAtMSkgdGhpcy4jYm9kaWVzLnNwbGljZShkZWJ1Z0JvZHlJbmRleCwgMSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4jYm9keU1hcFtpZF07XG4gICAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2Nhbm5vbkRlYnVnZ2VyKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCByZWZzID0gdGhpcy4jcGh5c2ljc0FwaSgpLnJlZnM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy4jYm9keU1hcCkge1xuICAgICAgICAgICAgICAgIGdldE1hdHJpeChyZWZzW3V1aWRdKS5kZWNvbXBvc2UodiwgcSwgcyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jYm9keU1hcFt1dWlkXS5wb3NpdGlvbi5jb3B5KHYgYXMgdW5rbm93biBhcyBWZWMzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiNib2R5TWFwW3V1aWRdLnF1YXRlcm5pb24uY29weShxIGFzIHVua25vd24gYXMgQ1F1YXJ0ZXJuaW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnNjZW5lLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY2hpbGQudmlzaWJsZSA9ICF0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjYW5ub25EZWJ1Z2dlci51cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuI2Nhbm5vbkRlYnVnZ2VyID0gdGhpcy5pbXBsKHRoaXMuc2NlbmUsIHsgYm9kaWVzOiB0aGlzLiNib2RpZXMgfSBhcyBXb3JsZCwge1xuICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICAgICAgICBzY2FsZTogdGhpcy5zY2FsZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './debug';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9kZWJ1Zy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlYnVnJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './physics';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3BoeXNpY3MnO1xuIl19
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { Component, InjectionToken, Input, computed, effect, inject, untracked } from '@angular/core';
|
|
2
|
+
import { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';
|
|
3
|
+
import { NgtSignalStore, NgtStore, injectBeforeRender, requestAnimationInInjectionContext, } from 'angular-three';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const v = new THREE.Vector3();
|
|
7
|
+
const s = new THREE.Vector3(1, 1, 1);
|
|
8
|
+
const q = new THREE.Quaternion();
|
|
9
|
+
const m = new THREE.Matrix4();
|
|
10
|
+
function apply(index, positions, quaternions, scale = s, object) {
|
|
11
|
+
if (index !== undefined) {
|
|
12
|
+
m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
|
|
13
|
+
if (object) {
|
|
14
|
+
object.matrixAutoUpdate = false;
|
|
15
|
+
object.matrix.copy(m);
|
|
16
|
+
}
|
|
17
|
+
return m;
|
|
18
|
+
}
|
|
19
|
+
return m.identity();
|
|
20
|
+
}
|
|
21
|
+
export const NGTC_PHYSICS_API = new InjectionToken('NgtcPhysics API');
|
|
22
|
+
class NgtcPhysics extends NgtSignalStore {
|
|
23
|
+
set isPaused(isPaused) {
|
|
24
|
+
this.set({ isPaused });
|
|
25
|
+
}
|
|
26
|
+
set maxSubSteps(maxSubSteps) {
|
|
27
|
+
this.set({ maxSubSteps });
|
|
28
|
+
}
|
|
29
|
+
set shouldInvalidate(shouldInvalidate) {
|
|
30
|
+
this.set({ shouldInvalidate });
|
|
31
|
+
}
|
|
32
|
+
set stepSize(stepSize) {
|
|
33
|
+
this.set({ stepSize });
|
|
34
|
+
}
|
|
35
|
+
set size(size) {
|
|
36
|
+
this.set({ size });
|
|
37
|
+
}
|
|
38
|
+
set allowSleep(allowSleep) {
|
|
39
|
+
this.set({ allowSleep });
|
|
40
|
+
}
|
|
41
|
+
set axisIndex(axisIndex) {
|
|
42
|
+
this.set({ axisIndex });
|
|
43
|
+
}
|
|
44
|
+
set broadphase(broadphase) {
|
|
45
|
+
this.set({ broadphase });
|
|
46
|
+
}
|
|
47
|
+
set defaultContactMaterial(defaultContactMaterial) {
|
|
48
|
+
this.set({ defaultContactMaterial });
|
|
49
|
+
}
|
|
50
|
+
set frictionGravity(frictionGravity) {
|
|
51
|
+
this.set({ frictionGravity });
|
|
52
|
+
}
|
|
53
|
+
set gravity(gravity) {
|
|
54
|
+
this.set({ gravity });
|
|
55
|
+
}
|
|
56
|
+
set iterations(iterations) {
|
|
57
|
+
this.set({ iterations });
|
|
58
|
+
}
|
|
59
|
+
set quatNormalizeFast(quatNormalizeFast) {
|
|
60
|
+
this.set({ quatNormalizeFast });
|
|
61
|
+
}
|
|
62
|
+
set quatNormalizeSkip(quatNormalizeSkip) {
|
|
63
|
+
this.set({ quatNormalizeSkip });
|
|
64
|
+
}
|
|
65
|
+
set solver(solver) {
|
|
66
|
+
this.set({ solver });
|
|
67
|
+
}
|
|
68
|
+
set tolerance(tolerance) {
|
|
69
|
+
this.set({ tolerance });
|
|
70
|
+
}
|
|
71
|
+
#store;
|
|
72
|
+
#bodies;
|
|
73
|
+
#events;
|
|
74
|
+
#refs;
|
|
75
|
+
#scaleOverrides;
|
|
76
|
+
#subscriptions;
|
|
77
|
+
#allowSleep;
|
|
78
|
+
#defaultContactMaterial;
|
|
79
|
+
#frictionGravity;
|
|
80
|
+
#quatNormalizeFast;
|
|
81
|
+
#quatNormalizeSkip;
|
|
82
|
+
#size;
|
|
83
|
+
#solver;
|
|
84
|
+
#workerProps;
|
|
85
|
+
constructor() {
|
|
86
|
+
super({
|
|
87
|
+
allowSleep: false,
|
|
88
|
+
axisIndex: 0,
|
|
89
|
+
broadphase: 'Naive',
|
|
90
|
+
defaultContactMaterial: { contactEquationStiffness: 1e6 },
|
|
91
|
+
frictionGravity: null,
|
|
92
|
+
gravity: [0, -9.81, 0],
|
|
93
|
+
isPaused: false,
|
|
94
|
+
iterations: 5,
|
|
95
|
+
maxSubSteps: 10,
|
|
96
|
+
quatNormalizeFast: false,
|
|
97
|
+
quatNormalizeSkip: 0,
|
|
98
|
+
shouldInvalidate: true,
|
|
99
|
+
size: 1000,
|
|
100
|
+
solver: 'GS',
|
|
101
|
+
stepSize: 1 / 60,
|
|
102
|
+
tolerance: 0.001,
|
|
103
|
+
});
|
|
104
|
+
this.#store = inject(NgtStore);
|
|
105
|
+
this.#bodies = {};
|
|
106
|
+
this.#events = {};
|
|
107
|
+
this.#refs = {};
|
|
108
|
+
this.#scaleOverrides = {};
|
|
109
|
+
this.#subscriptions = {};
|
|
110
|
+
this.#allowSleep = this.select('allowSleep');
|
|
111
|
+
this.#defaultContactMaterial = this.select('defaultContactMaterial');
|
|
112
|
+
this.#frictionGravity = this.select('frictionGravity');
|
|
113
|
+
this.#quatNormalizeFast = this.select('quatNormalizeFast');
|
|
114
|
+
this.#quatNormalizeSkip = this.select('quatNormalizeSkip');
|
|
115
|
+
this.#size = this.select('size');
|
|
116
|
+
this.#solver = this.select('solver');
|
|
117
|
+
this.#workerProps = computed(() => ({
|
|
118
|
+
allowSleep: this.#allowSleep(),
|
|
119
|
+
axisIndex: this.get('axisIndex'),
|
|
120
|
+
broadphase: this.get('broadphase'),
|
|
121
|
+
defaultContactMaterial: this.#defaultContactMaterial(),
|
|
122
|
+
frictionGravity: this.#frictionGravity(),
|
|
123
|
+
gravity: this.get('gravity'),
|
|
124
|
+
iterations: this.get('iterations'),
|
|
125
|
+
quatNormalizeFast: this.#quatNormalizeFast(),
|
|
126
|
+
quatNormalizeSkip: this.#quatNormalizeSkip(),
|
|
127
|
+
size: this.#size(),
|
|
128
|
+
solver: this.#solver(),
|
|
129
|
+
tolerance: this.get('tolerance'),
|
|
130
|
+
}));
|
|
131
|
+
this.worker = computed(() => {
|
|
132
|
+
const workerProps = this.#workerProps();
|
|
133
|
+
return new CannonWorkerAPI(workerProps);
|
|
134
|
+
});
|
|
135
|
+
this.api = computed(() => ({
|
|
136
|
+
bodies: this.#bodies,
|
|
137
|
+
events: this.#events,
|
|
138
|
+
refs: this.#refs,
|
|
139
|
+
scaleOverrides: this.#scaleOverrides,
|
|
140
|
+
subscriptions: this.#subscriptions,
|
|
141
|
+
worker: this.worker(),
|
|
142
|
+
}));
|
|
143
|
+
requestAnimationInInjectionContext(() => {
|
|
144
|
+
this.#connectWorker();
|
|
145
|
+
this.#updateWorkerProp('axisIndex');
|
|
146
|
+
this.#updateWorkerProp('broadphase');
|
|
147
|
+
this.#updateWorkerProp('gravity');
|
|
148
|
+
this.#updateWorkerProp('iterations');
|
|
149
|
+
this.#updateWorkerProp('tolerance');
|
|
150
|
+
injectBeforeRender(this.#onBeforeRender.bind(this, 0));
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
#updateWorkerProp(key) {
|
|
154
|
+
const compute = this.select(key);
|
|
155
|
+
effect(() => {
|
|
156
|
+
const worker = untracked(this.worker);
|
|
157
|
+
const value = compute();
|
|
158
|
+
// @ts-expect-error
|
|
159
|
+
worker[key] = value;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
#connectWorker() {
|
|
163
|
+
effect((onCleanup) => {
|
|
164
|
+
const worker = this.worker();
|
|
165
|
+
worker.connect();
|
|
166
|
+
worker.init();
|
|
167
|
+
worker.on('collide', this.#collideHandler.bind(this));
|
|
168
|
+
worker.on('collideBegin', this.#collideBeginHandler.bind(this));
|
|
169
|
+
worker.on('collideEnd', this.#collideEndHandler.bind(this));
|
|
170
|
+
worker.on('frame', this.#frameHandler.bind(this));
|
|
171
|
+
worker.on('rayhit', this.#rayhitHandler.bind(this));
|
|
172
|
+
onCleanup(() => {
|
|
173
|
+
worker.terminate();
|
|
174
|
+
worker.removeAllListeners();
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
#onBeforeRender(timeSinceLastCalled, { delta }) {
|
|
179
|
+
const { isPaused, maxSubSteps, stepSize } = this.get();
|
|
180
|
+
const worker = this.worker();
|
|
181
|
+
if (isPaused)
|
|
182
|
+
return;
|
|
183
|
+
timeSinceLastCalled += delta;
|
|
184
|
+
worker.step({ maxSubSteps, stepSize: stepSize, timeSinceLastCalled });
|
|
185
|
+
timeSinceLastCalled = 0;
|
|
186
|
+
}
|
|
187
|
+
#collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
|
|
188
|
+
const cb = this.#events[target]?.collide;
|
|
189
|
+
if (cb) {
|
|
190
|
+
cb({
|
|
191
|
+
body: this.#refs[body],
|
|
192
|
+
contact: { bi: this.#refs[bi], bj: this.#refs[bj], ...contactRest },
|
|
193
|
+
target: this.#refs[target],
|
|
194
|
+
...rest,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
#collideBeginHandler({ bodyA, bodyB }) {
|
|
199
|
+
const cbA = this.#events[bodyA]?.collideBegin;
|
|
200
|
+
if (cbA)
|
|
201
|
+
cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideBegin' });
|
|
202
|
+
const cbB = this.#events[bodyB]?.collideBegin;
|
|
203
|
+
if (cbB)
|
|
204
|
+
cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideBegin' });
|
|
205
|
+
}
|
|
206
|
+
#collideEndHandler({ bodyA, bodyB }) {
|
|
207
|
+
const cbA = this.#events[bodyA]?.collideEnd;
|
|
208
|
+
if (cbA)
|
|
209
|
+
cbA({ body: this.#refs[bodyB], op: 'event', target: this.#refs[bodyA], type: 'collideEnd' });
|
|
210
|
+
const cbB = this.#events[bodyB]?.collideEnd;
|
|
211
|
+
if (cbB)
|
|
212
|
+
cbB({ body: this.#refs[bodyA], op: 'event', target: this.#refs[bodyB], type: 'collideEnd' });
|
|
213
|
+
}
|
|
214
|
+
#frameHandler({ active, bodies: uuids = [], observations, positions, quaternions }) {
|
|
215
|
+
const invalidate = this.#store.get('invalidate');
|
|
216
|
+
const shouldInvalidate = this.get('shouldInvalidate');
|
|
217
|
+
for (let i = 0; i < uuids.length; i++) {
|
|
218
|
+
this.#bodies[uuids[i]] = i;
|
|
219
|
+
}
|
|
220
|
+
observations.forEach(([id, value, type]) => {
|
|
221
|
+
const subscription = this.#subscriptions[id] || {};
|
|
222
|
+
const cb = subscription[type];
|
|
223
|
+
// HELP: We clearly know the type of the callback, but typescript can't deal with it
|
|
224
|
+
cb && cb(value);
|
|
225
|
+
});
|
|
226
|
+
if (active) {
|
|
227
|
+
for (const ref of Object.values(this.#refs)) {
|
|
228
|
+
if (ref instanceof THREE.InstancedMesh) {
|
|
229
|
+
for (let i = 0; i < ref.count; i++) {
|
|
230
|
+
const uuid = `${ref.uuid}/${i}`;
|
|
231
|
+
const index = this.#bodies[uuid];
|
|
232
|
+
if (index !== undefined) {
|
|
233
|
+
ref.setMatrixAt(i, apply(index, positions, quaternions, this.#scaleOverrides[uuid]));
|
|
234
|
+
ref.instanceMatrix.needsUpdate = true;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const scale = this.#scaleOverrides[ref.uuid] || ref.scale;
|
|
240
|
+
apply(this.#bodies[ref.uuid], positions, quaternions, scale, ref);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (shouldInvalidate)
|
|
244
|
+
invalidate();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
#rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
|
|
248
|
+
const cb = this.#events[uuid]?.rayhit;
|
|
249
|
+
if (cb)
|
|
250
|
+
cb({ body: body ? this.#refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
251
|
+
}
|
|
252
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
253
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize", size: "size", allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance" }, providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }], usesInheritance: true, ngImport: i0, template: `<ng-content />`, isInline: true }); }
|
|
254
|
+
}
|
|
255
|
+
export { NgtcPhysics };
|
|
256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtcPhysics, decorators: [{
|
|
257
|
+
type: Component,
|
|
258
|
+
args: [{
|
|
259
|
+
selector: 'ngtc-physics',
|
|
260
|
+
standalone: true,
|
|
261
|
+
template: `<ng-content />`,
|
|
262
|
+
providers: [{ provide: NGTC_PHYSICS_API, useFactory: (physics) => physics.api, deps: [NgtcPhysics] }],
|
|
263
|
+
}]
|
|
264
|
+
}], ctorParameters: function () { return []; }, propDecorators: { isPaused: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], maxSubSteps: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], shouldInvalidate: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], stepSize: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], size: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], allowSleep: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], axisIndex: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], broadphase: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], defaultContactMaterial: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], frictionGravity: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], gravity: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], iterations: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], quatNormalizeFast: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], quatNormalizeSkip: [{
|
|
291
|
+
type: Input
|
|
292
|
+
}], solver: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], tolerance: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}] } });
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL3NyYy9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbkgsT0FBTyxFQUNILGVBQWUsR0FpQmxCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLGtDQUFrQyxHQUVyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFOUIsU0FBUyxLQUFLLENBQUMsS0FBYSxFQUFFLFNBQXVCLEVBQUUsV0FBeUIsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQXVCO0lBQ2hILElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekYsSUFBSSxNQUFNLEVBQUU7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LFdBQVcsNmdCQUZULENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGlEQUR4RyxnQkFBZ0I7O1NBR2pCLFdBQVc7MkZBQVgsV0FBVztrQkFOdkIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQW9CLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO2lCQUNySDswRUFFZ0IsUUFBUTtzQkFBcEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3Rpb25Ub2tlbiwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgdW50cmFja2VkLCB0eXBlIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDYW5ub25Xb3JrZXJBUEksXG4gICAgdHlwZSBCcm9hZHBoYXNlLFxuICAgIHR5cGUgQ2Fubm9uV29ya2VyUHJvcHMsXG4gICAgdHlwZSBDb2xsaWRlQmVnaW5FdmVudCxcbiAgICB0eXBlIENvbGxpZGVFbmRFdmVudCxcbiAgICB0eXBlIENvbGxpZGVFdmVudCxcbiAgICB0eXBlIENvbnRhY3RNYXRlcmlhbE9wdGlvbnMsXG4gICAgdHlwZSBSYXloaXRFdmVudCxcbiAgICB0eXBlIFJlZnMsXG4gICAgdHlwZSBTb2x2ZXIsXG4gICAgdHlwZSBTdWJzY3JpcHRpb25zLFxuICAgIHR5cGUgVHJpcGxldCxcbiAgICB0eXBlIFdvcmtlckNvbGxpZGVCZWdpbkV2ZW50LFxuICAgIHR5cGUgV29ya2VyQ29sbGlkZUVuZEV2ZW50LFxuICAgIHR5cGUgV29ya2VyQ29sbGlkZUV2ZW50LFxuICAgIHR5cGUgV29ya2VyRnJhbWVNZXNzYWdlLFxuICAgIHR5cGUgV29ya2VyUmF5aGl0RXZlbnQsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHtcbiAgICBOZ3RTaWduYWxTdG9yZSxcbiAgICBOZ3RTdG9yZSxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCxcbiAgICB0eXBlIE5ndFJlbmRlclN0YXRlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuY29uc3QgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5jb25zdCBzID0gbmV3IFRIUkVFLlZlY3RvcjMoMSwgMSwgMSk7XG5jb25zdCBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcbmNvbnN0IG0gPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXG5mdW5jdGlvbiBhcHBseShpbmRleDogbnVtYmVyLCBwb3NpdGlvbnM6IEZsb2F0MzJBcnJheSwgcXVhdGVybmlvbnM6IEZsb2F0MzJBcnJheSwgc2NhbGUgPSBzLCBvYmplY3Q/OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG0uY29tcG9zZSh2LmZyb21BcnJheShwb3NpdGlvbnMsIGluZGV4ICogMyksIHEuZnJvbUFycmF5KHF1YXRlcm5pb25zLCBpbmRleCAqIDQpLCBzY2FsZSk7XG4gICAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgICAgIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBvYmplY3QubWF0cml4LmNvcHkobSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuICAgIHJldHVybiBtLmlkZW50aXR5KCk7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNQaHlzaWNzU3RhdGUgPSBDYW5ub25Xb3JrZXJQcm9wcyAmIHtcbiAgICBpc1BhdXNlZD86IGJvb2xlYW47XG4gICAgbWF4U3ViU3RlcHM/OiBudW1iZXI7XG4gICAgc2hvdWxkSW52YWxpZGF0ZT86IGJvb2xlYW47XG4gICAgc3RlcFNpemU/OiBudW1iZXI7XG59O1xuXG50eXBlIE5ndGNDYW5ub25FdmVudCA9IENvbGxpZGVCZWdpbkV2ZW50IHwgQ29sbGlkZUVuZEV2ZW50IHwgQ29sbGlkZUV2ZW50IHwgUmF5aGl0RXZlbnQ7XG50eXBlIE5ndGNDYWxsYmFja0J5VHlwZTxUIGV4dGVuZHMgeyB0eXBlOiBzdHJpbmcgfT4gPSB7XG4gICAgW0sgaW4gVFsndHlwZSddXT86IFQgZXh0ZW5kcyB7IHR5cGU6IEsgfSA/IChlOiBUKSA9PiB2b2lkIDogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjQ2Fubm9uRXZlbnRzID0geyBbdXVpZDogc3RyaW5nXTogUGFydGlhbDxOZ3RjQ2FsbGJhY2tCeVR5cGU8Tmd0Y0Nhbm5vbkV2ZW50Pj4gfTtcblxuZXhwb3J0IHR5cGUgU2NhbGVPdmVycmlkZXMgPSB7IFt1dWlkOiBzdHJpbmddOiBUSFJFRS5WZWN0b3IzIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1BoeXNpY3NBcGkge1xuICAgIGJvZGllczogeyBbdXVpZDogc3RyaW5nXTogbnVtYmVyIH07XG4gICAgZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzO1xuICAgIHJlZnM6IFJlZnM7XG4gICAgc2NhbGVPdmVycmlkZXM6IFNjYWxlT3ZlcnJpZGVzO1xuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnM7XG4gICAgd29ya2VyOiBDYW5ub25Xb3JrZXJBUEk7XG59XG5cbmV4cG9ydCBjb25zdCBOR1RDX1BIWVNJQ1NfQVBJID0gbmV3IEluamVjdGlvblRva2VuPFNpZ25hbDxOZ3RjUGh5c2ljc0FwaT4+KCdOZ3RjUGh5c2ljcyBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RjLXBoeXNpY3MnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGA8bmctY29udGVudCAvPmAsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR1RDX1BIWVNJQ1NfQVBJLCB1c2VGYWN0b3J5OiAocGh5c2ljczogTmd0Y1BoeXNpY3MpID0+IHBoeXNpY3MuYXBpLCBkZXBzOiBbTmd0Y1BoeXNpY3NdIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RjUGh5c2ljcyBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndGNQaHlzaWNzU3RhdGU+IHtcbiAgICBASW5wdXQoKSBzZXQgaXNQYXVzZWQoaXNQYXVzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpc1BhdXNlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4U3ViU3RlcHMobWF4U3ViU3RlcHM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1heFN1YlN0ZXBzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG91bGRJbnZhbGlkYXRlKHNob3VsZEludmFsaWRhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzaG91bGRJbnZhbGlkYXRlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdGVwU2l6ZShzdGVwU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RlcFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNpemUoc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWxsb3dTbGVlcChhbGxvd1NsZWVwOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxsb3dTbGVlcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXhpc0luZGV4KGF4aXNJbmRleDogMCB8IDEgfCAyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc0luZGV4IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBicm9hZHBoYXNlKGJyb2FkcGhhc2U6IEJyb2FkcGhhc2UpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBicm9hZHBoYXNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZWZhdWx0Q29udGFjdE1hdGVyaWFsKGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IENvbnRhY3RNYXRlcmlhbE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZWZhdWx0Q29udGFjdE1hdGVyaWFsIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmcmljdGlvbkdyYXZpdHkoZnJpY3Rpb25HcmF2aXR5OiBUcmlwbGV0IHwgbnVsbCkge1xuICAgICAgICB0aGlzLnNldCh7IGZyaWN0aW9uR3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZ3Jhdml0eShncmF2aXR5OiBUcmlwbGV0KSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZ3Jhdml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXRlcmF0aW9ucyhpdGVyYXRpb25zOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpdGVyYXRpb25zIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBxdWF0Tm9ybWFsaXplRmFzdChxdWF0Tm9ybWFsaXplRmFzdDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHF1YXROb3JtYWxpemVGYXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBxdWF0Tm9ybWFsaXplU2tpcChxdWF0Tm9ybWFsaXplU2tpcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcXVhdE5vcm1hbGl6ZVNraXAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNvbHZlcihzb2x2ZXI6IFNvbHZlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNvbHZlciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdG9sZXJhbmNlKHRvbGVyYW5jZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgdG9sZXJhbmNlIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICByZWFkb25seSAjYm9kaWVzOiB7IFt1dWlkOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIHJlYWRvbmx5ICNldmVudHM6IE5ndGNDYW5ub25FdmVudHMgPSB7fTtcbiAgICByZWFkb25seSAjcmVmczogUmVmcyA9IHt9O1xuICAgIHJlYWRvbmx5ICNzY2FsZU92ZXJyaWRlczogU2NhbGVPdmVycmlkZXMgPSB7fTtcbiAgICByZWFkb25seSAjc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucyA9IHt9O1xuXG4gICAgcmVhZG9ubHkgI2FsbG93U2xlZXAgPSB0aGlzLnNlbGVjdCgnYWxsb3dTbGVlcCcpO1xuICAgIHJlYWRvbmx5ICNkZWZhdWx0Q29udGFjdE1hdGVyaWFsID0gdGhpcy5zZWxlY3QoJ2RlZmF1bHRDb250YWN0TWF0ZXJpYWwnKTtcbiAgICByZWFkb25seSAjZnJpY3Rpb25HcmF2aXR5ID0gdGhpcy5zZWxlY3QoJ2ZyaWN0aW9uR3Jhdml0eScpO1xuICAgIHJlYWRvbmx5ICNxdWF0Tm9ybWFsaXplRmFzdCA9IHRoaXMuc2VsZWN0KCdxdWF0Tm9ybWFsaXplRmFzdCcpO1xuICAgIHJlYWRvbmx5ICNxdWF0Tm9ybWFsaXplU2tpcCA9IHRoaXMuc2VsZWN0KCdxdWF0Tm9ybWFsaXplU2tpcCcpO1xuICAgIHJlYWRvbmx5ICNzaXplID0gdGhpcy5zZWxlY3QoJ3NpemUnKTtcbiAgICByZWFkb25seSAjc29sdmVyID0gdGhpcy5zZWxlY3QoJ3NvbHZlcicpO1xuXG4gICAgcmVhZG9ubHkgI3dvcmtlclByb3BzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgYWxsb3dTbGVlcDogdGhpcy4jYWxsb3dTbGVlcCgpLFxuICAgICAgICBheGlzSW5kZXg6IHRoaXMuZ2V0KCdheGlzSW5kZXgnKSxcbiAgICAgICAgYnJvYWRwaGFzZTogdGhpcy5nZXQoJ2Jyb2FkcGhhc2UnKSxcbiAgICAgICAgZGVmYXVsdENvbnRhY3RNYXRlcmlhbDogdGhpcy4jZGVmYXVsdENvbnRhY3RNYXRlcmlhbCgpLFxuICAgICAgICBmcmljdGlvbkdyYXZpdHk6IHRoaXMuI2ZyaWN0aW9uR3Jhdml0eSgpLFxuICAgICAgICBncmF2aXR5OiB0aGlzLmdldCgnZ3Jhdml0eScpLFxuICAgICAgICBpdGVyYXRpb25zOiB0aGlzLmdldCgnaXRlcmF0aW9ucycpLFxuICAgICAgICBxdWF0Tm9ybWFsaXplRmFzdDogdGhpcy4jcXVhdE5vcm1hbGl6ZUZhc3QoKSxcbiAgICAgICAgcXVhdE5vcm1hbGl6ZVNraXA6IHRoaXMuI3F1YXROb3JtYWxpemVTa2lwKCksXG4gICAgICAgIHNpemU6IHRoaXMuI3NpemUoKSxcbiAgICAgICAgc29sdmVyOiB0aGlzLiNzb2x2ZXIoKSxcbiAgICAgICAgdG9sZXJhbmNlOiB0aGlzLmdldCgndG9sZXJhbmNlJyksXG4gICAgfSkpO1xuXG4gICAgcmVhZG9ubHkgd29ya2VyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB3b3JrZXJQcm9wcyA9IHRoaXMuI3dvcmtlclByb3BzKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ2Fubm9uV29ya2VyQVBJKHdvcmtlclByb3BzKTtcbiAgICB9KTtcblxuICAgIHJlYWRvbmx5IGFwaSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICAgIGJvZGllczogdGhpcy4jYm9kaWVzLFxuICAgICAgICBldmVudHM6IHRoaXMuI2V2ZW50cyxcbiAgICAgICAgcmVmczogdGhpcy4jcmVmcyxcbiAgICAgICAgc2NhbGVPdmVycmlkZXM6IHRoaXMuI3NjYWxlT3ZlcnJpZGVzLFxuICAgICAgICBzdWJzY3JpcHRpb25zOiB0aGlzLiNzdWJzY3JpcHRpb25zLFxuICAgICAgICB3b3JrZXI6IHRoaXMud29ya2VyKCksXG4gICAgfSkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFsbG93U2xlZXA6IGZhbHNlLFxuICAgICAgICAgICAgYXhpc0luZGV4OiAwLFxuICAgICAgICAgICAgYnJvYWRwaGFzZTogJ05haXZlJyxcbiAgICAgICAgICAgIGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHsgY29udGFjdEVxdWF0aW9uU3RpZmZuZXNzOiAxZTYgfSxcbiAgICAgICAgICAgIGZyaWN0aW9uR3Jhdml0eTogbnVsbCxcbiAgICAgICAgICAgIGdyYXZpdHk6IFswLCAtOS44MSwgMF0sXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBpdGVyYXRpb25zOiA1LFxuICAgICAgICAgICAgbWF4U3ViU3RlcHM6IDEwLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZUZhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZVNraXA6IDAsXG4gICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogMTAwMCxcbiAgICAgICAgICAgIHNvbHZlcjogJ0dTJyxcbiAgICAgICAgICAgIHN0ZXBTaXplOiAxIC8gNjAsXG4gICAgICAgICAgICB0b2xlcmFuY2U6IDAuMDAxLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0V29ya2VyKCk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVXb3JrZXJQcm9wKCdheGlzSW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2Jyb2FkcGhhc2UnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2dyYXZpdHknKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ2l0ZXJhdGlvbnMnKTtcbiAgICAgICAgICAgIHRoaXMuI3VwZGF0ZVdvcmtlclByb3AoJ3RvbGVyYW5jZScpO1xuICAgICAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKHRoaXMuI29uQmVmb3JlUmVuZGVyLmJpbmQodGhpcywgMCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjdXBkYXRlV29ya2VyUHJvcChrZXk6IGtleW9mIE5ndGNQaHlzaWNzU3RhdGUpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZSA9IHRoaXMuc2VsZWN0KGtleSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB1bnRyYWNrZWQodGhpcy53b3JrZXIpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKCk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICB3b3JrZXJba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjY29ubmVjdFdvcmtlcigpIHtcbiAgICAgICAgZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMud29ya2VyKCk7XG5cbiAgICAgICAgICAgIHdvcmtlci5jb25uZWN0KCk7XG4gICAgICAgICAgICB3b3JrZXIuaW5pdCgpO1xuXG4gICAgICAgICAgICAod29ya2VyIGFzIGFueSkub24oJ2NvbGxpZGUnLCB0aGlzLiNjb2xsaWRlSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbignY29sbGlkZUJlZ2luJywgdGhpcy4jY29sbGlkZUJlZ2luSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbignY29sbGlkZUVuZCcsIHRoaXMuI2NvbGxpZGVFbmRIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgKHdvcmtlciBhcyBhbnkpLm9uKCdmcmFtZScsIHRoaXMuI2ZyYW1lSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgYW55KS5vbigncmF5aGl0JywgdGhpcy4jcmF5aGl0SGFuZGxlci5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgb25DbGVhbnVwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyBhbnkpLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICNvbkJlZm9yZVJlbmRlcih0aW1lU2luY2VMYXN0Q2FsbGVkOiBudW1iZXIsIHsgZGVsdGEgfTogTmd0UmVuZGVyU3RhdGUpIHtcbiAgICAgICAgY29uc3QgeyBpc1BhdXNlZCwgbWF4U3ViU3RlcHMsIHN0ZXBTaXplIH0gPSB0aGlzLmdldCgpO1xuICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlcigpO1xuICAgICAgICBpZiAoaXNQYXVzZWQpIHJldHVybjtcbiAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCArPSBkZWx0YTtcbiAgICAgICAgd29ya2VyLnN0ZXAoeyBtYXhTdWJTdGVwcywgc3RlcFNpemU6IHN0ZXBTaXplISwgdGltZVNpbmNlTGFzdENhbGxlZCB9KTtcbiAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCA9IDA7XG4gICAgfVxuXG4gICAgI2NvbGxpZGVIYW5kbGVyKHsgYm9keSwgY29udGFjdDogeyBiaSwgYmosIC4uLmNvbnRhY3RSZXN0IH0sIHRhcmdldCwgLi4ucmVzdCB9OiBXb3JrZXJDb2xsaWRlRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYiA9IHRoaXMuI2V2ZW50c1t0YXJnZXRdPy5jb2xsaWRlO1xuXG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgY2Ioe1xuICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuI3JlZnNbYm9keV0sXG4gICAgICAgICAgICAgICAgY29udGFjdDogeyBiaTogdGhpcy4jcmVmc1tiaV0sIGJqOiB0aGlzLiNyZWZzW2JqXSwgLi4uY29udGFjdFJlc3QgfSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMuI3JlZnNbdGFyZ2V0XSxcbiAgICAgICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjY29sbGlkZUJlZ2luSGFuZGxlcih7IGJvZHlBLCBib2R5QiB9OiBXb3JrZXJDb2xsaWRlQmVnaW5FdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IGNiQSA9IHRoaXMuI2V2ZW50c1tib2R5QV0/LmNvbGxpZGVCZWdpbjtcbiAgICAgICAgaWYgKGNiQSkgY2JBKHsgYm9keTogdGhpcy4jcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcbiAgICAgICAgY29uc3QgY2JCID0gdGhpcy4jZXZlbnRzW2JvZHlCXT8uY29sbGlkZUJlZ2luO1xuICAgICAgICBpZiAoY2JCKSBjYkIoeyBib2R5OiB0aGlzLiNyZWZzW2JvZHlBXSwgb3A6ICdldmVudCcsIHRhcmdldDogdGhpcy4jcmVmc1tib2R5Ql0sIHR5cGU6ICdjb2xsaWRlQmVnaW4nIH0pO1xuICAgIH1cblxuICAgICNjb2xsaWRlRW5kSGFuZGxlcih7IGJvZHlBLCBib2R5QiB9OiBXb3JrZXJDb2xsaWRlRW5kRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCBjYkEgPSB0aGlzLiNldmVudHNbYm9keUFdPy5jb2xsaWRlRW5kO1xuICAgICAgICBpZiAoY2JBKSBjYkEoeyBib2R5OiB0aGlzLiNyZWZzW2JvZHlCXSwgb3A6ICdldmVudCcsIHRhcmdldDogdGhpcy4jcmVmc1tib2R5QV0sIHR5cGU6ICdjb2xsaWRlRW5kJyB9KTtcbiAgICAgICAgY29uc3QgY2JCID0gdGhpcy4jZXZlbnRzW2JvZHlCXT8uY29sbGlkZUVuZDtcbiAgICAgICAgaWYgKGNiQikgY2JCKHsgYm9keTogdGhpcy4jcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHRoaXMuI3JlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG4gICAgfVxuXG4gICAgI2ZyYW1lSGFuZGxlcih7IGFjdGl2ZSwgYm9kaWVzOiB1dWlkcyA9IFtdLCBvYnNlcnZhdGlvbnMsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMgfTogV29ya2VyRnJhbWVNZXNzYWdlWydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgaW52YWxpZGF0ZSA9IHRoaXMuI3N0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICBjb25zdCBzaG91bGRJbnZhbGlkYXRlID0gdGhpcy5nZXQoJ3Nob3VsZEludmFsaWRhdGUnKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHV1aWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLiNib2RpZXNbdXVpZHNbaV1dID0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmF0aW9ucy5mb3JFYWNoKChbaWQsIHZhbHVlLCB0eXBlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy4jc3Vic2NyaXB0aW9uc1tpZF0gfHwge307XG4gICAgICAgICAgICBjb25zdCBjYiA9IHN1YnNjcmlwdGlvblt0eXBlXTtcbiAgICAgICAgICAgIC8vIEhFTFA6IFdlIGNsZWFybHkga25vdyB0aGUgdHlwZSBvZiB0aGUgY2FsbGJhY2ssIGJ1dCB0eXBlc2NyaXB0IGNhbid0IGRlYWwgd2l0aCBpdFxuICAgICAgICAgICAgY2IgJiYgY2IodmFsdWUgYXMgbmV2ZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBPYmplY3QudmFsdWVzKHRoaXMuI3JlZnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWYuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGAke3JlZi51dWlkfS8ke2l9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jYm9kaWVzW3V1aWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0TWF0cml4QXQoaSwgYXBwbHkoaW5kZXgsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHRoaXMuI3NjYWxlT3ZlcnJpZGVzW3V1aWRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlTWF0cml4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy4jc2NhbGVPdmVycmlkZXNbcmVmLnV1aWRdIHx8IHJlZi5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHkodGhpcy4jYm9kaWVzW3JlZi51dWlkXSwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGUsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNyYXloaXRIYW5kbGVyKHsgYm9keSwgcmF5OiB7IHV1aWQsIC4uLnJheVJlc3QgfSwgLi4ucmVzdCB9OiBXb3JrZXJSYXloaXRFdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IGNiID0gdGhpcy4jZXZlbnRzW3V1aWRdPy5yYXloaXQ7XG4gICAgICAgIGlmIChjYikgY2IoeyBib2R5OiBib2R5ID8gdGhpcy4jcmVmc1tib2R5XSA6IG51bGwsIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zZXJ2aWNlcy9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24tc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|