angular-three-cannon 2.0.0-beta.9 → 2.1.0

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 (49) hide show
  1. package/README.md +71 -4
  2. package/body/README.md +49 -0
  3. package/body/index.d.ts +2 -0
  4. package/body/lib/body.d.ts +17 -0
  5. package/body/lib/types.d.ts +49 -0
  6. package/body/lib/utils.d.ts +50 -0
  7. package/constraint/README.md +47 -0
  8. package/constraint/index.d.ts +1 -0
  9. package/constraint/lib/constraint.d.ts +32 -0
  10. package/debug/README.md +48 -2
  11. package/debug/lib/debug.d.ts +15 -33
  12. package/esm2022/body/angular-three-cannon-body.mjs +5 -0
  13. package/esm2022/body/index.mjs +2 -0
  14. package/esm2022/body/lib/body.mjs +108 -0
  15. package/esm2022/body/lib/types.mjs +2 -0
  16. package/esm2022/body/lib/utils.mjs +193 -0
  17. package/esm2022/constraint/angular-three-cannon-constraint.mjs +5 -0
  18. package/esm2022/constraint/index.mjs +2 -0
  19. package/esm2022/constraint/lib/constraint.mjs +67 -0
  20. package/esm2022/debug/lib/debug.mjs +56 -71
  21. package/esm2022/lib/physics.mjs +79 -176
  22. package/fesm2022/angular-three-cannon-body.mjs +306 -0
  23. package/fesm2022/angular-three-cannon-body.mjs.map +1 -0
  24. package/fesm2022/angular-three-cannon-constraint.mjs +74 -0
  25. package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -0
  26. package/fesm2022/angular-three-cannon-debug.mjs +56 -71
  27. package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
  28. package/fesm2022/angular-three-cannon.mjs +79 -176
  29. package/fesm2022/angular-three-cannon.mjs.map +1 -1
  30. package/lib/physics.d.ts +31 -49
  31. package/package.json +25 -15
  32. package/esm2022/services/angular-three-cannon-services.mjs +0 -5
  33. package/esm2022/services/index.mjs +0 -7
  34. package/esm2022/services/lib/body.mjs +0 -293
  35. package/esm2022/services/lib/constraints.mjs +0 -58
  36. package/esm2022/services/lib/contact-material.mjs +0 -20
  37. package/esm2022/services/lib/ray.mjs +0 -30
  38. package/esm2022/services/lib/raycast-vehicle.mjs +0 -68
  39. package/esm2022/services/lib/spring.mjs +0 -31
  40. package/fesm2022/angular-three-cannon-services.mjs +0 -490
  41. package/fesm2022/angular-three-cannon-services.mjs.map +0 -1
  42. package/services/README.md +0 -3
  43. package/services/index.d.ts +0 -6
  44. package/services/lib/body.d.ts +0 -60
  45. package/services/lib/constraints.d.ts +0 -31
  46. package/services/lib/contact-material.d.ts +0 -9
  47. package/services/lib/ray.d.ts +0 -12
  48. package/services/lib/raycast-vehicle.d.ts +0 -30
  49. package/services/lib/spring.d.ts +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-cannon-debug.mjs","sources":["../../../../libs/cannon/debug/src/lib/debug.ts","../../../../libs/cannon/debug/src/angular-three-cannon-debug.ts"],"sourcesContent":["import { Component, CUSTOM_ELEMENTS_SCHEMA, forwardRef, Input, type OnInit } from '@angular/core';\nimport { propsToBody, type BodyProps, type BodyShapeType } from '@pmndrs/cannon-worker-api';\nimport { createInjectionToken, injectBeforeRender, NgtArgs } from 'angular-three';\nimport { injectNgtcPhysicsApi, provideNgtcPhysicsApi } from 'angular-three-cannon';\nimport type { Body, Quaternion as CQuarternion, Vec3, World } from 'cannon-es';\nimport CannonDebugger from 'cannon-es-debugger';\nimport * as THREE from 'three';\n\nconst q = new THREE.Quaternion();\nconst s = new THREE.Vector3(1, 1, 1);\nconst v = new THREE.Vector3();\nconst m = new THREE.Matrix4();\n\nfunction getMatrix(o: THREE.Object3D): THREE.Matrix4 {\n\tif (o instanceof THREE.InstancedMesh) {\n\t\to.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n\t\treturn m;\n\t}\n\treturn o.matrix;\n}\n\nexport const [injectNgtcDebugApi, provideNgtcDebugApi] = createInjectionToken((debug: NgtcDebug) => debug.api, {\n\tisRoot: false,\n\tdeps: [forwardRef(() => NgtcDebug)],\n});\n\n@Component({\n\tselector: 'ngtc-debug',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[scene]\" />\n\t\t<ng-content />\n\t`,\n\tproviders: [provideNgtcPhysicsApi()],\n\timports: [NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgtcDebug implements OnInit {\n\t@Input() color = 'black';\n\t@Input() scale = 1;\n\t@Input() impl = CannonDebugger;\n\t@Input() disabled = false;\n\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate physicsApi = injectNgtcPhysicsApi();\n\n\tscene = new THREE.Scene();\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tapi = {\n\t\tadd: (uuid: string, props: BodyProps, type: BodyShapeType) => {\n\t\t\tconst body = propsToBody({ uuid, props, type });\n\t\t\tthis.bodies.push(body);\n\t\t\tthis.bodyMap[uuid] = body;\n\t\t},\n\t\tremove: (id: string) => {\n\t\t\tconst debugBodyIndex = this.bodies.indexOf(this.bodyMap[id]);\n\t\t\tif (debugBodyIndex > -1) this.bodies.splice(debugBodyIndex, 1);\n\t\t\tdelete this.bodyMap[id];\n\t\t},\n\t};\n\n\tconstructor() {\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!this.cannonDebugger) return;\n\t\t\tconst refs = this.physicsApi.get('refs');\n\t\t\tfor (const uuid in this.bodyMap) {\n\t\t\t\tgetMatrix(refs[uuid]).decompose(v, q, s);\n\t\t\t\tthis.bodyMap[uuid].position.copy(v as unknown as Vec3);\n\t\t\t\tthis.bodyMap[uuid].quaternion.copy(q as unknown as CQuarternion);\n\t\t\t}\n\n\t\t\tfor (const child of this.scene.children) {\n\t\t\t\tchild.visible = !this.disabled;\n\t\t\t}\n\n\t\t\tif (!this.disabled) {\n\t\t\t\tthis.cannonDebugger.update();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\tthis.cannonDebugger = this.impl(this.scene, { bodies: this.bodies } as World, {\n\t\t\tcolor: this.color,\n\t\t\tscale: this.scale,\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-debug.mjs","sources":["../../../../libs/cannon/debug/src/lib/debug.ts","../../../../libs/cannon/debug/src/angular-three-cannon-debug.ts"],"sourcesContent":["import { Directive, afterNextRender, inject, input } from '@angular/core';\nimport { BodyProps, BodyShapeType, propsToBody } from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore } from 'angular-three';\nimport { NgtcPhysics } from 'angular-three-cannon';\nimport { Body, Quaternion as CQuarternion, Vec3, World } from 'cannon-es';\nimport CannonDebugger from 'cannon-es-debugger';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, Scene, Vector3 } from 'three';\n\nconst q = new Quaternion();\nconst s = new Vector3(1, 1, 1);\nconst v = new Vector3();\nconst m = new Matrix4();\nfunction getMatrix(o: Object3D) {\n\tif (o instanceof InstancedMesh) {\n\t\to.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);\n\t\treturn m;\n\t}\n\treturn o.matrix;\n}\n\nexport interface NgtcDebugInputs {\n\tenabled: boolean;\n\tcolor: string;\n\timpl: typeof CannonDebugger;\n\tscale: number;\n}\n\nconst defaultOptions: NgtcDebugInputs = {\n\tenabled: true,\n\tscale: 1,\n\tcolor: 'black',\n\timpl: CannonDebugger,\n};\n\n@Directive({ selector: 'ngtc-physics[debug]', standalone: true })\nexport class NgtcDebug {\n\tprivate store = injectStore();\n\tprivate physics = inject(NgtcPhysics);\n\n\tdebug = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate defaultScene = this.store.select('scene');\n\n\tprivate scene = new Scene();\n\tprivate bodies: Body[] = [];\n\tprivate bodyMap: Record<string, Body> = {};\n\n\tprivate cannonDebugger!: ReturnType<typeof CannonDebugger>;\n\n\tapi = {};\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.defaultScene().add(this.scene);\n\t\t\tthis.cannonDebugger = this.debug().impl(this.scene, { bodies: this.bodies } as World, {\n\t\t\t\tcolor: this.debug().color,\n\t\t\t\tscale: this.debug().scale,\n\t\t\t});\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!this.cannonDebugger) return;\n\t\t\tconst refs = this.physics.api.refs;\n\t\t\tfor (const uuid in this.bodyMap) {\n\t\t\t\tconst ref = refs[uuid];\n\t\t\t\tconst body = this.bodyMap[uuid];\n\t\t\t\tif (ref) {\n\t\t\t\t\tgetMatrix(ref).decompose(v, q, s);\n\t\t\t\t\tbody.position.copy(v as unknown as Vec3);\n\t\t\t\t\tbody.quaternion.copy(q as unknown as CQuarternion);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const child of this.scene.children) {\n\t\t\t\tchild.visible = this.debug().enabled;\n\t\t\t}\n\n\t\t\tif (this.debug().enabled) {\n\t\t\t\tthis.cannonDebugger.update();\n\t\t\t}\n\t\t});\n\t}\n\n\tadd(uuid: string, props: BodyProps, type: BodyShapeType) {\n\t\tconst body = propsToBody({ uuid, props, type });\n\t\tthis.bodies.push(body);\n\t\tthis.bodyMap[uuid] = body;\n\t}\n\n\tremove(uuid: string) {\n\t\tconst debugBodyIndex = this.bodies.indexOf(this.bodyMap[uuid]);\n\t\tif (debugBodyIndex > -1) this.bodies.splice(debugBodyIndex, 1);\n\t\tdelete this.bodyMap[uuid];\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
- import { forwardRef, inject, NgZone, Injector, effect, untracked, Component, Input } from '@angular/core';
2
+ import { input, signal, afterNextRender, inject, DestroyRef, computed, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
3
3
  import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
- import { createInjectionToken, signalStore, injectNgtStore, injectBeforeRender } from 'angular-three';
5
- import * as THREE from 'three';
4
+ import { injectStore, injectBeforeRender } from 'angular-three';
5
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
6
+ import { mergeInputs } from 'ngxtension/inject-inputs';
7
+ import { Vector3, Quaternion, Matrix4, InstancedMesh } from 'three';
6
8
 
7
- const v = new THREE.Vector3();
8
- const s = new THREE.Vector3(1, 1, 1);
9
- const q = new THREE.Quaternion();
10
- const m = new THREE.Matrix4();
9
+ const v = new Vector3();
10
+ const s = new Vector3(1, 1, 1);
11
+ const q = new Quaternion();
12
+ const m = new Matrix4();
11
13
  function apply(index, positions, quaternions, scale = s, object) {
12
14
  if (index !== undefined) {
13
15
  m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
@@ -19,107 +21,68 @@ function apply(index, positions, quaternions, scale = s, object) {
19
21
  }
20
22
  return m.identity();
21
23
  }
22
- const unique = () => {
24
+ function unique() {
23
25
  const values = [];
24
26
  return (value) => (values.includes(value) ? false : !!values.push(value));
27
+ }
28
+ const defaultOptions = {
29
+ allowSleep: false,
30
+ axisIndex: 0,
31
+ broadphase: 'Naive',
32
+ defaultContactMaterial: { contactEquationStiffness: 1e6 },
33
+ frictionGravity: null,
34
+ gravity: [0, -9.81, 0],
35
+ isPaused: false,
36
+ iterations: 5,
37
+ maxSubSteps: 10,
38
+ quatNormalizeFast: false,
39
+ quatNormalizeSkip: 0,
40
+ shouldInvalidate: true,
41
+ size: 1000,
42
+ solver: 'GS',
43
+ stepSize: 1 / 60,
44
+ tolerance: 0.001,
25
45
  };
26
- const [injectNgtcPhysicsApi, provideNgtcPhysicsApi] = createInjectionToken((physics) => physics.api, { isRoot: false, deps: [forwardRef(() => NgtcPhysics)] });
27
46
  class NgtcPhysics {
28
47
  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
- });
47
- this.zone = inject(NgZone);
48
- this.injector = inject(Injector);
49
- this.store = injectNgtStore();
48
+ this.autoEffect = injectAutoEffect();
49
+ this.store = injectStore();
50
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
50
51
  this.invalidate = this.store.select('invalidate');
51
- this.api = signalStore({
52
+ // @ts-expect-error - worker is not nullable, and we don't want to use ! operator
53
+ this.worker = signal(null);
54
+ this.api = {
52
55
  bodies: {},
53
56
  events: {},
54
57
  refs: {},
55
58
  scaleOverrides: {},
56
59
  subscriptions: {},
57
- worker: null,
58
- });
59
- 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()) });
60
+ worker: this.worker.asReadonly(),
61
+ };
62
+ afterNextRender(() => {
63
+ this.worker.set(new CannonWorkerAPI(this.options()));
112
64
  this.connectWorker();
113
65
  this.updateWorkerState('axisIndex');
114
66
  this.updateWorkerState('broadphase');
115
67
  this.updateWorkerState('gravity');
116
68
  this.updateWorkerState('iterations');
117
69
  this.updateWorkerState('tolerance');
118
- this.beforeRender();
70
+ });
71
+ let timeSinceLastCalled = 0;
72
+ injectBeforeRender(({ delta }) => {
73
+ const [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.worker()];
74
+ if (isPaused || !worker || stepSize == null)
75
+ return;
76
+ timeSinceLastCalled += delta;
77
+ worker.step({ maxSubSteps, stepSize, timeSinceLastCalled });
78
+ timeSinceLastCalled = 0;
79
+ });
80
+ inject(DestroyRef).onDestroy(() => {
81
+ this.ref?.destroy();
119
82
  });
120
83
  }
121
84
  connectWorker() {
122
- effect((onCleanup) => {
85
+ this.autoEffect(() => {
123
86
  const worker = this.worker();
124
87
  if (!worker)
125
88
  return;
@@ -130,34 +93,29 @@ class NgtcPhysics {
130
93
  worker.on('collideEnd', this.collideEndHandler.bind(this));
131
94
  worker.on('frame', this.frameHandler.bind(this));
132
95
  worker.on('rayhit', this.rayhitHandler.bind(this));
133
- onCleanup(() => {
96
+ return () => {
134
97
  worker.terminate();
135
98
  worker.removeAllListeners();
136
- });
137
- }, { injector: this.injector });
99
+ };
100
+ });
138
101
  }
139
102
  updateWorkerState(key) {
140
- const compute = this.inputs.select(key);
141
- effect(() => {
142
- const [worker, value] = [untracked(this.worker), compute()];
143
- // @ts-expect-error
103
+ const computedValue = computed(() => this.options()[key]);
104
+ this.autoEffect(() => {
105
+ const [worker, value] = [untracked(this.worker), computedValue()];
106
+ // @ts-expect-error - we know key is a valid key of CannonWorkerAPI
144
107
  worker[key] = value;
145
- }, { injector: this.injector });
108
+ });
146
109
  }
147
110
  collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
148
- const { events, refs } = this.api.get();
111
+ const { events, refs } = this.api;
149
112
  const cb = events[target]?.collide;
150
113
  if (cb) {
151
- cb({
152
- body: refs[body],
153
- contact: { bi: refs[bi], bj: refs[bj], ...contactRest },
154
- target: refs[target],
155
- ...rest,
156
- });
114
+ cb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });
157
115
  }
