angular-three-cannon 1.0.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 (48) hide show
  1. package/README.md +7 -0
  2. package/debug/README.md +3 -0
  3. package/debug/index.d.ts +1 -0
  4. package/debug/lib/debug.d.ts +26 -0
  5. package/esm2020/angular-three-cannon.mjs +5 -0
  6. package/esm2020/debug/angular-three-cannon-debug.mjs +5 -0
  7. package/esm2020/debug/index.mjs +2 -0
  8. package/esm2020/debug/lib/debug.mjs +117 -0
  9. package/esm2020/index.mjs +4 -0
  10. package/esm2020/lib/physics.mjs +261 -0
  11. package/esm2020/lib/store.mjs +21 -0
  12. package/esm2020/lib/utils.mjs +47 -0
  13. package/esm2020/services/angular-three-cannon-services.mjs +5 -0
  14. package/esm2020/services/index.mjs +2 -0
  15. package/esm2020/services/lib/body.mjs +293 -0
  16. package/fesm2015/angular-three-cannon-debug.mjs +124 -0
  17. package/fesm2015/angular-three-cannon-debug.mjs.map +1 -0
  18. package/fesm2015/angular-three-cannon-services.mjs +299 -0
  19. package/fesm2015/angular-three-cannon-services.mjs.map +1 -0
  20. package/fesm2015/angular-three-cannon.mjs +333 -0
  21. package/fesm2015/angular-three-cannon.mjs.map +1 -0
  22. package/fesm2020/angular-three-cannon-debug.mjs +124 -0
  23. package/fesm2020/angular-three-cannon-debug.mjs.map +1 -0
  24. package/fesm2020/angular-three-cannon-services.mjs +300 -0
  25. package/fesm2020/angular-three-cannon-services.mjs.map +1 -0
  26. package/fesm2020/angular-three-cannon.mjs +331 -0
  27. package/fesm2020/angular-three-cannon.mjs.map +1 -0
  28. package/index.d.ts +3 -0
  29. package/lib/physics.d.ts +43 -0
  30. package/lib/store.d.ts +34 -0
  31. package/lib/utils.d.ts +16 -0
  32. package/package.json +56 -0
  33. package/plugin/README.md +11 -0
  34. package/plugin/generators.json +19 -0
  35. package/plugin/package.json +10 -0
  36. package/plugin/src/generators/init/compat.d.ts +2 -0
  37. package/plugin/src/generators/init/compat.js +6 -0
  38. package/plugin/src/generators/init/compat.js.map +1 -0
  39. package/plugin/src/generators/init/init.d.ts +5 -0
  40. package/plugin/src/generators/init/init.js +28 -0
  41. package/plugin/src/generators/init/init.js.map +1 -0
  42. package/plugin/src/generators/init/schema.json +7 -0
  43. package/plugin/src/index.d.ts +1 -0
  44. package/plugin/src/index.js +6 -0
  45. package/plugin/src/index.js.map +1 -0
  46. package/services/README.md +3 -0
  47. package/services/index.d.ts +1 -0
  48. package/services/lib/body.d.ts +80 -0
