{"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-hooks.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\n/**\n * Injection token for handlers that set collision groups on colliders.\n * Used internally by rigid bodies and attractors to apply interaction groups.\n */\nexport const COLLISION_GROUPS_HANDLER = new InjectionToken<\n\t() => undefined | ((interactionGroups: InteractionGroups) => void)\n>('COLLISION_GROUPS_HANDLER');\n\n/**\n * Directive for setting collision/solver groups on a rigid body or collider.\n * This allows filtering which objects can collide with each other.\n *\n * @example\n * ```html\n * <!-- Object in group 0, collides with groups 0 and 1 -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0], [0, 1]]\">\n *   <ngt-mesh>\n *     <ngt-box-geometry />\n *   </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Object in groups 0 and 1, collides with everything -->\n * <ngt-object3D rigidBody [interactionGroups]=\"[[0, 1]]\">\n *   <ngt-mesh>\n *     <ngt-sphere-geometry />\n *   </ngt-mesh>\n * </ngt-object3D>\n * ```\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/**\n * Debug visualization component for the physics world.\n * Renders wireframe outlines of all colliders in the physics simulation.\n *\n * This component is automatically rendered when the `debug` option is set to `true`\n * on the `NgtrPhysics` component. It updates every frame to show current collider positions.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ debug: true }\">\n *   <ng-template>\n *     <!-- Your physics scene -->\n *   </ng-template>\n * </ngtr-physics>\n * ```\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\tconst geometry = new THREE.BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new THREE.BufferAttribute(buffers.vertices, 3));\n\t\t\tgeometry.setAttribute('color', new THREE.BufferAttribute(buffers.colors, 4));\n\n\t\t\tlineSegments.geometry.dispose();\n\t\t\tlineSegments.geometry = geometry;\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/**\n * Internal directive that manages the physics simulation loop.\n * Handles both \"follow\" mode (tied to render loop) and \"independent\" mode (separate loop).\n *\n * This directive is used internally by NgtrPhysics and should not be used directly.\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\n/**\n * Shared reusable Three.js objects for internal calculations.\n * These are used to avoid creating new objects on every frame,\n * which would cause garbage collection pressure.\n *\n * @internal\n */\n\n/** Shared quaternion for internal calculations */\nexport const _quaternion = new THREE.Quaternion();\n/** Shared euler angles for internal calculations */\nexport const _euler = new THREE.Euler();\n/** Shared vector3 for internal calculations */\nexport const _vector3 = new THREE.Vector3();\n/** Shared Object3D for internal calculations */\nexport const _object3d = new THREE.Object3D();\n/** Shared matrix4 for internal calculations */\nexport const _matrix4 = new THREE.Matrix4();\n/** Shared position vector for internal calculations */\nexport const _position = new THREE.Vector3();\n/** Shared rotation quaternion for internal calculations */\nexport const _rotation = new THREE.Quaternion();\n/** Shared scale vector for internal calculations */\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. This is useful for lazy initialization\n * of expensive objects like physics worlds.\n *\n * @template SingletonClass - The type of the singleton instance\n * @template CreationFn - The type of the factory function\n * @param createInstance - A function that returns a new instance of the class\n * @returns An object containing the proxy, reset function, and set function\n *\n * @example\n * ```typescript\n * const { proxy, reset } = createSingletonProxy(() => new World(gravity));\n * // Access the world lazily\n * proxy.step();\n * // Reset when done\n * reset();\n * ```\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\t/** The lazy proxy to the singleton instance */\n\tproxy: SingletonClass;\n\t/** Resets the singleton, allowing a new instance to be created */\n\treset: () => void;\n\t/** Sets the singleton to a specific instance */\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\n/**\n * Converts a Rapier quaternion to a Three.js quaternion.\n *\n * @param quaternion - The Rapier quaternion to convert\n * @returns A Three.js Quaternion with the same values\n */\nexport function rapierQuaternionToQuaternion({ x, y, z, w }: RapierQuaternion) {\n\treturn _quaternion.set(x, y, z, w);\n}\n\n/**\n * Converts an Angular Three vector representation to a Rapier Vector3.\n * Supports arrays, numbers (uniform scale), and objects with x, y, z properties.\n *\n * @param v - The vector to convert (can be [x, y, z], a number, or {x, y, z})\n * @returns A Rapier Vector3 instance\n *\n * @example\n * ```typescript\n * vector3ToRapierVector([1, 2, 3]); // RapierVector3(1, 2, 3)\n * vector3ToRapierVector(5); // RapierVector3(5, 5, 5)\n * vector3ToRapierVector({ x: 1, y: 2, z: 3 }); // RapierVector3(1, 2, 3)\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\n/**\n * Converts an Angular Three quaternion representation to a Rapier Quaternion.\n * Supports arrays and objects with x, y, z, w properties.\n *\n * @param v - The quaternion to convert (can be [x, y, z, w] or {x, y, z, w})\n * @returns A Rapier Quaternion instance\n *\n * @example\n * ```typescript\n * quaternionToRapierQuaternion([0, 0, 0, 1]); // Identity quaternion\n * quaternionToRapierQuaternion({ x: 0, y: 0, z: 0, w: 1 }); // Identity quaternion\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\n/**\n * Creates collider options by traversing child meshes of an object and generating\n * appropriate collider configurations based on their geometries.\n *\n * @param object - The parent Object3D to traverse for meshes\n * @param options - The rigid body options containing collider type and other settings\n * @param ignoreMeshColliders - Whether to skip meshes that are children of mesh colliders\n * @returns Array of collider configurations with shape, args, position, rotation, and scale\n *\n * @example\n * ```typescript\n * const colliderOptions = createColliderOptions(rigidBodyObject, { colliders: 'cuboid' });\n * // Returns array of collider configs for each mesh child\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, PhysicsHooks, 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\tNgtrFilterContactPairCallback,\n\tNgtrFilterIntersectionPairCallback,\n\tNgtrPhysicsOptions,\n\tNgtrRigidBodyStateMap,\n\tNgtrWorldStepCallback,\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\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/**\n * Directive for providing a fallback template when Rapier fails to load.\n *\n * @example\n * ```html\n * <ngtr-physics>\n *   <ng-template>\n *     <!-- Physics scene content -->\n *   </ng-template>\n *   <ng-template rapierFallback let-error=\"error\">\n *     <p>Failed to load physics: {{ error }}</p>\n *   </ng-template>\n * </ngtr-physics>\n * ```\n */\n@Directive({ selector: 'ng-template[rapierFallback]' })\nexport class NgtrPhysicsFallback {\n\t/** Type guard for template context */\n\tstatic ngTemplateContextGuard(_: NgtrPhysicsFallback, ctx: unknown): ctx is { error: string } {\n\t\treturn true;\n\t}\n}\n\n/**\n * Main physics component that creates and manages a Rapier physics world.\n * Wrap your 3D scene content in this component to enable physics simulation.\n *\n * The component lazily loads the Rapier WASM module and provides the physics\n * context to all child components.\n *\n * @example\n * ```html\n * <ngtr-physics [options]=\"{ gravity: [0, -9.81, 0], debug: true }\">\n *   <ng-template>\n *     <ngt-object3D rigidBody>\n *       <ngt-mesh>\n *         <ngt-box-geometry />\n *         <ngt-mesh-standard-material />\n *       </ngt-mesh>\n *     </ngt-object3D>\n *   </ng-template>\n * </ngtr-physics>\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\t/** Physics configuration options */\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 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\t/** Whether the physics simulation is paused */\n\tpaused = pick(this.options, 'paused');\n\tprotected debug = pick(this.options, 'debug');\n\t/** The default collider type for automatic collider generation */\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\t/** The loaded Rapier module, null if not yet loaded */\n\trapier = this.rapierConstruct.asReadonly();\n\n\tprotected ready = computed(() => !!this.rapier());\n\t/** Singleton proxy to the Rapier physics world */\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\t/** Map of rigid body states indexed by handle */\n\trigidBodyStates: NgtrRigidBodyStateMap = new Map();\n\t/** Map of collider states indexed by handle */\n\tcolliderStates: NgtrColliderStateMap = new Map();\n\t/** Map of rigid body event handlers indexed by handle */\n\trigidBodyEvents: NgtrEventMap = new Map();\n\t/** Map of collider event handlers indexed by handle */\n\tcolliderEvents: NgtrEventMap = new Map();\n\t/** Callbacks to run before each physics step */\n\tbeforeStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to run after each physics step */\n\tafterStepCallbacks = new Set<NgtrWorldStepCallback>();\n\t/** Callbacks to filter contact pairs */\n\tfilterContactPairCallbacks = new Set<NgtrFilterContactPairCallback>();\n\t/** Callbacks to filter intersection pairs */\n\tfilterIntersectionPairCallbacks = new Set<NgtrFilterIntersectionPairCallback>();\n\n\tprivate hooks: PhysicsHooks = {\n\t\tfilterContactPair: (...args) => {\n\t\t\tfor (const callback of this.filterContactPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result !== null) return result;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tfilterIntersectionPair: (...args) => {\n\t\t\tfor (const callback of this.filterIntersectionPairCallbacks) {\n\t\t\t\tconst result = callback(...args);\n\t\t\t\tif (result === false) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\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\t/**\n\t * Steps the physics simulation forward by the given delta time.\n\t * This is called automatically by the frame stepper, but can be called manually\n\t * if you need custom control over the simulation timing.\n\t *\n\t * @param delta - Time in seconds since the last step\n\t */\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.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\tconst hasHooks = this.filterContactPairCallbacks.size > 0 || this.filterIntersectionPairCallbacks.size > 0;\n\t\t\tworld.step(eventQueue, hasHooks ? this.hooks : undefined);\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/**\n * Base directive for creating colliders in the physics simulation.\n * This directive can be used to create any type of collider by specifying the shape.\n *\n * For convenience, use the specific collider directives like `NgtrCuboidCollider`,\n * `NgtrBallCollider`, etc., which provide type-safe arguments.\n *\n * @example\n * ```html\n * <ngt-object3D [collider]=\"'cuboid'\" [args]=\"[1, 1, 1]\" [position]=\"[0, 5, 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\tcollider = 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\n/** Maps rigid body type strings to Rapier body type enum values */\nconst RIGID_BODY_TYPE_MAP: Record<NgtrRigidBodyType, number> = {\n\tfixed: 1,\n\tdynamic: 0,\n\tkinematicPosition: 2,\n\tkinematicVelocity: 3,\n};\n\n/**\n * Default options for rigid bodies.\n * These values are used when specific options are not provided.\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/**\n * Component that creates a rigid body in the physics simulation.\n * Rigid bodies can be dynamic (simulated), fixed (static), or kinematic (user-controlled).\n *\n * Child meshes automatically generate colliders based on their geometry.\n * The collider type can be controlled via the `colliders` option.\n *\n * @example\n * ```html\n * <!-- Dynamic rigid body with automatic colliders -->\n * <ngt-object3D rigidBody [position]=\"[0, 5, 0]\">\n *   <ngt-mesh>\n *     <ngt-box-geometry />\n *     <ngt-mesh-standard-material />\n *   </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Fixed (static) rigid body -->\n * <ngt-object3D rigidBody=\"fixed\" [position]=\"[0, -1, 0]\">\n *   <ngt-mesh>\n *     <ngt-plane-geometry [args]=\"[100, 100]\" />\n *   </ngt-mesh>\n * </ngt-object3D>\n *\n * <!-- Kinematic rigid body -->\n * <ngt-object3D rigidBody=\"kinematicPosition\" #kinematicBody=\"rigidBody\">\n *   <ngt-mesh>\n *     <ngt-sphere-geometry />\n *   </ngt-mesh>\n * </ngt-object3D>\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/**\n * Creates a cuboid (box) collider with specified half-extents.\n *\n * @example\n * ```html\n * <ngt-object3D [cuboidCollider]=\"[1, 0.5, 2]\" [position]=\"[0, 0, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cuboidCollider]',\n\texportAs: 'cuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCuboidCollider {\n\targs = input.required<NgtrCuboidArgs>({ alias: 'cuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a capsule collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [capsuleCollider]=\"[0.5, 0.25]\" [position]=\"[0, 1, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[capsuleCollider]',\n\texportAs: 'capsuleCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCapsuleCollider {\n\targs = input.required<NgtrCapsuleArgs>({ alias: 'capsuleCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('capsule');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a spherical (ball) collider with specified radius.\n *\n * @example\n * ```html\n * <ngt-object3D [ballCollider]=\"[0.5]\" [position]=\"[0, 2, 0]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[ballCollider]',\n\texportAs: 'ballCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrBallCollider {\n\targs = input.required<NgtrBallArgs>({ alias: 'ballCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('ball');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider from an array of vertices.\n * The convex hull is computed from the provided points.\n *\n * @example\n * ```html\n * <ngt-object3D [convexHullCollider]=\"[vertices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexHullCollider]',\n\texportAs: 'convexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexHullCollider {\n\targs = input.required<NgtrConvexHullArgs>({ alias: 'convexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a heightfield collider for terrain-like surfaces.\n * The heightfield is defined by a grid of height values.\n *\n * @example\n * ```html\n * <ngt-object3D [heightfieldCollider]=\"[width, height, heights, scale]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[heightfieldCollider]',\n\texportAs: 'heightfieldCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrHeightfieldCollider {\n\targs = input.required<NgtrHeightfieldArgs>({ alias: 'heightfieldCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('heightfield');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a triangle mesh collider for exact collision shapes.\n * Note: Trimesh colliders are computationally expensive and should be used sparingly.\n *\n * @example\n * ```html\n * <ngt-object3D [trimeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[trimeshCollider]',\n\texportAs: 'trimeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrTrimeshCollider {\n\targs = input.required<NgtrTrimeshArgs>({ alias: 'trimeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('trimesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a polyline collider from connected line segments.\n *\n * @example\n * ```html\n * <ngt-object3D [polylineCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[polylineCollider]',\n\texportAs: 'polylineCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrPolylineCollider {\n\targs = input.required<NgtrPolylineArgs>({ alias: 'polylineCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('polyline');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cuboid collider with rounded corners.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCuboidCollider]=\"[1, 0.5, 2, 0.1]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCuboidCollider]',\n\texportAs: 'roundCuboidCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCuboidCollider {\n\targs = input.required<NgtrRoundCuboidArgs>({ alias: 'roundCuboidCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCuboid');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with specified half-height and radius.\n *\n * @example\n * ```html\n * <ngt-object3D [cylinderCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[cylinderCollider]',\n\texportAs: 'cylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrCylinderCollider {\n\targs = input.required<NgtrCylinderArgs>({ alias: 'cylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cylinder collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundCylinderCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundCylinderCollider]',\n\texportAs: 'roundCylinderCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundCylinderCollider {\n\targs = input.required<NgtrRoundCylinderArgs>({ alias: 'roundCylinderCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCylinder');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with specified half-height and base radius.\n *\n * @example\n * ```html\n * <ngt-object3D [coneCollider]=\"[1, 0.5]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[coneCollider]',\n\texportAs: 'coneCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConeCollider {\n\targs = input.required<NgtrConeArgs>({ alias: 'coneCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('cone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a cone collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConeCollider]=\"[1, 0.5, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConeCollider]',\n\texportAs: 'roundConeCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConeCollider {\n\targs = input.required<NgtrRoundConeArgs>({ alias: 'roundConeCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundCone');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider from vertices and indices.\n *\n * @example\n * ```html\n * <ngt-object3D [convexMeshCollider]=\"[vertices, indices]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[convexMeshCollider]',\n\texportAs: 'convexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrConvexMeshCollider {\n\targs = input.required<NgtrConvexMeshArgs>({ alias: 'convexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('convexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex hull collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexHullCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexHullCollider]',\n\texportAs: 'roundConvexHullCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexHullCollider {\n\targs = input.required<NgtrRoundConvexHullArgs>({ alias: 'roundConvexHullCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexHull');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.setArgs(this.args());\n\t\t});\n\t}\n}\n\n/**\n * Creates a convex mesh collider with rounded edges.\n *\n * @example\n * ```html\n * <ngt-object3D [roundConvexMeshCollider]=\"[vertices, indices, 0.05]\" />\n * ```\n */\n@Directive({\n\tselector: 'ngt-object3D[roundConvexMeshCollider]',\n\texportAs: 'roundConvexMeshCollider',\n\thostDirectives: [ANY_COLLIDER_HOST_DIRECTIVE],\n})\nexport class NgtrRoundConvexMeshCollider {\n\targs = input.required<NgtrRoundConvexMeshArgs>({ alias: 'roundConvexMeshCollider' });\n\n\tprivate anyCollider = inject(NgtrAnyCollider, { host: true });\n\tcollider = this.anyCollider.collider;\n\n\tconstructor() {\n\t\tthis.anyCollider.setShape('roundConvexMesh');\n\t\teffect(() => {\n\t\t\tthis.anyCollider.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\n/**\n * Configuration options for individual rigid body instances.\n * Used with NgtrInstancedRigidBodies to define per-instance properties.\n */\nexport interface NgtrInstancedRigidBodyOptions {\n\t/** Unique identifier for this instance (required for change tracking) */\n\tkey: string | number;\n\t/** Type of rigid body for this instance */\n\ttype?: NgtrRigidBodyType;\n\t/** Initial position of this instance */\n\tposition?: NgtVector3;\n\t/** Initial rotation of this instance (Euler angles) */\n\trotation?: NgtEuler;\n\t/** Scale of this instance */\n\tscale?: NgtVector3;\n\t/** Initial rotation of this instance (quaternion) */\n\tquaternion?: NgtQuaternion;\n\t/** Custom user data attached to this instance */\n\tuserData?: NgtThreeElements['ngt-object3D']['userData'];\n\t/** Physics options specific to this instance */\n\toptions?: NgtrRigidBodyOptions;\n}\n\nconst defaultOptions: NgtrRigidBodyOptions = rigidBodyDefaultOptions;\n\n/**\n * Component for creating multiple rigid bodies from a single InstancedMesh.\n * This is highly efficient for scenes with many identical physics objects.\n *\n * Each instance gets its own rigid body but shares the same geometry for rendering.\n * The component automatically syncs instance matrices with physics simulation.\n *\n * @example\n * ```html\n * <ngt-object3D [instancedRigidBodies]=\"instances\">\n *   <ngt-instanced-mesh [count]=\"instances.length\" castShadow receiveShadow>\n *     <ngt-sphere-geometry [args]=\"[0.5]\" />\n *     <ngt-mesh-standard-material color=\"orange\" />\n *   </ngt-instanced-mesh>\n * </ngt-object3D>\n * ```\n *\n * ```typescript\n * instances = Array.from({ length: 100 }, (_, i) => ({\n *   key: i,\n *   position: [Math.random() * 10, Math.random() * 10, 0] as [number, number, number],\n * }));\n * ```\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 * Creates a fixed joint that prevents any relative movement between two rigid bodies.\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 * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * fixedJoint(bodyA, bodyB, {\n *   data: {\n *     body1Anchor: [0, 0, 0],\n *     body1LocalFrame: [0, 0, 0, 1],\n *     body2Anchor: [0, 0, 0],\n *     body2LocalFrame: [0, 0, 0, 1]\n *   }\n * });\n * ```\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 * Creates a spherical (ball-and-socket) joint that ensures two anchor points always coincide.\n * This prevents any relative translational motion at these points while allowing rotation.\n * Typically used to simulate ragdoll arms, pendulums, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * sphericalJoint(bodyA, bodyB, {\n *   data: { body1Anchor: [0, -0.5, 0], body2Anchor: [0, 0.5, 0] }\n * });\n * ```\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 * Creates a revolute (hinge) joint that allows rotation only around one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate wheels, doors, fans, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * revoluteJoint(bodyA, bodyB, {\n *   data: {\n *     body1Anchor: [0, 0, 0],\n *     body2Anchor: [0, 1, 0],\n *     axis: [0, 1, 0],\n *     limits: [-Math.PI / 2, Math.PI / 2]\n *   }\n * });\n * ```\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 * Creates a prismatic (slider) joint that allows translation only along one axis.\n * Prevents any other relative movement between two rigid bodies.\n * Typically used to simulate pistons, sliding doors, etc.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data (including optional limits) and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * prismaticJoint(bodyA, bodyB, {\n *   data: {\n *     body1Anchor: [0, 0, 0],\n *     body2Anchor: [2, 0, 0],\n *     axis: [1, 0, 0],\n *     limits: [-1, 1]\n *   }\n * });\n * ```\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 * Creates a rope joint that limits the maximum distance between two anchor points.\n * The bodies can move freely as long as the distance doesn't exceed the specified length.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * ropeJoint(bodyA, bodyB, {\n *   data: {\n *     body1Anchor: [0, 0, 0],\n *     body2Anchor: [0, 0, 0],\n *     length: 5\n *   }\n * });\n * ```\n *\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 * Creates a spring joint that applies a force proportional to the distance between two anchor points.\n * The spring tries to maintain its rest length through spring forces.\n *\n * @param bodyA - First rigid body (can be RigidBody, ElementRef, or getter function)\n * @param bodyB - Second rigid body (can be RigidBody, ElementRef, or getter function)\n * @param options - Joint configuration with data and optional injector\n * @returns Signal containing the created joint or null\n *\n * @example\n * ```typescript\n * springJoint(bodyA, bodyB, {\n *   data: {\n *     body1Anchor: [0, 0, 0],\n *     body2Anchor: [0, 0, 0],\n *     restLength: 2,\n *     stiffness: 100,\n *     damping: 10\n *   }\n * });\n * ```\n *\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/**\n * Component that generates colliders based on child mesh geometries.\n * Use this when you want specific collider generation for a group of meshes\n * within a rigid body.\n *\n * This is useful when you want different parts of a complex object to have\n * different collider types than the parent rigid body's automatic colliders.\n *\n * @example\n * ```html\n * <ngt-object3D rigidBody [options]=\"{ colliders: false }\">\n *   <ngt-object3D [meshCollider]=\"'trimesh'\">\n *     <ngt-mesh>\n *       <ngt-torus-geometry />\n *     </ngt-mesh>\n *   </ngt-object3D>\n * </ngt-object3D>\n * ```\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 { NgtrFilterContactPairCallback, NgtrFilterIntersectionPairCallback, NgtrWorldStepCallback } from './types';\n\n/**\n * Registers a callback to be executed before each physics world step.\n * Useful for applying forces, updating kinematic bodies, or other pre-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call before each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * beforePhysicsStep((world) => {\n *   // Apply custom forces or update kinematic bodies\n *   const body = world.getRigidBody(handle);\n *   body?.applyImpulse({ x: 0, y: 10, z: 0 }, true);\n * });\n * ```\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\n/**\n * Registers a callback to be executed after each physics world step.\n * Useful for reading physics state, updating visuals, or other post-step logic.\n *\n * The callback is automatically unregistered when the component is destroyed.\n *\n * @param callback - Function to call after each physics step, receives the Rapier World\n * @param injector - Optional injector for dependency injection context\n *\n * @example\n * ```typescript\n * afterPhysicsStep((world) => {\n *   // Read physics state after simulation\n *   const body = world.getRigidBody(handle);\n *   const position = body?.translation();\n *   console.log('Body position:', position);\n * });\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/**\n * Registers a callback to filter contact pairs.\n *\n * The callback determines if contact computation should happen between two colliders,\n * and how the constraints solver should behave for these contacts.\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_CONTACT_PAIRS` flag in its active hooks.\n *\n * @param callback - Function that returns:\n *   - `SolverFlags.COMPUTE_IMPULSE` (1) - Process the collision normally\n *   - `SolverFlags.EMPTY` (0) - Skip computing impulses (colliders pass through)\n *   - `null` - Skip this hook; let the next registered hook decide\n *\n * When multiple hooks are registered, they are called in order until one returns a non-null value.\n */\nexport function filterContactPair(callback: NgtrFilterContactPairCallback, injector?: Injector) {\n\treturn assertInjector(filterContactPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterContactPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterContactPairCallbacks.delete(callback);\n\t\t});\n\t});\n}\n\n/**\n * Registers a callback to filter intersection pairs.\n *\n * The callback determines if intersection computation should happen between two colliders\n * (where at least one is a sensor).\n *\n * This will only be executed if at least one of the involved colliders contains the\n * `ActiveHooks.FILTER_INTERSECTION_PAIR` flag in its active hooks.\n *\n * @param callback - Function that returns:\n *   - `true` - Allow the intersection to be detected\n *   - `false` - Block the intersection (no intersection events will fire)\n *\n * When multiple hooks are registered, the first hook that returns `false` blocks the intersection.\n */\nexport function filterIntersectionPair(callback: NgtrFilterIntersectionPairCallback, injector?: Injector) {\n\treturn assertInjector(filterIntersectionPair, injector, () => {\n\t\tconst physics = inject(NgtrPhysics);\n\n\t\tphysics.filterIntersectionPairCallbacks.add(callback);\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tphysics.filterIntersectionPairCallbacks.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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"}