158
116
  }
159
117
  collideBeginHandler({ bodyA, bodyB }) {
160
- const { events, refs } = this.api.get();
118
+ const { events, refs } = this.api;
161
119
  const cbA = events[bodyA]?.collideBegin;
162
120
  if (cbA)
163
121
  cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });
@@ -166,7 +124,7 @@ class NgtcPhysics {
166
124
  cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });
167
125
  }
168
126
  collideEndHandler({ bodyA, bodyB }) {
169
- const { events, refs } = this.api.get();
127
+ const { events, refs } = this.api;
170
128
  const cbA = events[bodyA]?.collideEnd;
171
129
  if (cbA)
172
130
  cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });
@@ -176,8 +134,8 @@ class NgtcPhysics {
176
134
  }
177
135
  frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {
178
136
  const [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [
179
- this.inputs.get(),
180
- this.api.get(),
137
+ untracked(this.options),
138
+ this.api,
181
139
  this.invalidate(),
182
140
  ];
183
141
  for (let i = 0; i < uuids.length; i++) {
@@ -186,13 +144,13 @@ class NgtcPhysics {
186
144
  observations.forEach(([id, value, type]) => {
187
145
  const subscription = subscriptions[id] || {};
188
146
  const cb = subscription[type];
189
- // HELP: We clearly know the type of the callback, but typescript can't deal with it
147
+ // @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it
190
148
  cb && cb(value);
191
149
  });
192
150
  if (!active)
193
151
  return;
194
152
  for (const ref of Object.values(refs).filter(unique())) {
195
- if (ref instanceof THREE.InstancedMesh) {
153
+ if (ref instanceof InstancedMesh) {
196
154
  for (let i = 0; i < ref.count; i++) {
197
155
  const uuid = `${ref.uuid}/${i}`;
198
156
  const index = bodies[uuid];
@@ -211,86 +169,31 @@ class NgtcPhysics {
211
169
  invalidate();
212
170
  }
213
171
  rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
214
- const { events, refs } = this.api.get();
172
+ const { events, refs } = this.api;
215
173
  const cb = events[uuid]?.rayhit;
216
174
  if (cb)
217
175
  cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
218
176
  }
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.1.7", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
231
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", 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: `<ng-content />`, isInline: true }); }
177
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
178
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
179
+ <ng-content />
180
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
232
181
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtcPhysics, decorators: [{
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtcPhysics, decorators: [{
234
183
  type: Component,
235
184
  args: [{
236
185
  selector: 'ngtc-physics',
237
186
  standalone: true,
238
- template: `<ng-content />`,
239
- providers: [provideNgtcPhysicsApi()],
187
+ template: `
188
+ <ng-content />
189
+ `,
190
+ changeDetection: ChangeDetectionStrategy.OnPush,
240
191
  }]
241
- }], propDecorators: { _isPaused: [{
242
- type: Input,
243
- args: [{ alias: 'isPaused' }]
244
- }], _maxSubSteps: [{
245
- type: Input,
246
- args: [{ alias: 'maxSubSteps' }]
247
- }], _shouldInvalidate: [{
248
- type: Input,
249
- args: [{ alias: 'shouldInvalidate' }]
250
- }], _stepSize: [{
251
- type: Input,
252
- args: [{ alias: 'stepSize' }]
253
- }], _size: [{
254
- type: Input,
255
- args: [{ alias: 'size' }]
256
- }], _allowSleep: [{
257
- type: Input,
258
- args: [{ alias: 'allowSleep' }]
259
- }], _axisIndex: [{
260
- type: Input,
261
- args: [{ alias: 'axisIndex' }]
262
- }], _broadphase: [{
263
- type: Input,
264
- args: [{ alias: 'broadphase' }]
265
- }], _defaultContactMaterial: [{
266
- type: Input,
267
- args: [{ alias: 'defaultContactMaterial' }]
268
- }], _frictionGravity: [{
269
- type: Input,
270
- args: [{ alias: 'frictionGravity' }]
271
- }], _gravity: [{
272
- type: Input,
273
- args: [{ alias: 'gravity' }]
274
- }], _iterations: [{
275
- type: Input,
276
- args: [{ alias: 'iterations' }]
277
- }], _quatNormalizeFast: [{
278
- type: Input,
279
- args: [{ alias: 'quatNormalizeFast' }]
280
- }], _quatNormalizeSkip: [{
281
- type: Input,
282
- args: [{ alias: 'quatNormalizeSkip' }]
283
- }], _solver: [{
284
- type: Input,
285
- args: [{ alias: 'solver' }]
286
- }], _tolerance: [{
287
- type: Input,
288
- args: [{ alias: 'tolerance' }]
289
- }] } });
192
+ }], ctorParameters: () => [] });
290
193
 
291
194
  /**
292
195
  * Generated bundle index. Do not edit.
293
196
  */
294
197
 
295
- export { NgtcPhysics, injectNgtcPhysicsApi, provideNgtcPhysicsApi };
198
+ export { NgtcPhysics };
296
199
  //# 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: `<ng-content />`,\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":";;;;;;AAuBA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;AACjC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAE9B,SAAS,KAAK,CAAC,KAAa,EAAE,SAAuB,EAAE,WAAyB,EAAE,KAAK,GAAG,CAAC,EAAE,MAAuB,EAAA;IACnH,IAAI,KAAK,KAAK,SAAS,EAAE;QACxB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzF,QAAA,IAAI,MAAM,EAAE;AACX,YAAA,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAChC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;AACT,KAAA;AACD,IAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,MAAM,GAAG,MAAK;IACnB,MAAM,MAAM,GAAc,EAAE,CAAC;AAC7B,IAAA,OAAO,CAAC,KAAc,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC,CAAC;AA2BW,MAAA,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,GAAG,oBAAoB,CAChF,CAAC,OAAoB,KAAK,OAAO,CAAC,GAAG,EACrC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,WAAW,CAAC,CAAC,EAAE,EACvD;MAQW,WAAW,CAAA;AANxB,IAAA,WAAA,GAAA;QAOS,IAAM,CAAA,MAAA,GAAG,WAAW,CAAmB;AAC9C,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,sBAAsB,EAAE,EAAE,wBAAwB,EAAE,GAAG,EAAE;AACzD,YAAA,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACtB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,iBAAiB,EAAE,CAAC;AACpB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,CAAC,GAAG,EAAE;AAChB,YAAA,SAAS,EAAE,KAAK;AAChB,SAAA,CAAC,CAAC;AAoEK,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5B,IAAK,CAAA,KAAA,GAAG,cAAc,EAAE,CAAC;QACzB,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAErD,IAAG,CAAA,GAAA,GAAG,WAAW,CAAiB;AACjC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,IAAK;AACb,SAAA,CAAC,CAAC;QAEK,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAgJ3C,KAAA;IAjOA,IAAkC,SAAS,CAAC,QAAiB,EAAA;QAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAAqC,YAAY,CAAC,WAAmB,EAAA;QACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACjC;IAED,IAA0C,iBAAiB,CAAC,gBAAyB,EAAA;QACpF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;KACtC;IAED,IAAkC,SAAS,CAAC,QAAgB,EAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KAC9B;IAED,IAA8B,KAAK,CAAC,IAAY,EAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAC1B;IAED,IAAoC,WAAW,CAAC,UAAmB,EAAA;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;IAED,IAAmC,UAAU,CAAC,SAAoB,EAAA;QACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;IAED,IAAoC,WAAW,CAAC,UAAsB,EAAA;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;IAED,IAAgD,uBAAuB,CACtE,sBAA8C,EAAA;QAE9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC;KAC5C;IAED,IAAyC,gBAAgB,CAAC,eAA+B,EAAA;QACxF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;KACrC;IAED,IAAiC,QAAQ,CAAC,OAAgB,EAAA;QACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC7B;IAED,IAAoC,WAAW,CAAC,UAAkB,EAAA;QACjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAChC;IAED,IAA2C,kBAAkB,CAAC,iBAA0B,EAAA;QACvF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACvC;IAED,IAA2C,kBAAkB,CAAC,iBAAyB,EAAA;QACtF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;KACvC;IAED,IAAgC,OAAO,CAAC,MAAc,EAAA;QACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC5B;IAED,IAAmC,UAAU,CAAC,SAAiB,EAAA;QAC9D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/B;IAmBD,QAAQ,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACH;IAEO,aAAa,GAAA;AACpB,QAAA,MAAM,CACL,CAAC,SAAS,KAAI;AACb,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,EAAE,CAAC;AAEb,YAAA,MAAc,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,YAAA,MAAc,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,YAAA,MAAc,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,YAAA,MAAc,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,YAAA,MAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE5D,SAAS,CAAC,MAAK;gBACd,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClB,MAAc,CAAC,kBAAkB,EAAE,CAAC;AACtC,aAAC,CAAC,CAAC;SACH,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC3B,CAAC;KACF;AAEO,IAAA,iBAAiB,CAAC,GAA2B,EAAA;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CACL,MAAK;AACJ,YAAA,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;;AAE5D,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SACpB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC3B,CAAC;KACF;AAEO,IAAA,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAA8B,EAAA;AAChH,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;AAEnC,QAAA,IAAI,EAAE,EAAE;AACP,YAAA,EAAE,CAAC;AACF,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AAChB,gBAAA,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE;AACvD,gBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;AACpB,gBAAA,GAAG,IAAI;AACP,aAAA,CAAC,CAAC;AACH,SAAA;KACD;AAEO,IAAA,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAmC,EAAA;AAC5E,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AACxC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;AACxC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;KAC5F;AAEO,IAAA,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAiC,EAAA;AACxE,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AACtC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;AACtC,QAAA,IAAI,GAAG;YAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;KAC1F;AAEO,IAAA,YAAY,CAAC,EACpB,MAAM,EACN,MAAM,EAAE,KAAK,GAAG,EAAE,EAClB,YAAY,EACZ,SAAS,EACT,WAAW,GACiB,EAAA;AAC5B,QAAA,MAAM,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,UAAU,CAAC,GAAG;AAC3F,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,UAAU,EAAE;SACjB,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,SAAA;AAED,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAI;YAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AAC7C,YAAA,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;;AAE9B,YAAA,EAAE,IAAI,EAAE,CAAC,KAAc,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;AAEpB,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AACvD,YAAA,IAAI,GAAG,YAAY,KAAK,CAAC,aAAa,EAAE;AACvC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACnC,MAAM,IAAI,GAAG,CAAG,EAAA,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAC;AAChC,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC3B,IAAI,KAAK,KAAK,SAAS,EAAE;AACxB,wBAAA,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E,wBAAA,GAAG,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AACtC,qBAAA;AACD,iBAAA;AACD,aAAA;AAAM,iBAAA;AACN,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;AACpD,gBAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5D,aAAA;AACD,SAAA;AACD,QAAA,IAAI,gBAAgB;AAAE,YAAA,UAAU,EAAE,CAAC;KACnC;AAEO,IAAA,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAA6B,EAAA;AAC5F,QAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AAChC,QAAA,IAAI,EAAE;AAAE,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;KACnF;IAEO,YAAY,GAAA;QACnB,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,QAAA,kBAAkB,CACjB,CAAC,EAAE,KAAK,EAAE,KAAI;YACb,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzF,IAAI,QAAQ,IAAI,CAAC,MAAM;gBAAE,OAAO;YAChC,mBAAmB,IAAI,KAAK,CAAC;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACvE,mBAAmB,GAAG,CAAC,CAAC;SACxB,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAC3B,CAAC;KACF;8GApPW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,g0BAFZ,CAAC,qBAAqB,EAAE,CAAC,0BAD1B,CAAgB,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAGd,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAAgB,cAAA,CAAA;AAC1B,oBAAA,SAAS,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACpC,iBAAA,CAAA;8BAqBkC,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIS,YAAY,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA;gBAIW,iBAAiB,EAAA,CAAA;sBAA1D,KAAK;uBAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAA;gBAIF,SAAS,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;gBAIE,KAAK,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;gBAIY,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAIK,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;gBAIO,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAIkB,uBAAuB,EAAA,CAAA;sBAAtE,KAAK;uBAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAA;gBAMD,gBAAgB,EAAA,CAAA;sBAAxD,KAAK;uBAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;gBAIF,QAAQ,EAAA,CAAA;sBAAxC,KAAK;uBAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;gBAIS,WAAW,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;gBAIa,kBAAkB,EAAA,CAAA;sBAA5D,KAAK;uBAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;gBAIM,kBAAkB,EAAA,CAAA;sBAA5D,KAAK;uBAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAA;gBAIL,OAAO,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;gBAIS,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAA;;;ACnK9B;;AAEG;;;;"}
1
+ {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/cannon/src/lib/physics.ts","../../../../libs/cannon/src/angular-three-cannon.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tDestroyRef,\n\tEmbeddedViewRef,\n\tSignal,\n\tafterNextRender,\n\tcomputed,\n\tinject,\n\tinput,\n\tsignal,\n\tuntracked,\n} from '@angular/core';\nimport {\n\tCannonWorkerAPI,\n\tCannonWorkerProps,\n\tCollideBeginEvent,\n\tCollideEndEvent,\n\tCollideEvent,\n\tRayhitEvent,\n\tRefs,\n\tSubscriptions,\n\tWorkerCollideBeginEvent,\n\tWorkerCollideEndEvent,\n\tWorkerCollideEvent,\n\tWorkerFrameMessage,\n\tWorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, injectStore } from 'angular-three';\nimport { injectAutoEffect } from 'ngxtension/auto-effect';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { InstancedMesh, Matrix4, Object3D, Quaternion, QuaternionTuple, Vector3 } from 'three';\n\nexport interface NgtcCannonWorkerEvents {\n\tcollide: WorkerCollideEvent;\n\tcollideBegin: WorkerCollideBeginEvent;\n\tcollideEnd: WorkerCollideEndEvent;\n\tframe: WorkerFrameMessage;\n\trayhit: WorkerRayhitEvent;\n}\n\nexport type NgtcCannonWorker = CannonWorkerAPI & {\n\ton: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;\n\tremoveAllListeners: () => void;\n};\n\nconst v = new Vector3();\nconst s = new Vector3(1, 1, 1);\nconst q = new Quaternion();\nconst m = new Matrix4();\n\nfunction apply(\n\tindex: number,\n\tpositions: ArrayLike<number>,\n\tquaternions: ArrayLike<number>,\n\tscale = s,\n\tobject?: Object3D,\n) {\n\tif (index !== undefined) {\n\t\tm.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions as QuaternionTuple, index * 4), scale);\n\t\tif (object) {\n\t\t\tobject.matrixAutoUpdate = false;\n\t\t\tobject.matrix.copy(m);\n\t\t}\n\t\treturn m;\n\t}\n\treturn m.identity();\n}\n\nfunction unique() {\n\tconst values: unknown[] = [];\n\treturn (value: unknown) => (values.includes(value) ? false : !!values.push(value));\n}\n\ntype NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\ntype NgtcCallbackByType<T extends { type: string }> = {\n\t[K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;\n\nexport type ScaleOverrides = Record<string, Vector3>;\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n\tisPaused?: boolean;\n\tmaxSubSteps?: number;\n\tshouldInvalidate?: boolean;\n\tstepSize?: number;\n}\n\nexport interface NgtcPhysicsApi {\n\tbodies: { [uuid: string]: number };\n\tevents: NgtcCannonEvents;\n\trefs: Refs;\n\tscaleOverrides: ScaleOverrides;\n\tsubscriptions: Subscriptions;\n\tworker: Signal<CannonWorkerAPI>;\n}\n\nconst defaultOptions: NgtcPhysicsInputs = {\n\tallowSleep: false,\n\taxisIndex: 0,\n\tbroadphase: 'Naive',\n\tdefaultContactMaterial: { contactEquationStiffness: 1e6 },\n\tfrictionGravity: null,\n\tgravity: [0, -9.81, 0],\n\tisPaused: false,\n\titerations: 5,\n\tmaxSubSteps: 10,\n\tquatNormalizeFast: false,\n\tquatNormalizeSkip: 0,\n\tshouldInvalidate: true,\n\tsize: 1000,\n\tsolver: 'GS',\n\tstepSize: 1 / 60,\n\ttolerance: 0.001,\n};\n\n@Component({\n\tselector: 'ngtc-physics',\n\tstandalone: true,\n\ttemplate: `\n\t\t<ng-content />\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtcPhysics {\n\tprivate autoEffect = injectAutoEffect();\n\tprivate store = injectStore();\n\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate invalidate = this.store.select('invalidate');\n\t// @ts-expect-error - worker is not nullable, and we don't want to use ! operator\n\tprivate worker = signal<CannonWorkerAPI>(null);\n\n\tapi: NgtcPhysicsApi = {\n\t\tbodies: {},\n\t\tevents: {},\n\t\trefs: {},\n\t\tscaleOverrides: {},\n\t\tsubscriptions: {},\n\t\tworker: this.worker.asReadonly(),\n\t};\n\n\tprivate ref?: EmbeddedViewRef<{ $implicit: NgtcPhysicsApi }>;\n\n\tconstructor() {\n\t\tafterNextRender(() => {\n\t\t\tthis.worker.set(new CannonWorkerAPI(this.options()));\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});\n\n\t\tlet timeSinceLastCalled = 0;\n\t\tinjectBeforeRender(({ delta }) => {\n\t\t\tconst [{ isPaused, maxSubSteps, stepSize }, worker] = [this.options(), this.worker()];\n\t\t\tif (isPaused || !worker || stepSize == null) return;\n\t\t\ttimeSinceLastCalled += delta;\n\t\t\tworker.step({ maxSubSteps, stepSize, timeSinceLastCalled });\n\t\t\ttimeSinceLastCalled = 0;\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tthis.ref?.destroy();\n\t\t});\n\t}\n\n\tprivate connectWorker() {\n\t\tthis.autoEffect(() => {\n\t\t\tconst worker = this.worker() as NgtcCannonWorker;\n\t\t\tif (!worker) return;\n\n\t\t\tworker.connect();\n\t\t\tworker.init();\n\n\t\t\tworker.on('collide', this.collideHandler.bind(this));\n\t\t\tworker.on('collideBegin', this.collideBeginHandler.bind(this));\n\t\t\tworker.on('collideEnd', this.collideEndHandler.bind(this));\n\t\t\tworker.on('frame', this.frameHandler.bind(this));\n\t\t\tworker.on('rayhit', this.rayhitHandler.bind(this));\n\n\t\t\treturn () => {\n\t\t\t\tworker.terminate();\n\t\t\t\tworker.removeAllListeners();\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate updateWorkerState(key: keyof NgtcPhysicsInputs) {\n\t\tconst computedValue = computed(() => this.options()[key]);\n\n\t\tthis.autoEffect(() => {\n\t\t\tconst [worker, value] = [untracked(this.worker), computedValue()];\n\t\t\t// @ts-expect-error - we know key is a valid key of CannonWorkerAPI\n\t\t\tworker[key] = value;\n\t\t});\n\t}\n\n\tprivate collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n\t\tconst { events, refs } = this.api;\n\t\tconst cb = events[target]?.collide;\n\t\tif (cb) {\n\t\t\tcb({ body: refs[body], contact: { bi: refs[bi], bj: refs[bj], ...contactRest }, target: refs[target], ...rest });\n\t\t}\n\t}\n\n\tprivate collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n\t\tconst { events, refs } = this.api;\n\t\tconst cbA = events[bodyA]?.collideBegin;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\t\tconst cbB = events[bodyB]?.collideBegin;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n\t}\n\n\tprivate collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n\t\tconst { events, refs } = this.api;\n\t\tconst cbA = events[bodyA]?.collideEnd;\n\t\tif (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\t\tconst cbB = events[bodyB]?.collideEnd;\n\t\tif (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n\t}\n\n\tprivate frameHandler({\n\t\tactive,\n\t\tbodies: uuids = [],\n\t\tobservations,\n\t\tpositions,\n\t\tquaternions,\n\t}: WorkerFrameMessage['data']) {\n\t\tconst [{ shouldInvalidate }, { bodies, subscriptions, refs, scaleOverrides }, invalidate] = [\n\t\t\tuntracked(this.options),\n\t\t\tthis.api,\n\t\t\tthis.invalidate(),\n\t\t];\n\t\tfor (let i = 0; i < uuids.length; i++) {\n\t\t\tbodies[uuids[i]] = i;\n\t\t}\n\t\tobservations.forEach(([id, value, type]) => {\n\t\t\tconst subscription = subscriptions[id] || {};\n\t\t\tconst cb = subscription[type];\n\t\t\t// @ts-expect-error - We clearly know the type of the callback, but typescript can't deal with it\n\t\t\tcb && cb(value);\n\t\t});\n\t\tif (!active) return;\n\t\tfor (const ref of Object.values(refs).filter(unique())) {\n\t\t\tif (ref instanceof InstancedMesh) {\n\t\t\t\tfor (let i = 0; i < ref.count; i++) {\n\t\t\t\t\tconst uuid = `${ref.uuid}/${i}`;\n\t\t\t\t\tconst index = bodies[uuid];\n\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\tref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n\t\t\t\t\t\tref.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst scale = scaleOverrides[ref.uuid] || ref.scale;\n\t\t\t\tapply(bodies[ref.uuid], positions, quaternions, scale, ref);\n\t\t\t}\n\t\t}\n\t\tif (shouldInvalidate) invalidate();\n\t}\n\n\tprivate rayhitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n\t\tconst { events, refs } = this.api;\n\t\tconst cb = events[uuid]?.rayhit;\n\t\tif (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/lib/physics.d.ts CHANGED
@@ -1,13 +1,17 @@
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';
4
- import * as THREE from 'three';
1
+ import { Signal } from '@angular/core';
2
+ import { CannonWorkerAPI, CannonWorkerProps, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, Refs, Subscriptions, WorkerCollideBeginEvent, WorkerCollideEndEvent, WorkerCollideEvent, WorkerFrameMessage, WorkerRayhitEvent } from '@pmndrs/cannon-worker-api';
3
+ import { Vector3 } 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;
5
+ export interface NgtcCannonWorkerEvents {
6
+ collide: WorkerCollideEvent;
7
+ collideBegin: WorkerCollideBeginEvent;
8
+ collideEnd: WorkerCollideEndEvent;
9
+ frame: WorkerFrameMessage;
10
+ rayhit: WorkerRayhitEvent;
11
+ }
12
+ export type NgtcCannonWorker = CannonWorkerAPI & {
13
+ on: <K extends keyof NgtcCannonWorkerEvents>(event: K, cb: (data: NgtcCannonWorkerEvents[K]['data']) => void) => void;
14
+ removeAllListeners: () => void;
11
15
  };
12
16
  type NgtcCannonEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
13
17
  type NgtcCallbackByType<T extends {
@@ -17,13 +21,15 @@ type NgtcCallbackByType<T extends {
17
21
  type: K;
18
22
  } ? (e: T) => void : never;
19
23
  };
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 = {
24
+ export type NgtcCannonEvents = Record<string, Partial<NgtcCallbackByType<NgtcCannonEvent>>>;
25
+ export type ScaleOverrides = Record<string, Vector3>;
26
+ export interface NgtcPhysicsInputs extends CannonWorkerProps {
27
+ isPaused?: boolean;
28
+ maxSubSteps?: number;
29
+ shouldInvalidate?: boolean;
30
+ stepSize?: number;
31
+ }
32
+ export interface NgtcPhysicsApi {
27
33
  bodies: {
28
34
  [uuid: string]: number;
29
35
  };
@@ -31,40 +37,17 @@ export type NgtcPhysicsApi = {
31
37
  refs: Refs;
32
38
  scaleOverrides: ScaleOverrides;
33
39
  subscriptions: Subscriptions;
34
- worker: CannonWorkerAPI;
35
- };
36
- export declare const injectNgtcPhysicsApi: {
37
- (): import("angular-three").NgtSignalStore<NgtcPhysicsApi>;
38
- (injectOptions: import("@angular/core").InjectOptions & {
39
- optional?: false | undefined;
40
- }): 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);
61
- private zone;
62
- private injector;
40
+ worker: Signal<CannonWorkerAPI>;
41
+ }
42
+ export declare class NgtcPhysics {
43
+ private autoEffect;
63
44
  private store;
45
+ options: import("@angular/core").InputSignalWithTransform<NgtcPhysicsInputs, "" | Partial<NgtcPhysicsInputs>>;
64
46
  private invalidate;
65
- api: import("angular-three").NgtSignalStore<NgtcPhysicsApi>;
66
47
  private worker;
67
- ngOnInit(): void;
48
+ api: NgtcPhysicsApi;
49
+ private ref?;
50
+ constructor();
68
51
  private connectWorker;
69
52
  private updateWorkerState;
70
53
  private collideHandler;
@@ -72,8 +55,7 @@ export declare class NgtcPhysics implements OnInit {
72
55
  private collideEndHandler;
73
56
  private frameHandler;
74
57
  private rayhitHandler;
75
- private beforeRender;
76
58
  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>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtcPhysics, "ngtc-physics", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
78
60
  }
79
61
  export {};