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.
Files changed (47) hide show
  1. package/body/README.md +3 -0
  2. package/body/index.d.ts +2 -0
  3. package/body/lib/body.d.ts +57 -0
  4. package/body/lib/types.d.ts +38 -0
  5. package/body/lib/utils.d.ts +50 -0
  6. package/constraint/README.md +3 -0
  7. package/constraint/index.d.ts +1 -0
  8. package/constraint/lib/constraint.d.ts +26 -0
  9. package/debug/lib/debug.d.ts +15 -14
  10. package/esm2022/body/angular-three-cannon-body.mjs +5 -0
  11. package/esm2022/body/index.mjs +2 -0
  12. package/esm2022/body/lib/body.mjs +83 -0
  13. package/esm2022/body/lib/types.mjs +2 -0
  14. package/esm2022/body/lib/utils.mjs +205 -0
  15. package/esm2022/constraint/angular-three-cannon-constraint.mjs +5 -0
  16. package/esm2022/constraint/index.mjs +2 -0
  17. package/esm2022/constraint/lib/constraint.mjs +50 -0
  18. package/esm2022/debug/lib/debug.mjs +34 -46
  19. package/esm2022/lib/physics.mjs +70 -153
  20. package/fesm2022/angular-three-cannon-body.mjs +292 -0
  21. package/fesm2022/angular-three-cannon-body.mjs.map +1 -0
  22. package/fesm2022/angular-three-cannon-constraint.mjs +57 -0
  23. package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -0
  24. package/fesm2022/angular-three-cannon-debug.mjs +33 -45
  25. package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
  26. package/fesm2022/angular-three-cannon.mjs +70 -153
  27. package/fesm2022/angular-three-cannon.mjs.map +1 -1
  28. package/lib/physics.d.ts +50 -43
  29. package/package.json +19 -13
  30. package/esm2022/services/angular-three-cannon-services.mjs +0 -5
  31. package/esm2022/services/index.mjs +0 -7
  32. package/esm2022/services/lib/body.mjs +0 -293
  33. package/esm2022/services/lib/constraints.mjs +0 -59
  34. package/esm2022/services/lib/contact-material.mjs +0 -20
  35. package/esm2022/services/lib/ray.mjs +0 -30
  36. package/esm2022/services/lib/raycast-vehicle.mjs +0 -68
  37. package/esm2022/services/lib/spring.mjs +0 -31
  38. package/fesm2022/angular-three-cannon-services.mjs +0 -490
  39. package/fesm2022/angular-three-cannon-services.mjs.map +0 -1
  40. package/services/README.md +0 -3
  41. package/services/index.d.ts +0 -6
  42. package/services/lib/body.d.ts +0 -60
  43. package/services/lib/constraints.d.ts +0 -31
  44. package/services/lib/contact-material.d.ts +0 -9
  45. package/services/lib/ray.d.ts +0 -12
  46. package/services/lib/raycast-vehicle.d.ts +0 -30
  47. 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 { forwardRef, inject, NgZone, Injector, effect, untracked, Component, Input } from '@angular/core';
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 { createInjectionToken, signalStore, injectNgtStore, injectBeforeRender } from 'angular-three';
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
- const unique = () => {
23
+ function unique() {
23
24
  const values = [];
24
25
  return (value) => (values.includes(value) ? false : !!values.push(value));
25
- };
26
- const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] = createInjectionToken((physics) => physics.api, { isRoot: false, deps: [forwardRef(() => NgtcPhysics)] });
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.inputs = signalStore({
30
- allowSleep: false,
31
- axisIndex: 0,
32
- broadphase: 'Naive',
33
- defaultContactMaterial: { contactEquationStiffness: 1e6 },
34
- frictionGravity: null,
35
- gravity: [0, -9.81, 0],
36
- isPaused: false,
37
- iterations: 5,
38
- maxSubSteps: 10,
39
- quatNormalizeFast: false,
40
- quatNormalizeSkip: 0,
41
- shouldInvalidate: true,
42
- size: 1000,
43
- solver: 'GS',
44
- stepSize: 1 / 60,
45
- tolerance: 0.001,
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
- set _isPaused(isPaused) {
62
- this.inputs.set({ isPaused });
63
- }
64
- set _maxSubSteps(maxSubSteps) {
65
- this.inputs.set({ maxSubSteps });
66
- }
67
- set _shouldInvalidate(shouldInvalidate) {
68
- this.inputs.set({ shouldInvalidate });
69
- }
70
- set _stepSize(stepSize) {
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), compute()];
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.get(),
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
- beforeRender() {
220
- let timeSinceLastCalled = 0;
221
- injectBeforeRender(({ delta }) => {
222
- const [{ isPaused, maxSubSteps, stepSize }, worker] = [this.inputs.get(), this.worker()];
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: "16.2.2", ngImport: i0, type: NgtcPhysics, decorators: [{
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
- }], propDecorators: { _isPaused: [{
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
- /// <reference types="cannon-es" />
2
- import { type OnInit } from '@angular/core';
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 NgtcPhysicsState = CannonWorkerProps & {
7
- isPaused?: boolean;
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
- [uuid: string]: Partial<NgtcCallbackByType<NgtcCannonEvent>>;
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): import("angular-three").NgtSignalStore<NgtcPhysicsApi> | null;
42
- }, provideNgtcPhysicsApi: (value?: import("angular-three").NgtSignalStore<NgtcPhysicsApi> | undefined) => import("@angular/core").Provider;
43
- export declare class NgtcPhysics implements OnInit {
44
- private inputs;
45
- set _isPaused(isPaused: boolean);
46
- set _maxSubSteps(maxSubSteps: number);
47
- set _shouldInvalidate(shouldInvalidate: boolean);
48
- set _stepSize(stepSize: number);
49
- set _size(size: number);
50
- set _allowSleep(allowSleep: boolean);
51
- set _axisIndex(axisIndex: 0 | 1 | 2);
52
- set _broadphase(broadphase: Broadphase);
53
- set _defaultContactMaterial(defaultContactMaterial: ContactMaterialOptions);
54
- set _frictionGravity(frictionGravity: Triplet | null);
55
- set _gravity(gravity: Triplet);
56
- set _iterations(iterations: number);
57
- set _quatNormalizeFast(quatNormalizeFast: boolean);
58
- set _quatNormalizeSkip(quatNormalizeSkip: number);
59
- set _solver(solver: Solver);
60
- set _tolerance(tolerance: number);
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
- ngOnInit(): void;
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, { "_isPaused": { "alias": "isPaused"; "required": false; }; "_maxSubSteps": { "alias": "maxSubSteps"; "required": false; }; "_shouldInvalidate": { "alias": "shouldInvalidate"; "required": false; }; "_stepSize": { "alias": "stepSize"; "required": false; }; "_size": { "alias": "size"; "required": false; }; "_allowSleep": { "alias": "allowSleep"; "required": false; }; "_axisIndex": { "alias": "axisIndex"; "required": false; }; "_broadphase": { "alias": "broadphase"; "required": false; }; "_defaultContactMaterial": { "alias": "defaultContactMaterial"; "required": false; }; "_frictionGravity": { "alias": "frictionGravity"; "required": false; }; "_gravity": { "alias": "gravity"; "required": false; }; "_iterations": { "alias": "iterations"; "required": false; }; "_quatNormalizeFast": { "alias": "quatNormalizeFast"; "required": false; }; "_quatNormalizeSkip": { "alias": "quatNormalizeSkip"; "required": false; }; "_solver": { "alias": "solver"; "required": false; }; "_tolerance": { "alias": "tolerance"; "required": false; }; }, {}, never, ["*"], true, 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.21",
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": " ^16.0.0",
27
- "@angular/core": " ^16.0.0",
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