angular-three-cannon 2.0.0-beta.21 → 2.0.0-beta.227
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/body/README.md +3 -0
- package/body/index.d.ts +2 -0
- package/body/lib/body.d.ts +57 -0
- package/body/lib/types.d.ts +38 -0
- package/body/lib/utils.d.ts +50 -0
- package/constraint/README.md +3 -0
- package/constraint/index.d.ts +1 -0
- package/constraint/lib/constraint.d.ts +26 -0
- package/debug/lib/debug.d.ts +15 -14
- package/esm2022/body/angular-three-cannon-body.mjs +5 -0
- package/esm2022/body/index.mjs +2 -0
- package/esm2022/body/lib/body.mjs +83 -0
- package/esm2022/body/lib/types.mjs +2 -0
- package/esm2022/body/lib/utils.mjs +205 -0
- package/esm2022/constraint/angular-three-cannon-constraint.mjs +5 -0
- package/esm2022/constraint/index.mjs +2 -0
- package/esm2022/constraint/lib/constraint.mjs +50 -0
- package/esm2022/debug/lib/debug.mjs +34 -46
- package/esm2022/lib/physics.mjs +70 -153
- package/fesm2022/angular-three-cannon-body.mjs +292 -0
- package/fesm2022/angular-three-cannon-body.mjs.map +1 -0
- package/fesm2022/angular-three-cannon-constraint.mjs +57 -0
- package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -0
- package/fesm2022/angular-three-cannon-debug.mjs +33 -45
- package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
- package/fesm2022/angular-three-cannon.mjs +70 -153
- package/fesm2022/angular-three-cannon.mjs.map +1 -1
- package/lib/physics.d.ts +50 -43
- package/package.json +19 -13
- package/esm2022/services/angular-three-cannon-services.mjs +0 -5
- package/esm2022/services/index.mjs +0 -7
- package/esm2022/services/lib/body.mjs +0 -293
- package/esm2022/services/lib/constraints.mjs +0 -59
- package/esm2022/services/lib/contact-material.mjs +0 -20
- package/esm2022/services/lib/ray.mjs +0 -30
- package/esm2022/services/lib/raycast-vehicle.mjs +0 -68
- package/esm2022/services/lib/spring.mjs +0 -31
- package/fesm2022/angular-three-cannon-services.mjs +0 -490
- package/fesm2022/angular-three-cannon-services.mjs.map +0 -1
- package/services/README.md +0 -3
- package/services/index.d.ts +0 -6
- package/services/lib/body.d.ts +0 -60
- package/services/lib/constraints.d.ts +0 -31
- package/services/lib/contact-material.d.ts +0 -9
- package/services/lib/ray.d.ts +0 -12
- package/services/lib/raycast-vehicle.d.ts +0 -30
- package/services/lib/spring.d.ts +0 -19
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
1
2
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
+
import { Directive, input, contentChild, TemplateRef, inject, NgZone, Injector, afterNextRender, effect, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
|
|
3
4
|
import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
|
|
4
|
-
import {
|
|
5
|
+
import { createApiToken, injectInputs, injectNgtStore, signalStore, injectBeforeRender } from 'angular-three';
|
|
5
6
|
import * as THREE from 'three';
|
|
6
7
|
|
|
7
8
|
const v = new THREE.Vector3();
|
|
@@ -19,33 +20,44 @@ function apply(index, positions, quaternions, scale = s, object) {
|
|
|
19
20
|
}
|
|
20
21
|
return m.identity();
|
|
21
22
|
}
|
|
22
|
-
|
|
23
|
+
function unique() {
|
|
23
24
|
const values = [];
|
|
24
25
|
return (value) => (values.includes(value) ? false : !!values.push(value));
|
|
25
|
-
}
|
|
26
|
-
const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] =
|
|
26
|
+
}
|
|
27
|
+
const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] = createApiToken(() => NgtcPhysics);
|
|
28
|
+
class NgtcPhysicsContent {
|
|
29
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtcPhysicsContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
33
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: NgtcPhysicsContent, isStandalone: true, selector: "ng-template[physicsContent]", ngImport: i0 }); }
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtcPhysicsContent, decorators: [{
|
|
36
|
+
type: Directive,
|
|
37
|
+
args: [{ standalone: true, selector: 'ng-template[physicsContent]' }]
|
|
38
|
+
}] });
|
|
27
39
|
class NgtcPhysics {
|
|
28
40
|
constructor() {
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
41
|
+
this.allowSleep = input(false);
|
|
42
|
+
this.axisIndex = input(0);
|
|
43
|
+
this.broadphase = input('Naive');
|
|
44
|
+
this.defaultContactMaterial = input({ contactEquationStiffness: 1e6 });
|
|
45
|
+
this.frictionGravity = input(null);
|
|
46
|
+
this.gravity = input([0, -9.81, 0]);
|
|
47
|
+
this.isPaused = input(false);
|
|
48
|
+
this.iterations = input(5);
|
|
49
|
+
this.maxSubSteps = input(10);
|
|
50
|
+
this.quatNormalizeFast = input(false);
|
|
51
|
+
this.quatNormalizeSkip = input(0);
|
|
52
|
+
this.shouldInvalidate = input(true);
|
|
53
|
+
this.size = input(1000);
|
|
54
|
+
this.solver = input('GS');
|
|
55
|
+
this.stepSize = input(1 / 60);
|
|
56
|
+
this.tolerance = input(0.001);
|
|
57
|
+
this.content = contentChild.required(NgtcPhysicsContent, { read: TemplateRef });
|
|
47
58
|
this.zone = inject(NgZone);
|
|
48
59
|
this.injector = inject(Injector);
|
|
60
|
+
this.inputs = injectInputs(this, NgtcPhysics);
|
|
49
61
|
this.store = injectNgtStore();
|
|
50
62
|
this.invalidate = this.store.select('invalidate');
|
|
51
63
|
this.api = signalStore({
|
|
@@ -57,65 +69,17 @@ class NgtcPhysics {
|
|
|
57
69
|
worker: null,
|
|
58
70
|
});
|
|
59
71
|
this.worker = this.api.select('worker');
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.inputs.set({ stepSize });
|
|
72
|
-
}
|
|
73
|
-
set _size(size) {
|
|
74
|
-
this.inputs.set({ size });
|
|
75
|
-
}
|
|
76
|
-
set _allowSleep(allowSleep) {
|
|
77
|
-
this.inputs.set({ allowSleep });
|
|
78
|
-
}
|
|
79
|
-
set _axisIndex(axisIndex) {
|
|
80
|
-
this.inputs.set({ axisIndex });
|
|
81
|
-
}
|
|
82
|
-
set _broadphase(broadphase) {
|
|
83
|
-
this.inputs.set({ broadphase });
|
|
84
|
-
}
|
|
85
|
-
set _defaultContactMaterial(defaultContactMaterial) {
|
|
86
|
-
this.inputs.set({ defaultContactMaterial });
|
|
87
|
-
}
|
|
88
|
-
set _frictionGravity(frictionGravity) {
|
|
89
|
-
this.inputs.set({ frictionGravity });
|
|
90
|
-
}
|
|
91
|
-
set _gravity(gravity) {
|
|
92
|
-
this.inputs.set({ gravity });
|
|
93
|
-
}
|
|
94
|
-
set _iterations(iterations) {
|
|
95
|
-
this.inputs.set({ iterations });
|
|
96
|
-
}
|
|
97
|
-
set _quatNormalizeFast(quatNormalizeFast) {
|
|
98
|
-
this.inputs.set({ quatNormalizeFast });
|
|
99
|
-
}
|
|
100
|
-
set _quatNormalizeSkip(quatNormalizeSkip) {
|
|
101
|
-
this.inputs.set({ quatNormalizeSkip });
|
|
102
|
-
}
|
|
103
|
-
set _solver(solver) {
|
|
104
|
-
this.inputs.set({ solver });
|
|
105
|
-
}
|
|
106
|
-
set _tolerance(tolerance) {
|
|
107
|
-
this.inputs.set({ tolerance });
|
|
108
|
-
}
|
|
109
|
-
ngOnInit() {
|
|
110
|
-
this.zone.runOutsideAngular(() => {
|
|
111
|
-
this.api.set({ worker: new CannonWorkerAPI(this.inputs.state()) });
|
|
112
|
-
this.connectWorker();
|
|
113
|
-
this.updateWorkerState('axisIndex');
|
|
114
|
-
this.updateWorkerState('broadphase');
|
|
115
|
-
this.updateWorkerState('gravity');
|
|
116
|
-
this.updateWorkerState('iterations');
|
|
117
|
-
this.updateWorkerState('tolerance');
|
|
118
|
-
this.beforeRender();
|
|
72
|
+
afterNextRender(() => {
|
|
73
|
+
this.zone.runOutsideAngular(() => {
|
|
74
|
+
this.api.update({ worker: new CannonWorkerAPI(this.inputs()) });
|
|
75
|
+
this.connectWorker();
|
|
76
|
+
this.updateWorkerState('axisIndex');
|
|
77
|
+
this.updateWorkerState('broadphase');
|
|
78
|
+
this.updateWorkerState('gravity');
|
|
79
|
+
this.updateWorkerState('iterations');
|
|
80
|
+
this.updateWorkerState('tolerance');
|
|
81
|
+
this.beforeRender();
|
|
82
|
+
});
|
|
119
83
|
});
|
|
120
84
|
}
|
|
121
85
|
connectWorker() {
|
|
@@ -137,13 +101,23 @@ class NgtcPhysics {
|
|
|
137
101
|
}, { injector: this.injector });
|
|
138
102
|
}
|
|
139
103
|
updateWorkerState(key) {
|
|
140
|
-
const compute = this.inputs.select(key);
|
|
141
104
|
effect(() => {
|
|
142
|
-
const [worker, value] = [untracked(this.worker),
|
|
105
|
+
const [worker, value] = [untracked(this.worker), this.inputs()[key]];
|
|
143
106
|
// @ts-expect-error
|
|
144
107
|
worker[key] = value;
|
|
145
108
|
}, { injector: this.injector });
|
|
146
109
|
}
|
|
110
|
+
beforeRender() {
|
|
111
|
+
let timeSinceLastCalled = 0;
|
|
112
|
+
injectBeforeRender(({ delta }) => {
|
|
113
|
+
const [{ isPaused, maxSubSteps, stepSize }, worker] = [this.inputs(), this.worker()];
|
|
114
|
+
if (isPaused || !worker)
|
|
115
|
+
return;
|
|
116
|
+
timeSinceLastCalled += delta;
|
|
117
|
+
worker.step({ maxSubSteps, stepSize: stepSize, timeSinceLastCalled });
|
|
118
|
+
timeSinceLastCalled = 0;
|
|
119
|
+
}, { injector: this.injector });
|
|
120
|
+
}
|
|
147
121
|
collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
|
|
148
122
|
const { events, refs } = this.api.get();
|
|
149
123
|
const cb = events[target]?.collide;
|
|
@@ -176,7 +150,7 @@ class NgtcPhysics {
|
|
|
176
150
|
}
|
|
177
151
|
frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {
|
|
178
152
|
const [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [
|
|
179
|
-
this.inputs
|
|
153
|
+
untracked(this.inputs),
|
|
180
154
|
this.api.get(),
|
|
181
155
|
this.invalidate(),
|
|
182
156
|
];
|
|
@@ -216,85 +190,28 @@ class NgtcPhysics {
|
|
|
216
190
|
if (cb)
|
|
217
191
|
cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
|
|
218
192
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (isPaused || !worker)
|
|
224
|
-
return;
|
|
225
|
-
timeSinceLastCalled += delta;
|
|
226
|
-
worker.step({ maxSubSteps, stepSize: stepSize, timeSinceLastCalled });
|
|
227
|
-
timeSinceLastCalled = 0;
|
|
228
|
-
}, { injector: this.injector });
|
|
229
|
-
}
|
|
230
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
231
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { _isPaused: ["isPaused", "_isPaused"], _maxSubSteps: ["maxSubSteps", "_maxSubSteps"], _shouldInvalidate: ["shouldInvalidate", "_shouldInvalidate"], _stepSize: ["stepSize", "_stepSize"], _size: ["size", "_size"], _allowSleep: ["allowSleep", "_allowSleep"], _axisIndex: ["axisIndex", "_axisIndex"], _broadphase: ["broadphase", "_broadphase"], _defaultContactMaterial: ["defaultContactMaterial", "_defaultContactMaterial"], _frictionGravity: ["frictionGravity", "_frictionGravity"], _gravity: ["gravity", "_gravity"], _iterations: ["iterations", "_iterations"], _quatNormalizeFast: ["quatNormalizeFast", "_quatNormalizeFast"], _quatNormalizeSkip: ["quatNormalizeSkip", "_quatNormalizeSkip"], _solver: ["solver", "_solver"], _tolerance: ["tolerance", "_tolerance"] }, providers: [provideNgtcPhysicsApi()], ngImport: i0, template: `
|
|
232
|
-
<ng-content />
|
|
233
|
-
`, isInline: true }); }
|
|
193
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
194
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: { classPropertyName: "allowSleep", publicName: "allowSleep", isSignal: true, isRequired: false, transformFunction: null }, axisIndex: { classPropertyName: "axisIndex", publicName: "axisIndex", isSignal: true, isRequired: false, transformFunction: null }, broadphase: { classPropertyName: "broadphase", publicName: "broadphase", isSignal: true, isRequired: false, transformFunction: null }, defaultContactMaterial: { classPropertyName: "defaultContactMaterial", publicName: "defaultContactMaterial", isSignal: true, isRequired: false, transformFunction: null }, frictionGravity: { classPropertyName: "frictionGravity", publicName: "frictionGravity", isSignal: true, isRequired: false, transformFunction: null }, gravity: { classPropertyName: "gravity", publicName: "gravity", isSignal: true, isRequired: false, transformFunction: null }, isPaused: { classPropertyName: "isPaused", publicName: "isPaused", isSignal: true, isRequired: false, transformFunction: null }, iterations: { classPropertyName: "iterations", publicName: "iterations", isSignal: true, isRequired: false, transformFunction: null }, maxSubSteps: { classPropertyName: "maxSubSteps", publicName: "maxSubSteps", isSignal: true, isRequired: false, transformFunction: null }, quatNormalizeFast: { classPropertyName: "quatNormalizeFast", publicName: "quatNormalizeFast", isSignal: true, isRequired: false, transformFunction: null }, quatNormalizeSkip: { classPropertyName: "quatNormalizeSkip", publicName: "quatNormalizeSkip", isSignal: true, isRequired: false, transformFunction: null }, shouldInvalidate: { classPropertyName: "shouldInvalidate", publicName: "shouldInvalidate", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, solver: { classPropertyName: "solver", publicName: "solver", isSignal: true, isRequired: false, transformFunction: null }, stepSize: { classPropertyName: "stepSize", publicName: "stepSize", isSignal: true, isRequired: false, transformFunction: null }, tolerance: { classPropertyName: "tolerance", publicName: "tolerance", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideNgtcPhysicsApi()], queries: [{ propertyName: "content", first: true, predicate: NgtcPhysicsContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
|
|
195
|
+
<ng-container [ngTemplateOutlet]="content()" [ngTemplateOutletContext]="{ $implicit: api }" />
|
|
196
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
234
197
|
}
|
|
235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NgtcPhysics, decorators: [{
|
|
236
199
|
type: Component,
|
|
237
200
|
args: [{
|
|
238
201
|
selector: 'ngtc-physics',
|
|
239
|
-
standalone: true,
|
|
240
202
|
template: `
|
|
241
|
-
<ng-content />
|
|
203
|
+
<ng-container [ngTemplateOutlet]="content()" [ngTemplateOutletContext]="{ $implicit: api }" />
|
|
242
204
|
`,
|
|
205
|
+
standalone: true,
|
|
206
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
207
|
+
imports: [NgTemplateOutlet],
|
|
243
208
|
providers: [provideNgtcPhysicsApi()],
|
|
244
209
|
}]
|
|
245
|
-
}],
|
|
246
|
-
type: Input,
|
|
247
|
-
args: [{ alias: 'isPaused' }]
|
|
248
|
-
}], _maxSubSteps: [{
|
|
249
|
-
type: Input,
|
|
250
|
-
args: [{ alias: 'maxSubSteps' }]
|
|
251
|
-
}], _shouldInvalidate: [{
|
|
252
|
-
type: Input,
|
|
253
|
-
args: [{ alias: 'shouldInvalidate' }]
|
|
254
|
-
}], _stepSize: [{
|
|
255
|
-
type: Input,
|
|
256
|
-
args: [{ alias: 'stepSize' }]
|
|
257
|
-
}], _size: [{
|
|
258
|
-
type: Input,
|
|
259
|
-
args: [{ alias: 'size' }]
|
|
260
|
-
}], _allowSleep: [{
|
|
261
|
-
type: Input,
|
|
262
|
-
args: [{ alias: 'allowSleep' }]
|
|
263
|
-
}], _axisIndex: [{
|
|
264
|
-
type: Input,
|
|
265
|
-
args: [{ alias: 'axisIndex' }]
|
|
266
|
-
}], _broadphase: [{
|
|
267
|
-
type: Input,
|
|
268
|
-
args: [{ alias: 'broadphase' }]
|
|
269
|
-
}], _defaultContactMaterial: [{
|
|
270
|
-
type: Input,
|
|
271
|
-
args: [{ alias: 'defaultContactMaterial' }]
|
|
272
|
-
}], _frictionGravity: [{
|
|
273
|
-
type: Input,
|
|
274
|
-
args: [{ alias: 'frictionGravity' }]
|
|
275
|
-
}], _gravity: [{
|
|
276
|
-
type: Input,
|
|
277
|
-
args: [{ alias: 'gravity' }]
|
|
278
|
-
}], _iterations: [{
|
|
279
|
-
type: Input,
|
|
280
|
-
args: [{ alias: 'iterations' }]
|
|
281
|
-
}], _quatNormalizeFast: [{
|
|
282
|
-
type: Input,
|
|
283
|
-
args: [{ alias: 'quatNormalizeFast' }]
|
|
284
|
-
}], _quatNormalizeSkip: [{
|
|
285
|
-
type: Input,
|
|
286
|
-
args: [{ alias: 'quatNormalizeSkip' }]
|
|
287
|
-
}], _solver: [{
|
|
288
|
-
type: Input,
|
|
289
|
-
args: [{ alias: 'solver' }]
|
|
290
|
-
}], _tolerance: [{
|
|
291
|
-
type: Input,
|
|
292
|
-
args: [{ alias: 'tolerance' }]
|
|
293
|
-
}] } });
|
|
210
|
+
}], ctorParameters: () => [] });
|
|
294
211
|
|
|
295
212
|
/**
|
|
296
213
|
* Generated bundle index. Do not edit.
|
|
297
214
|
*/
|
|
298
215
|
|
|
299
|
-
export { NgtcPhysics, injectNgtcPhysicsApi, provideNgtcPhysicsApi };
|
|
216
|
+
export { NgtcPhysics, NgtcPhysicsContent, injectNgtcPhysicsApi, provideNgtcPhysicsApi };
|
|
300
217
|
//# 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 { Component, Injector, Input, NgZone, effect, forwardRef, inject, untracked, type OnInit } from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\ttype Broadphase,\n\ttype CannonWorkerProps,\n\ttype CollideBeginEvent,\n\ttype CollideEndEvent,\n\ttype CollideEvent,\n\ttype ContactMaterialOptions,\n\ttype RayhitEvent,\n\ttype Refs,\n\ttype Solver,\n\ttype Subscriptions,\n\ttype Triplet,\n\ttype WorkerCollideBeginEvent,\n\ttype WorkerCollideEndEvent,\n\ttype WorkerCollideEvent,\n\ttype WorkerFrameMessage,\n\ttype WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { createInjectionToken, injectBeforeRender, injectNgtStore, signalStore } from 'angular-three';\nimport * as THREE from 'three';\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\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\nconst unique = () => {\n\tconst values: unknown[] = [];\n\treturn (value: unknown) => (values.includes(value) ? false : !!values.push(value));\n};\n\nexport type NgtcPhysicsState = CannonWorkerProps & {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\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 = { [uuid: string]: Partial<NgtcCallbackByType<NgtcCannonEvent>> };\n\nexport type ScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport type NgtcPhysicsApi = {\n\tbodies: { [uuid: string]: number };\n\tevents: NgtcCannonEvents;\n\trefs: Refs;\n\tscaleOverrides: ScaleOverrides;\n\tsubscriptions: Subscriptions;\n\tworker: CannonWorkerAPI;\n};\n\nexport const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] = createInjectionToken(\n\t(physics: NgtcPhysics) => physics.api,\n\t{ isRoot: false, deps: [forwardRef(() => NgtcPhysics)] },\n);\n\n@Component({\n\tselector: 'ngtc-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n\tproviders: [provideNgtcPhysicsApi()],\n})\nexport class NgtcPhysics implements OnInit {\n\tprivate inputs = signalStore<NgtcPhysicsState>({\n\t\tallowSleep: false,\n\t\taxisIndex: 0,\n\t\tbroadphase: 'Naive',\n\t\tdefaultContactMaterial: { contactEquationStiffness: 1e6 },\n\t\tfrictionGravity: null,\n\t\tgravity: [0, -9.81, 0],\n\t\tisPaused: false,\n\t\titerations: 5,\n\t\tmaxSubSteps: 10,\n\t\tquatNormalizeFast: false,\n\t\tquatNormalizeSkip: 0,\n\t\tshouldInvalidate: true,\n\t\tsize: 1000,\n\t\tsolver: 'GS',\n\t\tstepSize: 1 / 60,\n\t\ttolerance: 0.001,\n\t});\n\n\t@Input({ alias: 'isPaused' }) set _isPaused(isPaused: boolean) {\n\t\tthis.inputs.set({ isPaused });\n\t}\n\n\t@Input({ alias: 'maxSubSteps' }) set _maxSubSteps(maxSubSteps: number) {\n\t\tthis.inputs.set({ maxSubSteps });\n\t}\n\n\t@Input({ alias: 'shouldInvalidate' }) set _shouldInvalidate(shouldInvalidate: boolean) {\n\t\tthis.inputs.set({ shouldInvalidate });\n\t}\n\n\t@Input({ alias: 'stepSize' }) set _stepSize(stepSize: number) {\n\t\tthis.inputs.set({ stepSize });\n\t}\n\n\t@Input({ alias: 'size' }) set _size(size: number) {\n\t\tthis.inputs.set({ size });\n\t}\n\n\t@Input({ alias: 'allowSleep' }) set _allowSleep(allowSleep: boolean) {\n\t\tthis.inputs.set({ allowSleep });\n\t}\n\n\t@Input({ alias: 'axisIndex' }) set _axisIndex(axisIndex: 0 | 1 | 2) {\n\t\tthis.inputs.set({ axisIndex });\n\t}\n\n\t@Input({ alias: 'broadphase' }) set _broadphase(broadphase: Broadphase) {\n\t\tthis.inputs.set({ broadphase });\n\t}\n\n\t@Input({ alias: 'defaultContactMaterial' }) set _defaultContactMaterial(\n\t\tdefaultContactMaterial: ContactMaterialOptions,\n\t) {\n\t\tthis.inputs.set({ defaultContactMaterial });\n\t}\n\n\t@Input({ alias: 'frictionGravity' }) set _frictionGravity(frictionGravity: Triplet | null) {\n\t\tthis.inputs.set({ frictionGravity });\n\t}\n\n\t@Input({ alias: 'gravity' }) set _gravity(gravity: Triplet) {\n\t\tthis.inputs.set({ gravity });\n\t}\n\n\t@Input({ alias: 'iterations' }) set _iterations(iterations: number) {\n\t\tthis.inputs.set({ iterations });\n\t}\n\n\t@Input({ alias: 'quatNormalizeFast' }) set _quatNormalizeFast(quatNormalizeFast: boolean) {\n\t\tthis.inputs.set({ quatNormalizeFast });\n\t}\n\n\t@Input({ alias: 'quatNormalizeSkip' }) set _quatNormalizeSkip(quatNormalizeSkip: number) {\n\t\tthis.inputs.set({ quatNormalizeSkip });\n\t}\n\n\t@Input({ alias: 'solver' }) set _solver(solver: Solver) {\n\t\tthis.inputs.set({ solver });\n\t}\n\n\t@Input({ alias: 'tolerance' }) set _tolerance(tolerance: number) {\n\t\tthis.inputs.set({ tolerance });\n\t}\n\n\tprivate zone = inject(NgZone);\n\tprivate injector = inject(Injector);\n\n\tprivate store = injectNgtStore();\n\tprivate invalidate = this.store.select('invalidate');\n\n\tapi = signalStore<NgtcPhysicsApi>({\n\t\tbodies: {},\n\t\tevents: {},\n\t\trefs: {},\n\t\tscaleOverrides: {},\n\t\tsubscriptions: {},\n\t\tworker: null!,\n\t});\n\n\tprivate worker = this.api.select('worker');\n\n\tngOnInit() {\n\t\tthis.zone.runOutsideAngular(() => {\n\t\t\tthis.api.set({ worker: new CannonWorkerAPI(this.inputs.state()) });\n\t\t\tthis.connectWorker();\n\t\t\tthis.updateWorkerState('axisIndex');\n\t\t\tthis.updateWorkerState('broadphase');\n\t\t\tthis.updateWorkerState('gravity');\n\t\t\tthis.updateWorkerState('iterations');\n\t\t\tthis.updateWorkerState('tolerance');\n\t\t\tthis.beforeRender();\n\t\t});\n\t}\n\n\tprivate connectWorker() {\n\t\teffect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst worker = this.worker();\n\t\t\t\tif (!worker) return;\n\n\t\t\t\tworker.connect();\n\t\t\t\tworker.init();\n\n\t\t\t\t(worker as any).on('collide', this.collideHandler.bind(this));\n\t\t\t\t(worker as any).on('collideBegin', this.collideBeginHandler.bind(this));\n\t\t\t\t(worker as any).on('collideEnd', this.collideEndHandler.bind(this));\n\t\t\t\t(worker as any).on('frame', this.frameHandler.bind(this));\n\t\t\t\t(worker as any).on('rayhit', this.rayhitHandler.bind(this));\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tworker.terminate();\n\t\t\t\t\t(worker as any).removeAllListeners();\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\tprivate updateWorkerState(key: keyof NgtcPhysicsState) {\n\t\tconst compute = this.inputs.select(key);\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst [worker, value] = [untracked(this.worker), compute()];\n\t\t\t\t// @ts-expect-error\n\t\t\t\tworker[key] = value;\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.get();\n\t\tconst cb = events[target]?.collide;\n\n\t\tif (cb) {\n\t\t\tcb({\n\t\t\t\tbody: refs[body],\n\t\t\t\tcontact: { bi: refs[bi], bj: refs[bj], ...contactRest },\n\t\t\t\ttarget: refs[target],\n\t\t\t\t...rest,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this.api.get();\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.get();\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\tthis.inputs.get(),\n\t\t\tthis.api.get(),\n\t\t\tthis.invalidate(),\n\t\t];\n\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\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// HELP: We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value as never);\n\t\t});\n\n\t\tif (!active) return;\n\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (ref instanceof THREE.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.get();\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\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.inputs.get(), 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tafterNextRender,\n\tChangeDetectionStrategy,\n\tComponent,\n\tcontentChild,\n\tDirective,\n\teffect,\n\tinject,\n\tInjector,\n\tinput,\n\tNgZone,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\ttype Broadphase,\n\ttype CannonWorkerProps,\n\ttype CollideBeginEvent,\n\ttype CollideEndEvent,\n\ttype CollideEvent,\n\ttype ContactMaterialOptions,\n\ttype RayhitEvent,\n\ttype Refs,\n\ttype Solver,\n\ttype Subscriptions,\n\ttype Triplet,\n\ttype WorkerCollideBeginEvent,\n\ttype WorkerCollideEndEvent,\n\ttype WorkerCollideEvent,\n\ttype WorkerFrameMessage,\n\ttype WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport {\n\tcreateApiToken,\n\tinjectBeforeRender,\n\tinjectInputs,\n\tinjectNgtStore,\n\tsignalStore,\n\ttype Inputs,\n} from 'angular-three';\nimport * as THREE from 'three';\n\nconst v = new THREE.Vector3();\nconst s = new THREE.Vector3(1, 1, 1);\nconst q = new THREE.Quaternion();\nconst m = new THREE.Matrix4();\n\nfunction apply(index: number, positions: Float32Array, quaternions: Float32Array, scale = s, object?: THREE.Object3D) {\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 type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\nexport type NgtcCallbackByType<T extends { type: string }> = {\n\t[K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\nexport type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;\nexport type ScaleOverrides = Record<string, THREE.Vector3>;\n\nexport interface NgtcPhysicsApi {\n\tbodies: { [uuid: string]: number };\n\tevents: NgtcCannonEvents;\n\trefs: Refs;\n\tscaleOverrides: ScaleOverrides;\n\tsubscriptions: Subscriptions;\n\tworker: CannonWorkerAPI;\n}\n\nexport const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] = createApiToken(() => NgtcPhysics);\n\n@Directive({ standalone: true, selector: 'ng-template[physicsContent]' })\nexport class NgtcPhysicsContent {\n\tstatic ngTemplateContextGuard<NgtcPhysicsContent>(\n\t\tdir: NgtcPhysicsContent,\n\t\tctx: unknown,\n\t): ctx is { $implicit: NgtcPhysicsApi } {\n\t\treturn true;\n\t}\n}\n\n@Component({\n\tselector: 'ngtc-physics',\n\ttemplate: `\n\t\t<ng-container [ngTemplateOutlet]=\"content()\" [ngTemplateOutletContext]=\"{ $implicit: api }\" />\n\t`,\n\tstandalone: true,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgTemplateOutlet],\n\tproviders: [provideNgtcPhysicsApi()],\n})\nexport class NgtcPhysics {\n\tallowSleep = input(false);\n\taxisIndex = input<CannonWorkerProps['axisIndex']>(0);\n\tbroadphase = input<Broadphase>('Naive');\n\tdefaultContactMaterial = input<ContactMaterialOptions>({ contactEquationStiffness: 1e6 });\n\tfrictionGravity = input<Triplet | null>(null);\n\tgravity = input<Triplet>([0, -9.81, 0]);\n\tisPaused = input(false);\n\titerations = input(5);\n\tmaxSubSteps = input(10);\n\tquatNormalizeFast = input(false);\n\tquatNormalizeSkip = input(0);\n\tshouldInvalidate = input(true);\n\tsize = input(1000);\n\tsolver = input<Solver>('GS');\n\tstepSize = input(1 / 60);\n\ttolerance = input(0.001);\n\n\tcontent = contentChild.required(NgtcPhysicsContent, { read: TemplateRef });\n\n\tprivate zone = inject(NgZone);\n\tprivate injector = inject(Injector);\n\tprivate inputs = injectInputs(this, NgtcPhysics);\n\tprivate store = injectNgtStore();\n\tprivate invalidate = this.store.select('invalidate');\n\n\tapi = signalStore<NgtcPhysicsApi>({\n\t\tbodies: {},\n\t\tevents: {},\n\t\trefs: {},\n\t\tscaleOverrides: {},\n\t\tsubscriptions: {},\n\t\tworker: null!,\n\t});\n\n\tprivate worker = this.api.select('worker');\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tthis.api.update({ worker: new CannonWorkerAPI(this.inputs()) });\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\t}\n\n\tprivate connectWorker() {\n\t\teffect(\n\t\t\t(onCleanup) => {\n\t\t\t\tconst worker = this.worker();\n\t\t\t\tif (!worker) return;\n\n\t\t\t\tworker.connect();\n\t\t\t\tworker.init();\n\n\t\t\t\t(worker as any).on('collide', this.collideHandler.bind(this));\n\t\t\t\t(worker as any).on('collideBegin', this.collideBeginHandler.bind(this));\n\t\t\t\t(worker as any).on('collideEnd', this.collideEndHandler.bind(this));\n\t\t\t\t(worker as any).on('frame', this.frameHandler.bind(this));\n\t\t\t\t(worker as any).on('rayhit', this.rayhitHandler.bind(this));\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tworker.terminate();\n\t\t\t\t\t(worker as any).removeAllListeners();\n\t\t\t\t});\n\t\t\t},\n\t\t\t{ injector: this.injector },\n\t\t);\n\t}\n\n\tprivate updateWorkerState(key: keyof Inputs<NgtcPhysics>) {\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst [worker, value] = [untracked(this.worker), this.inputs()[key]];\n\t\t\t\t// @ts-expect-error\n\t\t\t\tworker[key] = value;\n\t\t\t},\n\t\t\t{ injector: this.injector },\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.inputs(), 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.get();\n\t\tconst cb = events[target]?.collide;\n\n\t\tif (cb) {\n\t\t\tcb({\n\t\t\t\tbody: refs[body],\n\t\t\t\tcontact: { bi: refs[bi], bj: refs[bj], ...contactRest },\n\t\t\t\ttarget: refs[target],\n\t\t\t\t...rest,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this.api.get();\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.get();\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.inputs),\n\t\t\tthis.api.get(),\n\t\t\tthis.invalidate(),\n\t\t];\n\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\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// HELP: We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value as never);\n\t\t});\n\n\t\tif (!active) return;\n\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (ref instanceof THREE.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.get();\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,29 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
import { type
|
|
3
|
-
import { CannonWorkerAPI, type Broadphase, type CannonWorkerProps, type CollideBeginEvent, type CollideEndEvent, type CollideEvent, type ContactMaterialOptions, type RayhitEvent, type Refs, type Solver, type Subscriptions, type Triplet } from '@pmndrs/cannon-worker-api';
|
|
1
|
+
import { Injector, TemplateRef } from '@angular/core';
|
|
2
|
+
import { CannonWorkerAPI, type Broadphase, type CollideBeginEvent, type CollideEndEvent, type CollideEvent, type RayhitEvent, type Refs, type Solver, type Subscriptions, type Triplet } from '@pmndrs/cannon-worker-api';
|
|
4
3
|
import * as THREE from 'three';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
maxSubSteps?: number;
|
|
9
|
-
shouldInvalidate?: boolean;
|
|
10
|
-
stepSize?: number;
|
|
11
|
-
};
|
|
12
|
-
type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
|
|
13
|
-
type NgtcCallbackByType<T extends {
|
|
5
|
+
export type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
|
|
6
|
+
export type NgtcCallbackByType<T extends {
|
|
14
7
|
type: string;
|
|
15
8
|
}> = {
|
|
16
9
|
[K in T['type']]?: T extends {
|
|
17
10
|
type: K;
|
|
18
11
|
} ? (e: T) => void : never;
|
|
19
12
|
};
|
|
20
|
-
export type NgtcCannonEvents =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export type ScaleOverrides = {
|
|
24
|
-
[uuid: string]: THREE.Vector3;
|
|
25
|
-
};
|
|
26
|
-
export type NgtcPhysicsApi = {
|
|
13
|
+
export type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;
|
|
14
|
+
export type ScaleOverrides = Record<string, THREE.Vector3>;
|
|
15
|
+
export interface NgtcPhysicsApi {
|
|
27
16
|
bodies: {
|
|
28
17
|
[uuid: string]: number;
|
|
29
18
|
};
|
|
@@ -32,48 +21,66 @@ export type NgtcPhysicsApi = {
|
|
|
32
21
|
scaleOverrides: ScaleOverrides;
|
|
33
22
|
subscriptions: Subscriptions;
|
|
34
23
|
worker: CannonWorkerAPI;
|
|
35
|
-
}
|
|
24
|
+
}
|
|
36
25
|
export declare const injectNgtcPhysicsApi: {
|
|
37
26
|
(): import("angular-three").NgtSignalStore<NgtcPhysicsApi>;
|
|
38
27
|
(injectOptions: import("@angular/core").InjectOptions & {
|
|
39
28
|
optional?: false | undefined;
|
|
29
|
+
} & {
|
|
30
|
+
injector?: Injector | undefined;
|
|
40
31
|
}): import("angular-three").NgtSignalStore<NgtcPhysicsApi>;
|
|
41
|
-
(injectOptions: import("@angular/core").InjectOptions
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
32
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
33
|
+
injector?: Injector | undefined;
|
|
34
|
+
}): import("angular-three").NgtSignalStore<NgtcPhysicsApi> | null;
|
|
35
|
+
}, provideNgtcPhysicsApi: () => import("@angular/core").Provider;
|
|
36
|
+
export declare class NgtcPhysicsContent {
|
|
37
|
+
static ngTemplateContextGuard<NgtcPhysicsContent>(dir: NgtcPhysicsContent, ctx: unknown): ctx is {
|
|
38
|
+
$implicit: NgtcPhysicsApi;
|
|
39
|
+
};
|
|
40
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtcPhysicsContent, never>;
|
|
41
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtcPhysicsContent, "ng-template[physicsContent]", never, {}, {}, never, never, true, never>;
|
|
42
|
+
}
|
|
43
|
+
export declare class NgtcPhysics {
|
|
44
|
+
allowSleep: import("@angular/core").InputSignal<boolean>;
|
|
45
|
+
axisIndex: import("@angular/core").InputSignal<0 | 1 | 2 | undefined>;
|
|
46
|
+
broadphase: import("@angular/core").InputSignal<Broadphase>;
|
|
47
|
+
defaultContactMaterial: import("@angular/core").InputSignal<{
|
|
48
|
+
friction?: number | undefined;
|
|
49
|
+
restitution?: number | undefined;
|
|
50
|
+
contactEquationStiffness?: number | undefined;
|
|
51
|
+
contactEquationRelaxation?: number | undefined;
|
|
52
|
+
frictionEquationStiffness?: number | undefined;
|
|
53
|
+
frictionEquationRelaxation?: number | undefined;
|
|
54
|
+
}>;
|
|
55
|
+
frictionGravity: import("@angular/core").InputSignal<Triplet | null>;
|
|
56
|
+
gravity: import("@angular/core").InputSignal<Triplet>;
|
|
57
|
+
isPaused: import("@angular/core").InputSignal<boolean>;
|
|
58
|
+
iterations: import("@angular/core").InputSignal<number>;
|
|
59
|
+
maxSubSteps: import("@angular/core").InputSignal<number>;
|
|
60
|
+
quatNormalizeFast: import("@angular/core").InputSignal<boolean>;
|
|
61
|
+
quatNormalizeSkip: import("@angular/core").InputSignal<number>;
|
|
62
|
+
shouldInvalidate: import("@angular/core").InputSignal<boolean>;
|
|
63
|
+
size: import("@angular/core").InputSignal<number>;
|
|
64
|
+
solver: import("@angular/core").InputSignal<Solver>;
|
|
65
|
+
stepSize: import("@angular/core").InputSignal<number>;
|
|
66
|
+
tolerance: import("@angular/core").InputSignal<number>;
|
|
67
|
+
content: import("@angular/core").Signal<TemplateRef<any>>;
|
|
61
68
|
private zone;
|
|
62
69
|
private injector;
|
|
70
|
+
private inputs;
|
|
63
71
|
private store;
|
|
64
72
|
private invalidate;
|
|
65
73
|
api: import("angular-three").NgtSignalStore<NgtcPhysicsApi>;
|
|
66
74
|
private worker;
|
|
67
|
-
|
|
75
|
+
constructor();
|
|
68
76
|
private connectWorker;
|
|
69
77
|
private updateWorkerState;
|
|
78
|
+
private beforeRender;
|
|
70
79
|
private collideHandler;
|
|
71
80
|
private collideBeginHandler;
|
|
72
81
|
private collideEndHandler;
|
|
73
82
|
private frameHandler;
|
|
74
83
|
private rayhitHandler;
|
|
75
|
-
private beforeRender;
|
|
76
84
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtcPhysics, never>;
|
|
77
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtcPhysics, "ngtc-physics", never, { "
|
|
85
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtcPhysics, "ngtc-physics", never, { "allowSleep": { "alias": "allowSleep"; "required": false; "isSignal": true; }; "axisIndex": { "alias": "axisIndex"; "required": false; "isSignal": true; }; "broadphase": { "alias": "broadphase"; "required": false; "isSignal": true; }; "defaultContactMaterial": { "alias": "defaultContactMaterial"; "required": false; "isSignal": true; }; "frictionGravity": { "alias": "frictionGravity"; "required": false; "isSignal": true; }; "gravity": { "alias": "gravity"; "required": false; "isSignal": true; }; "isPaused": { "alias": "isPaused"; "required": false; "isSignal": true; }; "iterations": { "alias": "iterations"; "required": false; "isSignal": true; }; "maxSubSteps": { "alias": "maxSubSteps"; "required": false; "isSignal": true; }; "quatNormalizeFast": { "alias": "quatNormalizeFast"; "required": false; "isSignal": true; }; "quatNormalizeSkip": { "alias": "quatNormalizeSkip"; "required": false; "isSignal": true; }; "shouldInvalidate": { "alias": "shouldInvalidate"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "solver": { "alias": "solver"; "required": false; "isSignal": true; }; "stepSize": { "alias": "stepSize"; "required": false; "isSignal": true; }; "tolerance": { "alias": "tolerance"; "required": false; "isSignal": true; }; }, {}, ["content"], never, true, never>;
|
|
78
86
|
}
|
|
79
|
-
export {};
|
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.227",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -23,17 +23,14 @@
|
|
|
23
23
|
],
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@angular/common": "
|
|
27
|
-
"@angular/core": "
|
|
26
|
+
"@angular/common": "^18.0.0",
|
|
27
|
+
"@angular/core": "^18.0.0",
|
|
28
28
|
"@pmndrs/cannon-worker-api": "^2.0.0",
|
|
29
|
-
"angular-three": "^2.0.0",
|
|
30
29
|
"cannon-es": "^0.20.0",
|
|
31
30
|
"cannon-es-debugger": "^1.0.0",
|
|
31
|
+
"ngxtension": "^3.0.0",
|
|
32
32
|
"three": ">=0.148.0"
|
|
33
33
|
},
|
|
34
|
-
"dependencies": {
|
|
35
|
-
"tslib": "^2.3.0"
|
|
36
|
-
},
|
|
37
34
|
"sideEffects": false,
|
|
38
35
|
"module": "fesm2022/angular-three-cannon.mjs",
|
|
39
36
|
"typings": "index.d.ts",
|
|
@@ -47,17 +44,26 @@
|
|
|
47
44
|
"esm": "./esm2022/angular-three-cannon.mjs",
|
|
48
45
|
"default": "./fesm2022/angular-three-cannon.mjs"
|
|
49
46
|
},
|
|
47
|
+
"./body": {
|
|
48
|
+
"types": "./body/index.d.ts",
|
|
49
|
+
"esm2022": "./esm2022/body/angular-three-cannon-body.mjs",
|
|
50
|
+
"esm": "./esm2022/body/angular-three-cannon-body.mjs",
|
|
51
|
+
"default": "./fesm2022/angular-three-cannon-body.mjs"
|
|
52
|
+
},
|
|
53
|
+
"./constraint": {
|
|
54
|
+
"types": "./constraint/index.d.ts",
|
|
55
|
+
"esm2022": "./esm2022/constraint/angular-three-cannon-constraint.mjs",
|
|
56
|
+
"esm": "./esm2022/constraint/angular-three-cannon-constraint.mjs",
|
|
57
|
+
"default": "./fesm2022/angular-three-cannon-constraint.mjs"
|
|
58
|
+
},
|
|
50
59
|
"./debug": {
|
|
51
60
|
"types": "./debug/index.d.ts",
|
|
52
61
|
"esm2022": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
53
62
|
"esm": "./esm2022/debug/angular-three-cannon-debug.mjs",
|
|
54
63
|
"default": "./fesm2022/angular-three-cannon-debug.mjs"
|
|
55
|
-
},
|
|
56
|
-
"./services": {
|
|
57
|
-
"types": "./services/index.d.ts",
|
|
58
|
-
"esm2022": "./esm2022/services/angular-three-cannon-services.mjs",
|
|
59
|
-
"esm": "./esm2022/services/angular-three-cannon-services.mjs",
|
|
60
|
-
"default": "./fesm2022/angular-three-cannon-services.mjs"
|
|
61
64
|
}
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"tslib": "^2.3.0"
|
|
62
68
|
}
|
|
63
69
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zZXJ2aWNlcy9zcmMvYW5ndWxhci10aHJlZS1jYW5ub24tc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './lib/body';
|
|
2
|
-
export * from './lib/constraints';
|
|
3
|
-
export * from './lib/contact-material';
|
|
4
|
-
export * from './lib/ray';
|
|
5
|
-
export * from './lib/raycast-vehicle';
|
|
6
|
-
export * from './lib/spring';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9zZXJ2aWNlcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9ib2R5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnN0cmFpbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRhY3QtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmF5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JheWNhc3QtdmVoaWNsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zcHJpbmcnO1xuIl19
|