angular-three-rapier 4.0.0-next.97 → 4.0.0-next.99

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.
@@ -1,4 +1,4 @@
1
1
  import { Injector } from '@angular/core';
2
2
  import * as THREE from 'three';
3
3
  import { NgtrAttactorOptions } from './attractor';
4
- export declare function injectAttractorDebug(object: THREE.Object3D, options: () => NgtrAttactorOptions, injector?: Injector): void;
4
+ export declare function attractorDebug(object: THREE.Object3D, options: () => NgtrAttactorOptions, injector?: Injector): void;
@@ -1,15 +1,15 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, computed, effect, input, ElementRef, linkedSignal, untracked, Directive } from '@angular/core';
3
- import { injectStore, pick, injectBeforeRender, applyProps } from 'angular-three';
4
- import { NgtrPhysics, injectBeforePhysicsStep, COLLISION_GROUPS_HANDLER } from 'angular-three-rapier';
3
+ import { injectStore, pick, beforeRender, applyProps } from 'angular-three';
4
+ import { NgtrPhysics, beforePhysicsStep, COLLISION_GROUPS_HANDLER } from 'angular-three-rapier';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
6
  import * as THREE from 'three';
7
7
  import { assertInjector } from 'ngxtension/assert-injector';
8
8
  import { VertexNormalsHelper } from 'three-stdlib';
9
9
 
10
10
  const _v3 = new THREE.Vector3();