@@ -0,0 +1,331 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, inject, Component, Input } from '@angular/core';
3
+ import { CannonWorkerAPI } from '@pmndrs/cannon-worker-api';
4
+ import { NgtRxStore, NgtStore, injectBeforeRender } from 'angular-three';
5
+ import { filter } from 'rxjs';
6
+ import * as THREE from 'three';
7
+
8
+ class NgtcStore extends NgtRxStore {
9
+ initialize() {
10
+ super.initialize();
11
+ this.set({
12
+ bodies: {},
13
+ events: {},
14
+ refs: {},
15
+ scaleOverrides: {},
16
+ subscriptions: {},
17
+ });
18
+ }
19
+ }
20
+ NgtcStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
21
+ NgtcStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore, decorators: [{
23
+ type: Injectable
24
+ }] });
25
+
26
+ const v = new THREE.Vector3();
27
+ const s = new THREE.Vector3(1, 1, 1);
28
+ const q = new THREE.Quaternion();
29
+ const m = new THREE.Matrix4();
30
+ function apply(index, positions, quaternions, scale = s, object) {
31
+ if (index !== undefined) {
32
+ m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
33
+ if (object) {
34
+ object.matrixAutoUpdate = false;
35
+ object.matrix.copy(m);
36
+ }
37
+ return m;
38
+ }
39
+ return m.identity();
40
+ }
41
+ class NgtcPhysics extends NgtRxStore {
42
+ initialize() {
43
+ super.initialize();
44
+ this.set({
45
+ allowSleep: false,
46
+ axisIndex: 0,
47
+ broadphase: 'Naive',
48
+ defaultContactMaterial: { contactEquationStiffness: 1e6 },
49
+ frictionGravity: null,
50
+ gravity: [0, -9.81, 0],
51
+ isPaused: false,
52
+ iterations: 5,
53
+ maxSubSteps: 10,
54
+ quatNormalizeFast: false,
55
+ quatNormalizeSkip: 0,
56
+ shouldInvalidate: true,
57
+ size: 1000,
58
+ solver: 'GS',
59
+ stepSize: 1 / 60,
60
+ tolerance: 0.001,
61
+ });
62
+ }
63
+ set allowSleep(allowSleep) {
64
+ this.set({ allowSleep });
65
+ }
66
+ set axisIndex(axisIndex) {
67
+ this.set({ axisIndex });
68
+ }
69
+ set broadphase(broadphase) {
70
+ this.set({ broadphase });
71
+ }
72
+ set defaultContactMaterial(defaultContactMaterial) {
73
+ this.set({ defaultContactMaterial });
74
+ }
75
+ set frictionGravity(frictionGravity) {
76
+ this.set({ frictionGravity });
77
+ }
78
+ set gravity(gravity) {
79
+ this.set({ gravity });
80
+ }
81
+ set iterations(iterations) {
82
+ this.set({ iterations });
83
+ }
84
+ set quatNormalizeFast(quatNormalizeFast) {
85
+ this.set({ quatNormalizeFast });
86
+ }
87
+ set quatNormalizeSkip(quatNormalizeSkip) {
88
+ this.set({ quatNormalizeSkip });
89
+ }
90
+ set solver(solver) {
91
+ this.set({ solver });
92
+ }
93
+ set tolerance(tolerance) {
94
+ this.set({ tolerance });
95
+ }
96
+ set size(size) {
97
+ this.set({ size });
98
+ }
99
+ set isPaused(isPaused) {
100
+ this.set({ isPaused });
101
+ }
102
+ set maxSubSteps(maxSubSteps) {
103
+ this.set({ maxSubSteps });
104
+ }
105
+ set shouldInvalidate(shouldInvalidate) {
106
+ this.set({ shouldInvalidate });
107
+ }
108
+ set stepSize(stepSize) {
109
+ this.set({ stepSize });
110
+ }
111
+ constructor() {
112
+ super();
113
+ this.ngtStore = inject(NgtStore);
114
+ this.physicsStore = inject(NgtcStore);
115
+ let timeSinceLastCalled = 0;
116
+ injectBeforeRender(({ delta }) => {
117
+ const { isPaused, maxSubSteps, stepSize } = this.get();
118
+ const worker = this.physicsStore.get('worker');
119
+ if (isPaused || !worker)
120
+ return;
121
+ timeSinceLastCalled += delta;
122
+ worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize });
123
+ timeSinceLastCalled = 0;
124
+ });
125
+ }
126
+ ngOnInit() {
127
+ this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });
128
+ this.connectWorker();
129
+ this.updateWorkerProp('axisIndex');
130
+ this.updateWorkerProp('broadphase');
131
+ this.updateWorkerProp('gravity');
132
+ this.updateWorkerProp('iterations');
133
+ this.updateWorkerProp('tolerance');
134
+ }
135
+ ngOnDestroy() {
136
+ const worker = this.physicsStore.get('worker');
137
+ if (worker) {
138
+ worker.terminate();
139
+ worker.removeAllListeners();
140
+ }
141
+ super.ngOnDestroy();
142
+ }
143
+ connectWorker() {
144
+ this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {
145
+ const worker = this.physicsStore.get('worker');
146
+ if (worker) {
147
+ worker.connect();
148
+ worker.init();
149
+ worker.on('collide', this.collideHandler.bind(this));
150
+ worker.on('collideBegin', this.collideBeginHandler.bind(this));
151
+ worker.on('collideEnd', this.collideEndHandler.bind(this));
152
+ worker.on('frame', this.frameHandler.bind(this));
153
+ worker.on('rayhit', this.rayHitHandler.bind(this));
154
+ }
155
+ });
156
+ }
157
+ updateWorkerProp(prop) {
158
+ this.effect(this.select(prop), () => {
159
+ const value = this.get(prop);
160
+ const worker = this.physicsStore.get('worker');
161
+ if (worker)
162
+ worker[prop] = value;
163
+ });
164
+ }
165
+ collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
166
+ const { events, refs } = this.physicsStore.get();
167
+ const cb = events[target]?.collide;
168
+ if (cb) {
169
+ cb({
170
+ body: refs[body],
171
+ contact: { bi: refs[bi], bj: refs[bj], ...contactRest },
172
+ target: refs[target],
173
+ ...rest,
174
+ });
175
+ }
176
+ }
177
+ collideBeginHandler({ bodyA, bodyB }) {
178
+ const { events, refs } = this.physicsStore.get();
179
+ const cbA = events[bodyA]?.collideBegin;
180
+ if (cbA)
181
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });
182
+ const cbB = events[bodyB]?.collideBegin;
183
+ if (cbB)
184
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });
185
+ }
186
+ collideEndHandler({ bodyA, bodyB }) {
187
+ const { events, refs } = this.physicsStore.get();
188
+ const cbA = events[bodyA]?.collideEnd;
189
+ if (cbA)
190
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });
191
+ const cbB = events[bodyB]?.collideEnd;
192
+ if (cbB)
193
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });
194
+ }
195
+ frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {
196
+ const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();
197
+ const invalidate = this.ngtStore.get('invalidate');
198
+ const shouldInvalidate = this.get('shouldInvalidate');
199
+ for (let i = 0; i < uuids.length; i++) {
200
+ bodies[uuids[i]] = i;
201
+ }
202
+ observations.forEach(([id, value, type]) => {
203
+ const subscription = subscriptions[id] || {};
204
+ const cb = subscription[type];
205
+ // HELP: We clearly know the type of the callback, but typescript can't deal with it
206
+ cb && cb(value);
207
+ });
208
+ if (active) {
209
+ for (const ref of Object.values(refs)) {
210
+ if (ref instanceof THREE.InstancedMesh) {
211
+ for (let i = 0; i < ref.count; i++) {
212
+ const uuid = `${ref.uuid}/${i}`;
213
+ const index = bodies[uuid];
214
+ if (index !== undefined) {
215
+ ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));
216
+ ref.instanceMatrix.needsUpdate = true;
217
+ }
218
+ }
219
+ }
220
+ else {
221
+ const scale = scaleOverrides[ref.uuid] || ref.scale;
222
+ apply(bodies[ref.uuid], positions, quaternions, scale, ref);
223
+ }
224
+ }
225
+ if (shouldInvalidate)
226
+ invalidate();
227
+ }
228
+ }
229
+ rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
230
+ const { events, refs } = this.physicsStore.get();
231
+ const cb = events[uuid]?.rayhit;
232
+ if (cb)
233
+ cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
234
+ }
235
+ }
236
+ NgtcPhysics.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
237
+ NgtcPhysics.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance", size: "size", isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize" }, providers: [NgtcStore], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true });
238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcPhysics, decorators: [{
239
+ type: Component,
240
+ args: [{
241
+ selector: 'ngtc-physics',
242
+ standalone: true,
243
+ template: '<ng-content />',
244
+ providers: [NgtcStore],
245
+ }]
246
+ }], ctorParameters: function () { return []; }, propDecorators: { allowSleep: [{
247
+ type: Input
248
+ }], axisIndex: [{
249
+ type: Input
250
+ }], broadphase: [{
251
+ type: Input
252
+ }], defaultContactMaterial: [{
253
+ type: Input
254
+ }], frictionGravity: [{
255
+ type: Input
256
+ }], gravity: [{
257
+ type: Input
258
+ }], iterations: [{
259
+ type: Input
260
+ }], quatNormalizeFast: [{
261
+ type: Input
262
+ }], quatNormalizeSkip: [{
263
+ type: Input
264
+ }], solver: [{
265
+ type: Input
266
+ }], tolerance: [{
267
+ type: Input
268
+ }], size: [{
269
+ type: Input
270
+ }], isPaused: [{
271
+ type: Input
272
+ }], maxSubSteps: [{
273
+ type: Input
274
+ }], shouldInvalidate: [{
275
+ type: Input
276
+ }], stepSize: [{
277
+ type: Input
278
+ }] } });
279
+
280
+ class NgtcUtils {
281
+ static getUUID(ref, index) {
282
+ const suffix = index === undefined ? '' : `/${index}`;
283
+ if (typeof ref === 'function')
284
+ return null;
285
+ return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;
286
+ }
287
+ static subscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
288
+ return (callback) => {
289
+ const id = this.incrementingId++;
290
+ subscriptions[id] = { [type]: callback };
291
+ const uuid = this.getUUID(ref, index);
292
+ uuid && worker.subscribe({ props: { id, target, type }, uuid });
293
+ return () => {
294
+ delete subscriptions[id];
295
+ worker.unsubscribe({ props: id });
296
+ };
297
+ };
298
+ }
299
+ static prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {
300
+ object.userData = userData;
301
+ object.position.set(...position);
302
+ object.rotation.set(...rotation);
303
+ object.updateMatrix();
304
+ }
305
+ static setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {
306
+ events[uuid] = {
307
+ collide: onCollide,
308
+ collideBegin: onCollideBegin,
309
+ collideEnd: onCollideEnd,
310
+ };
311
+ }
312
+ static capitalize(str) {
313
+ return (str.charAt(0).toUpperCase() + str.slice(1));
314
+ }
315
+ static quaternionToRotation(callback) {
316
+ return (v) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray());
317
+ }
318
+ static makeTriplet(v) {
319
+ return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;
320
+ }
321
+ }
322
+ NgtcUtils.incrementingId = 0;
323
+ NgtcUtils.e = new THREE.Euler();
324
+ NgtcUtils.q = new THREE.Quaternion();
325
+
326
+ /**
327
+ * Generated bundle index. Do not edit.
328
+ */
329
+
330
+ export { NgtcPhysics, NgtcStore, NgtcUtils };
331
+ //# sourceMappingURL=angular-three-cannon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-three-cannon.mjs","sources":["../../../../libs/angular-three-cannon/src/lib/store.ts","../../../../libs/angular-three-cannon/src/lib/physics.ts","../../../../libs/angular-three-cannon/src/lib/utils.ts","../../../../libs/angular-three-cannon/src/angular-three-cannon.ts"],"sourcesContent":["import { NgtRxStore } from 'angular-three';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport type {\n CannonWorkerAPI,\n CannonWorkerProps,\n CollideBeginEvent,\n CollideEndEvent,\n CollideEvent,\n RayhitEvent,\n Refs,\n Subscriptions,\n} from '@pmndrs/cannon-worker-api';\n\nexport type NgtcEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;\nexport type NgtcCallbackByType<T extends { type: string }> = {\n [K in T['type']]?: T extends { type: K } ? (e: T) => void : never;\n};\n\nexport type NgtcEvents = {\n [uuid: string]: Partial<NgtcCallbackByType<NgtcEvent>>;\n};\n\nexport type NgtcScaleOverrides = { [uuid: string]: THREE.Vector3 };\n\nexport interface NgtcState {\n bodies: { [uuid: string]: number };\n events: NgtcEvents;\n refs: Refs;\n scaleOverrides: NgtcScaleOverrides;\n subscriptions: Subscriptions;\n worker: CannonWorkerAPI;\n init: (inputs: CannonWorkerProps) => void;\n}\n\n@Injectable()\nexport class NgtcStore extends NgtRxStore<NgtcState> implements OnDestroy {\n override initialize() {\n super.initialize();\n this.set({\n bodies: {},\n events: {},\n refs: {},\n scaleOverrides: {},\n subscriptions: {},\n });\n }\n}\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n CannonWorkerAPI,\n CannonWorkerProps,\n WorkerCollideBeginEvent,\n WorkerCollideEndEvent,\n WorkerCollideEvent,\n WorkerFrameMessage,\n WorkerRayhitEvent,\n} from '@pmndrs/cannon-worker-api';\nimport { injectBeforeRender, NgtAnyRecord, NgtRxStore, NgtStore } from 'angular-three';\nimport { filter } from 'rxjs';\nimport * as THREE from 'three';\nimport { NgtcStore } from './store';\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 if (index !== undefined) {\n m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);\n if (object) {\n object.matrixAutoUpdate = false;\n object.matrix.copy(m);\n }\n return m;\n }\n return m.identity();\n}\n\nexport interface NgtcPhysicsInputs extends CannonWorkerProps {\n isPaused?: boolean;\n maxSubSteps?: number;\n shouldInvalidate?: boolean;\n stepSize?: number;\n}\n\n@Component({\n selector: 'ngtc-physics',\n standalone: true,\n template: '<ng-content />',\n providers: [NgtcStore],\n})\nexport class NgtcPhysics extends NgtRxStore<NgtcPhysicsInputs> implements OnInit, OnDestroy {\n private readonly ngtStore = inject(NgtStore);\n private readonly physicsStore = inject(NgtcStore);\n\n override initialize() {\n super.initialize();\n this.set({\n allowSleep: false,\n axisIndex: 0,\n broadphase: 'Naive',\n defaultContactMaterial: { contactEquationStiffness: 1e6 },\n frictionGravity: null,\n gravity: [0, -9.81, 0],\n isPaused: false,\n iterations: 5,\n maxSubSteps: 10,\n quatNormalizeFast: false,\n quatNormalizeSkip: 0,\n shouldInvalidate: true,\n size: 1000,\n solver: 'GS',\n stepSize: 1 / 60,\n tolerance: 0.001,\n });\n }\n\n @Input() set allowSleep(allowSleep: NgtcPhysicsInputs['allowSleep']) {\n this.set({ allowSleep });\n }\n\n @Input() set axisIndex(axisIndex: NgtcPhysicsInputs['axisIndex']) {\n this.set({ axisIndex });\n }\n\n @Input() set broadphase(broadphase: NgtcPhysicsInputs['broadphase']) {\n this.set({ broadphase });\n }\n\n @Input() set defaultContactMaterial(defaultContactMaterial: NgtcPhysicsInputs['defaultContactMaterial']) {\n this.set({ defaultContactMaterial });\n }\n\n @Input() set frictionGravity(frictionGravity: NgtcPhysicsInputs['frictionGravity']) {\n this.set({ frictionGravity });\n }\n\n @Input() set gravity(gravity: NgtcPhysicsInputs['gravity']) {\n this.set({ gravity });\n }\n\n @Input() set iterations(iterations: NgtcPhysicsInputs['iterations']) {\n this.set({ iterations });\n }\n\n @Input() set quatNormalizeFast(quatNormalizeFast: NgtcPhysicsInputs['quatNormalizeFast']) {\n this.set({ quatNormalizeFast });\n }\n\n @Input() set quatNormalizeSkip(quatNormalizeSkip: NgtcPhysicsInputs['quatNormalizeSkip']) {\n this.set({ quatNormalizeSkip });\n }\n\n @Input() set solver(solver: NgtcPhysicsInputs['solver']) {\n this.set({ solver });\n }\n\n @Input() set tolerance(tolerance: NgtcPhysicsInputs['tolerance']) {\n this.set({ tolerance });\n }\n\n @Input() set size(size: NgtcPhysicsInputs['size']) {\n this.set({ size });\n }\n\n @Input() set isPaused(isPaused: NgtcPhysicsInputs['isPaused']) {\n this.set({ isPaused });\n }\n\n @Input() set maxSubSteps(maxSubSteps: NgtcPhysicsInputs['maxSubSteps']) {\n this.set({ maxSubSteps });\n }\n\n @Input() set shouldInvalidate(shouldInvalidate: NgtcPhysicsInputs['shouldInvalidate']) {\n this.set({ shouldInvalidate });\n }\n\n @Input() set stepSize(stepSize: NgtcPhysicsInputs['stepSize']) {\n this.set({ stepSize });\n }\n\n constructor() {\n super();\n let timeSinceLastCalled = 0;\n injectBeforeRender(({ delta }) => {\n const { isPaused, maxSubSteps, stepSize } = this.get();\n const worker = this.physicsStore.get('worker');\n if (isPaused || !worker) return;\n timeSinceLastCalled += delta;\n worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize! });\n timeSinceLastCalled = 0;\n });\n }\n\n ngOnInit() {\n this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });\n this.connectWorker();\n this.updateWorkerProp('axisIndex');\n this.updateWorkerProp('broadphase');\n this.updateWorkerProp('gravity');\n this.updateWorkerProp('iterations');\n this.updateWorkerProp('tolerance');\n }\n\n override ngOnDestroy() {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.terminate();\n (worker as unknown as { removeAllListeners: () => void }).removeAllListeners();\n }\n super.ngOnDestroy();\n }\n\n private connectWorker() {\n this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {\n const worker = this.physicsStore.get('worker');\n if (worker) {\n worker.connect();\n worker.init();\n\n type AnyFunction = (...args: any[]) => any;\n (worker as unknown as { on: AnyFunction }).on('collide', this.collideHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideBegin', this.collideBeginHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('collideEnd', this.collideEndHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('frame', this.frameHandler.bind(this));\n (worker as unknown as { on: AnyFunction }).on('rayhit', this.rayHitHandler.bind(this));\n }\n });\n }\n\n private updateWorkerProp(prop: keyof NgtcPhysicsInputs) {\n this.effect(this.select(prop), () => {\n const value = this.get(prop);\n const worker = this.physicsStore.get('worker');\n if (worker) (worker as NgtAnyRecord)[prop] = value;\n });\n }\n\n private collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }: WorkerCollideEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[target]?.collide;\n\n if (cb) {\n cb({\n body: refs[body],\n contact: { bi: refs[bi], bj: refs[bj], ...contactRest },\n target: refs[target],\n ...rest,\n });\n }\n }\n\n private collideBeginHandler({ bodyA, bodyB }: WorkerCollideBeginEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideBegin;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });\n\n const cbB = events[bodyB]?.collideBegin;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });\n }\n\n private collideEndHandler({ bodyA, bodyB }: WorkerCollideEndEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n\n const cbA = events[bodyA]?.collideEnd;\n if (cbA) cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });\n\n const cbB = events[bodyB]?.collideEnd;\n if (cbB) cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });\n }\n\n private frameHandler({\n active,\n bodies: uuids = [],\n observations,\n positions,\n quaternions,\n }: WorkerFrameMessage['data']) {\n const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();\n const invalidate = this.ngtStore.get('invalidate');\n const shouldInvalidate = this.get('shouldInvalidate');\n\n for (let i = 0; i < uuids.length; i++) {\n bodies[uuids[i]] = i;\n }\n\n observations.forEach(([id, value, type]) => {\n const subscription = subscriptions[id] || {};\n const cb = subscription[type];\n // HELP: We clearly know the type of the callback, but typescript can't deal with it\n cb && cb(value as never);\n });\n\n if (active) {\n for (const ref of Object.values(refs)) {\n if (ref instanceof THREE.InstancedMesh) {\n for (let i = 0; i < ref.count; i++) {\n const uuid = `${ref.uuid}/${i}`;\n const index = bodies[uuid];\n if (index !== undefined) {\n ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));\n ref.instanceMatrix.needsUpdate = true;\n }\n }\n } else {\n const scale = scaleOverrides[ref.uuid] || ref.scale;\n apply(bodies[ref.uuid], positions, quaternions, scale, ref);\n }\n }\n if (shouldInvalidate) invalidate();\n }\n }\n\n private rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }: WorkerRayhitEvent['data']) {\n const { events, refs } = this.physicsStore.get();\n const cb = events[uuid]?.rayhit;\n if (cb) cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });\n }\n}\n","import { NgtInjectedRef } from 'angular-three';\nimport type {\n BodyProps,\n CannonWorkerAPI,\n PropValue,\n Quad,\n SubscriptionName,\n Subscriptions,\n SubscriptionTarget,\n Triplet,\n} from '@pmndrs/cannon-worker-api';\nimport type { NgtcEvents } from './store';\nimport * as THREE from 'three';\n\nexport class NgtcUtils {\n static incrementingId = 0;\n static e = new THREE.Euler();\n static q = new THREE.Quaternion();\n\n static getUUID<TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n index?: number\n ): string | null {\n const suffix = index === undefined ? '' : `/${index}`;\n if (typeof ref === 'function') return null;\n return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;\n }\n\n static subscribe<T extends SubscriptionName, TObject extends THREE.Object3D = THREE.Object3D>(\n ref: NgtInjectedRef<TObject>,\n worker: CannonWorkerAPI,\n subscriptions: Subscriptions,\n type: T,\n index?: number,\n target: SubscriptionTarget = 'bodies'\n ) {\n return (callback: (value: PropValue<T>) => void) => {\n const id = this.incrementingId++;\n subscriptions[id] = { [type]: callback };\n const uuid = this.getUUID(ref, index);\n uuid && worker.subscribe({ props: { id, target, type }, uuid });\n return () => {\n delete subscriptions[id];\n worker.unsubscribe({ props: id });\n };\n };\n }\n\n static prepare(object: THREE.Object3D, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }: BodyProps) {\n object.userData = userData;\n object.position.set(...position);\n object.rotation.set(...rotation);\n object.updateMatrix();\n }\n\n static setupCollision(\n events: NgtcEvents,\n { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>,\n uuid: string\n ) {\n events[uuid] = {\n collide: onCollide,\n collideBegin: onCollideBegin,\n collideEnd: onCollideEnd,\n };\n }\n\n static capitalize<T extends string>(str: T): Capitalize<T> {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n }\n\n static quaternionToRotation(callback: (v: Triplet) => void) {\n return (v: Quad) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray() as Triplet);\n }\n\n static makeTriplet(v: THREE.Vector3 | Triplet): Triplet {\n return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './lib/physics';
2
+ export * from './lib/store';
3
+ export * from './lib/utils';
@@ -0,0 +1,43 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { CannonWorkerProps } from '@pmndrs/cannon-worker-api';
3
+ import { NgtRxStore } from 'angular-three';
4
+ import * as i0 from "@angular/core";
5
+ export interface NgtcPhysicsInputs extends CannonWorkerProps {
6
+ isPaused?: boolean;
7
+ maxSubSteps?: number;
8
+ shouldInvalidate?: boolean;
9
+ stepSize?: number;
10
+ }
11
+ export declare class NgtcPhysics extends NgtRxStore<NgtcPhysicsInputs> implements OnInit, OnDestroy {
12
+ private readonly ngtStore;
13
+ private readonly physicsStore;
14
+ initialize(): void;
15
+ set allowSleep(allowSleep: NgtcPhysicsInputs['allowSleep']);
16
+ set axisIndex(axisIndex: NgtcPhysicsInputs['axisIndex']);
17
+ set broadphase(broadphase: NgtcPhysicsInputs['broadphase']);
18
+ set defaultContactMaterial(defaultContactMaterial: NgtcPhysicsInputs['defaultContactMaterial']);
19
+ set frictionGravity(frictionGravity: NgtcPhysicsInputs['frictionGravity']);
20
+ set gravity(gravity: NgtcPhysicsInputs['gravity']);
21
+ set iterations(iterations: NgtcPhysicsInputs['iterations']);
22
+ set quatNormalizeFast(quatNormalizeFast: NgtcPhysicsInputs['quatNormalizeFast']);
23
+ set quatNormalizeSkip(quatNormalizeSkip: NgtcPhysicsInputs['quatNormalizeSkip']);
24
+ set solver(solver: NgtcPhysicsInputs['solver']);
25
+ set tolerance(tolerance: NgtcPhysicsInputs['tolerance']);
26
+ set size(size: NgtcPhysicsInputs['size']);
27
+ set isPaused(isPaused: NgtcPhysicsInputs['isPaused']);
28
+ set maxSubSteps(maxSubSteps: NgtcPhysicsInputs['maxSubSteps']);
29
+ set shouldInvalidate(shouldInvalidate: NgtcPhysicsInputs['shouldInvalidate']);
30
+ set stepSize(stepSize: NgtcPhysicsInputs['stepSize']);
31
+ constructor();
32
+ ngOnInit(): void;
33
+ ngOnDestroy(): void;
34
+ private connectWorker;
35
+ private updateWorkerProp;
36
+ private collideHandler;
37
+ private collideBeginHandler;
38
+ private collideEndHandler;
39
+ private frameHandler;
40
+ private rayHitHandler;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtcPhysics, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtcPhysics, "ngtc-physics", never, { "allowSleep": "allowSleep"; "axisIndex": "axisIndex"; "broadphase": "broadphase"; "defaultContactMaterial": "defaultContactMaterial"; "frictionGravity": "frictionGravity"; "gravity": "gravity"; "iterations": "iterations"; "quatNormalizeFast": "quatNormalizeFast"; "quatNormalizeSkip": "quatNormalizeSkip"; "solver": "solver"; "tolerance": "tolerance"; "size": "size"; "isPaused": "isPaused"; "maxSubSteps": "maxSubSteps"; "shouldInvalidate": "shouldInvalidate"; "stepSize": "stepSize"; }, {}, never, ["*"], true, never>;
43
+ }
package/lib/store.d.ts ADDED
@@ -0,0 +1,34 @@
1
+ import { NgtRxStore } from 'angular-three';
2
+ import { OnDestroy } from '@angular/core';
3
+ import type { CannonWorkerAPI, CannonWorkerProps, CollideBeginEvent, CollideEndEvent, CollideEvent, RayhitEvent, Refs, Subscriptions } from '@pmndrs/cannon-worker-api';
4
+ import * as i0 from "@angular/core";
5
+ export type NgtcEvent = CollideBeginEvent | CollideEndEvent | CollideEvent | RayhitEvent;
6
+ export type NgtcCallbackByType<T extends {
7
+ type: string;
8
+ }> = {
9
+ [K in T['type']]?: T extends {
10
+ type: K;
11
+ } ? (e: T) => void : never;
12
+ };
13
+ export type NgtcEvents = {
14
+ [uuid: string]: Partial<NgtcCallbackByType<NgtcEvent>>;
15
+ };
16
+ export type NgtcScaleOverrides = {
17
+ [uuid: string]: THREE.Vector3;
18
+ };
19
+ export interface NgtcState {
20
+ bodies: {
21
+ [uuid: string]: number;
22
+ };
23
+ events: NgtcEvents;
24
+ refs: Refs;
25
+ scaleOverrides: NgtcScaleOverrides;
26
+ subscriptions: Subscriptions;
27
+ worker: CannonWorkerAPI;
28
+ init: (inputs: CannonWorkerProps) => void;
29
+ }
30
+ export declare class NgtcStore extends NgtRxStore<NgtcState> implements OnDestroy {
31
+ initialize(): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtcStore, never>;
33
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgtcStore>;
34
+ }
package/lib/utils.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { NgtInjectedRef } from 'angular-three';
2
+ import type { BodyProps, CannonWorkerAPI, PropValue, Quad, SubscriptionName, Subscriptions, SubscriptionTarget, Triplet } from '@pmndrs/cannon-worker-api';
3
+ import type { NgtcEvents } from './store';
4
+ import * as THREE from 'three';
5
+ export declare class NgtcUtils {
6
+ static incrementingId: number;
7
+ static e: THREE.Euler;
8
+ static q: THREE.Quaternion;
9
+ static getUUID<TObject extends THREE.Object3D = THREE.Object3D>(ref: NgtInjectedRef<TObject>, index?: number): string | null;
10
+ static subscribe<T extends SubscriptionName, TObject extends THREE.Object3D = THREE.Object3D>(ref: NgtInjectedRef<TObject>, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
11
+ static prepare(object: THREE.Object3D, { position, rotation, userData }: BodyProps): void;
12
+ static setupCollision(events: NgtcEvents, { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>, uuid: string): void;
13
+ static capitalize<T extends string>(str: T): Capitalize<T>;
14
+ static quaternionToRotation(callback: (v: Triplet) => void): (v: Quad) => void;
15
+ static makeTriplet(v: THREE.Vector3 | Triplet): Triplet;
16
+ }
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "angular-three-cannon",
3
+ "version": "1.0.0",
4
+ "peerDependencies": {
5
+ "@angular/common": "^15.1.0",
6
+ "@angular/core": "^15.1.0",
7
+ "@pmndrs/cannon-worker-api": "^2.3.2",
8
+ "angular-three": "^1.0.0",
9
+ "cannon-es": "^0.20.0",
10
+ "cannon-es-debugger": "^1.0.0",
11
+ "three": "0.148.0",
12
+ "rxjs": "7.5.7"
13
+ },
14
+ "dependencies": {
15
+ "@nrwl/devkit": "^15.0.0",
16
+ "tslib": "^2.3.0"
17
+ },
18
+ "sideEffects": false,
19
+ "generators": "./plugin/generators.json",
20
+ "schematics": "./plugin/generators.json",
21
+ "module": "fesm2015/angular-three-cannon.mjs",
22
+ "es2020": "fesm2020/angular-three-cannon.mjs",
23
+ "esm2020": "esm2020/angular-three-cannon.mjs",
24
+ "fesm2020": "fesm2020/angular-three-cannon.mjs",
25
+ "fesm2015": "fesm2015/angular-three-cannon.mjs",
26
+ "typings": "index.d.ts",
27
+ "exports": {
28
+ "./package.json": {
29
+ "default": "./package.json"
30
+ },
31
+ ".": {
32
+ "types": "./index.d.ts",
33
+ "esm2020": "./esm2020/angular-three-cannon.mjs",
34
+ "es2020": "./fesm2020/angular-three-cannon.mjs",
35
+ "es2015": "./fesm2015/angular-three-cannon.mjs",
36
+ "node": "./fesm2015/angular-three-cannon.mjs",
37
+ "default": "./fesm2020/angular-three-cannon.mjs"
38
+ },
39
+ "./debug": {
40
+ "types": "./debug/index.d.ts",
41
+ "esm2020": "./esm2020/debug/angular-three-cannon-debug.mjs",
42
+ "es2020": "./fesm2020/angular-three-cannon-debug.mjs",
43
+ "es2015": "./fesm2015/angular-three-cannon-debug.mjs",
44
+ "node": "./fesm2015/angular-three-cannon-debug.mjs",
45
+ "default": "./fesm2020/angular-three-cannon-debug.mjs"
46
+ },
47
+ "./services": {
48
+ "types": "./services/index.d.ts",
49
+ "esm2020": "./esm2020/services/angular-three-cannon-services.mjs",
50
+ "es2020": "./fesm2020/angular-three-cannon-services.mjs",
51
+ "es2015": "./fesm2015/angular-three-cannon-services.mjs",
52
+ "node": "./fesm2015/angular-three-cannon-services.mjs",
53
+ "default": "./fesm2020/angular-three-cannon-services.mjs"
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,11 @@
1
+ # plugin
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build plugin` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test plugin` to execute the unit tests via [Jest](https://jestjs.io).
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "name": "angular-three-cannon-plugin",
4
+ "version": "0.0.1",
5
+ "generators": {
6
+ "init": {
7
+ "factory": "./src/generators/init/init",
8
+ "schema": "./src/generators/init/schema.json",
9
+ "description": "Init Angular Three Cannon"
10
+ }
11
+ },
12
+ "schematics": {
13
+ "ng-add": {
14
+ "factory": "./src/generators/init/compat",
15
+ "schema": "./src/generators/init/schema.json",
16
+ "description": "Add Angular Three Cannon"
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "type": "commonjs",
3
+ "peerDependencies": {
4
+ "nx": "15.6.1",
5
+ "tslib": "2.4.1"
6
+ },
7
+ "main": "./src/index.js",
8
+ "types": "./src/index.d.ts",
9
+ "version": "1.0.0"
10
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: (generatorOptions: any) => (tree: any, context: any) => Promise<any>;
2
+ export default _default;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nrwl/devkit");
4
+ const init_1 = require("./init");
5
+ exports.default = (0, devkit_1.convertNxGenerator)(init_1.default);
6
+ //# sourceMappingURL=compat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat.js","sourceRoot":"","sources":["../../../../../../../libs/plugin/src/generators/init/compat.ts"],"names":[],"mappings":";;AAAA,yCAAkD;AAClD,iCAA0B;AAE1B,kBAAe,IAAA,2BAAkB,EAAC,cAAI,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Tree } from '@nrwl/devkit';
2
+ export declare const ANGULAR_THREE_CANNON_VERSION = "^1.0.0";
3
+ export declare const CANNON_WORKER_API_VERSION = "^2.3.0";
4
+ export declare const CANNON_ES_VERSION = "^0.20.0";
5
+ export default function (tree: Tree): Promise<() => void>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CANNON_ES_VERSION = exports.CANNON_WORKER_API_VERSION = exports.ANGULAR_THREE_CANNON_VERSION = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nrwl/devkit");
6
+ exports.ANGULAR_THREE_CANNON_VERSION = '^1.0.0';
7
+ exports.CANNON_WORKER_API_VERSION = '^2.3.0';
8
+ exports.CANNON_ES_VERSION = '^0.20.0';
9
+ function default_1(tree) {
10
+ var _a, _b;
11
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
12
+ devkit_1.logger.log('Initializing Angular Three Cannon...');
13
+ const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
14
+ const version = ((_a = packageJson['dependencies']) === null || _a === void 0 ? void 0 : _a['angular-three-cannon']) ||
15
+ ((_b = packageJson['devDependencies']) === null || _b === void 0 ? void 0 : _b['angular-three-cannon']) ||
16
+ exports.ANGULAR_THREE_CANNON_VERSION;
17
+ (0, devkit_1.addDependenciesToPackageJson)(tree, {
18
+ 'angular-three-cannon': version,
19
+ '@pmndrs/cannon-worker-api': exports.CANNON_WORKER_API_VERSION,
20
+ 'cannon-es': exports.CANNON_ES_VERSION,
21
+ }, {});
22
+ return () => {
23
+ (0, devkit_1.installPackagesTask)(tree);
24
+ };
25
+ });
26
+ }
27
+ exports.default = default_1;
28
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../../libs/plugin/src/generators/init/init.ts"],"names":[],"mappings":";;;;AAAA,yCAAyG;AAE5F,QAAA,4BAA4B,GAAG,QAAQ,CAAC;AACxC,QAAA,yBAAyB,GAAG,QAAQ,CAAC;AACrC,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAE3C,mBAA+B,IAAU;;;QACrC,eAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEnD,MAAM,WAAW,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAEnD,MAAM,OAAO,GACT,CAAA,MAAA,WAAW,CAAC,cAAc,CAAC,0CAAG,sBAAsB,CAAC;aACrD,MAAA,WAAW,CAAC,iBAAiB,CAAC,0CAAG,sBAAsB,CAAC,CAAA;YACxD,oCAA4B,CAAC;QAEjC,IAAA,qCAA4B,EACxB,IAAI,EACJ;YACI,sBAAsB,EAAE,OAAO;YAC/B,2BAA2B,EAAE,iCAAyB;YACtD,WAAW,EAAE,yBAAiB;SACjC,EACD,EAAE,CACL,CAAC;QAEF,OAAO,GAAG,EAAE;YACR,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC;;CACL;AAvBD,4BAuBC"}