11
- function injectAttractorDebug(object, options, injector) {
12
- return assertInjector(injectAttractorDebug, injector, () => {
11
+ function attractorDebug(object, options, injector) {
12
+ return assertInjector(attractorDebug, injector, () => {
13
13
  const physics = inject(NgtrPhysics);
14
14
  const store = injectStore();
15
15
  const strength = pick(options, 'strength');
@@ -34,7 +34,7 @@ function injectAttractorDebug(object, options, injector) {
34
34
  }
35
35
  });
36
36
  });
37
- injectBeforeRender(() => {
37
+ beforeRender(() => {
38
38
  if (!physics['debug']())
39
39
  return;
40
40
  if (mesh) {
@@ -97,7 +97,7 @@ class NgtrAttractor {
97
97
  effect(() => {
98
98
  applyProps(this.objectRef.nativeElement, { position: this.position() });
99
99
  });
100
- injectBeforePhysicsStep((world) => {
100
+ beforePhysicsStep((world) => {
101
101
  const { strength, range, type, gravitationalConstant } = untracked(this.options);
102
102
  const collisionGroups = untracked(this.linkedCollisionGroups);
103
103
  world.bodies.forEach((body) => {
@@ -113,7 +113,7 @@ class NgtrAttractor {
113
113
  }
114
114
  });
115
115
  });
116
- injectAttractorDebug(this.objectRef.nativeElement, this.options);
116
+ attractorDebug(this.objectRef.nativeElement, this.options);
117
117
  }
118
118
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: NgtrAttractor, deps: [], target: i0.ɵɵFactoryTarget.Directive });
119
119
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: NgtrAttractor, isStandalone: true, selector: "ngt-object3D[attractor]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-rapier-addons.mjs","sources":["../../../../libs/rapier/addons/src/lib/attractor-debug.ts","../../../../libs/rapier/addons/src/lib/attractor.ts","../../../../libs/rapier/addons/src/angular-three-rapier-addons.ts"],"sourcesContent":["import { computed, effect, inject, Injector } from '@angular/core';\nimport { injectBeforeRender, injectStore, pick } from 'angular-three';\nimport { NgtrPhysics } from 'angular-three-rapier';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { VertexNormalsHelper } from 'three-stdlib';\nimport { NgtrAttactorOptions } from './attractor';\n\nconst _v3 = new THREE.Vector3();\n\nexport function injectAttractorDebug(object: THREE.Object3D, options: () => NgtrAttactorOptions, injector?: Injector) {\n\treturn assertInjector(injectAttractorDebug, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\t\tconst store = injectStore();\n\n\t\tconst strength = pick(options, 'strength');\n\t\tconst range = pick(options, 'range');\n\t\tconst color = computed(() => (strength() > 0 ? 0x0000ff : 0xff0000));\n\n\t\tlet mesh: THREE.Mesh;\n\t\tlet normalsHelper: VertexNormalsHelper;\n\n\t\teffect((onCleanup) => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tmesh = new THREE.Mesh(\n\t\t\t\tnew THREE.SphereGeometry(0.2, 6, 6),\n\t\t\t\tnew THREE.MeshBasicMaterial({ color: color(), wireframe: true }),\n\t\t\t);\n\n\t\t\tnormalsHelper = new VertexNormalsHelper(mesh, range(), color());\n\t\t\tnormalsHelper.frustumCulled = false;\n\n\t\t\tstore.snapshot.scene.add(mesh);\n\t\t\tstore.snapshot.scene.add(normalsHelper);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (mesh) {\n\t\t\t\t\tstore.snapshot.scene.remove(mesh);\n\t\t\t\t}\n\n\t\t\t\tif (normalsHelper) {\n\t\t\t\t\tstore.snapshot.scene.remove(normalsHelper);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tif (mesh) {\n\t\t\t\tconst worldPosition = object.getWorldPosition(_v3);\n\t\t\t\tmesh.position.copy(worldPosition);\n\t\t\t\tnormalsHelper?.update();\n\t\t\t}\n\t\t});\n\t});\n}\n","import { Directive, effect, ElementRef, inject, input, linkedSignal, untracked } from '@angular/core';\nimport { InteractionGroups, RigidBody } from '@dimforge/rapier3d-compat';\nimport { applyProps, NgtVector3, pick } from 'angular-three';\nimport { COLLISION_GROUPS_HANDLER, injectBeforePhysicsStep } from 'angular-three-rapier';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { injectAttractorDebug } from './attractor-debug';\n\nconst calcForceByType = {\n\tstatic: (s: number, m2: number, r: number, d: number, G: number) => s,\n\tlinear: (s: number, m2: number, r: number, d: number, G: number) => s * (d / r),\n\tnewtonian: (s: number, m2: number, r: number, d: number, G: number) => (G * s * m2) / Math.pow(d, 2),\n};\n\nconst _position = new THREE.Vector3();\nconst _vector3 = new THREE.Vector3();\n\nexport function applyAttractorForceOnRigidBody(\n\trigidBody: RigidBody,\n\t{\n\t\tobject,\n\t\tstrength,\n\t\trange,\n\t\tgravitationalConstant,\n\t\tcollisionGroups,\n\t\ttype,\n\t}: NgtrAttactorOptions & { object: THREE.Object3D },\n) {\n\tconst rbPosition = rigidBody.translation();\n\t_position.set(rbPosition.x, rbPosition.y, rbPosition.z);\n\n\tconst worldPosition = object.getWorldPosition(new THREE.Vector3());\n\n\tconst distance: number = worldPosition.distanceTo(_position);\n\n\tif (distance < range) {\n\t\tlet force = calcForceByType[type](strength, rigidBody.mass(), range, distance, gravitationalConstant);\n\n\t\t// Prevent wild forces when Attractors collide\n\t\tforce = force === Infinity ? strength : force;\n\n\t\t// Naively test if the rigidBody contains a collider in one of the collision groups\n\t\tlet isRigidBodyInCollisionGroup = collisionGroups === undefined;\n\t\tif (collisionGroups !== undefined) {\n\t\t\tfor (let i = 0; i < rigidBody.numColliders(); i++) {\n\t\t\t\tconst collider = rigidBody.collider(i);\n\t\t\t\tconst colliderCollisionGroups = collider.collisionGroups();\n\t\t\t\tif (\n\t\t\t\t\t((collisionGroups >> 16) & colliderCollisionGroups) != 0 &&\n\t\t\t\t\t((colliderCollisionGroups >> 16) & collisionGroups) != 0\n\t\t\t\t) {\n\t\t\t\t\tisRigidBodyInCollisionGroup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isRigidBodyInCollisionGroup) {\n\t\t\t_vector3.set(0, 0, 0).subVectors(worldPosition, _position).normalize().multiplyScalar(force);\n\n\t\t\trigidBody.applyImpulse(_vector3, true);\n\t\t}\n\t}\n}\n\nexport type NgtrAttractorGravityType = 'static' | 'linear' | 'newtonian';\nexport interface NgtrAttactorOptions {\n\t/**\n\t * The strength of the attractor.\n\t * Positive values attract, negative values repel.\n\t *\n\t * @defaultValue 1\n\t */\n\tstrength: number;\n\n\t/**\n\t * The range of the attractor. Will not affect objects outside of this range.\n\t *\n\t * @defaultValue 10\n\t * @min 0\n\t */\n\trange: number;\n\n\t/**\n\t * The type of gravity to use.\n\t * - static: The gravity is constant and does not change over time.\n\t * - linear: The gravity is linearly interpolated the closer the object is to the attractor.\n\t * - newtonian: The gravity is calculated using the newtonian gravity formula.\n\t * @defaultValue \"static\"\n\t */\n\ttype: NgtrAttractorGravityType;\n\n\t/**\n\t * The mass of the attractor. Used when type is `newtonian`.\n\t * @defaultValue 6.673e-11\n\t */\n\tgravitationalConstant: number;\n\n\t/**\n\t * The collision groups that this attractor will apply effects to. If a RigidBody contains one or more colliders that are in one of the mask group, it will be affected by this attractor.\n\t * If not specified, the attractor will apply effects to all RigidBodies.\n\t */\n\tcollisionGroups?: InteractionGroups;\n}\n\nconst defaultOptions: NgtrAttactorOptions = {\n\tstrength: 1,\n\trange: 10,\n\ttype: 'static',\n\tgravitationalConstant: 6.673e-11,\n};\n\n@Directive({\n\tselector: 'ngt-object3D[attractor]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (attractor: NgtrAttractor) => {\n\t\t\t\treturn () => (interactionGroups: InteractionGroups) => {\n\t\t\t\t\tattractor.linkedCollisionGroups.set(interactionGroups);\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrAttractor],\n\t\t},\n\t],\n})\nexport class NgtrAttractor {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tlinkedCollisionGroups = linkedSignal(this.collisionGroups);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tapplyProps(this.objectRef.nativeElement, { position: this.position() });\n\t\t});\n\n\t\tinjectBeforePhysicsStep((world) => {\n\t\t\tconst { strength, range, type, gravitationalConstant } = untracked(this.options);\n\t\t\tconst collisionGroups = untracked(this.linkedCollisionGroups);\n\t\t\tworld.bodies.forEach((body) => {\n\t\t\t\tif (body.isDynamic()) {\n\t\t\t\t\tapplyAttractorForceOnRigidBody(body, {\n\t\t\t\t\t\tobject: this.objectRef.nativeElement,\n\t\t\t\t\t\tstrength,\n\t\t\t\t\t\trange,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tgravitationalConstant,\n\t\t\t\t\t\tcollisionGroups,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tinjectAttractorDebug(this.objectRef.nativeElement, this.options);\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-rapier-addons.mjs","sources":["../../../../libs/rapier/addons/src/lib/attractor-debug.ts","../../../../libs/rapier/addons/src/lib/attractor.ts","../../../../libs/rapier/addons/src/angular-three-rapier-addons.ts"],"sourcesContent":["import { computed, effect, inject, Injector } from '@angular/core';\nimport { beforeRender, injectStore, pick } from 'angular-three';\nimport { NgtrPhysics } from 'angular-three-rapier';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport * as THREE from 'three';\nimport { VertexNormalsHelper } from 'three-stdlib';\nimport { NgtrAttactorOptions } from './attractor';\n\nconst _v3 = new THREE.Vector3();\n\nexport function attractorDebug(object: THREE.Object3D, options: () => NgtrAttactorOptions, injector?: Injector) {\n\treturn assertInjector(attractorDebug, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\t\tconst store = injectStore();\n\n\t\tconst strength = pick(options, 'strength');\n\t\tconst range = pick(options, 'range');\n\t\tconst color = computed(() => (strength() > 0 ? 0x0000ff : 0xff0000));\n\n\t\tlet mesh: THREE.Mesh;\n\t\tlet normalsHelper: VertexNormalsHelper;\n\n\t\teffect((onCleanup) => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tmesh = new THREE.Mesh(\n\t\t\t\tnew THREE.SphereGeometry(0.2, 6, 6),\n\t\t\t\tnew THREE.MeshBasicMaterial({ color: color(), wireframe: true }),\n\t\t\t);\n\n\t\t\tnormalsHelper = new VertexNormalsHelper(mesh, range(), color());\n\t\t\tnormalsHelper.frustumCulled = false;\n\n\t\t\tstore.snapshot.scene.add(mesh);\n\t\t\tstore.snapshot.scene.add(normalsHelper);\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (mesh) {\n\t\t\t\t\tstore.snapshot.scene.remove(mesh);\n\t\t\t\t}\n\n\t\t\t\tif (normalsHelper) {\n\t\t\t\t\tstore.snapshot.scene.remove(normalsHelper);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tbeforeRender(() => {\n\t\t\tif (!physics['debug']()) return;\n\n\t\t\tif (mesh) {\n\t\t\t\tconst worldPosition = object.getWorldPosition(_v3);\n\t\t\t\tmesh.position.copy(worldPosition);\n\t\t\t\tnormalsHelper?.update();\n\t\t\t}\n\t\t});\n\t});\n}\n","import { Directive, effect, ElementRef, inject, input, linkedSignal, untracked } from '@angular/core';\nimport { InteractionGroups, RigidBody } from '@dimforge/rapier3d-compat';\nimport { applyProps, NgtVector3, pick } from 'angular-three';\nimport { beforePhysicsStep, COLLISION_GROUPS_HANDLER } from 'angular-three-rapier';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { attractorDebug } from './attractor-debug';\n\nconst calcForceByType = {\n\tstatic: (s: number, m2: number, r: number, d: number, G: number) => s,\n\tlinear: (s: number, m2: number, r: number, d: number, G: number) => s * (d / r),\n\tnewtonian: (s: number, m2: number, r: number, d: number, G: number) => (G * s * m2) / Math.pow(d, 2),\n};\n\nconst _position = new THREE.Vector3();\nconst _vector3 = new THREE.Vector3();\n\nexport function applyAttractorForceOnRigidBody(\n\trigidBody: RigidBody,\n\t{\n\t\tobject,\n\t\tstrength,\n\t\trange,\n\t\tgravitationalConstant,\n\t\tcollisionGroups,\n\t\ttype,\n\t}: NgtrAttactorOptions & { object: THREE.Object3D },\n) {\n\tconst rbPosition = rigidBody.translation();\n\t_position.set(rbPosition.x, rbPosition.y, rbPosition.z);\n\n\tconst worldPosition = object.getWorldPosition(new THREE.Vector3());\n\n\tconst distance: number = worldPosition.distanceTo(_position);\n\n\tif (distance < range) {\n\t\tlet force = calcForceByType[type](strength, rigidBody.mass(), range, distance, gravitationalConstant);\n\n\t\t// Prevent wild forces when Attractors collide\n\t\tforce = force === Infinity ? strength : force;\n\n\t\t// Naively test if the rigidBody contains a collider in one of the collision groups\n\t\tlet isRigidBodyInCollisionGroup = collisionGroups === undefined;\n\t\tif (collisionGroups !== undefined) {\n\t\t\tfor (let i = 0; i < rigidBody.numColliders(); i++) {\n\t\t\t\tconst collider = rigidBody.collider(i);\n\t\t\t\tconst colliderCollisionGroups = collider.collisionGroups();\n\t\t\t\tif (\n\t\t\t\t\t((collisionGroups >> 16) & colliderCollisionGroups) != 0 &&\n\t\t\t\t\t((colliderCollisionGroups >> 16) & collisionGroups) != 0\n\t\t\t\t) {\n\t\t\t\t\tisRigidBodyInCollisionGroup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (isRigidBodyInCollisionGroup) {\n\t\t\t_vector3.set(0, 0, 0).subVectors(worldPosition, _position).normalize().multiplyScalar(force);\n\n\t\t\trigidBody.applyImpulse(_vector3, true);\n\t\t}\n\t}\n}\n\nexport type NgtrAttractorGravityType = 'static' | 'linear' | 'newtonian';\nexport interface NgtrAttactorOptions {\n\t/**\n\t * The strength of the attractor.\n\t * Positive values attract, negative values repel.\n\t *\n\t * @defaultValue 1\n\t */\n\tstrength: number;\n\n\t/**\n\t * The range of the attractor. Will not affect objects outside of this range.\n\t *\n\t * @defaultValue 10\n\t * @min 0\n\t */\n\trange: number;\n\n\t/**\n\t * The type of gravity to use.\n\t * - static: The gravity is constant and does not change over time.\n\t * - linear: The gravity is linearly interpolated the closer the object is to the attractor.\n\t * - newtonian: The gravity is calculated using the newtonian gravity formula.\n\t * @defaultValue \"static\"\n\t */\n\ttype: NgtrAttractorGravityType;\n\n\t/**\n\t * The mass of the attractor. Used when type is `newtonian`.\n\t * @defaultValue 6.673e-11\n\t */\n\tgravitationalConstant: number;\n\n\t/**\n\t * The collision groups that this attractor will apply effects to. If a RigidBody contains one or more colliders that are in one of the mask group, it will be affected by this attractor.\n\t * If not specified, the attractor will apply effects to all RigidBodies.\n\t */\n\tcollisionGroups?: InteractionGroups;\n}\n\nconst defaultOptions: NgtrAttactorOptions = {\n\tstrength: 1,\n\trange: 10,\n\ttype: 'static',\n\tgravitationalConstant: 6.673e-11,\n};\n\n@Directive({\n\tselector: 'ngt-object3D[attractor]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (attractor: NgtrAttractor) => {\n\t\t\t\treturn () => (interactionGroups: InteractionGroups) => {\n\t\t\t\t\tattractor.linkedCollisionGroups.set(interactionGroups);\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrAttractor],\n\t\t},\n\t],\n})\nexport class NgtrAttractor {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tlinkedCollisionGroups = linkedSignal(this.collisionGroups);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tapplyProps(this.objectRef.nativeElement, { position: this.position() });\n\t\t});\n\n\t\tbeforePhysicsStep((world) => {\n\t\t\tconst { strength, range, type, gravitationalConstant } = untracked(this.options);\n\t\t\tconst collisionGroups = untracked(this.linkedCollisionGroups);\n\t\t\tworld.bodies.forEach((body) => {\n\t\t\t\tif (body.isDynamic()) {\n\t\t\t\t\tapplyAttractorForceOnRigidBody(body, {\n\t\t\t\t\t\tobject: this.objectRef.nativeElement,\n\t\t\t\t\t\tstrength,\n\t\t\t\t\t\trange,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tgravitationalConstant,\n\t\t\t\t\t\tcollisionGroups,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tattractorDebug(this.objectRef.nativeElement, this.options);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, input, computed, inject, effect, Directive, viewChild, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, contentChild, TemplateRef, signal, untracked, DestroyRef, model, output, ElementRef, viewChildren } from '@angular/core';
3
3
  import { Vector3, Quaternion, EventQueue, ColliderDesc, ActiveEvents, RigidBodyDesc } from '@dimforge/rapier3d-compat';
4
- import { extend, injectBeforeRender, injectStore, is, pick, vector3, applyProps, getInstanceState, getEmitter, hasListener, resolveRef } from 'angular-three';
4
+ import { extend, beforeRender, injectStore, is, pick, vector3, applyProps, getInstanceState, getEmitter, hasListener, resolveRef } from 'angular-three';
5
5
  import { mergeInputs } from 'ngxtension/inject-inputs';
6
6
  import * as THREE from 'three';
7
7
  import { Group, LineSegments, LineBasicMaterial, Object3D } from 'three';
@@ -78,7 +78,7 @@ class NgtrDebug {
78
78
  lineSegmentsRef = viewChild.required('lineSegments');
79
79
  constructor() {
80
80
  extend({ Group, LineSegments, LineBasicMaterial });
81
- injectBeforeRender(() => {
81
+ beforeRender(() => {
82
82
  const worldSingleton = this.physics.worldSingleton();
83
83
  if (!worldSingleton)
84
84
  return;
@@ -1770,8 +1770,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
1770
1770
  }]
1771
1771
  }], ctorParameters: () => [] });
1772
1772
 
1773
- function injectImpulseJoint(bodyA, bodyB, { injector, data }) {
1774
- return assertInjector(injectImpulseJoint, injector, () => {
1773
+ function impulseJoint(bodyA, bodyB, { injector, data }) {
1774
+ return assertInjector(impulseJoint, injector, () => {
1775
1775
  const physics = inject(NgtrPhysics);
1776
1776
  const newJoint = computed(() => {
1777
1777
  const worldSingleton = physics.worldSingleton();
@@ -1816,7 +1816,7 @@ function createJoint(jointDataFn) {
1816
1816
  return null;
1817
1817
  return jointDataFn(rapier, untracked(dataFn));
1818
1818
  });
1819
- return injectImpulseJoint(bodyA, bodyB, { injector, data: jointData });
1819
+ return impulseJoint(bodyA, bodyB, { injector, data: jointData });
1820
1820
  });
1821
1821
  };
1822
1822
  }
@@ -1827,7 +1827,12 @@ function createJoint(jointDataFn) {
1827
1827
  *
1828
1828
  * @category Hooks - Joints
1829
1829
  */
1830
- const injectFixedJoint = createJoint((rapier, data) => rapier.JointData.fixed(vector3ToRapierVector(data.body1Anchor), quaternionToRapierQuaternion(data.body1LocalFrame), vector3ToRapierVector(data.body2Anchor), quaternionToRapierQuaternion(data.body2LocalFrame)));
1830
+ const fixedJoint = createJoint((rapier, data) => rapier.JointData.fixed(vector3ToRapierVector(data.body1Anchor), quaternionToRapierQuaternion(data.body1LocalFrame), vector3ToRapierVector(data.body2Anchor), quaternionToRapierQuaternion(data.body2LocalFrame)));
1831
+ /**
1832
+ * @deprecated Use `fixedJoint` instead. Will be removed in v5.0.0
1833
+ * @since v4.0.0
1834
+ */
1835
+ const injectFixedJoint = fixedJoint;
1831
1836
  /**
1832
1837
  * The spherical joint ensures that two points on the local-spaces of two rigid-bodies always coincide (it prevents any relative
1833
1838
  * translational motion at this points). This is typically used to simulate ragdolls arms, pendulums, etc.
@@ -1836,7 +1841,12 @@ const injectFixedJoint = createJoint((rapier, data) => rapier.JointData.fixed(ve
1836
1841
  *
1837
1842
  * @category Hooks - Joints
1838
1843
  */
1839
- const injectSphericalJoint = createJoint((rapier, data) => rapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)));
1844
+ const sphericalJoint = createJoint((rapier, data) => rapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)));
1845
+ /**
1846
+ * @deprecated Use `sphericalJoint` instead. Will be removed in v5.0.0
1847
+ * @since v4.0.0
1848
+ */
1849
+ const injectSphericalJoint = sphericalJoint;
1840
1850
  /**
1841
1851
  * The revolute joint prevents any relative movement between two rigid-bodies, except for relative
1842
1852
  * rotations along one axis. This is typically used to simulate wheels, fans, etc.
@@ -1844,7 +1854,7 @@ const injectSphericalJoint = createJoint((rapier, data) => rapier.JointData.sphe
1844
1854
  *
1845
1855
  * @category Hooks - Joints
1846
1856
  */
1847
- const injectRevoluteJoint = createJoint((rapier, data) => {
1857
+ const revoluteJoint = createJoint((rapier, data) => {
1848
1858
  const jointData = rapier.JointData.revolute(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor), vector3ToRapierVector(data.axis));
1849
1859
  if (data.limits) {
1850
1860
  jointData.limitsEnabled = true;
@@ -1852,6 +1862,11 @@ const injectRevoluteJoint = createJoint((rapier, data) => {
1852
1862
  }
1853
1863
  return jointData;
1854
1864
  });
1865
+ /**
1866
+ * @deprecated Use `revoluteJoint` instead. Will be removed in v5.0.0
1867
+ * @since v4.0.0
1868
+ */
1869
+ const injectRevoluteJoint = revoluteJoint;
1855
1870
  /**
1856
1871
  * The prismatic joint prevents any relative movement between two rigid-bodies, except for relative translations along one axis.
1857
1872
  * It is characterized by one local anchor as well as one local axis on each rigid-body. In 3D, an optional
@@ -1859,7 +1874,7 @@ const injectRevoluteJoint = createJoint((rapier, data) => {
1859
1874
  *
1860
1875
  * @category Hooks - Joints
1861
1876
  */
1862
- const injectPrismaticJoint = createJoint((rapier, data) => {
1877
+ const prismaticJoint = createJoint((rapier, data) => {
1863
1878
  const jointData = rapier.JointData.prismatic(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor), vector3ToRapierVector(data.axis));
1864
1879
  if (data.limits) {
1865
1880
  jointData.limitsEnabled = true;
@@ -1867,18 +1882,33 @@ const injectPrismaticJoint = createJoint((rapier, data) => {
1867
1882
  }
1868
1883
  return jointData;
1869
1884
  });
1885
+ /**
1886
+ * @deprecated Use `prismaticJoint` instead. Will be removed in v5.0.0
1887
+ * @since v4.0.0
1888
+ */
1889
+ const injectPrismaticJoint = prismaticJoint;
1870
1890
  /**
1871
1891
  * The rope joint limits the max distance between two bodies.
1872
1892
  * @category Hooks - Joints
1873
1893
  */
1874
- const injectRopeJoint = createJoint((rapier, data) => rapier.JointData.rope(data.length, vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)));
1894
+ const ropeJoint = createJoint((rapier, data) => rapier.JointData.rope(data.length, vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)));
1895
+ /**
1896
+ * @deprecated Use `ropeJoint` instead. Will be removed in v5.0.0
1897
+ * @since v4.0.0
1898
+ */
1899
+ const injectRopeJoint = ropeJoint;
1875
1900
  /**
1876
1901
  * The spring joint applies a force proportional to the distance between two objects.
1877
1902
  * @category Hooks - Joints
1878
1903
  */
1879
- const injectSpringJoint = createJoint((rapier, data) => {
1904
+ const springJoint = createJoint((rapier, data) => {
1880
1905
  return rapier.JointData.spring(data.restLength, data.stiffness, data.damping, vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor));
1881
1906
  });
1907
+ /**
1908
+ * @deprecated Use `springJoint` instead. Will be removed in v5.0.0
1909
+ * @since v4.0.0
1910
+ */
1911
+ const injectSpringJoint = springJoint;
1882
1912
 
1883
1913
  class NgtrMeshCollider {
1884
1914
  colliders = input.required({ alias: 'meshCollider' });
@@ -1940,8 +1970,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
1940
1970
  }]
1941
1971
  }], ctorParameters: () => [] });
1942
1972
 
1943
- function injectBeforePhysicsStep(callback, injector) {
1944
- return assertInjector(injectBeforePhysicsStep, injector, () => {
1973
+ function beforePhysicsStep(callback, injector) {
1974
+ return assertInjector(beforePhysicsStep, injector, () => {
1945
1975
  const physics = inject(NgtrPhysics);
1946
1976
  physics.beforeStepCallbacks.add(callback);
1947
1977
  inject(DestroyRef).onDestroy(() => {
@@ -1949,8 +1979,8 @@ function injectBeforePhysicsStep(callback, injector) {
1949
1979
  });
1950
1980
  });
1951
1981
  }
1952
- function injectAfterPhysicsStep(callback, injector) {
1953
- return assertInjector(injectAfterPhysicsStep, injector, () => {
1982
+ function afterPhysicsStep(callback, injector) {
1983
+ return assertInjector(afterPhysicsStep, injector, () => {
1954
1984
  const physics = inject(NgtrPhysics);
1955
1985
  physics.afterStepCallbacks.add(callback);
1956
1986
  inject(DestroyRef).onDestroy(() => {
@@ -1963,5 +1993,5 @@ function injectAfterPhysicsStep(callback, injector) {
1963
1993
  * Generated bundle index. Do not edit.
1964
1994
  */
1965
1995
 
1966
- export { COLLISION_GROUPS_HANDLER, NgtrAnyCollider, NgtrBallCollider, NgtrCapsuleCollider, NgtrConeCollider, NgtrConvexHullCollider, NgtrConvexMeshCollider, NgtrCuboidCollider, NgtrCylinderCollider, NgtrHeightfieldCollider, NgtrInstancedRigidBodies, NgtrInteractionGroups, NgtrMeshCollider, NgtrPhysics, NgtrPhysicsFallback, NgtrPolylineCollider, NgtrRigidBody, NgtrRoundConeCollider, NgtrRoundConvexHullCollider, NgtrRoundConvexMeshCollider, NgtrRoundCuboidCollider, NgtrRoundCylinderCollider, NgtrTrimeshCollider, injectAfterPhysicsStep, injectBeforePhysicsStep, injectFixedJoint, injectPrismaticJoint, injectRevoluteJoint, injectRopeJoint, injectSphericalJoint, injectSpringJoint, interactionGroups, rigidBodyDefaultOptions };
1996
+ export { COLLISION_GROUPS_HANDLER, NgtrAnyCollider, NgtrBallCollider, NgtrCapsuleCollider, NgtrConeCollider, NgtrConvexHullCollider, NgtrConvexMeshCollider, NgtrCuboidCollider, NgtrCylinderCollider, NgtrHeightfieldCollider, NgtrInstancedRigidBodies, NgtrInteractionGroups, NgtrMeshCollider, NgtrPhysics, NgtrPhysicsFallback, NgtrPolylineCollider, NgtrRigidBody, NgtrRoundConeCollider, NgtrRoundConvexHullCollider, NgtrRoundConvexMeshCollider, NgtrRoundCuboidCollider, NgtrRoundCylinderCollider, NgtrTrimeshCollider, afterPhysicsStep, beforePhysicsStep, fixedJoint, injectFixedJoint, injectPrismaticJoint, injectRevoluteJoint, injectRopeJoint, injectSphericalJoint, injectSpringJoint, interactionGroups, prismaticJoint, revoluteJoint, rigidBodyDefaultOptions, ropeJoint, sphericalJoint, springJoint };
1967
1997
  //# sourceMappingURL=angular-three-rapier.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/interaction-groups.ts","../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/lib/physics-step-callback.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import { computed, Directive, effect, inject, InjectionToken, input } from '@angular/core';\nimport { InteractionGroups } from '@dimforge/rapier3d-compat';\n\n/**\n * Calculates an InteractionGroup bitmask for use in the `collisionGroups` or `solverGroups`\n * properties of RigidBody or Collider components. The first argument represents a list of\n * groups the entity is in (expressed as numbers from 0 to 15). The second argument is a list\n * of groups that will be filtered against. When it is omitted, all groups are filtered against.\n *\n * @example\n * A RigidBody that is member of group 0 and will collide with everything from groups 0 and 1:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0], [0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will collide with everything else:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will not collide with anything:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1], [])} />\n * ```\n *\n * Please note that Rapier needs interaction filters to evaluate to true between _both_ colliding\n * entities for collision events to trigger.\n *\n * @param memberships Groups the collider is a member of. (Values can range from 0 to 15.)\n * @param filters Groups the interaction group should filter against. (Values can range from 0 to 15.)\n * @returns An InteractionGroup bitmask.\n */\nexport function interactionGroups(memberships: number | number[], filters?: number | number[]): InteractionGroups {\n\treturn (bitmask(memberships) << 16) + (filters !== undefined ? bitmask(filters) : 0b1111_1111_1111_1111);\n}\n\nfunction bitmask(groups: number | number[]): InteractionGroups {\n\treturn [groups].flat().reduce((acc, layer) => acc | (1 << layer), 0);\n}\n\nexport const COLLISION_GROUPS_HANDLER = new InjectionToken<\n\t() => undefined | ((interactionGroups: InteractionGroups) => void)\n>('COLLISION_GROUPS_HANDLER');\n\n@Directive({ selector: 'ngt-object3D[interactionGroups]' })\nexport class NgtrInteractionGroups {\n\tinputs = input.required<[number | number[], (number | number[])?]>({ alias: 'interactionGroups' });\n\tinteractionGroups = computed(() => {\n\t\tconst [memberships, filters] = this.inputs();\n\t\treturn interactionGroups(memberships, filters);\n\t});\n\n\tconstructor() {\n\t\tconst collisionGroupsHandlerFn = inject(COLLISION_GROUPS_HANDLER, { host: true, optional: true });\n\n\t\teffect(() => {\n\t\t\tif (!collisionGroupsHandlerFn) return;\n\t\t\tconst handler = collisionGroupsHandlerFn();\n\t\t\tif (!handler) return;\n\t\t\thandler(this.interactionGroups());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tviewChild,\n} from '@angular/core';\nimport { extend, injectBeforeRender } from 'angular-three';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, LineSegments } from 'three';\nimport { NgtrPhysics } from './physics';\n\n@Component({\n\tselector: 'ngtr-debug',\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" vertexColors />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tprivate physics = inject(NgtrPhysics);\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<THREE.LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial });\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst lineSegments = this.lineSegmentsRef().nativeElement;\n\t\t\tif (!lineSegments) return;\n\n\t\t\tconst buffers = worldSingleton.proxy.debugRender();\n\t\t\tlineSegments.geometry.setAttribute('position', new THREE.BufferAttribute(buffers.vertices, 3));\n\t\t\tlineSegments.geometry.setAttribute('color', new THREE.BufferAttribute(buffers.colors, 4));\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n@Directive({ selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, stepFn] = [this.type(), this.stepFn()];\n\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst updatePriority = this.updatePriority();\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import * as THREE from 'three';\n\nexport const _quaternion = new THREE.Quaternion();\nexport const _euler = new THREE.Euler();\nexport const _vector3 = new THREE.Vector3();\nexport const _object3d = new THREE.Object3D();\nexport const _matrix4 = new THREE.Matrix4();\nexport const _position = new THREE.Vector3();\nexport const _rotation = new THREE.Quaternion();\nexport const _scale = new THREE.Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { is, NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport * as THREE from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before.\n *\n * @returns A proxy and a reset function, so that the instance can created again\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\tproxy: SingletonClass;\n\treset: () => void;\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\n\treturn new RapierVector3(v.x, v.y, v.z);\n}\n\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: THREE.Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: THREE.BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: THREE.Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new THREE.Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new THREE.Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [\n\t\t\t\t\tclonedGeometry.attributes['position'].array as Float32Array,\n\t\t\t\t\tclonedGeometry.index?.array as Uint32Array,\n\t\t\t\t],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new THREE.Vector3() };\n}\n\nexport function createColliderOptions(\n\tobject: THREE.Object3D,\n\toptions: NgtrRigidBodyOptions,\n\tignoreMeshColliders = true,\n) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: THREE.Object3D) => {\n\t\tif (is.three<THREE.Mesh>(child, 'isMesh')) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4\n\t\t\t\t.copy(child.matrixWorld)\n\t\t\t\t.premultiply(invertedParentMatrixWorld)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new THREE.Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(child.geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } =\n\t\t\t\toptions;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallbackSet,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumAdditionalFrictionIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\tcontactNaturalFrequency: 30,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n@Directive({ selector: 'ng-template[rapierFallback]' })\nexport class NgtrPhysicsFallback {\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n@Component({\n\tselector: 'ngtr-physics',\n\ttemplate: `\n\t\t@let _rapierError = rapierError();\n\t\t@let _fallbackContent = fallbackContent();\n\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (_rapierError && _fallbackContent) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"_fallbackContent\" [ngTemplateOutletContext]=\"{ error: _rapierError }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected content = contentChild.required(TemplateRef);\n\tprotected fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numAdditionalFrictionIterations = pick(this.options, 'numAdditionalFrictionIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\tpaused = pick(this.options, 'paused');\n\tprotected debug = pick(this.options, 'debug');\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate vGravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\trapier = this.rapierConstruct.asReadonly();\n\n\tprotected ready = computed(() => !!this.rapier());\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.vGravity)));\n\t});\n\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\trigidBodyEvents: NgtrEventMap = new Map();\n\tcolliderEvents: NgtrEventMap = new Map();\n\tbeforeStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\tafterStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.vGravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numAdditionalFrictionIterations = this.numAdditionalFrictionIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression.\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = THREE.MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tworld.step(eventQueue);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as THREE.Vector3;\n\t\t\tlet r = rigidBody.rotation() as THREE.Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(\n\t\t\t\t\t\tpreviousState.position as THREE.Vector3,\n\t\t\t\t\t\trapierQuaternionToQuaternion(previousState.rotation),\n\t\t\t\t\t\tstate.scale,\n\t\t\t\t\t)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(\n\t\ttarget: NgtrCollisionSource,\n\t\tother: NgtrCollisionSource,\n\t): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tActiveEvents,\n\tCollider,\n\tColliderDesc,\n\tInteractionGroups,\n\tRigidBody,\n\tRigidBodyDesc,\n} from '@dimforge/rapier3d-compat';\nimport {\n\tapplyProps,\n\textend,\n\tgetEmitter,\n\tgetInstanceState,\n\thasListener,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { COLLISION_GROUPS_HANDLER } from './interaction-groups';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport type {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n@Directive({ selector: 'ngt-object3D[collider]' })\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tname = input<NgtThreeElements['ngt-object3D']['name']>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData, name] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t\tthis.name(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData, name: name || `${untracked(this.shape)}-${Date.now()}` };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'collider' });\n\t// NOTE: this will be typed by individual collider\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\tif (cloned.length === 0) return [];\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.y,\n\t\t\tthis.worldScale.z,\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.x,\n\t\t];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tprivate collider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst args = this.scaledArgs();\n\t\tif (!args.length) return null;\n\n\t\tconst [shape, rigidBody] = [this.shape(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new THREE.Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: THREE.Object3D,\n\t\trigidBodyObject?: THREE.Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: THREE.Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n@Component({\n\tselector: 'ngt-object3D[rigidBody]',\n\texportAs: 'rigidBody',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (rigidBody: NgtrRigidBody) => {\n\t\t\t\treturn () => {\n\t\t\t\t\tconst anyColliders = rigidBody.anyColliders();\n\t\t\t\t\tif (!anyColliders.length) return;\n\n\t\t\t\t\tconst colliders = anyColliders.map((anyCollider) => anyCollider['collider']);\n\t\t\t\t\treturn (interactionGroups: InteractionGroups) => {\n\t\t\t\t\t\tfor (const colliderFn of colliders) {\n\t\t\t\t\t\t\tconst collider = colliderFn();\n\t\t\t\t\t\t\tif (!collider) continue;\n\t\t\t\t\t\t\tcollider.setCollisionGroups(interactionGroups);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrRigidBody],\n\t\t},\n\t],\n})\nexport class NgtrRigidBody {\n\ttype = input.required({\n\t\talias: 'rigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tanyColliders = viewChildren(NgtrAnyCollider);\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and children\n\t\tconst [parent] = [\n\t\t\tobjectInstanceState.parent(),\n\t\t\tobjectInstanceState.nonObjects(),\n\t\t\tobjectInstanceState.objects(),\n\t\t];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: THREE.Matrix4) => void,\n\t\tgetMatrix?: (matrix: THREE.Matrix4) => THREE.Matrix4,\n\t\tworldScale?: THREE.Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: THREE.Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: THREE.Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport type {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\n// NOTE: this is ok to use here since we're not exporting this short-cut\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n@Directive({ selector: 'ngt-object3D[cuboidCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>({ alias: 'cuboidCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[capsuleCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>({ alias: 'capsuleCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[ballCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>({ alias: 'ballCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[convexHullCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>({ alias: 'convexHullCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexHull');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[heightfieldCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>({ alias: 'heightfieldCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[trimeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>({ alias: 'trimeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[polylineCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>({ alias: 'polylineCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundCuboidCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>({ alias: 'roundCuboidCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[cylinderCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>({ alias: 'cylinderCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundCylinderCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>({ alias: 'roundCylinderCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[coneCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>({ alias: 'coneCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConeCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>({ alias: 'roundConeCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[convexMeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>({ alias: 'convexMeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConvexHullCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>({ alias: 'roundConvexHullCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConvexMeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>({ alias: 'roundConvexMeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tgetInstanceState,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\nexport interface NgtrInstancedRigidBodyOptions {\n\tkey: string | number;\n\ttype?: NgtrRigidBodyType;\n\tposition?: NgtVector3;\n\trotation?: NgtEuler;\n\tscale?: NgtVector3;\n\tquaternion?: NgtQuaternion;\n\tuserData?: NgtThreeElements['ngt-object3D']['userData'];\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n@Component({\n\tselector: 'ngt-object3D[instancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[rigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tinstances = input.required({\n\t\talias: 'instancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\tprivate instanceWrapperRef = viewChild.required<ElementRef<THREE.Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst instanceState = getInstanceState(instanceWrapper);\n\t\tif (!instanceState) return null;\n\n\t\t// track object's children\n\t\tinstanceState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as THREE.InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as THREE.InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options' | 'position' | 'scale'> & {\n\t\t\t\t\tposition: NgtVector3;\n\t\t\t\t\tscale: NgtVector3;\n\t\t\t\t\toptions: Partial<NgtrRigidBodyOptions>;\n\t\t\t\t},\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectInstanceState.parent(), objectInstanceState.nonObjects()];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector, untracked } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction injectImpulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(injectImpulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams | (() => TJointParams) },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tlet dataFn = data as () => TJointParams;\n\n\t\t\tif (typeof data !== 'function') {\n\t\t\t\tdataFn = () => data;\n\t\t\t}\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, untracked(dataFn));\n\t\t\t});\n\n\t\t\treturn injectImpulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * A fixed joint ensures that two rigid-bodies don't move relative to each other.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @category Hooks - Joints\n */\nexport const injectFixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n\n/**\n * The spherical joint ensures that two points on the local-spaces of two rigid-bodies always coincide (it prevents any relative\n * translational motion at this points). This is typically used to simulate ragdolls arms, pendulums, etc.\n * They are characterized by one local anchor on each rigid-body. Each anchor represents the location of the\n * points that need to coincide on the local-space of each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectSphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n\n/**\n * The revolute joint prevents any relative movement between two rigid-bodies, except for relative\n * rotations along one axis. This is typically used to simulate wheels, fans, etc.\n * They are characterized by one local anchor as well as one local axis on each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectRevoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The prismatic joint prevents any relative movement between two rigid-bodies, except for relative translations along one axis.\n * It is characterized by one local anchor as well as one local axis on each rigid-body. In 3D, an optional\n * local tangent axis can be specified for each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const injectPrismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n\n/**\n * The rope joint limits the max distance between two bodies.\n * @category Hooks - Joints\n */\nexport const injectRopeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(\n\t\tdata.length,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t),\n);\n\n/**\n * The spring joint applies a force proportional to the distance between two objects.\n * @category Hooks - Joints\n */\nexport const injectSpringJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport type { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n@Component({\n\tselector: 'ngt-object3D[meshCollider]',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'meshCollider' });\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate rigidBody = inject(NgtrRigidBody);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectInstaceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstaceState) return [];\n\n\t\t// track object's children\n\t\tobjectInstaceState.nonObjects();\n\t\tobjectInstaceState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type { NgtrWorldStepCallback } from './types';\n\nexport function injectBeforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(injectBeforePhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.beforeStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.beforeStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\nexport function injectAfterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(injectAfterPhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.afterStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.afterStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-rapier.mjs","sources":["../../../../libs/rapier/src/lib/interaction-groups.ts","../../../../libs/rapier/src/lib/debug.ts","../../../../libs/rapier/src/lib/frame-stepper.ts","../../../../libs/rapier/src/lib/shared.ts","../../../../libs/rapier/src/lib/utils.ts","../../../../libs/rapier/src/lib/physics.ts","../../../../libs/rapier/src/lib/rigid-body.ts","../../../../libs/rapier/src/lib/colliders.ts","../../../../libs/rapier/src/lib/instanced-rigid-bodies.ts","../../../../libs/rapier/src/lib/joints.ts","../../../../libs/rapier/src/lib/mesh-collider.ts","../../../../libs/rapier/src/lib/physics-step-callback.ts","../../../../libs/rapier/src/angular-three-rapier.ts"],"sourcesContent":["import { computed, Directive, effect, inject, InjectionToken, input } from '@angular/core';\nimport { InteractionGroups } from '@dimforge/rapier3d-compat';\n\n/**\n * Calculates an InteractionGroup bitmask for use in the `collisionGroups` or `solverGroups`\n * properties of RigidBody or Collider components. The first argument represents a list of\n * groups the entity is in (expressed as numbers from 0 to 15). The second argument is a list\n * of groups that will be filtered against. When it is omitted, all groups are filtered against.\n *\n * @example\n * A RigidBody that is member of group 0 and will collide with everything from groups 0 and 1:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0], [0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will collide with everything else:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1])} />\n * ```\n *\n * A RigidBody that is member of groups 0 and 1 and will not collide with anything:\n *\n * ```tsx\n * <RigidBody collisionGroups={interactionGroups([0, 1], [])} />\n * ```\n *\n * Please note that Rapier needs interaction filters to evaluate to true between _both_ colliding\n * entities for collision events to trigger.\n *\n * @param memberships Groups the collider is a member of. (Values can range from 0 to 15.)\n * @param filters Groups the interaction group should filter against. (Values can range from 0 to 15.)\n * @returns An InteractionGroup bitmask.\n */\nexport function interactionGroups(memberships: number | number[], filters?: number | number[]): InteractionGroups {\n\treturn (bitmask(memberships) << 16) + (filters !== undefined ? bitmask(filters) : 0b1111_1111_1111_1111);\n}\n\nfunction bitmask(groups: number | number[]): InteractionGroups {\n\treturn [groups].flat().reduce((acc, layer) => acc | (1 << layer), 0);\n}\n\nexport const COLLISION_GROUPS_HANDLER = new InjectionToken<\n\t() => undefined | ((interactionGroups: InteractionGroups) => void)\n>('COLLISION_GROUPS_HANDLER');\n\n@Directive({ selector: 'ngt-object3D[interactionGroups]' })\nexport class NgtrInteractionGroups {\n\tinputs = input.required<[number | number[], (number | number[])?]>({ alias: 'interactionGroups' });\n\tinteractionGroups = computed(() => {\n\t\tconst [memberships, filters] = this.inputs();\n\t\treturn interactionGroups(memberships, filters);\n\t});\n\n\tconstructor() {\n\t\tconst collisionGroupsHandlerFn = inject(COLLISION_GROUPS_HANDLER, { host: true, optional: true });\n\n\t\teffect(() => {\n\t\t\tif (!collisionGroupsHandlerFn) return;\n\t\t\tconst handler = collisionGroupsHandlerFn();\n\t\t\tif (!handler) return;\n\t\t\thandler(this.interactionGroups());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tviewChild,\n} from '@angular/core';\nimport { beforeRender, extend } from 'angular-three';\nimport * as THREE from 'three';\nimport { Group, LineBasicMaterial, LineSegments } from 'three';\nimport { NgtrPhysics } from './physics';\n\n@Component({\n\tselector: 'ngtr-debug',\n\ttemplate: `\n\t\t<ngt-group>\n\t\t\t<ngt-line-segments #lineSegments [frustumCulled]=\"false\">\n\t\t\t\t<ngt-line-basic-material color=\"white\" vertexColors />\n\t\t\t\t<ngt-buffer-geometry />\n\t\t\t</ngt-line-segments>\n\t\t</ngt-group>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtrDebug {\n\tprivate physics = inject(NgtrPhysics);\n\tprivate lineSegmentsRef = viewChild.required<ElementRef<THREE.LineSegments>>('lineSegments');\n\n\tconstructor() {\n\t\textend({ Group, LineSegments, LineBasicMaterial });\n\n\t\tbeforeRender(() => {\n\t\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst lineSegments = this.lineSegmentsRef().nativeElement;\n\t\t\tif (!lineSegments) return;\n\n\t\t\tconst buffers = worldSingleton.proxy.debugRender();\n\t\t\tlineSegments.geometry.setAttribute('position', new THREE.BufferAttribute(buffers.vertices, 3));\n\t\t\tlineSegments.geometry.setAttribute('color', new THREE.BufferAttribute(buffers.colors, 4));\n\t\t});\n\t}\n}\n","import { Directive, effect, input } from '@angular/core';\nimport { injectStore } from 'angular-three';\nimport { NgtrPhysicsOptions } from './types';\n\n@Directive({ selector: 'ngtr-frame-stepper' })\nexport class NgtrFrameStepper {\n\tready = input(false);\n\tupdatePriority = input<number | undefined>(0);\n\tstepFn = input.required<(delta: number) => void>();\n\ttype = input.required<NgtrPhysicsOptions['updateLoop']>();\n\n\tconstructor() {\n\t\tconst store = injectStore();\n\n\t\teffect((onCleanup) => {\n\t\t\tconst ready = this.ready();\n\t\t\tif (!ready) return;\n\n\t\t\tconst [type, stepFn] = [this.type(), this.stepFn()];\n\n\t\t\tif (type === 'follow') {\n\t\t\t\tconst updatePriority = this.updatePriority();\n\t\t\t\tconst cleanup = store.snapshot.internal.subscribe(\n\t\t\t\t\t({ delta }) => {\n\t\t\t\t\t\tstepFn(delta);\n\t\t\t\t\t},\n\t\t\t\t\tupdatePriority,\n\t\t\t\t\tstore,\n\t\t\t\t);\n\t\t\t\tonCleanup(() => cleanup());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastFrame = 0;\n\t\t\tlet raf: ReturnType<typeof requestAnimationFrame> = 0;\n\t\t\tconst loop = () => {\n\t\t\t\tconst now = performance.now();\n\t\t\t\tconst delta = now - lastFrame;\n\t\t\t\traf = requestAnimationFrame(loop);\n\t\t\t\tstepFn(delta);\n\t\t\t\tlastFrame = now;\n\t\t\t};\n\n\t\t\traf = requestAnimationFrame(loop);\n\t\t\tonCleanup(() => cancelAnimationFrame(raf));\n\t\t});\n\t}\n}\n","import * as THREE from 'three';\n\nexport const _quaternion = new THREE.Quaternion();\nexport const _euler = new THREE.Euler();\nexport const _vector3 = new THREE.Vector3();\nexport const _object3d = new THREE.Object3D();\nexport const _matrix4 = new THREE.Matrix4();\nexport const _position = new THREE.Vector3();\nexport const _rotation = new THREE.Quaternion();\nexport const _scale = new THREE.Vector3();\n","import { Quaternion as RapierQuaternion, Vector3 as RapierVector3 } from '@dimforge/rapier3d-compat';\nimport { is, NgtEuler, NgtQuaternion, NgtVector3 } from 'angular-three';\nimport * as THREE from 'three';\nimport { mergeVertices } from 'three-stdlib';\nimport { _matrix4, _position, _quaternion, _rotation, _scale } from './shared';\nimport { NgtrColliderOptions, NgtrColliderShape, NgtrRigidBodyAutoCollider, NgtrRigidBodyOptions } from './types';\n\n/**\n * Creates a proxy that will create a singleton instance of the given class\n * when a property is accessed, and not before.\n *\n * @returns A proxy and a reset function, so that the instance can created again\n */\nexport const createSingletonProxy = <\n\tSingletonClass extends object,\n\tCreationFn extends () => SingletonClass = () => SingletonClass,\n>(\n\t/**\n\t * A function that returns a new instance of the class\n\t */\n\tcreateInstance: CreationFn,\n): {\n\tproxy: SingletonClass;\n\treset: () => void;\n\tset: (newInstance: SingletonClass) => void;\n} => {\n\tlet instance: SingletonClass | undefined;\n\n\tconst handler: ProxyHandler<SingletonClass> = {\n\t\tget(target, prop) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.get(instance!, prop);\n\t\t},\n\t\tset(target, prop, value) {\n\t\t\tif (!instance) {\n\t\t\t\tinstance = createInstance();\n\t\t\t}\n\t\t\treturn Reflect.set(instance!, prop, value);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy({} as SingletonClass, handler) as SingletonClass;\n\n\tconst reset = () => {\n\t\tinstance = undefined;\n\t};\n\n\tconst set = (newInstance: SingletonClass) => {\n\t\tinstance = newInstance;\n\t};\n\n\t/**\n\t * Return the proxy and a reset function\n\t */\n\treturn { proxy, reset, set };\n};\n\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\nexport function vector3ToRapierVector(v: NgtVector3) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierVector3(v[0], v[1], v[2]);\n\t}\n\n\tif (typeof v === 'number') {\n\t\treturn new RapierVector3(v, v, v);\n\t}\n\n\treturn new RapierVector3(v.x, v.y, v.z);\n}\n\nexport function quaternionToRapierQuaternion(v: NgtQuaternion) {\n\tif (Array.isArray(v)) {\n\t\treturn new RapierQuaternion(v[0], v[1], v[2], v[3]);\n\t}\n\n\treturn new RapierQuaternion(v.x, v.y, v.z, v.w);\n}\n\nfunction isChildOfMeshCollider(child: THREE.Mesh) {\n\tlet flag = false;\n\tchild.traverseAncestors((a) => {\n\t\tif (a.userData['ngtRapierType'] === 'MeshCollider') flag = true;\n\t});\n\treturn flag;\n}\n\nconst autoColliderMap = {\n\tcuboid: 'cuboid',\n\tball: 'ball',\n\thull: 'convexHull',\n\ttrimesh: 'trimesh',\n};\n\nfunction getColliderArgsFromGeometry(\n\tgeometry: THREE.BufferGeometry,\n\tcolliders: NgtrRigidBodyAutoCollider,\n): { args: unknown[]; offset: THREE.Vector3 } {\n\tswitch (colliders) {\n\t\tcase 'cuboid': {\n\t\t\tgeometry.computeBoundingBox();\n\t\t\tconst { boundingBox } = geometry;\n\t\t\tconst size = boundingBox!.getSize(new THREE.Vector3());\n\t\t\treturn {\n\t\t\t\targs: [size.x / 2, size.y / 2, size.z / 2],\n\t\t\t\toffset: boundingBox!.getCenter(new THREE.Vector3()),\n\t\t\t};\n\t\t}\n\n\t\tcase 'ball': {\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\tconst { boundingSphere } = geometry;\n\n\t\t\tconst radius = boundingSphere!.radius;\n\n\t\t\treturn {\n\t\t\t\targs: [radius],\n\t\t\t\toffset: boundingSphere!.center,\n\t\t\t};\n\t\t}\n\n\t\tcase 'trimesh': {\n\t\t\tconst clonedGeometry = geometry.index ? geometry.clone() : mergeVertices(geometry);\n\n\t\t\treturn {\n\t\t\t\targs: [\n\t\t\t\t\tclonedGeometry.attributes['position'].array as Float32Array,\n\t\t\t\t\tclonedGeometry.index?.array as Uint32Array,\n\t\t\t\t],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\n\t\tcase 'hull': {\n\t\t\tconst clonedGeometry = geometry.clone();\n\t\t\treturn {\n\t\t\t\targs: [clonedGeometry.attributes['position'].array as Float32Array],\n\t\t\t\toffset: new THREE.Vector3(),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn { args: [], offset: new THREE.Vector3() };\n}\n\nexport function createColliderOptions(\n\tobject: THREE.Object3D,\n\toptions: NgtrRigidBodyOptions,\n\tignoreMeshColliders = true,\n) {\n\tconst childColliderOptions: {\n\t\tcolliderOptions: NgtrColliderOptions;\n\t\targs: unknown[];\n\t\tshape: NgtrColliderShape;\n\t\trotation: NgtEuler;\n\t\tposition: NgtVector3;\n\t\tscale: NgtVector3;\n\t}[] = [];\n\tobject.updateWorldMatrix(true, false);\n\tconst invertedParentMatrixWorld = object.matrixWorld.clone().invert();\n\n\tconst colliderFromChild = (child: THREE.Object3D) => {\n\t\tif (is.three<THREE.Mesh>(child, 'isMesh')) {\n\t\t\tif (ignoreMeshColliders && isChildOfMeshCollider(child)) return;\n\n\t\t\tconst worldScale = child.getWorldScale(_scale);\n\t\t\tconst shape = autoColliderMap[options.colliders || 'cuboid'] as NgtrColliderShape;\n\t\t\tchild.updateWorldMatrix(true, false);\n\t\t\t_matrix4\n\t\t\t\t.copy(child.matrixWorld)\n\t\t\t\t.premultiply(invertedParentMatrixWorld)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tconst rotationEuler = new THREE.Euler().setFromQuaternion(_rotation, 'XYZ');\n\n\t\t\tconst { args, offset } = getColliderArgsFromGeometry(child.geometry, options.colliders || 'cuboid');\n\t\t\tconst { mass, linearDamping, angularDamping, canSleep, ccd, gravityScale, softCcdPrediction, ...rest } =\n\t\t\t\toptions;\n\n\t\t\tchildColliderOptions.push({\n\t\t\t\tcolliderOptions: rest,\n\t\t\t\targs,\n\t\t\t\tshape,\n\t\t\t\trotation: [rotationEuler.x, rotationEuler.y, rotationEuler.z],\n\t\t\t\tposition: [\n\t\t\t\t\t_position.x + offset.x * worldScale.x,\n\t\t\t\t\t_position.y + offset.y * worldScale.y,\n\t\t\t\t\t_position.z + offset.z * worldScale.z,\n\t\t\t\t],\n\t\t\t\tscale: [worldScale.x, worldScale.y, worldScale.z],\n\t\t\t});\n\t\t}\n\t};\n\n\tif (options.includeInvisible) {\n\t\tobject.traverse(colliderFromChild);\n\t} else {\n\t\tobject.traverseVisible(colliderFromChild);\n\t}\n\n\treturn childColliderOptions;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tDestroyRef,\n\tDirective,\n\teffect,\n\tinject,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tuntracked,\n} from '@angular/core';\nimport RAPIER, { ColliderHandle, EventQueue, Rotation, Vector, World } from '@dimforge/rapier3d-compat';\nimport { injectStore, pick, vector3 } from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { NgtrDebug } from './debug';\nimport { NgtrFrameStepper } from './frame-stepper';\nimport { _matrix4, _position, _rotation, _scale } from './shared';\nimport {\n\tNgtrColliderStateMap,\n\tNgtrCollisionPayload,\n\tNgtrCollisionSource,\n\tNgtrEventMap,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallbackSet,\n} from './types';\nimport { createSingletonProxy, rapierQuaternionToQuaternion } from './utils';\n\nconst defaultOptions: NgtrPhysicsOptions = {\n\tgravity: [0, -9.81, 0],\n\tallowedLinearError: 0.001,\n\tnumSolverIterations: 4,\n\tnumAdditionalFrictionIterations: 4,\n\tnumInternalPgsIterations: 1,\n\tpredictionDistance: 0.002,\n\tminIslandSize: 128,\n\tmaxCcdSubsteps: 1,\n\tcontactNaturalFrequency: 30,\n\tlengthUnit: 1,\n\tcolliders: 'cuboid',\n\tupdateLoop: 'follow',\n\tinterpolate: true,\n\tpaused: false,\n\ttimeStep: 1 / 60,\n\tdebug: false,\n};\n\n@Directive({ selector: 'ng-template[rapierFallback]' })\nexport class NgtrPhysicsFallback {\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n@Component({\n\tselector: 'ngtr-physics',\n\ttemplate: `\n\t\t@let _rapierError = rapierError();\n\t\t@let _fallbackContent = fallbackContent();\n\n\t\t@if (rapierConstruct()) {\n\t\t\t@if (debug()) {\n\t\t\t\t<ngtr-debug />\n\t\t\t}\n\n\t\t\t<ngtr-frame-stepper\n\t\t\t\t[ready]=\"ready()\"\n\t\t\t\t[stepFn]=\"step.bind(this)\"\n\t\t\t\t[type]=\"updateLoop()\"\n\t\t\t\t[updatePriority]=\"updatePriority()\"\n\t\t\t/>\n\n\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" />\n\t\t} @else if (_rapierError && _fallbackContent) {\n\t\t\t<ng-container [ngTemplateOutlet]=\"_fallbackContent\" [ngTemplateOutletContext]=\"{ error: _rapierError }\" />\n\t\t}\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrDebug, NgtrFrameStepper, NgTemplateOutlet],\n})\nexport class NgtrPhysics {\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprotected content = contentChild.required(TemplateRef);\n\tprotected fallbackContent = contentChild(NgtrPhysicsFallback, { read: TemplateRef });\n\n\tprotected updatePriority = pick(this.options, 'updatePriority');\n\tprotected updateLoop = pick(this.options, 'updateLoop');\n\n\tprivate numSolverIterations = pick(this.options, 'numSolverIterations');\n\tprivate numAdditionalFrictionIterations = pick(this.options, 'numAdditionalFrictionIterations');\n\tprivate numInternalPgsIterations = pick(this.options, 'numInternalPgsIterations');\n\tprivate allowedLinearError = pick(this.options, 'allowedLinearError');\n\tprivate minIslandSize = pick(this.options, 'minIslandSize');\n\tprivate maxCcdSubsteps = pick(this.options, 'maxCcdSubsteps');\n\tprivate predictionDistance = pick(this.options, 'predictionDistance');\n\tprivate contactNaturalFrequency = pick(this.options, 'contactNaturalFrequency');\n\tprivate lengthUnit = pick(this.options, 'lengthUnit');\n\tprivate timeStep = pick(this.options, 'timeStep');\n\tprivate interpolate = pick(this.options, 'interpolate');\n\n\tpaused = pick(this.options, 'paused');\n\tprotected debug = pick(this.options, 'debug');\n\tcolliders = pick(this.options, 'colliders');\n\n\tprivate vGravity = vector3(this.options, 'gravity');\n\n\tprivate store = injectStore();\n\n\tprotected rapierConstruct = signal<typeof RAPIER | null>(null);\n\tprotected rapierError = signal<string | null>(null);\n\trapier = this.rapierConstruct.asReadonly();\n\n\tprotected ready = computed(() => !!this.rapier());\n\tworldSingleton = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn createSingletonProxy<World>(() => new rapier.World(untracked(this.vGravity)));\n\t});\n\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\trigidBodyEvents: NgtrEventMap = new Map();\n\tcolliderEvents: NgtrEventMap = new Map();\n\tbeforeStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\tafterStepCallbacks: NgtrWorldStepCallbackSet = new Set();\n\n\tprivate eventQueue = computed(() => {\n\t\tconst rapier = this.rapier();\n\t\tif (!rapier) return null;\n\t\treturn new EventQueue(false);\n\t});\n\n\tprivate steppingState: {\n\t\taccumulator: number;\n\t\tpreviousState: Record<number, { position: Vector; rotation: Rotation }>;\n\t} = { accumulator: 0, previousState: {} };\n\n\tconstructor() {\n\t\timport('@dimforge/rapier3d-compat')\n\t\t\t.then((rapier) => rapier.init().then(() => rapier))\n\t\t\t.then(this.rapierConstruct.set.bind(this.rapierConstruct))\n\t\t\t.catch((err) => {\n\t\t\t\tconsole.error(`[NGT] Failed to load rapier3d-compat`, err);\n\t\t\t\tthis.rapierError.set(err?.message ?? err.toString());\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateWorldEffect();\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst world = this.worldSingleton();\n\t\t\tif (world) {\n\t\t\t\tworld.proxy.free();\n\t\t\t\tworld.reset();\n\t\t\t}\n\t\t});\n\t}\n\n\tstep(delta: number) {\n\t\tif (!this.paused()) {\n\t\t\tthis.internalStep(delta);\n\t\t}\n\t}\n\n\tprivate updateWorldEffect() {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tworld.proxy.gravity = this.vGravity();\n\t\tworld.proxy.integrationParameters.numSolverIterations = this.numSolverIterations();\n\t\tworld.proxy.integrationParameters.numAdditionalFrictionIterations = this.numAdditionalFrictionIterations();\n\t\tworld.proxy.integrationParameters.numInternalPgsIterations = this.numInternalPgsIterations();\n\t\tworld.proxy.integrationParameters.normalizedAllowedLinearError = this.allowedLinearError();\n\t\tworld.proxy.integrationParameters.minIslandSize = this.minIslandSize();\n\t\tworld.proxy.integrationParameters.maxCcdSubsteps = this.maxCcdSubsteps();\n\t\tworld.proxy.integrationParameters.normalizedPredictionDistance = this.predictionDistance();\n\t\tworld.proxy.integrationParameters.contact_natural_frequency = this.contactNaturalFrequency();\n\t\tworld.proxy.lengthUnit = this.lengthUnit();\n\t}\n\n\tprivate internalStep(delta: number) {\n\t\tconst worldSingleton = this.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst eventQueue = this.eventQueue();\n\t\tif (!eventQueue) return;\n\n\t\tconst world = worldSingleton.proxy;\n\t\tconst [timeStep, interpolate, paused] = [this.timeStep(), this.interpolate(), this.paused()];\n\n\t\t/* Check if the timestep is supposed to be variable. We'll do this here\n once so we don't have to string-check every frame. */\n\t\tconst timeStepVariable = timeStep === 'vary';\n\n\t\t/**\n\t\t * Fixed timeStep simulation progression.\n\t\t * @see https://gafferongames.com/post/fix_your_timestep/\n\t\t */\n\t\tconst clampedDelta = THREE.MathUtils.clamp(delta, 0, 0.5);\n\n\t\tconst stepWorld = (innerDelta: number) => {\n\t\t\t// Trigger beforeStep callbacks\n\t\t\tthis.beforeStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\n\t\t\tworld.timestep = innerDelta;\n\t\t\tworld.step(eventQueue);\n\n\t\t\t// Trigger afterStep callbacks\n\t\t\tthis.afterStepCallbacks.forEach((callback) => {\n\t\t\t\tcallback(world);\n\t\t\t});\n\t\t};\n\n\t\tif (timeStepVariable) {\n\t\t\tstepWorld(clampedDelta);\n\t\t} else {\n\t\t\t// don't step time forwards if paused\n\t\t\t// Increase accumulator\n\t\t\tthis.steppingState.accumulator += clampedDelta;\n\n\t\t\twhile (this.steppingState.accumulator >= timeStep) {\n\t\t\t\t// Set up previous state\n\t\t\t\t// needed for accurate interpolations if the world steps more than once\n\t\t\t\tif (interpolate) {\n\t\t\t\t\tthis.steppingState.previousState = {};\n\t\t\t\t\tworld.forEachRigidBody((body) => {\n\t\t\t\t\t\tthis.steppingState.previousState[body.handle] = {\n\t\t\t\t\t\t\tposition: body.translation(),\n\t\t\t\t\t\t\trotation: body.rotation(),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstepWorld(timeStep);\n\t\t\t\tthis.steppingState.accumulator -= timeStep;\n\t\t\t}\n\t\t}\n\n\t\tconst interpolationAlpha =\n\t\t\ttimeStepVariable || !interpolate || paused ? 1 : this.steppingState.accumulator / timeStep;\n\n\t\t// Update meshes\n\t\tthis.rigidBodyStates.forEach((state, handle) => {\n\t\t\tconst rigidBody = world.getRigidBody(handle);\n\n\t\t\tconst events = this.rigidBodyEvents.get(handle);\n\t\t\tif (events?.onSleep || events?.onWake) {\n\t\t\t\tif (rigidBody.isSleeping() && !state.isSleeping) events?.onSleep?.();\n\t\t\t\tif (!rigidBody.isSleeping() && state.isSleeping) events?.onWake?.();\n\t\t\t\tstate.isSleeping = rigidBody.isSleeping();\n\t\t\t}\n\n\t\t\tif (!rigidBody || (rigidBody.isSleeping() && !('isInstancedMesh' in state.object)) || !state.setMatrix) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// New states\n\t\t\tlet t = rigidBody.translation() as THREE.Vector3;\n\t\t\tlet r = rigidBody.rotation() as THREE.Quaternion;\n\n\t\t\tlet previousState = this.steppingState.previousState[handle];\n\n\t\t\tif (previousState) {\n\t\t\t\t// Get previous simulated world position\n\t\t\t\t_matrix4\n\t\t\t\t\t.compose(\n\t\t\t\t\t\tpreviousState.position as THREE.Vector3,\n\t\t\t\t\t\trapierQuaternionToQuaternion(previousState.rotation),\n\t\t\t\t\t\tstate.scale,\n\t\t\t\t\t)\n\t\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\t\t// Apply previous tick position\n\t\t\t\tif (state.meshType == 'mesh') {\n\t\t\t\t\tstate.object.position.copy(_position);\n\t\t\t\t\tstate.object.quaternion.copy(_rotation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Get new position\n\t\t\t_matrix4\n\t\t\t\t.compose(t, rapierQuaternionToQuaternion(r), state.scale)\n\t\t\t\t.premultiply(state.invertedWorldMatrix)\n\t\t\t\t.decompose(_position, _rotation, _scale);\n\n\t\t\tif (state.meshType == 'instancedMesh') {\n\t\t\t\tstate.setMatrix(_matrix4);\n\t\t\t} else {\n\t\t\t\t// Interpolate to new position\n\t\t\t\tstate.object.position.lerp(_position, interpolationAlpha);\n\t\t\t\tstate.object.quaternion.slerp(_rotation, interpolationAlpha);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainCollisionEvents((handle1, handle2, started) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(handle1);\n\t\t\tconst source2 = this.getSourceFromColliderHandle(handle2);\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tif (started) {\n\t\t\t\tworld.contactPair(source1.collider.object, source2.collider.object, (manifold, flipped) => {\n\t\t\t\t\t/* RigidBody events */\n\t\t\t\t\tsource1.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.rigidBody.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\n\t\t\t\t\t/* Collider events */\n\t\t\t\t\tsource1.collider.events?.onCollisionEnter?.({ ...collisionPayload1, manifold, flipped });\n\t\t\t\t\tsource2.collider.events?.onCollisionEnter?.({ ...collisionPayload2, manifold, flipped });\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onCollisionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onCollisionExit?.(collisionPayload2);\n\t\t\t}\n\n\t\t\t// Sensor Intersections\n\t\t\tif (started) {\n\t\t\t\tif (world.intersectionPair(source1.collider.object, source2.collider.object)) {\n\t\t\t\t\tsource1.rigidBody.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.rigidBody.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t\tsource1.collider.events?.onIntersectionEnter?.(collisionPayload1);\n\t\t\t\t\tsource2.collider.events?.onIntersectionEnter?.(collisionPayload2);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource1.rigidBody.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.rigidBody.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t\tsource1.collider.events?.onIntersectionExit?.(collisionPayload1);\n\t\t\t\tsource2.collider.events?.onIntersectionExit?.(collisionPayload2);\n\t\t\t}\n\t\t});\n\n\t\teventQueue.drainContactForceEvents((event) => {\n\t\t\tconst source1 = this.getSourceFromColliderHandle(event.collider1());\n\t\t\tconst source2 = this.getSourceFromColliderHandle(event.collider2());\n\n\t\t\t// Collision Events\n\t\t\tif (!source1?.collider.object || !source2?.collider.object) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst collisionPayload1 = this.getCollisionPayloadFromSource(source1, source2);\n\t\t\tconst collisionPayload2 = this.getCollisionPayloadFromSource(source2, source1);\n\n\t\t\tsource1.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.rigidBody.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource1.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload1,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\n\t\t\tsource2.collider.events?.onContactForce?.({\n\t\t\t\t...collisionPayload2,\n\t\t\t\ttotalForce: event.totalForce(),\n\t\t\t\ttotalForceMagnitude: event.totalForceMagnitude(),\n\t\t\t\tmaxForceDirection: event.maxForceDirection(),\n\t\t\t\tmaxForceMagnitude: event.maxForceMagnitude(),\n\t\t\t});\n\t\t});\n\n\t\tworld.forEachActiveRigidBody(() => {\n\t\t\tthis.store.snapshot.invalidate();\n\t\t});\n\t}\n\n\tprivate getSourceFromColliderHandle(handle: ColliderHandle) {\n\t\tconst world = this.worldSingleton();\n\t\tif (!world) return;\n\n\t\tconst collider = world.proxy.getCollider(handle);\n\t\tconst colEvents = this.colliderEvents.get(handle);\n\t\tconst colliderState = this.colliderStates.get(handle);\n\n\t\tconst rigidBodyHandle = collider.parent()?.handle;\n\t\tconst rigidBody = rigidBodyHandle !== undefined ? world.proxy.getRigidBody(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyEvents =\n\t\t\trigidBody && rigidBodyHandle !== undefined ? this.rigidBodyEvents.get(rigidBodyHandle) : undefined;\n\t\tconst rigidBodyState = rigidBodyHandle !== undefined ? this.rigidBodyStates.get(rigidBodyHandle) : undefined;\n\n\t\treturn {\n\t\t\tcollider: { object: collider, events: colEvents, state: colliderState },\n\t\t\trigidBody: { object: rigidBody, events: rigidBodyEvents, state: rigidBodyState },\n\t\t} as NgtrCollisionSource;\n\t}\n\n\tprivate getCollisionPayloadFromSource(\n\t\ttarget: NgtrCollisionSource,\n\t\tother: NgtrCollisionSource,\n\t): NgtrCollisionPayload {\n\t\treturn {\n\t\t\ttarget: {\n\t\t\t\trigidBody: target.rigidBody.object,\n\t\t\t\tcollider: target.collider.object,\n\t\t\t\tcolliderObject: target.collider.state?.object,\n\t\t\t\trigidBodyObject: target.rigidBody.state?.object,\n\t\t\t},\n\t\t\tother: {\n\t\t\t\trigidBody: other.rigidBody.object,\n\t\t\t\tcollider: other.collider.object,\n\t\t\t\tcolliderObject: other.collider.state?.object,\n\t\t\t\trigidBodyObject: other.rigidBody.state?.object,\n\t\t\t},\n\t\t};\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tmodel,\n\toutput,\n\tuntracked,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tActiveEvents,\n\tCollider,\n\tColliderDesc,\n\tInteractionGroups,\n\tRigidBody,\n\tRigidBodyDesc,\n} from '@dimforge/rapier3d-compat';\nimport {\n\tapplyProps,\n\textend,\n\tgetEmitter,\n\tgetInstanceState,\n\thasListener,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { COLLISION_GROUPS_HANDLER } from './interaction-groups';\nimport { NgtrPhysics } from './physics';\nimport { _matrix4, _position, _rotation, _scale, _vector3 } from './shared';\nimport type {\n\tNgtrColliderOptions,\n\tNgtrColliderShape,\n\tNgtrColliderState,\n\tNgtrCollisionEnterPayload,\n\tNgtrCollisionExitPayload,\n\tNgtrContactForcePayload,\n\tNgtrIntersectionEnterPayload,\n\tNgtrIntersectionExitPayload,\n\tNgtrRigidBodyOptions,\n\tNgtrRigidBodyState,\n\tNgtrRigidBodyType,\n} from './types';\nimport { createColliderOptions } from './utils';\n\nconst colliderDefaultOptions: NgtrColliderOptions = {\n\tcontactSkin: 0,\n};\n\n@Directive({ selector: 'ngt-object3D[collider]' })\nexport class NgtrAnyCollider {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tname = input<NgtThreeElements['ngt-object3D']['name']>();\n\toptions = input(colliderDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData, name] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t\tthis.name(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData, name: name || `${untracked(this.shape)}-${Date.now()}` };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\t// TODO: change this to input required when Angular allows setting hostDirective input\n\tshape = model<NgtrColliderShape | undefined>(undefined, { alias: 'collider' });\n\t// NOTE: this will be typed by individual collider\n\targs = model<unknown[]>([]);\n\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate sensor = pick(this.options, 'sensor');\n\tprivate collisionGroups = pick(this.options, 'collisionGroups');\n\tprivate solverGroups = pick(this.options, 'solverGroups');\n\tprivate friction = pick(this.options, 'friction');\n\tprivate frictionCombineRule = pick(this.options, 'frictionCombineRule');\n\tprivate restitution = pick(this.options, 'restitution');\n\tprivate restitutionCombineRule = pick(this.options, 'restitutionCombineRule');\n\tprivate activeCollisionTypes = pick(this.options, 'activeCollisionTypes');\n\tprivate contactSkin = pick(this.options, 'contactSkin');\n\tprivate mass = pick(this.options, 'mass');\n\tprivate massProperties = pick(this.options, 'massProperties');\n\tprivate density = pick(this.options, 'density');\n\n\tprivate rigidBody = inject(NgtrRigidBody, { optional: true });\n\tprivate physics = inject(NgtrPhysics);\n\tprivate objectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate scaledArgs = computed(() => {\n\t\tconst [shape, args] = [\n\t\t\tthis.shape(),\n\t\t\tthis.args() as (number | ArrayLike<number> | { x: number; y: number; z: number })[],\n\t\t];\n\n\t\tconst cloned = args.slice();\n\n\t\tif (cloned.length === 0) return [];\n\n\t\t// Heightfield uses a vector\n\t\tif (shape === 'heightfield') {\n\t\t\tconst s = cloned[3] as { x: number; y: number; z: number };\n\t\t\ts.x *= this.worldScale.x;\n\t\t\ts.y *= this.worldScale.y;\n\t\t\ts.z *= this.worldScale.z;\n\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// Trimesh and convex scale the vertices\n\t\tif (shape === 'trimesh' || shape === 'convexHull') {\n\t\t\tcloned[0] = this.scaleVertices(cloned[0] as ArrayLike<number>, this.worldScale);\n\t\t\treturn cloned;\n\t\t}\n\n\t\t// prefill with some extra\n\t\tconst scaleArray = [\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.y,\n\t\t\tthis.worldScale.z,\n\t\t\tthis.worldScale.x,\n\t\t\tthis.worldScale.x,\n\t\t];\n\t\treturn cloned.map((arg, index) => scaleArray[index] * (arg as number));\n\t});\n\n\tprivate collider = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\n\t\tconst args = this.scaledArgs();\n\t\tif (!args.length) return null;\n\n\t\tconst [shape, rigidBody] = [this.shape(), this.rigidBody?.rigidBody()];\n\n\t\t// @ts-expect-error - we know the type of the data\n\t\tconst desc = ColliderDesc[shape](...args);\n\t\tif (!desc) return null;\n\n\t\treturn worldSingleton.proxy.createCollider(desc, rigidBody ?? undefined);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createColliderEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateColliderEffect();\n\t\t\tthis.updateMassPropertiesEffect();\n\t\t});\n\t}\n\n\tget worldScale() {\n\t\treturn this.objectRef.nativeElement.getWorldScale(new THREE.Vector3());\n\t}\n\n\tsetShape(shape: NgtrColliderShape) {\n\t\tthis.shape.set(shape);\n\t}\n\n\tsetArgs(args: unknown[]) {\n\t\tthis.args.set(args);\n\t}\n\n\tprivate createColliderStateEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createColliderState(\n\t\t\tcollider,\n\t\t\tthis.objectRef.nativeElement,\n\t\t\tthis.rigidBody?.objectRef.nativeElement,\n\t\t);\n\t\tthis.physics.colliderStates.set(collider.handle, state);\n\n\t\treturn () => {\n\t\t\tthis.physics.colliderStates.delete(collider.handle);\n\t\t\tif (worldSingleton.proxy.getCollider(collider.handle)) {\n\t\t\t\tworldSingleton.proxy.removeCollider(collider, true);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createColliderEventsEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tconst hasCollisionEvent = hasListener(\n\t\t\tthis.collisionEnter,\n\t\t\tthis.collisionExit,\n\t\t\tthis.intersectionEnter,\n\t\t\tthis.intersectionExit,\n\t\t\tthis.rigidBody?.collisionEnter,\n\t\t\tthis.rigidBody?.collisionExit,\n\t\t\tthis.rigidBody?.intersectionEnter,\n\t\t\tthis.rigidBody?.intersectionExit,\n\t\t);\n\t\tconst hasContactForceEvent = hasListener(this.contactForce, this.rigidBody?.contactForce);\n\n\t\tif (hasCollisionEvent && hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS | ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t} else if (hasCollisionEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.COLLISION_EVENTS);\n\t\t} else if (hasContactForceEvent) {\n\t\t\tcollider.setActiveEvents(ActiveEvents.CONTACT_FORCE_EVENTS);\n\t\t}\n\n\t\tthis.physics.colliderEvents.set(collider.handle, {\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\t\treturn () => {\n\t\t\tthis.physics.colliderEvents.delete(collider.handle);\n\t\t};\n\t}\n\n\tprivate updateColliderEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst state = this.physics.colliderStates.get(collider.handle);\n\t\tif (!state) return;\n\n\t\t// Update collider position based on the object's position\n\t\tconst parentWorldScale = state.object.parent!.getWorldScale(_vector3);\n\t\tconst parentInvertedWorldMatrix = state.worldParent?.matrixWorld.clone().invert();\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\n\t\t_matrix4.copy(state.object.matrixWorld);\n\n\t\tif (parentInvertedWorldMatrix) {\n\t\t\t_matrix4.premultiply(parentInvertedWorldMatrix);\n\t\t}\n\n\t\t_matrix4.decompose(_position, _rotation, _scale);\n\n\t\tif (collider.parent()) {\n\t\t\tcollider.setTranslationWrtParent({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotationWrtParent(_rotation);\n\t\t} else {\n\t\t\tcollider.setTranslation({\n\t\t\t\tx: _position.x * parentWorldScale.x,\n\t\t\t\ty: _position.y * parentWorldScale.y,\n\t\t\t\tz: _position.z * parentWorldScale.z,\n\t\t\t});\n\t\t\tcollider.setRotation(_rotation);\n\t\t}\n\n\t\tconst [\n\t\t\tsensor,\n\t\t\tcollisionGroups,\n\t\t\tsolverGroups,\n\t\t\tfriction,\n\t\t\tfrictionCombineRule,\n\t\t\trestitution,\n\t\t\trestitutionCombineRule,\n\t\t\tactiveCollisionTypes,\n\t\t\tcontactSkin,\n\t\t] = [\n\t\t\tthis.sensor(),\n\t\t\tthis.collisionGroups(),\n\t\t\tthis.solverGroups(),\n\t\t\tthis.friction(),\n\t\t\tthis.frictionCombineRule(),\n\t\t\tthis.restitution(),\n\t\t\tthis.restitutionCombineRule(),\n\t\t\tthis.activeCollisionTypes(),\n\t\t\tthis.contactSkin(),\n\t\t];\n\n\t\tif (sensor !== undefined) collider.setSensor(sensor);\n\t\tif (collisionGroups !== undefined) collider.setCollisionGroups(collisionGroups);\n\t\tif (solverGroups !== undefined) collider.setSolverGroups(solverGroups);\n\t\tif (friction !== undefined) collider.setFriction(friction);\n\t\tif (frictionCombineRule !== undefined) collider.setFrictionCombineRule(frictionCombineRule);\n\t\tif (restitution !== undefined) collider.setRestitution(restitution);\n\t\tif (restitutionCombineRule !== undefined) collider.setRestitutionCombineRule(restitutionCombineRule);\n\t\tif (activeCollisionTypes !== undefined) collider.setActiveCollisionTypes(activeCollisionTypes);\n\t\tif (contactSkin !== undefined) collider.setContactSkin(contactSkin);\n\t}\n\n\tprivate updateMassPropertiesEffect() {\n\t\tconst collider = this.collider();\n\t\tif (!collider) return;\n\n\t\tconst [mass, massProperties, density] = [this.mass(), this.massProperties(), this.density()];\n\n\t\tif (density !== undefined) {\n\t\t\tif (mass !== undefined || massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set mass and massProperties along with density');\n\t\t\t}\n\n\t\t\tcollider.setDensity(density);\n\t\t\treturn;\n\t\t}\n\n\t\tif (mass !== undefined) {\n\t\t\tif (massProperties !== undefined) {\n\t\t\t\tthrow new Error('[NGT Rapier] Cannot set massProperties along with mass');\n\t\t\t}\n\t\t\tcollider.setMass(mass);\n\t\t\treturn;\n\t\t}\n\n\t\tif (massProperties !== undefined) {\n\t\t\tcollider.setMassProperties(\n\t\t\t\tmassProperties.mass,\n\t\t\t\tmassProperties.centerOfMass,\n\t\t\t\tmassProperties.principalAngularInertia,\n\t\t\t\tmassProperties.angularInertiaLocalFrame,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate createColliderState(\n\t\tcollider: Collider,\n\t\tobject: THREE.Object3D,\n\t\trigidBodyObject?: THREE.Object3D | null,\n\t): NgtrColliderState {\n\t\treturn { collider, worldParent: rigidBodyObject || undefined, object };\n\t}\n\n\tprivate scaleVertices(vertices: ArrayLike<number>, scale: THREE.Vector3) {\n\t\tconst scaledVerts = Array.from(vertices);\n\n\t\tfor (let i = 0; i < vertices.length / 3; i++) {\n\t\t\tscaledVerts[i * 3] *= scale.x;\n\t\t\tscaledVerts[i * 3 + 1] *= scale.y;\n\t\t\tscaledVerts[i * 3 + 2] *= scale.z;\n\t\t}\n\n\t\treturn scaledVerts;\n\t}\n}\n\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\nexport const rigidBodyDefaultOptions: NgtrRigidBodyOptions = {\n\tcanSleep: true,\n\tlinearVelocity: [0, 0, 0],\n\tangularVelocity: [0, 0, 0],\n\tgravityScale: 1,\n\tdominanceGroup: 0,\n\tccd: false,\n\tsoftCcdPrediction: 0,\n\tcontactSkin: 0,\n};\n\n@Component({\n\tselector: 'ngt-object3D[rigidBody]',\n\texportAs: 'rigidBody',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n\tproviders: [\n\t\t{\n\t\t\tprovide: COLLISION_GROUPS_HANDLER,\n\t\t\tuseFactory: (rigidBody: NgtrRigidBody) => {\n\t\t\t\treturn () => {\n\t\t\t\t\tconst anyColliders = rigidBody.anyColliders();\n\t\t\t\t\tif (!anyColliders.length) return;\n\n\t\t\t\t\tconst colliders = anyColliders.map((anyCollider) => anyCollider['collider']);\n\t\t\t\t\treturn (interactionGroups: InteractionGroups) => {\n\t\t\t\t\t\tfor (const colliderFn of colliders) {\n\t\t\t\t\t\t\tconst collider = colliderFn();\n\t\t\t\t\t\t\tif (!collider) continue;\n\t\t\t\t\t\t\tcollider.setCollisionGroups(interactionGroups);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t},\n\t\t\tdeps: [NgtrRigidBody],\n\t\t},\n\t],\n})\nexport class NgtrRigidBody {\n\ttype = input.required({\n\t\talias: 'rigidBody',\n\t\ttransform: (value: NgtrRigidBodyType | '' | undefined) => {\n\t\t\tif (value === '' || value === undefined) return 'dynamic' as NgtrRigidBodyType;\n\t\t\treturn value;\n\t\t},\n\t});\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\toptions = input(rigidBodyDefaultOptions, { transform: mergeInputs(rigidBodyDefaultOptions) });\n\n\tanyColliders = viewChildren(NgtrAnyCollider);\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\twake = output<void>();\n\tsleep = output<void>();\n\tcollisionEnter = output<NgtrCollisionEnterPayload>();\n\tcollisionExit = output<NgtrCollisionExitPayload>();\n\tintersectionEnter = output<NgtrIntersectionEnterPayload>();\n\tintersectionExit = output<NgtrIntersectionExitPayload>();\n\tcontactForce = output<NgtrContactForcePayload>();\n\n\tprivate canSleep = pick(this.options, 'canSleep');\n\tprivate colliders = pick(this.options, 'colliders');\n\tprivate transformState = pick(this.options, 'transformState');\n\tprivate gravityScale = pick(this.options, 'gravityScale');\n\tprivate dominanceGroup = pick(this.options, 'dominanceGroup');\n\tprivate ccd = pick(this.options, 'ccd');\n\tprivate softCcdPrediction = pick(this.options, 'softCcdPrediction');\n\tprivate additionalSolverIterations = pick(this.options, 'additionalSolverIterations');\n\tprivate linearDamping = pick(this.options, 'linearDamping');\n\tprivate angularDamping = pick(this.options, 'angularDamping');\n\tprivate lockRotations = pick(this.options, 'lockRotations');\n\tprivate lockTranslations = pick(this.options, 'lockTranslations');\n\tprivate enabledRotations = pick(this.options, 'enabledRotations');\n\tprivate enabledTranslations = pick(this.options, 'enabledTranslations');\n\tprivate angularVelocity = pick(this.options, 'angularVelocity');\n\tprivate linearVelocity = pick(this.options, 'linearVelocity');\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate physics = inject(NgtrPhysics);\n\n\tprivate bodyType = computed(() => RIGID_BODY_TYPE_MAP[this.type()]);\n\tprivate bodyDesc = computed(() => {\n\t\tconst [canSleep, bodyType] = [this.canSleep(), untracked(this.bodyType), this.colliders()];\n\t\treturn new RigidBodyDesc(bodyType).setCanSleep(canSleep);\n\t});\n\trigidBody = computed(() => {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return null;\n\t\treturn worldSingleton.proxy.createRigidBody(this.bodyDesc());\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = untracked(this.options);\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and children\n\t\tconst [parent] = [\n\t\t\tobjectInstanceState.parent(),\n\t\t\tobjectInstanceState.nonObjects(),\n\t\t\tobjectInstanceState.objects(),\n\t\t];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options, true);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyStateEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst cleanup = this.createRigidBodyEventsEffect();\n\t\t\tonCleanup(() => cleanup?.());\n\t\t});\n\n\t\teffect(() => {\n\t\t\tthis.updateRigidBodyEffect();\n\t\t});\n\t}\n\n\tprivate createRigidBodyStateEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst transformState = untracked(this.transformState);\n\n\t\tconst instanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = instanceState.parent();\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return;\n\n\t\tconst state = this.createRigidBodyState(body, this.objectRef.nativeElement);\n\t\tthis.physics.rigidBodyStates.set(body.handle, transformState ? transformState(state) : state);\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyStates.delete(body.handle);\n\t\t\tif (worldSingleton.proxy.getRigidBody(body.handle)) {\n\t\t\t\tworldSingleton.proxy.removeRigidBody(body);\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate createRigidBodyEventsEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst wake = getEmitter(this.wake);\n\t\tconst sleep = getEmitter(this.sleep);\n\t\tconst collisionEnter = getEmitter(this.collisionEnter);\n\t\tconst collisionExit = getEmitter(this.collisionExit);\n\t\tconst intersectionEnter = getEmitter(this.intersectionEnter);\n\t\tconst intersectionExit = getEmitter(this.intersectionExit);\n\t\tconst contactForce = getEmitter(this.contactForce);\n\n\t\tthis.physics.rigidBodyEvents.set(body.handle, {\n\t\t\tonWake: wake,\n\t\t\tonSleep: sleep,\n\t\t\tonCollisionEnter: collisionEnter,\n\t\t\tonCollisionExit: collisionExit,\n\t\t\tonIntersectionEnter: intersectionEnter,\n\t\t\tonIntersectionExit: intersectionExit,\n\t\t\tonContactForce: contactForce,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.physics.rigidBodyEvents.delete(body.handle);\n\t\t};\n\t}\n\n\tprivate updateRigidBodyEffect() {\n\t\tconst worldSingleton = this.physics.worldSingleton();\n\t\tif (!worldSingleton) return;\n\n\t\tconst body = this.rigidBody();\n\t\tif (!body) return;\n\n\t\tconst state = this.physics.rigidBodyStates.get(body.handle);\n\t\tif (!state) return;\n\n\t\tstate.object.updateWorldMatrix(true, false);\n\t\t_matrix4.copy(state.object.matrixWorld).decompose(_position, _rotation, _scale);\n\t\tbody.setTranslation(_position, true);\n\t\tbody.setRotation(_rotation, true);\n\n\t\tconst [\n\t\t\tgravityScale,\n\t\t\tadditionalSolverIterations,\n\t\t\tlinearDamping,\n\t\t\tangularDamping,\n\t\t\tlockRotations,\n\t\t\tlockTranslations,\n\t\t\tenabledRotations,\n\t\t\tenabledTranslations,\n\t\t\tangularVelocity,\n\t\t\tlinearVelocity,\n\t\t\tccd,\n\t\t\tsoftCcdPrediction,\n\t\t\tdominanceGroup,\n\t\t\tuserData,\n\t\t\tbodyType,\n\t\t] = [\n\t\t\tthis.gravityScale(),\n\t\t\tthis.additionalSolverIterations(),\n\t\t\tthis.linearDamping(),\n\t\t\tthis.angularDamping(),\n\t\t\tthis.lockRotations(),\n\t\t\tthis.lockTranslations(),\n\t\t\tthis.enabledRotations(),\n\t\t\tthis.enabledTranslations(),\n\t\t\tthis.angularVelocity(),\n\t\t\tthis.linearVelocity(),\n\t\t\tthis.ccd(),\n\t\t\tthis.softCcdPrediction(),\n\t\t\tthis.dominanceGroup(),\n\t\t\tthis.userData(),\n\t\t\tthis.bodyType(),\n\t\t];\n\n\t\tbody.setGravityScale(gravityScale, true);\n\t\tif (additionalSolverIterations !== undefined) body.setAdditionalSolverIterations(additionalSolverIterations);\n\t\tif (linearDamping !== undefined) body.setLinearDamping(linearDamping);\n\t\tif (angularDamping !== undefined) body.setAngularDamping(angularDamping);\n\t\tbody.setDominanceGroup(dominanceGroup);\n\t\tif (enabledRotations !== undefined) body.setEnabledRotations(...enabledRotations, true);\n\t\tif (enabledTranslations !== undefined) body.setEnabledTranslations(...enabledTranslations, true);\n\t\tif (lockRotations !== undefined) body.lockRotations(lockRotations, true);\n\t\tif (lockTranslations !== undefined) body.lockTranslations(lockTranslations, true);\n\t\tbody.setAngvel({ x: angularVelocity[0], y: angularVelocity[1], z: angularVelocity[2] }, true);\n\t\tbody.setLinvel({ x: linearVelocity[0], y: linearVelocity[1], z: linearVelocity[2] }, true);\n\t\tbody.enableCcd(ccd);\n\t\tbody.setSoftCcdPrediction(softCcdPrediction);\n\t\tif (userData !== undefined) body.userData = userData;\n\t\tif (bodyType !== body.bodyType()) body.setBodyType(bodyType, true);\n\t}\n\n\tprivate createRigidBodyState(\n\t\trigidBody: RigidBody,\n\t\tobject: Object3D,\n\t\tsetMatrix?: (matrix: THREE.Matrix4) => void,\n\t\tgetMatrix?: (matrix: THREE.Matrix4) => THREE.Matrix4,\n\t\tworldScale?: THREE.Vector3,\n\t\tmeshType: NgtrRigidBodyState['meshType'] = 'mesh',\n\t) {\n\t\tobject.updateWorldMatrix(true, false);\n\t\tconst invertedWorldMatrix = object.parent!.matrixWorld.clone().invert();\n\t\treturn {\n\t\t\tobject,\n\t\t\trigidBody,\n\t\t\tinvertedWorldMatrix,\n\t\t\tsetMatrix: setMatrix\n\t\t\t\t? setMatrix\n\t\t\t\t: (matrix: THREE.Matrix4) => {\n\t\t\t\t\t\tobject.matrix.copy(matrix);\n\t\t\t\t\t},\n\t\t\tgetMatrix: getMatrix ? getMatrix : (matrix: THREE.Matrix4) => matrix.copy(object.matrix),\n\t\t\tscale: worldScale || object.getWorldScale(_scale).clone(),\n\t\t\tisSleeping: false,\n\t\t\tmeshType,\n\t\t};\n\t}\n}\n","import { Directive, effect, inject, input } from '@angular/core';\nimport { NgtrAnyCollider } from './rigid-body';\nimport type {\n\tNgtrBallArgs,\n\tNgtrCapsuleArgs,\n\tNgtrConeArgs,\n\tNgtrConvexHullArgs,\n\tNgtrConvexMeshArgs,\n\tNgtrCuboidArgs,\n\tNgtrCylinderArgs,\n\tNgtrHeightfieldArgs,\n\tNgtrPolylineArgs,\n\tNgtrRoundConeArgs,\n\tNgtrRoundConvexHullArgs,\n\tNgtrRoundConvexMeshArgs,\n\tNgtrRoundCuboidArgs,\n\tNgtrRoundCylinderArgs,\n\tNgtrTrimeshArgs,\n} from './types';\n\n// NOTE: this is ok to use here since we're not exporting this short-cut\nconst ANY_COLLIDER_HOST_DIRECTIVE = {\n\tdirective: NgtrAnyCollider,\n\tinputs: ['options', 'name', 'scale', 'position', 'quaternion', 'rotation', 'userData'],\n\toutputs: ['collisionEnter', 'collisionExit', 'intersectionEnter', 'intersectionExit', 'contactForce'],\n};\n\n@Directive({ selector: 'ngt-object3D[cuboidCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>({ alias: 'cuboidCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[capsuleCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>({ alias: 'capsuleCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[ballCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>({ alias: 'ballCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[convexHullCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>({ alias: 'convexHullCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexHull');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[heightfieldCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>({ alias: 'heightfieldCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[trimeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>({ alias: 'trimeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[polylineCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>({ alias: 'polylineCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundCuboidCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>({ alias: 'roundCuboidCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[cylinderCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>({ alias: 'cylinderCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundCylinderCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>({ alias: 'roundCylinderCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[coneCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>({ alias: 'coneCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConeCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>({ alias: 'roundConeCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[convexMeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>({ alias: 'convexMeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConvexHullCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>({ alias: 'roundConvexHullCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n@Directive({ selector: 'ngt-object3D[roundConvexMeshCollider]', hostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE] })\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>({ alias: 'roundConvexMeshCollider' });\n\n\tconstructor() {\n\t\tconst anyCollider = inject(NgtrAnyCollider, { host: true });\n\t\tanyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tanyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n\tviewChildren,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\textend,\n\tgetInstanceState,\n\tis,\n\tNgtEuler,\n\tNgtQuaternion,\n\tNgtThreeElements,\n\tNgtVector3,\n\tpick,\n} from 'angular-three';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrPhysics } from './physics';\nimport { NgtrAnyCollider, NgtrRigidBody, rigidBodyDefaultOptions } from './rigid-body';\nimport { NgtrRigidBodyOptions, NgtrRigidBodyState, NgtrRigidBodyType } from './types';\nimport { createColliderOptions } from './utils';\n\nexport interface NgtrInstancedRigidBodyOptions {\n\tkey: string | number;\n\ttype?: NgtrRigidBodyType;\n\tposition?: NgtVector3;\n\trotation?: NgtEuler;\n\tscale?: NgtVector3;\n\tquaternion?: NgtQuaternion;\n\tuserData?: NgtThreeElements['ngt-object3D']['userData'];\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n@Component({\n\tselector: 'ngt-object3D[instancedRigidBodies]',\n\texportAs: 'instancedRigidBodies',\n\ttemplate: `\n\t\t<ngt-object3D #instanceWrapper>\n\t\t\t<ng-content />\n\t\t</ngt-object3D>\n\n\t\t@for (instance of instancesOptions(); track instance.key) {\n\t\t\t<ngt-object3D\n\t\t\t\t[rigidBody]=\"instance.type\"\n\t\t\t\t[options]=\"instance.options\"\n\t\t\t\t[position]=\"instance.position\"\n\t\t\t\t[rotation]=\"instance.rotation\"\n\t\t\t\t[scale]=\"instance.scale\"\n\t\t\t\t[quaternion]=\"instance.quaternion\"\n\t\t\t\t[userData]=\"instance.userData\"\n\t\t\t\t[name]=\"instance.key + '-instanced-rigid-body-' + $index\"\n\t\t\t>\n\t\t\t\t<ng-content select=\"[data-colliders]\" />\n\n\t\t\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t\t\t<ngt-object3D\n\t\t\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t\t\t[name]=\"objectRef.nativeElement.name + '-instanced-collider-' + $index\"\n\t\t\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t</ngt-object3D>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrRigidBody, NgtrAnyCollider],\n})\nexport class NgtrInstancedRigidBodies {\n\tposition = input<NgtVector3>([0, 0, 0]);\n\trotation = input<NgtEuler>();\n\tscale = input<NgtVector3>([1, 1, 1]);\n\tquaternion = input<NgtQuaternion>();\n\tuserData = input<NgtThreeElements['ngt-object3D']['userData']>();\n\tinstances = input.required({\n\t\talias: 'instancedRigidBodies',\n\t\ttransform: (value: Array<NgtrInstancedRigidBodyOptions> | '') => {\n\t\t\tif (value === '') return [];\n\t\t\treturn value;\n\t\t},\n\t});\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\n\tprivate object3DParameters = computed(() => {\n\t\tconst [position, rotation, scale, quaternion, userData] = [\n\t\t\tthis.position(),\n\t\t\tthis.rotation(),\n\t\t\tthis.scale(),\n\t\t\tthis.quaternion(),\n\t\t\tthis.userData(),\n\t\t];\n\n\t\tconst parameters = { position, scale, userData };\n\n\t\tif (quaternion) {\n\t\t\tObject.assign(parameters, { quaternion });\n\t\t} else if (rotation) {\n\t\t\tObject.assign(parameters, { rotation });\n\t\t} else {\n\t\t\tObject.assign(parameters, { rotation: [0, 0, 0] });\n\t\t}\n\n\t\treturn parameters;\n\t});\n\n\tprivate instanceWrapperRef = viewChild.required<ElementRef<THREE.Object3D>>('instanceWrapper');\n\trigidBodyRefs = viewChildren(NgtrRigidBody);\n\n\tprivate physics = inject(NgtrPhysics);\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\n\tprivate colliders = pick(this.options, 'colliders');\n\n\tprivate instancedMesh = computed(() => {\n\t\tconst instanceWrapper = this.instanceWrapperRef().nativeElement;\n\t\tif (!instanceWrapper) return null;\n\n\t\tconst instanceState = getInstanceState(instanceWrapper);\n\t\tif (!instanceState) return null;\n\n\t\t// track object's children\n\t\tinstanceState.objects();\n\t\tconst firstChild = instanceWrapper.children[0];\n\t\tif (!firstChild || !(firstChild as THREE.InstancedMesh).isInstancedMesh) return null;\n\n\t\treturn firstChild as THREE.InstancedMesh;\n\t});\n\n\tprotected instancesOptions = computed(() => {\n\t\tconst [instances, options, instancedMesh] = [this.instances(), untracked(this.options), this.instancedMesh()];\n\t\tif (!instancedMesh) return [];\n\t\treturn instances.map(\n\t\t\t(instance, index) =>\n\t\t\t\t({\n\t\t\t\t\t...instance,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\t...(instance.options || {}),\n\t\t\t\t\t\ttransformState: (state) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t\tgetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.getMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\treturn matrix;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsetMatrix: (matrix) => {\n\t\t\t\t\t\t\t\t\tinstancedMesh.setMatrixAt(index, matrix);\n\t\t\t\t\t\t\t\t\tinstancedMesh.instanceMatrix.needsUpdate = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeshType: 'instancedMesh',\n\t\t\t\t\t\t\t} as NgtrRigidBodyState;\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tkey: `${instance.key}-${index}` + `${instancedMesh?.uuid || ''}`,\n\t\t\t\t}) as Omit<NgtrInstancedRigidBodyOptions, 'options' | 'position' | 'scale'> & {\n\t\t\t\t\tposition: NgtVector3;\n\t\t\t\t\tscale: NgtVector3;\n\t\t\t\t\toptions: Partial<NgtrRigidBodyOptions>;\n\t\t\t\t},\n\t\t);\n\t});\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst colliders = this.colliders();\n\t\t// if self colliders is false explicitly, disable auto colliders for this object entirely.\n\t\tif (colliders === false) return [];\n\n\t\tconst physicsColliders = this.physics.colliders();\n\t\t// if physics colliders is false explicitly AND colliders is not set, disable auto colliders for this object entirely.\n\t\tif (physicsColliders === false && colliders === undefined) return [];\n\n\t\tconst options = this.options();\n\t\t// if colliders on object is not set, use physics colliders\n\t\tif (!options.colliders) options.colliders = physicsColliders;\n\n\t\tconst objectInstanceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstanceState) return [];\n\n\t\t// track object's parent and non-object children\n\t\tconst [parent] = [objectInstanceState.parent(), objectInstanceState.nonObjects()];\n\t\tif (!parent || !is.three<THREE.Object3D>(parent, 'isObject3D')) return [];\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, options);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\n\t\teffect(() => {\n\t\t\tconst object3DParameters = this.object3DParameters();\n\t\t\tapplyProps(this.objectRef.nativeElement, object3DParameters);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst instancedMesh = this.instancedMesh();\n\t\t\tif (!instancedMesh) return;\n\t\t\tinstancedMesh.instanceMatrix.setUsage(THREE.DynamicDrawUsage);\n\t\t});\n\t}\n}\n","import { computed, effect, ElementRef, inject, Injector, untracked } from '@angular/core';\nimport {\n\tFixedImpulseJoint,\n\tImpulseJoint,\n\tJointData,\n\tPrismaticImpulseJoint,\n\tRevoluteImpulseJoint,\n\tRigidBody,\n\tRopeImpulseJoint,\n\tSphericalImpulseJoint,\n\tSpringImpulseJoint,\n} from '@dimforge/rapier3d-compat';\nimport { resolveRef } from 'angular-three';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type {\n\tNgtrFixedJointParams,\n\tNgtrPrismaticJointParams,\n\tNgtrRevoluteJointParams,\n\tNgtrRopeJointParams,\n\tNgtrSphericalJointParams,\n\tNgtrSpringJointParams,\n} from './types';\nimport { quaternionToRapierQuaternion, vector3ToRapierVector } from './utils';\n\nfunction impulseJoint<TJoinType extends ImpulseJoint>(\n\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t{ injector, data }: { injector?: Injector; data: JointData | (() => JointData | null) },\n) {\n\treturn assertInjector(impulseJoint, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tconst newJoint = computed<TJoinType | null>(() => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return null;\n\n\t\t\tconst a = typeof bodyA === 'function' ? resolveRef(bodyA()) : resolveRef(bodyA);\n\t\t\tconst b = typeof bodyB === 'function' ? resolveRef(bodyB()) : resolveRef(bodyB);\n\t\t\tif (!a || !b) return null;\n\n\t\t\tconst jointData = typeof data === 'function' ? data() : data;\n\t\t\tif (!jointData) return null;\n\n\t\t\treturn worldSingleton.proxy.createImpulseJoint(jointData, a, b, true) as TJoinType;\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst worldSingleton = physics.worldSingleton();\n\t\t\tif (!worldSingleton) return;\n\n\t\t\tconst joint = newJoint();\n\t\t\tif (!joint) return;\n\n\t\t\tonCleanup(() => {\n\t\t\t\tif (worldSingleton.proxy.getImpulseJoint(joint.handle)) {\n\t\t\t\t\tworldSingleton.proxy.removeImpulseJoint(joint, true);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn newJoint;\n\t});\n}\n\nfunction createJoint<TJointParams, TJoinType extends ImpulseJoint>(\n\tjointDataFn: (rapier: NonNullable<ReturnType<NgtrPhysics['rapier']>>, data: TJointParams) => JointData,\n) {\n\treturn function _injectJoint(\n\t\tbodyA: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\tbodyB: ElementRef<RigidBody> | RigidBody | (() => ElementRef<RigidBody> | RigidBody | undefined | null),\n\t\t{ injector, data }: { injector?: Injector; data: TJointParams | (() => TJointParams) },\n\t) {\n\t\treturn assertInjector(_injectJoint, injector, () => {\n\t\t\tconst physics = inject(NgtrPhysics);\n\n\t\t\tlet dataFn = data as () => TJointParams;\n\n\t\t\tif (typeof data !== 'function') {\n\t\t\t\tdataFn = () => data;\n\t\t\t}\n\n\t\t\tconst jointData = computed(() => {\n\t\t\t\tconst rapier = physics.rapier();\n\t\t\t\tif (!rapier) return null;\n\t\t\t\treturn jointDataFn(rapier, untracked(dataFn));\n\t\t\t});\n\n\t\t\treturn impulseJoint<TJoinType>(bodyA, bodyB, { injector, data: jointData });\n\t\t});\n\t};\n}\n\n/**\n * A fixed joint ensures that two rigid-bodies don't move relative to each other.\n * Fixed joints are characterized by one local frame (represented by an isometry) on each rigid-body.\n * The fixed-joint makes these frames coincide in world-space.\n *\n * @category Hooks - Joints\n */\nexport const fixedJoint = createJoint<NgtrFixedJointParams, FixedImpulseJoint>((rapier, data) =>\n\trapier.JointData.fixed(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tquaternionToRapierQuaternion(data.body1LocalFrame),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tquaternionToRapierQuaternion(data.body2LocalFrame),\n\t),\n);\n/**\n * @deprecated Use `fixedJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectFixedJoint = fixedJoint;\n\n/**\n * The spherical joint ensures that two points on the local-spaces of two rigid-bodies always coincide (it prevents any relative\n * translational motion at this points). This is typically used to simulate ragdolls arms, pendulums, etc.\n * They are characterized by one local anchor on each rigid-body. Each anchor represents the location of the\n * points that need to coincide on the local-space of each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const sphericalJoint = createJoint<NgtrSphericalJointParams, SphericalImpulseJoint>((rapier, data) =>\n\trapier.JointData.spherical(vector3ToRapierVector(data.body1Anchor), vector3ToRapierVector(data.body2Anchor)),\n);\n/**\n * @deprecated Use `sphericalJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSphericalJoint = sphericalJoint;\n\n/**\n * The revolute joint prevents any relative movement between two rigid-bodies, except for relative\n * rotations along one axis. This is typically used to simulate wheels, fans, etc.\n * They are characterized by one local anchor as well as one local axis on each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const revoluteJoint = createJoint<NgtrRevoluteJointParams, RevoluteImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.revolute(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `revoluteJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRevoluteJoint = revoluteJoint;\n\n/**\n * The prismatic joint prevents any relative movement between two rigid-bodies, except for relative translations along one axis.\n * It is characterized by one local anchor as well as one local axis on each rigid-body. In 3D, an optional\n * local tangent axis can be specified for each rigid-body.\n *\n * @category Hooks - Joints\n */\nexport const prismaticJoint = createJoint<NgtrPrismaticJointParams, PrismaticImpulseJoint>((rapier, data) => {\n\tconst jointData = rapier.JointData.prismatic(\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t\tvector3ToRapierVector(data.axis),\n\t);\n\n\tif (data.limits) {\n\t\tjointData.limitsEnabled = true;\n\t\tjointData.limits = data.limits;\n\t}\n\n\treturn jointData;\n});\n/**\n * @deprecated Use `prismaticJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectPrismaticJoint = prismaticJoint;\n\n/**\n * The rope joint limits the max distance between two bodies.\n * @category Hooks - Joints\n */\nexport const ropeJoint = createJoint<NgtrRopeJointParams, RopeImpulseJoint>((rapier, data) =>\n\trapier.JointData.rope(\n\t\tdata.length,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t),\n);\n/**\n * @deprecated Use `ropeJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectRopeJoint = ropeJoint;\n\n/**\n * The spring joint applies a force proportional to the distance between two objects.\n * @category Hooks - Joints\n */\nexport const springJoint = createJoint<NgtrSpringJointParams, SpringImpulseJoint>((rapier, data) => {\n\treturn rapier.JointData.spring(\n\t\tdata.restLength,\n\t\tdata.stiffness,\n\t\tdata.damping,\n\t\tvector3ToRapierVector(data.body1Anchor),\n\t\tvector3ToRapierVector(data.body2Anchor),\n\t);\n});\n/**\n * @deprecated Use `springJoint` instead. Will be removed in v5.0.0\n * @since v4.0.0\n */\nexport const injectSpringJoint = springJoint;\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tElementRef,\n\tinject,\n\tinput,\n} from '@angular/core';\nimport { extend, getInstanceState } from 'angular-three';\nimport * as THREE from 'three';\nimport { Object3D } from 'three';\nimport { NgtrAnyCollider, NgtrRigidBody } from './rigid-body';\nimport type { NgtrRigidBodyAutoCollider } from './types';\nimport { createColliderOptions } from './utils';\n\n@Component({\n\tselector: 'ngt-object3D[meshCollider]',\n\ttemplate: `\n\t\t<ng-content />\n\t\t@for (childColliderOption of childColliderOptions(); track $index) {\n\t\t\t<ngt-object3D\n\t\t\t\t[collider]=\"childColliderOption.shape\"\n\t\t\t\t[args]=\"childColliderOption.args\"\n\t\t\t\t[position]=\"childColliderOption.position\"\n\t\t\t\t[rotation]=\"childColliderOption.rotation\"\n\t\t\t\t[scale]=\"childColliderOption.scale\"\n\t\t\t\t[name]=\"objectRef.nativeElement.name + '-mesh-collider-' + $index\"\n\t\t\t\t[options]=\"childColliderOption.colliderOptions\"\n\t\t\t/>\n\t\t}\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtrAnyCollider],\n})\nexport class NgtrMeshCollider {\n\tcolliders = input.required<NgtrRigidBodyAutoCollider>({ alias: 'meshCollider' });\n\n\tobjectRef = inject<ElementRef<THREE.Object3D>>(ElementRef);\n\tprivate rigidBody = inject(NgtrRigidBody);\n\n\tprotected childColliderOptions = computed(() => {\n\t\tconst rigidBodyOptions = this.rigidBody.options();\n\t\trigidBodyOptions.colliders = this.colliders();\n\n\t\tconst objectInstaceState = getInstanceState(this.objectRef.nativeElement);\n\t\tif (!objectInstaceState) return [];\n\n\t\t// track object's children\n\t\tobjectInstaceState.nonObjects();\n\t\tobjectInstaceState.objects();\n\n\t\treturn createColliderOptions(this.objectRef.nativeElement, rigidBodyOptions, false);\n\t});\n\n\tconstructor() {\n\t\textend({ Object3D });\n\t\tthis.objectRef.nativeElement.userData ??= {};\n\t\tthis.objectRef.nativeElement.userData['ngtrRapierType'] = 'MeshCollider';\n\t}\n}\n","import { DestroyRef, inject, Injector } from '@angular/core';\nimport { assertInjector } from 'ngxtension/assert-injector';\nimport { NgtrPhysics } from './physics';\nimport type { NgtrWorldStepCallback } from './types';\n\nexport function beforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(beforePhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.beforeStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.beforeStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\nexport function afterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector) {\n\treturn assertInjector(afterPhysicsStep, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.afterStepCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.afterStepCallbacks.delete(callback);\n\t\t});\n\t});\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RapierVector3","RapierQuaternion","defaultOptions","i1.NgtrAnyCollider"],"mappings":"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"}
package/lib/joints.d.ts CHANGED
@@ -8,6 +8,14 @@ import type { NgtrFixedJointParams, NgtrPrismaticJointParams, NgtrRevoluteJointP
8
8
  *
9
9
  * @category Hooks - Joints
10
10
  */
11
+ export declare const fixedJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
12
+ injector?: Injector;
13
+ data: NgtrFixedJointParams | (() => NgtrFixedJointParams);
14
+ }) => import("@angular/core").Signal<FixedImpulseJoint | null>;
15
+ /**
16
+ * @deprecated Use `fixedJoint` instead. Will be removed in v5.0.0
17
+ * @since v4.0.0
18
+ */
11
19
  export declare const injectFixedJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
12
20
  injector?: Injector;
13
21
  data: NgtrFixedJointParams | (() => NgtrFixedJointParams);
@@ -20,6 +28,14 @@ export declare const injectFixedJoint: (bodyA: RigidBody | ElementRef<RigidBody>
20
28
  *
21
29
  * @category Hooks - Joints
22
30
  */
31
+ export declare const sphericalJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
32
+ injector?: Injector;
33
+ data: NgtrSphericalJointParams | (() => NgtrSphericalJointParams);
34
+ }) => import("@angular/core").Signal<SphericalImpulseJoint | null>;
35
+ /**
36
+ * @deprecated Use `sphericalJoint` instead. Will be removed in v5.0.0
37
+ * @since v4.0.0
38
+ */
23
39
  export declare const injectSphericalJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
24
40
  injector?: Injector;
25
41
  data: NgtrSphericalJointParams | (() => NgtrSphericalJointParams);
@@ -31,6 +47,14 @@ export declare const injectSphericalJoint: (bodyA: RigidBody | ElementRef<RigidB
31
47
  *
32
48
  * @category Hooks - Joints
33
49
  */
50
+ export declare const revoluteJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
51
+ injector?: Injector;
52
+ data: NgtrRevoluteJointParams | (() => NgtrRevoluteJointParams);
53
+ }) => import("@angular/core").Signal<RevoluteImpulseJoint | null>;
54
+ /**
55
+ * @deprecated Use `revoluteJoint` instead. Will be removed in v5.0.0
56
+ * @since v4.0.0
57
+ */
34
58
  export declare const injectRevoluteJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
35
59
  injector?: Injector;
36
60
  data: NgtrRevoluteJointParams | (() => NgtrRevoluteJointParams);
@@ -42,6 +66,14 @@ export declare const injectRevoluteJoint: (bodyA: RigidBody | ElementRef<RigidBo
42
66
  *
43
67
  * @category Hooks - Joints
44
68
  */
69
+ export declare const prismaticJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
70
+ injector?: Injector;
71
+ data: NgtrPrismaticJointParams | (() => NgtrPrismaticJointParams);
72
+ }) => import("@angular/core").Signal<PrismaticImpulseJoint | null>;
73
+ /**
74
+ * @deprecated Use `prismaticJoint` instead. Will be removed in v5.0.0
75
+ * @since v4.0.0
76
+ */
45
77
  export declare const injectPrismaticJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
46
78
  injector?: Injector;
47
79
  data: NgtrPrismaticJointParams | (() => NgtrPrismaticJointParams);
@@ -50,6 +82,14 @@ export declare const injectPrismaticJoint: (bodyA: RigidBody | ElementRef<RigidB
50
82
  * The rope joint limits the max distance between two bodies.
51
83
  * @category Hooks - Joints
52
84
  */
85
+ export declare const ropeJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
86
+ injector?: Injector;
87
+ data: NgtrRopeJointParams | (() => NgtrRopeJointParams);
88
+ }) => import("@angular/core").Signal<RopeImpulseJoint | null>;
89
+ /**
90
+ * @deprecated Use `ropeJoint` instead. Will be removed in v5.0.0
91
+ * @since v4.0.0
92
+ */
53
93
  export declare const injectRopeJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
54
94
  injector?: Injector;
55
95
  data: NgtrRopeJointParams | (() => NgtrRopeJointParams);
@@ -58,6 +98,14 @@ export declare const injectRopeJoint: (bodyA: RigidBody | ElementRef<RigidBody>
58
98
  * The spring joint applies a force proportional to the distance between two objects.
59
99
  * @category Hooks - Joints
60
100
  */
101
+ export declare const springJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
102
+ injector?: Injector;
103
+ data: NgtrSpringJointParams | (() => NgtrSpringJointParams);
104
+ }) => import("@angular/core").Signal<SpringImpulseJoint | null>;
105
+ /**
106
+ * @deprecated Use `springJoint` instead. Will be removed in v5.0.0
107
+ * @since v4.0.0
108
+ */
61
109
  export declare const injectSpringJoint: (bodyA: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), bodyB: RigidBody | ElementRef<RigidBody> | (() => ElementRef<RigidBody> | RigidBody | undefined | null), { injector, data }: {
62
110
  injector?: Injector;
63
111
  data: NgtrSpringJointParams | (() => NgtrSpringJointParams);
@@ -1,4 +1,4 @@
1
1
  import { Injector } from '@angular/core';
2
2
  import type { NgtrWorldStepCallback } from './types';
3
- export declare function injectBeforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector): void;
4
- export declare function injectAfterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector): void;
3
+ export declare function beforePhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector): void;
4
+ export declare function afterPhysicsStep(callback: NgtrWorldStepCallback, injector?: Injector): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-three-rapier",
3
- "version": "4.0.0-next.97",
3
+ "version": "4.0.0-next.99",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },