@needle-tools/engine 4.11.0-next.91b9cf1 → 4.11.0-next.c7baa24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +7 -1
  2. package/README.md +3 -1
  3. package/components.needle.json +1 -1
  4. package/dist/{gltf-progressive-B63NpN_i.js → gltf-progressive-BvlZQAkt.js} +4 -4
  5. package/dist/{gltf-progressive-D4Z_Khp3.min.js → gltf-progressive-CftVUJy3.min.js} +1 -1
  6. package/dist/{gltf-progressive-CHeORqEv.umd.cjs → gltf-progressive-GwdQV1Qx.umd.cjs} +1 -1
  7. package/dist/{needle-engine.bundle-DtfAXDjU.umd.cjs → needle-engine.bundle-DBDKvYj5.umd.cjs} +144 -144
  8. package/dist/{needle-engine.bundle-B8HfDBoL.min.js → needle-engine.bundle-qNZSuWhD.min.js} +149 -149
  9. package/dist/{needle-engine.bundle-D4dsuq2U.js → needle-engine.bundle-tE15q9uM.js} +6784 -6715
  10. package/dist/needle-engine.d.ts +6 -0
  11. package/dist/needle-engine.js +4 -4
  12. package/dist/needle-engine.min.js +1 -1
  13. package/dist/needle-engine.umd.cjs +1 -1
  14. package/dist/{postprocessing-DQ2pynXW.js → postprocessing-CJC0Npcd.js} +2 -2
  15. package/dist/{postprocessing-BsnRNRRS.umd.cjs → postprocessing-DrM4PWU3.umd.cjs} +1 -1
  16. package/dist/{postprocessing-BHMVuZQ1.min.js → postprocessing-l7zsdO_Q.min.js} +1 -1
  17. package/dist/{three-qw28ZtTy.min.js → three-BDW9I486.min.js} +13 -13
  18. package/dist/{three-CJSAehtG.js → three-MHVqtJYj.js} +1 -0
  19. package/dist/{three-examples-Doq0rvFU.js → three-examples-C5Ht-QFN.js} +1 -1
  20. package/dist/{three-examples-Deqc1bNw.umd.cjs → three-examples-CgwGHSgz.umd.cjs} +1 -1
  21. package/dist/{three-examples-BivkhnvN.min.js → three-examples-fvEPSC8L.min.js} +1 -1
  22. package/dist/{three-B-jwTHao.umd.cjs → three-iFaDq9U3.umd.cjs} +13 -13
  23. package/dist/{three-mesh-ui-CktOi6oI.js → three-mesh-ui-BjWTTk1R.js} +1 -1
  24. package/dist/{three-mesh-ui-CsHwj9cJ.umd.cjs → three-mesh-ui-Bm32sS2a.umd.cjs} +1 -1
  25. package/dist/{three-mesh-ui-DhYXcXZe.min.js → three-mesh-ui-CLdkp21K.min.js} +1 -1
  26. package/dist/{vendor-BcsPRUmt.umd.cjs → vendor-CAWj5cBK.umd.cjs} +2 -2
  27. package/dist/{vendor-CyfN5nor.js → vendor-DJBpoQcM.js} +608 -599
  28. package/dist/{vendor-DyavoogU.min.js → vendor-DWGd3dEf.min.js} +20 -20
  29. package/lib/engine/engine_physics.js +25 -2
  30. package/lib/engine/engine_physics.js.map +1 -1
  31. package/lib/engine/js-extensions/Object3D.d.ts +6 -0
  32. package/lib/engine/js-extensions/Object3D.js +15 -0
  33. package/lib/engine/js-extensions/Object3D.js.map +1 -1
  34. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +2 -1
  35. package/lib/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js.map +1 -1
  36. package/lib/engine-components/Collider.d.ts +26 -0
  37. package/lib/engine-components/Collider.js +26 -0
  38. package/lib/engine-components/Collider.js.map +1 -1
  39. package/lib/engine-components/ContactShadows.d.ts +11 -2
  40. package/lib/engine-components/ContactShadows.js +11 -2
  41. package/lib/engine-components/ContactShadows.js.map +1 -1
  42. package/lib/engine-components/DropListener.d.ts +3 -0
  43. package/lib/engine-components/DropListener.js +44 -21
  44. package/lib/engine-components/DropListener.js.map +1 -1
  45. package/lib/engine-components/Duplicatable.d.ts +2 -2
  46. package/lib/engine-components/Duplicatable.js +2 -2
  47. package/lib/engine-components/EventList.d.ts +18 -1
  48. package/lib/engine-components/EventList.js +18 -1
  49. package/lib/engine-components/EventList.js.map +1 -1
  50. package/lib/engine-components/GroundProjection.d.ts +3 -0
  51. package/lib/engine-components/GroundProjection.js +3 -0
  52. package/lib/engine-components/GroundProjection.js.map +1 -1
  53. package/lib/engine-components/Interactable.d.ts +4 -0
  54. package/lib/engine-components/Interactable.js +4 -0
  55. package/lib/engine-components/Interactable.js.map +1 -1
  56. package/lib/engine-components/OrbitControls.d.ts +4 -2
  57. package/lib/engine-components/OrbitControls.js +31 -3
  58. package/lib/engine-components/OrbitControls.js.map +1 -1
  59. package/lib/engine-components/RigidBody.d.ts +5 -0
  60. package/lib/engine-components/RigidBody.js +5 -0
  61. package/lib/engine-components/RigidBody.js.map +1 -1
  62. package/lib/engine-components/SeeThrough.js +20 -0
  63. package/lib/engine-components/SeeThrough.js.map +1 -1
  64. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +4 -2
  65. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +69 -14
  66. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
  67. package/lib/engine-components/ui/Text.js +6 -1
  68. package/lib/engine-components/ui/Text.js.map +1 -1
  69. package/lib/engine-components/utils/LookAt.d.ts +3 -0
  70. package/lib/engine-components/utils/LookAt.js +3 -0
  71. package/lib/engine-components/utils/LookAt.js.map +1 -1
  72. package/lib/engine-components/utils/OpenURL.d.ts +2 -1
  73. package/lib/engine-components/utils/OpenURL.js +2 -1
  74. package/lib/engine-components/utils/OpenURL.js.map +1 -1
  75. package/lib/engine-components/web/ScrollFollow.js +1 -2
  76. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  77. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +2 -0
  78. package/lib/engine-components/webxr/WebARCameraBackground.js +2 -0
  79. package/lib/engine-components/webxr/WebARCameraBackground.js.map +1 -1
  80. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +1 -1
  81. package/lib/engine-components/webxr/WebARSessionRoot.js +1 -1
  82. package/lib/engine-components/webxr/WebXR.d.ts +2 -0
  83. package/lib/engine-components/webxr/WebXR.js +2 -0
  84. package/lib/engine-components/webxr/WebXR.js.map +1 -1
  85. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +29 -0
  86. package/lib/engine-components/webxr/WebXRImageTracking.js +29 -0
  87. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -1
  88. package/package.json +2 -2
  89. package/plugins/common/needle-engine.js +41 -0
  90. package/plugins/common/worker.js +129 -0
  91. package/plugins/vite/asap.js +5 -23
  92. package/plugins/vite/dependencies.js +21 -11
  93. package/plugins/vite/index.js +7 -0
  94. package/plugins/vite/needle-app.js +194 -0
  95. package/src/engine/engine_physics.ts +27 -2
  96. package/src/engine/js-extensions/Object3D.ts +24 -0
  97. package/src/engine/physics/workers/mesh-bvh/GenerateMeshBVHWorker.js +3 -1
  98. package/src/engine-components/Collider.ts +27 -1
  99. package/src/engine-components/ContactShadows.ts +12 -4
  100. package/src/engine-components/DropListener.ts +45 -24
  101. package/src/engine-components/Duplicatable.ts +2 -2
  102. package/src/engine-components/EventList.ts +18 -1
  103. package/src/engine-components/GroundProjection.ts +4 -1
  104. package/src/engine-components/Interactable.ts +4 -1
  105. package/src/engine-components/OrbitControls.ts +27 -3
  106. package/src/engine-components/RigidBody.ts +6 -1
  107. package/src/engine-components/SeeThrough.ts +42 -2
  108. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +117 -17
  109. package/src/engine-components/ui/Text.ts +11 -2
  110. package/src/engine-components/utils/LookAt.ts +3 -0
  111. package/src/engine-components/utils/OpenURL.ts +3 -2
  112. package/src/engine-components/web/ScrollFollow.ts +1 -1
  113. package/src/engine-components/webxr/WebARCameraBackground.ts +2 -0
  114. package/src/engine-components/webxr/WebARSessionRoot.ts +1 -1
  115. package/src/engine-components/webxr/WebXR.ts +2 -0
  116. package/src/engine-components/webxr/WebXRImageTracking.ts +30 -3
package/CHANGELOG.md CHANGED
@@ -4,15 +4,21 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [4.11.0-beta] - 2025-10-09
7
+ ## [4.11.0] - 2025-10-15
8
8
  - **NEW**: SeeThrough component. With this component you can easily fade-out objects between the camera and a reference point in the scene. See the [See-Through sample](<https://see-through-walls-z23hmxbz1kjfjn.needle.run/>) to see it in action
9
+ - **NEW**: [Droplistener sample](<https://engine.needle.tools/samples/droplistener/>)
9
10
  - Add: CursorFollow option to follow cursor on the full page, even when a user moves their mouse outside of the `<needle-engine>` element.
10
11
  - Add: CursorFollow `snapToSurface` option to automatically snap the object to the surface below the cursor.
11
12
  - Add: Object3D `raycastAllowed` property to disable raycasting on specific objects (e.g. for performance reasons or to ignore invisible helper objects)
13
+ - Add: OrbitControls `targetBounds` property which can be used to constrain the OrbitControls target within a defined area in the scene. A Object3D can be assigned to the property. The position and scale of this object will be used.
14
+ - Add: *Experimental* - Vite plugin to generate `needle-app.js` which encapsulates the whole website into a single web component. The `needle-app.js` file will be emitted next to index.html and can be used to directly embed the website and 3D assets into another website by importing `<url>/needle-app.js` and then using the `<needle-app></needle-app>` web component.
15
+ - Add: Object3D `contains(otherObject: Object3D)` method to check if an object is a child of another object in the scene graph
12
16
  - Fix: three nodes update camera for TSL
13
17
  - Fix: Renderer lightmaps are now updating `sharedMaterials`
14
18
  - Fix: `Gizmos.DrawWireMesh` matrix
15
19
  - Fix: Image UI color was sometimes not correctly calculated for Button color states when used with the CanvasGroup component
20
+ - Fix: ScrollMarker issue
21
+ - Improved JSDoc documentation
16
22
 
17
23
  ## [4.10.4] - 2025-10-08
18
24
  - Update: three-animation-pointer dependency to 1.0.4 to support KHR_node_visibility extension
package/README.md CHANGED
@@ -58,13 +58,15 @@ npm install @needle-tools/engine
58
58
 
59
59
  | Preview | Example | Description | Links |
60
60
  |---------|---------|-------------|-------|
61
+ | [![](https://cdn.needle.tools/static/images/changelog/scrollytelling-bike-thumbnail.jpg)](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/) | [Scrollytelling Bike Example](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/) | Timeline Animation using ScrollFollow, ViewBox and FocusRect | [Project on Github](https://github.com/needle-engine/needle-engine-bike-scrollytelling) |
62
+ | [![](https://cdn.needle.tools/static/images/changelog/see-through-walls-thumbnail.jpg)](https://engine.needle.tools/samples/see-through) | [See-Through Walls](https://engine.needle.tools/samples/see-through) | See-Through component sample |
63
+ | [![](https://cdn.needle.tools/static/images/changelog/follow-cursor-thumbnail.jpg)](https://engine.needle.tools/samples/look-at-cursor-interactive-3d-header) | [Cursor Follow](https://engine.needle.tools/samples/look-at-cursor-interactive-3d-header) | Cursor Follow sample |
61
64
  | [![](https://cdn.needle.tools/static/images/changelog/khr_animation_pointer-thumbnail.jpg?1)](https://khr-animation-pointer-zubcksz2dgy3k.needle.run/) | [Animate Anything](https://khr-animation-pointer-zubcksz2dgy3k.needle.run/) | Interactive animation system | [Code on Stackblitz](https://stackblitz.com/edit/needle-engine-animate-anything?file=src%2Fmain.ts) • [three.js Example](https://threejs.org/examples/?q=gltf#webgl_loader_gltf_animation_pointer) |
62
65
  | [![](https://cdn.needle.tools/static/images/changelog/magnifier-postprocessing-example-thumbnail.jpg)](https://antialiasing-and-postprocessing-zubcksz1o8daw.needle.run/) | [Postprocessing Effects](https://antialiasing-and-postprocessing-zubcksz1o8daw.needle.run/) | Custom magnifier effect with post-processing | [Code on Stackblitz](https://stackblitz.com/edit/needle-engine-postprocessing) |
63
66
  | [![](https://cdn.needle.tools/static/images/changelog/4.8.8-focus-thumbnail.jpg)](https://responsive-layout-z23hmxb22no6t.needle.run/) | [Camera Focus DIV 1](https://responsive-layout-z23hmxb22no6t.needle.run/) | Responsive layout with camera focus | [Code on Stackblitz](https://stackblitz.com/edit/needle-engine-camera-focus-rect?file=src%2Fsidebar.ts,index.html,src%2Fmain.ts) |
64
67
  | [![](https://cdn.needle.tools/static/images/changelog/4.8.8-focus-2-thumbnail.jpg)](https://responsive-layout-click-example-z23hmxbzuyk6y.needle.run/) | [Camera Focus DIV 2](https://responsive-layout-click-example-z23hmxbzuyk6y.needle.run/) | Click-to-move camera focus example | [Code on Stackblitz](https://stackblitz.com/edit/needle-engine-camera-focus-rect-click-to-move?file=index.html,src%2Fmain.ts) |
65
68
  | [![](https://cdn.needle.tools/static/images/changelog/fasthdr-thumbnail.jpg?1)](https://fasthdr-needle-engine-zubcks1li2iy.needle.run/) | [FastHDR Loading](https://fasthdr-needle-engine-zubcks1li2iy.needle.run/) | 10x faster than EXR, non-blocking, 95% less GPU memory | [Code on Stackblitz](https://stackblitz.com/edit/needle-fast-hdri-needle-engine) • [Learn more](https://cloud.needle.tools/hdris) |
66
69
  | [![](https://cdn.needle.tools/static/images/changelog/scrollytelling-2-thumbnail.jpg)](https://scrollytelling-2-z23hmxby7c6x.needle.run/) | [Scrollytelling Example](https://scrollytelling-2-z23hmxby7c6x.needle.run/) | Scroll, physics and cursor interaction: a playful 3D interactive scrollytelling website | [Included in Samples Package](https://samples.needle.tools) |
67
- | [![](https://cdn.needle.tools/static/images/changelog/scrollytelling-bike-thumbnail.jpg)](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/) | [Scrollytelling Bike Example](https://scrollytelling-bike-z23hmxb2gnu5a.needle.run/) | Timeline Animation using ScrollFollow, ViewBox and FocusRect | [Project on Github](https://github.com/needle-engine/needle-engine-bike-scrollytelling) |
68
70
  | | [AR Restaurant](https://ar-restaurant-example-zubcks1t14le.needle.run/) | Interactive AR restaurant experience | [Code on Github](https://github.com/needle-engine/ar-restaurant-example) |
69
71
  | | [Custom Loading Overlay](https://lods-loading-overlay-z23hmxbz29h8vr.needle.run/) | Wait for LODs with custom loading states | [Code on Stackblitz](https://stackblitz.com/edit/needle-engine-wait-for-lods) |
70
72
  | | [React Shopping Cart](https://reactshoppingcart-z23hmxbzcfkmf.needle.run/) | E-commerce integration with React | [Code on Stackblitz](https://stackblitz.com/edit/needle-react-shopping-cart-2) |
@@ -1 +1 @@
1
- {"components":[{"file":"/src/engine-components/AlignmentConstraint.ts","type":"AlignmentConstraint","extends":["Behaviour"],"properties":{"from":{"type":"GameObject | undefined"},"to":{"type":"GameObject | undefined"}}},{"file":"/src/engine-components/Animation.ts","type":"Animation","extends":["Behaviour"],"properties":{"playAutomatically":{"type":"boolean"},"randomStartTime":{"type":"boolean"},"minMaxSpeed":{"type":"Vec2"},"minMaxOffsetNormalized":{"type":"Vec2"},"loop":{"type":"boolean"},"clampWhenFinished":{"type":"boolean"},"clips":{"type":"AnimationClip[]"}}},{"file":"/src/engine-components/AnimationCurve.ts","type":"Keyframe","extends":[],"properties":{"time":{"type":"number"},"value":{"type":"number"},"inTangent":{"type":"number"},"inWeight":{"type":"number"},"outTangent":{"type":"number"},"outWeight":{"type":"number"},"weightedMode":{"type":"number"}}},{"file":"/src/engine-components/AnimationCurve.ts","type":"AnimationCurve","extends":[],"properties":{"keys":{"type":"Array<Keyframe>"}}},{"file":"/src/engine-components/Animator.ts","type":"Animator","extends":["Behaviour"],"properties":{"applyRootMotion":{"type":"boolean"},"hasRootMotion":{"type":"boolean"},"keepAnimatorControllerStateOnDisable":{"type":"boolean"},"runtimeAnimatorController":{"type":"AnimatorControllerModel | AnimatorController | undefined | null"}}},{"file":"/src/engine-components/AudioSource.ts","type":"AudioSource","extends":["Behaviour"],"properties":{"clip":{"type":"string | MediaStream"},"playOnAwake":{"type":"boolean"},"preload":{"type":"boolean"},"playInBackground":{"type":"boolean"},"pitch":{"type":"number"},"rollOffMode":{"type":"AudioRolloffMode"}}},{"file":"/src/engine-components/AxesHelper.ts","type":"AxesHelper","extends":["Behaviour"],"properties":{"length":{"type":"number"},"depthTest":{"type":"boolean"},"isGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/Camera.ts","type":"Camera","extends":["Behaviour"],"properties":{"aspect":{"type":"number"},"fieldOfView":{"type":"number | undefined"},"nearClipPlane":{"type":"any"},"farClipPlane":{"type":"any"},"orthographic":{"type":"boolean"},"orthographicSize":{"type":"number"},"ARBackgroundAlpha":{"type":"number"},"cullingMask":{"type":"number"},"backgroundBlurriness":{"type":"number | undefined"},"backgroundIntensity":{"type":"number | undefined"},"backgroundRotation":{"type":"Euler | undefined"},"environmentIntensity":{"type":"number | undefined"},"targetTexture":{"type":"RenderTexture | null"}}},{"file":"/src/engine-components/CharacterController.ts","type":"CharacterController","extends":["Behaviour"],"properties":{"center":{"type":"Vector3"},"radius":{"type":"number"},"height":{"type":"number"}}},{"file":"/src/engine-components/CharacterController.ts","type":"CharacterControllerInput","extends":["Behaviour"],"properties":{"controller":{"type":"CharacterController"},"movementSpeed":{"type":"number"},"rotationSpeed":{"type":"number"},"jumpForce":{"type":"number"},"doubleJumpForce":{"type":"number"},"animator":{"type":"Animator"}}},{"file":"/src/engine-components/Collider.ts","type":"Collider","extends":["Behaviour"],"properties":{"attachedRigidbody":{"type":"Rigidbody | null"},"isTrigger":{"type":"boolean"},"sharedMaterial":{"type":"PhysicsMaterial"},"membership":{"type":"number[]"},"filter":{"type":"number[]"}}},{"file":"/src/engine-components/Collider.ts","type":"SphereCollider","extends":["Collider"],"properties":{"radius":{"type":"number"},"center":{"type":"Vector3"}}},{"file":"/src/engine-components/Collider.ts","type":"BoxCollider","extends":["Collider"],"properties":{"size":{"type":"Vector3"},"center":{"type":"Vector3"}}},{"file":"/src/engine-components/Collider.ts","type":"MeshCollider","extends":["Collider"],"properties":{"sharedMesh":{"type":"Mesh"},"convex":{"type":"boolean"}}},{"file":"/src/engine-components/Collider.ts","type":"CapsuleCollider","extends":["Collider"],"properties":{"center":{"type":"Vector3"},"radius":{"type":"number"},"height":{"type":"number"}}},{"file":"/src/engine-components/ContactShadows.ts","type":"ContactShadows","extends":["Behaviour"],"properties":{"autoFit":{"type":"boolean"},"darkness":{"type":"number"},"opacity":{"type":"number"},"blur":{"type":"number"},"occludeBelowGround":{"type":"boolean"},"backfaceShadows":{"type":"boolean"}}},{"file":"/src/engine-components/DeviceFlag.ts","type":"DeviceFlag","extends":["Behaviour"],"properties":{"visibleOn":{"type":"DeviceType"}}},{"file":"/src/engine-components/DragControls.ts","type":"DragControls","extends":["Behaviour"],"properties":{"dragMode":{"type":"DragMode"},"snapGridResolution":{"type":"number"},"keepRotation":{"type":"boolean"},"xrDragMode":{"type":"DragMode"},"xrKeepRotation":{"type":"boolean"},"xrDistanceDragFactor":{"type":"number"},"showGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/DropListener.ts","type":"DropListener","extends":["Behaviour"],"properties":{"dropArea":{"type":"Object3D"},"fitIntoVolume":{"type":"boolean"},"fitVolumeSize":{"type":"any"},"placeAtHitPosition":{"type":"boolean"},"useNetworking":{"type":"boolean"},"onDropped":{"type":"EventList<DropListenerOnDropArguments>"}}},{"file":"/src/engine-components/Duplicatable.ts","type":"Duplicatable","extends":["Behaviour"],"properties":{"parent":{"type":"GameObject | null"},"object":{"type":"GameObject | null"},"limitCount":{"type":"any"}}},{"file":"/src/engine-components/EventTrigger.ts","type":"TriggerEvent","extends":[],"properties":{"eventID":{"type":"EventType"},"callback":{"type":"EventList<any>"}}},{"file":"/src/engine-components/EventTrigger.ts","type":"EventTrigger","extends":["Behaviour"],"properties":{"triggers":{"type":"Array<TriggerEvent>"}}},{"file":"/src/engine-components/Fog.ts","type":"Fog","extends":["Behaviour"],"properties":{"near":{"type":"number"},"far":{"type":"number"},"color":{"type":"Color"}}},{"file":"/src/engine-components/Gizmos.ts","type":"BoxGizmo","extends":["Behaviour"],"properties":{"objectBounds":{"type":"boolean"},"color":{"type":"Color"},"isGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/GridHelper.ts","type":"GridHelper","extends":["Behaviour"],"properties":{"isGizmo":{"type":"boolean"},"color0":{"type":"Color | ColorRepresentation"},"color1":{"type":"Color | ColorRepresentation"}}},{"file":"/src/engine-components/GroundProjection.ts","type":"GroundProjectedEnv","extends":["Behaviour"],"properties":{"applyOnAwake":{"type":"boolean"},"autoFit":{"type":"boolean"},"radius":{"type":"number"},"height":{"type":"number"},"arBlending":{"type":"number"}}},{"file":"/src/engine-components/Joints.ts","type":"Joint","extends":["Behaviour"],"properties":{"connectedBody":{"type":"Rigidbody"}}},{"file":"/src/engine-components/Joints.ts","type":"HingeJoint","extends":["Joint"],"properties":{"anchor":{"type":"Vector3"},"axis":{"type":"Vector3"}}},{"file":"/src/engine-components/LODGroup.ts","type":"LODModel","extends":[],"properties":{"screenRelativeTransitionHeight":{"type":"number"},"distance":{"type":"number"},"renderers":{"type":"Renderer[]"}}},{"file":"/src/engine-components/LODGroup.ts","type":"LODGroup","extends":["Behaviour"],"properties":{"localReferencePoint":{"type":"Vector3 | undefined"},"lodModels":{"type":"LODModel[]"}}},{"file":"/src/engine-components/Light.ts","type":"Light","extends":["Behaviour"],"properties":{"type":{"type":"LightType"},"color":{"type":"Color"},"shadowNearPlane":{"type":"number"},"shadowBias":{"type":"number"},"shadowNormalBias":{"type":"number"},"shadows":{"type":"LightShadows"},"lightmapBakeType":{"type":"LightmapBakeType"},"intensity":{"type":"number"}}},{"file":"/src/engine-components/LookAtConstraint.ts","type":"LookAtConstraint","extends":["Behaviour"],"properties":{"constraintActive":{"type":"boolean"},"locked":{"type":"boolean"},"sources":{"type":"Object3D[]"}}},{"file":"/src/engine-components/NeedleMenu.ts","type":"NeedleMenu","extends":["Behaviour"],"properties":{"position":{"type":"\"top\" | \"bottom\""},"showNeedleLogo":{"type":"boolean"},"showSpatialMenu":{"type":"boolean"},"createFullscreenButton":{"type":"boolean"},"createMuteButton":{"type":"boolean"},"createQRCodeButton":{"type":"boolean"}}},{"file":"/src/engine-components/NestedGltf.ts","type":"NestedGltf","extends":["Behaviour"],"properties":{"filePath":{"type":"AssetReference"},"loaded":{"type":"EventList<{ component: NestedGltf, instance: any, asset: AssetReference }>"}}},{"file":"/src/engine-components/Networking.ts","type":"Networking","extends":["Behaviour"],"properties":{"url":{"type":"string | null"},"urlParameterName":{"type":"string | null"},"localhost":{"type":"string | null"}}},{"file":"/src/engine-components/OffsetConstraint.ts","type":"OffsetConstraint","extends":["Behaviour"],"properties":{"referenceSpace":{"type":"GameObject | undefined"},"from":{"type":"GameObject | undefined"},"positionOffset":{"type":"Vector3"},"rotationOffset":{"type":"Vector3"}}},{"file":"/src/engine-components/OrbitControls.ts","type":"OrbitControls","extends":["Behaviour"],"properties":{"autoTarget":{"type":"boolean"},"autoFit":{"type":"boolean"},"enableRotate":{"type":"boolean"},"autoRotate":{"type":"boolean"},"autoRotateSpeed":{"type":"number"},"minAzimuthAngle":{"type":"number"},"maxAzimuthAngle":{"type":"number"},"minPolarAngle":{"type":"number"},"maxPolarAngle":{"type":"number"},"enableKeys":{"type":"boolean"},"enableDamping":{"type":"boolean"},"dampingFactor":{"type":"number"},"enableZoom":{"type":"boolean"},"minZoom":{"type":"number"},"maxZoom":{"type":"number"},"zoomSpeed":{"type":"number"},"enablePan":{"type":"boolean"},"lookAtConstraint":{"type":"LookAtConstraint | null"},"lookAtConstraint01":{"type":"number"},"allowInterrupt":{"type":"boolean"},"middleClickToFocus":{"type":"boolean"},"doubleClickToFocus":{"type":"boolean"},"clickBackgroundToFitScene":{"type":"number"},"targetLerpDuration":{"type":"any"}}},{"file":"/src/engine-components/ReflectionProbe.ts","type":"ReflectionProbe","extends":["Behaviour"],"properties":{"center":{"type":"Vector3"},"size":{"type":"Vector3"}}},{"file":"/src/engine-components/Renderer.ts","type":"Renderer","extends":["Behaviour"],"properties":{"receiveShadows":{"type":"boolean"},"shadowCastingMode":{"type":"ShadowCastingMode"},"lightmapIndex":{"type":"number"},"lightmapScaleOffset":{"type":"Vector4"},"enableInstancing":{"type":"boolean | boolean[] | undefined"},"renderOrder":{"type":"number[] | undefined"},"allowOcclusionWhenDynamic":{"type":"boolean"},"probeAnchor":{"type":"Object3D"},"reflectionProbeUsage":{"type":"ReflectionProbeUsage"}}},{"file":"/src/engine-components/RigidBody.ts","type":"Rigidbody","extends":["Behaviour"],"properties":{"mass":{"type":"number"},"useGravity":{"type":"boolean"},"centerOfMass":{"type":"Vector3"},"constraints":{"type":"RigidbodyConstraints"},"isKinematic":{"type":"boolean"},"drag":{"type":"number"},"angularDrag":{"type":"number"},"detectCollisions":{"type":"boolean"},"sleepThreshold":{"type":"number"},"collisionDetectionMode":{"type":"CollisionDetectionMode"}}},{"file":"/src/engine-components/SceneSwitcher.ts","type":"SceneSwitcher","extends":["Behaviour"],"properties":{"autoLoadFirstScene":{"type":"boolean"},"scenes":{"type":"AssetReference[]"},"loadingScene":{"type":"AssetReference"},"queryParameterName":{"type":"string"},"useSceneName":{"type":"boolean"},"clamp":{"type":"boolean"},"useHistory":{"type":"boolean"},"useKeyboard":{"type":"boolean"},"useSwipe":{"type":"boolean"},"useSceneLighting":{"type":"boolean"},"useSceneBackground":{"type":"boolean"},"preloadNext":{"type":"number"},"preloadPrevious":{"type":"number"},"preloadConcurrent":{"type":"number"},"createMenuButtons":{"type":"boolean"},"sceneLoadingStart":{"type":"EventList<LoadSceneEvent>"},"sceneLoadingProgress":{"type":"EventList<ProgressEvent>"},"sceneLoaded":{"type":"EventList<SceneSwitcher>"}}},{"file":"/src/engine-components/ScreenCapture.ts","type":"ScreenCapture","extends":["Behaviour"],"properties":{"allowStartOnClick":{"type":"boolean"},"autoConnect":{"type":"boolean"},"videoPlayer":{"type":"VideoPlayer | undefined"},"device":{"type":"ScreenCaptureDeviceTypes"},"deviceName":{"type":"string"}}},{"file":"/src/engine-components/SeeThrough.ts","type":"SeeThrough","extends":["Behaviour"],"properties":{"referencePoint":{"type":"Object3D | null"},"fadeDuration":{"type":"number"},"minAlpha":{"type":"number"},"useAlphaHash":{"type":"boolean"},"overrideAlpha":{"type":"number"},"autoUpdate":{"type":"boolean"}}},{"file":"/src/engine-components/ShadowCatcher.ts","type":"ShadowCatcher","extends":["Behaviour"],"properties":{"mode":{"type":"ShadowMode"},"shadowColor":{"type":"RGBAColor"}}},{"file":"/src/engine-components/Skybox.ts","type":"RemoteSkybox","extends":["Behaviour"],"properties":{"url":{"type":"string"},"allowDrop":{"type":"boolean"},"background":{"type":"boolean"},"environment":{"type":"boolean"},"allowNetworking":{"type":"boolean"}}},{"file":"/src/engine-components/SmoothFollow.ts","type":"SmoothFollow","extends":["Behaviour"],"properties":{"target":{"type":"Object3D | null"},"followFactor":{"type":"any"},"rotateFactor":{"type":"any"},"positionAxes":{"type":"Axes"}}},{"file":"/src/engine-components/SpatialTrigger.ts","type":"SpatialTriggerReceiver","extends":["Behaviour"],"properties":{"triggerMask":{"type":"number"},"onEnter":{"type":"EventList<any>"},"onStay":{"type":"EventList<any>"},"onExit":{"type":"EventList<any>"}}},{"file":"/src/engine-components/SpatialTrigger.ts","type":"SpatialTrigger","extends":["Behaviour"],"properties":{"triggerMask":{"type":"number"}}},{"file":"/src/engine-components/SpectatorCamera.ts","type":"SpectatorCamera","extends":["Behaviour"],"properties":{"useKeys":{"type":"boolean"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"Sprite","extends":[],"properties":{"guid":{"type":"string"},"texture":{"type":"Texture"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteSheet","extends":[],"properties":{"sprites":{"type":"Sprite[]"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteData","extends":[],"properties":{"spriteSheet":{"type":"SpriteSheet"},"index":{"type":"number"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteRenderer","extends":["Behaviour"],"properties":{"drawMode":{"type":"SpriteDrawMode"},"size":{"type":"Vec2"},"color":{"type":"RGBAColor"},"sharedMaterial":{"type":"Material"},"transparent":{"type":"boolean"},"cutoutThreshold":{"type":"number"},"castShadows":{"type":"boolean"},"renderOrder":{"type":"number"},"toneMapped":{"type":"boolean"}}},{"file":"/src/engine-components/SyncedCamera.ts","type":"SyncedCamera","extends":["Behaviour"],"properties":{"cameraPrefab":{"type":"Object3D | null | AssetReference"}}},{"file":"/src/engine-components/SyncedRoom.ts","type":"SyncedRoom","extends":["Behaviour"],"properties":{"roomName":{"type":"string"},"urlParameterName":{"type":"string"},"joinRandomRoom":{"type":"boolean"},"requireRoomParameter":{"type":"boolean"},"autoRejoin":{"type":"boolean"},"createJoinButton":{"type":"boolean"},"createViewOnlyButton":{"type":"boolean"},"roomPrefix":{"type":"string"}}},{"file":"/src/engine-components/TransformGizmo.ts","type":"TransformGizmo","extends":["Behaviour"],"properties":{"isGizmo":{"type":"boolean"},"translationSnap":{"type":"number"},"rotationSnapAngle":{"type":"number"},"scaleSnap":{"type":"number"}}},{"file":"/src/engine-components/VideoPlayer.ts","type":"VideoPlayer","extends":["Behaviour"],"properties":{"playOnAwake":{"type":"boolean"},"aspectMode":{"type":"AspectMode"},"clip":{"type":"string | MediaStream | null"},"source":{"type":"VideoSource"},"renderMode":{"type":"VideoRenderMode"},"targetMaterialProperty":{"type":"string"},"targetMaterialRenderer":{"type":"Renderer"},"targetTexture":{"type":"Texture"},"time":{"type":"number"},"isLooping":{"type":"boolean"},"audioOutputMode":{"type":"VideoAudioOutputMode"}}},{"file":"/src/engine-components/Voip.ts","type":"Voip","extends":["Behaviour"],"properties":{"autoConnect":{"type":"boolean"},"runInBackground":{"type":"boolean"},"createMenuButton":{"type":"boolean"}}},{"file":"/src/engine-components/avatar/AvatarBlink_Simple.ts","type":"AvatarBlink_Simple","extends":["Behaviour"],"properties":{"eyes":{"type":"Object3D[]"},"lastBlinkTime":{"type":"number"},"blinkLength":{"type":"number"},"eyesOpen":{"type":"boolean"}}},{"file":"/src/engine-components/avatar/AvatarEyeLook_Rotation.ts","type":"AvatarEyeLook_Rotation","extends":["Behaviour"],"properties":{"head":{"type":"GameObject | null"},"eyes":{"type":"GameObject[] | null"},"target":{"type":"Object3D | null"}}},{"file":"/src/engine-components/avatar/Avatar_MouthShapes.ts","type":"Avatar_MouthShapes","extends":["Behaviour"],"properties":{"idle":{"type":"Object3D[]"},"talking":{"type":"Object3D[]"}}},{"file":"/src/engine-components/export/gltf/GltfExport.ts","type":"GltfExport","extends":["Behaviour"],"properties":{"binary":{"type":"boolean"},"objects":{"type":"Object3D[]"}}},{"file":"/src/engine-components/export/usdz/USDZExporter.ts","type":"CustomBranding","extends":[],"properties":{"callToAction":{"type":"string"},"checkoutTitle":{"type":"string"},"checkoutSubtitle":{"type":"string"},"callToActionURL":{"type":"string"}}},{"file":"/src/engine-components/export/usdz/USDZExporter.ts","type":"USDZExporter","extends":["Behaviour"],"properties":{"objectToExport":{"type":"Object3D | null | undefined"},"autoExportAnimations":{"type":"boolean"},"autoExportAudioSources":{"type":"boolean"},"exportFileName":{"type":"string | null | undefined"},"customUsdzFile":{"type":"string | null | undefined"},"customBranding":{"type":"CustomBranding"},"anchoringType":{"type":"\"plane\" | \"image\" | \"face\" | \"none\""},"maxTextureSize":{"type":"256 | 512 | 1024 | 2048 | 4096 | 8192"},"planeAnchoringAlignment":{"type":"\"horizontal\" | \"vertical\" | \"any\""},"interactive":{"type":"boolean"},"physics":{"type":"boolean"},"allowCreateQuicklookButton":{"type":"boolean"},"quickLookCompatible":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"ChangeTransformOnClick","extends":["Behaviour"],"properties":{"object":{"type":"Object3D"},"target":{"type":"Object3D"},"duration":{"type":"number"},"relativeMotion":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"ChangeMaterialOnClick","extends":["Behaviour"],"properties":{"materialToSwitch":{"type":"Material"},"variantMaterial":{"type":"Material"},"fadeDuration":{"type":"number"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"SetActiveOnClick","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"toggleOnClick":{"type":"boolean"},"targetState":{"type":"boolean"},"hideSelf":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"EmphasizeOnClick","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"duration":{"type":"number"},"motionType":{"type":"EmphasizeActionMotionType"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PlayAudioOnClick","extends":["Behaviour"],"properties":{"target":{"type":"AudioSource"},"clip":{"type":"string"},"toggleOnClick":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PlayAnimationOnClick","extends":["Behaviour"],"properties":{"animator":{"type":"Animator"},"stateName":{"type":"string"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PreliminaryAction","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PreliminaryTrigger","extends":["Behaviour"],"properties":{"target":{"type":"PreliminaryAction"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"VisibilityAction","extends":["PreliminaryAction"],"properties":{"type":{"type":"VisibilityActionType"},"duration":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystem.ts","type":"ParticleSystemRenderer","extends":["Behaviour"],"properties":{"renderMode":{"type":"ParticleSystemRenderMode"},"particleMaterial":{"type":"SpriteMaterial | MeshBasicMaterial"},"trailMaterial":{"type":"SpriteMaterial | MeshBasicMaterial"},"maxParticleSize":{"type":"number"},"minParticleSize":{"type":"number"},"velocityScale":{"type":"number"},"cameraVelocityScale":{"type":"number"},"lengthScale":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystem.ts","type":"ParticleSystem","extends":["Behaviour"],"properties":{"colorOverLifetime":{"type":"ColorOverLifetimeModule"},"main":{"type":"MainModule"},"emission":{"type":"EmissionModule"},"sizeOverLifetime":{"type":"SizeOverLifetimeModule"},"shape":{"type":"ShapeModule"},"noise":{"type":"NoiseModule"},"trails":{"type":"TrailModule"},"velocityOverLifetime":{"type":"VelocityOverLifetimeModule"},"limitVelocityOverLifetime":{"type":"LimitVelocityOverLifetimeModule"},"inheritVelocity":{"type":"InheritVelocityModule"},"colorBySpeed":{"type":"ColorBySpeedModule"},"textureSheetAnimation":{"type":"TextureSheetAnimationModule"},"rotationOverLifetime":{"type":"RotationOverLifetimeModule"},"rotationBySpeed":{"type":"RotationBySpeedModule"},"sizeBySpeed":{"type":"SizeBySpeedModule"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"Gradient","extends":[],"properties":{"alphaKeys":{"type":"Array<AlphaKey>"},"colorKeys":{"type":"Array<ColorKey>"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MinMaxCurve","extends":[],"properties":{"mode":{"type":"ParticleSystemCurveMode | ParticleSystemCurveModeKeys"},"constant":{"type":"number"},"constantMin":{"type":"number"},"constantMax":{"type":"number"},"curve":{"type":"AnimationCurve"},"curveMin":{"type":"AnimationCurve"},"curveMax":{"type":"AnimationCurve"},"curveMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MinMaxGradient","extends":[],"properties":{"mode":{"type":"ParticleSystemGradientMode | ParticleSystemGradientModeKeys"},"color":{"type":"RGBAColor | Color"},"colorMin":{"type":"RGBAColor | Color"},"colorMax":{"type":"RGBAColor | Color"},"gradient":{"type":"Gradient"},"gradientMin":{"type":"Gradient"},"gradientMax":{"type":"Gradient"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MainModule","extends":[],"properties":{"gravityModifier":{"type":"MinMaxCurve"},"startColor":{"type":"MinMaxGradient"},"startDelay":{"type":"MinMaxCurve"},"startLifetime":{"type":"MinMaxCurve"},"startRotation":{"type":"MinMaxCurve"},"startRotationX":{"type":"MinMaxCurve"},"startRotationY":{"type":"MinMaxCurve"},"startRotationZ":{"type":"MinMaxCurve"},"startSize":{"type":"MinMaxCurve"},"startSizeX":{"type":"MinMaxCurve"},"startSizeY":{"type":"MinMaxCurve"},"startSizeZ":{"type":"MinMaxCurve"},"startSpeed":{"type":"MinMaxCurve"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"EmissionModule","extends":[],"properties":{"enabled":{"type":"boolean"},"bursts":{"type":"ParticleBurst[]"},"rateOverTime":{"type":"MinMaxCurve"},"rateOverTimeMultiplier":{"type":"number"},"rateOverDistance":{"type":"MinMaxCurve"},"rateOverDistanceMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ColorOverLifetimeModule","extends":[],"properties":{"color":{"type":"MinMaxGradient"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"SizeOverLifetimeModule","extends":[],"properties":{"size":{"type":"MinMaxCurve"},"x":{"type":"MinMaxCurve"},"y":{"type":"MinMaxCurve"},"z":{"type":"MinMaxCurve"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ShapeModule","extends":[],"properties":{"shapeType":{"type":"ParticleSystemShapeType"},"enabled":{"type":"boolean"},"alignToDirection":{"type":"boolean"},"angle":{"type":"number"},"arc":{"type":"number"},"arcSpread":{"type":"number"},"arcSpeedMultiplier":{"type":"number"},"arcMode":{"type":"ParticleSystemShapeMultiModeValue"},"boxThickness":{"type":"Vector3"},"position":{"type":"Vector3"},"rotation":{"type":"Vector3"},"scale":{"type":"Vector3"},"radius":{"type":"number"},"radiusThickness":{"type":"number"},"sphericalDirectionAmount":{"type":"number"},"randomDirectionAmount":{"type":"number"},"randomPositionAmount":{"type":"number"},"meshShapeType":{"type":"ParticleSystemMeshShapeType"},"meshRenderer":{"type":"MeshRenderer"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"NoiseModule","extends":[],"properties":{"damping":{"type":"boolean"},"enabled":{"type":"boolean"},"frequency":{"type":"number"},"octaveCount":{"type":"number"},"octaveMultiplier":{"type":"number"},"octaveScale":{"type":"number"},"positionAmount":{"type":"MinMaxCurve"},"quality":{"type":"number"},"remap":{"type":"MinMaxCurve"},"remapEnabled":{"type":"boolean"},"remapMultiplier":{"type":"number"},"remapX":{"type":"MinMaxCurve"},"remapXMultiplier":{"type":"number"},"remapY":{"type":"MinMaxCurve"},"remapYMultiplier":{"type":"number"},"remapZ":{"type":"MinMaxCurve"},"remapZMultiplier":{"type":"number"},"scrollSpeedMultiplier":{"type":"number"},"separateAxes":{"type":"boolean"},"strengthMultiplier":{"type":"number"},"strengthX":{"type":"MinMaxCurve"},"strengthXMultiplier":{"type":"number"},"strengthY":{"type":"MinMaxCurve"},"strengthYMultiplier":{"type":"number"},"strengthZ":{"type":"MinMaxCurve"},"strengthZMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"TrailModule","extends":[],"properties":{"enabled":{"type":"boolean"},"attachRibbonToTransform":{"type":"any"},"colorOverLifetime":{"type":"MinMaxGradient"},"colorOverTrail":{"type":"MinMaxGradient"},"dieWithParticles":{"type":"boolean"},"inheritParticleColor":{"type":"boolean"},"lifetime":{"type":"MinMaxCurve"},"lifetimeMultiplier":{"type":"number"},"minVertexDistance":{"type":"number"},"mode":{"type":"ParticleSystemTrailMode"},"ratio":{"type":"number"},"ribbonCount":{"type":"number"},"shadowBias":{"type":"number"},"sizeAffectsLifetime":{"type":"boolean"},"sizeAffectsWidth":{"type":"boolean"},"splitSubEmitterRibbons":{"type":"boolean"},"textureMode":{"type":"ParticleSystemTrailTextureMode"},"widthOverTrail":{"type":"MinMaxCurve"},"widthOverTrailMultiplier":{"type":"number"},"worldSpace":{"type":"boolean"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"VelocityOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"space":{"type":"ParticleSystemSimulationSpace"},"orbitalX":{"type":"MinMaxCurve"},"orbitalY":{"type":"MinMaxCurve"},"orbitalZ":{"type":"MinMaxCurve"},"orbitalXMultiplier":{"type":"number"},"orbitalYMultiplier":{"type":"number"},"orbitalZMultiplier":{"type":"number"},"orbitalOffsetX":{"type":"number"},"orbitalOffsetY":{"type":"number"},"orbitalOffsetZ":{"type":"number"},"speedModifier":{"type":"MinMaxCurve"},"speedModifierMultiplier":{"type":"number"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"TextureSheetAnimationModule","extends":[],"properties":{"animation":{"type":"ParticleSystemAnimationType"},"enabled":{"type":"boolean"},"cycleCount":{"type":"number"},"frameOverTime":{"type":"MinMaxCurve"},"frameOverTimeMultiplier":{"type":"number"},"numTilesX":{"type":"number"},"numTilesY":{"type":"number"},"startFrame":{"type":"MinMaxCurve"},"startFrameMultiplier":{"type":"number"},"rowMode":{"type":"ParticleSystemAnimationRowMode"},"rowIndex":{"type":"number"},"spriteCount":{"type":"number"},"timeMode":{"type":"ParticleSystemAnimationTimeMode"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"RotationOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"separateAxes":{"type":"boolean"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"RotationBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vec2"},"separateAxes":{"type":"boolean"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"LimitVelocityOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"dampen":{"type":"number"},"drag":{"type":"MinMaxCurve"},"dragMultiplier":{"type":"number"},"limit":{"type":"MinMaxCurve"},"limitMultiplier":{"type":"number"},"separateAxes":{"type":"boolean"},"limitX":{"type":"MinMaxCurve"},"limitXMultiplier":{"type":"number"},"limitY":{"type":"MinMaxCurve"},"limitYMultiplier":{"type":"number"},"limitZ":{"type":"MinMaxCurve"},"limitZMultiplier":{"type":"number"},"multiplyDragByParticleSize":{"type":"boolean"},"multiplyDragByParticleVelocity":{"type":"boolean"},"space":{"type":"ParticleSystemSimulationSpace"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"InheritVelocityModule","extends":[],"properties":{"enabled":{"type":"boolean"},"curve":{"type":"MinMaxCurve"},"curveMultiplier":{"type":"number"},"mode":{"type":"ParticleSystemInheritVelocityMode"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"SizeBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vector2"},"separateAxes":{"type":"boolean"},"size":{"type":"MinMaxCurve"},"sizeMultiplier":{"type":"number"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ColorBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vector2"},"color":{"type":"MinMaxGradient"}}},{"file":"/src/engine-components/physics/Attractor.ts","type":"Attractor","extends":["Behaviour"],"properties":{"strength":{"type":"number"},"radius":{"type":"number"},"targets":{"type":"Rigidbody[]"}}},{"file":"/src/engine-components/postprocessing/Effects/Antialiasing.ts","type":"Antialiasing","extends":["PostProcessingEffect"],"properties":{"preset":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/BloomEffect.ts","type":"BloomEffect","extends":["PostProcessingEffect"],"properties":{"threshold":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"scatter":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ChromaticAberration.ts","type":"ChromaticAberration","extends":["PostProcessingEffect"],"properties":{"intensity":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ColorAdjustments.ts","type":"ColorAdjustments","extends":["PostProcessingEffect"],"properties":{"postExposure":{"type":"VolumeParameter"},"contrast":{"type":"VolumeParameter"},"hueShift":{"type":"VolumeParameter"},"saturation":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/DepthOfField.ts","type":"DepthOfField","extends":["PostProcessingEffect"],"properties":{"mode":{"type":"DepthOfFieldMode"},"focusDistance":{"type":"VolumeParameter"},"focalLength":{"type":"VolumeParameter"},"aperture":{"type":"VolumeParameter"},"gaussianMaxRadius":{"type":"VolumeParameter"},"resolutionScale":{"type":"VolumeParameter"},"bokehScale":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Pixelation.ts","type":"PixelationEffect","extends":["PostProcessingEffect"],"properties":{"granularity":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts","type":"ScreenSpaceAmbientOcclusion","extends":["PostProcessingEffect"],"properties":{"intensity":{"type":"VolumeParameter"},"falloff":{"type":"VolumeParameter"},"samples":{"type":"VolumeParameter"},"color":{"type":"VolumeParameter"},"luminanceInfluence":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts","type":"ScreenSpaceAmbientOcclusionN8","extends":["PostProcessingEffect"],"properties":{"gammaCorrection":{"type":"boolean"},"aoRadius":{"type":"VolumeParameter"},"falloff":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"color":{"type":"VolumeParameter"},"screenspaceRadius":{"type":"boolean"},"quality":{"type":"ScreenSpaceAmbientOcclusionN8QualityMode"}}},{"file":"/src/engine-components/postprocessing/Effects/Sharpening.ts","type":"SharpeningEffect","extends":["PostProcessingEffect"],"properties":{"amount":{"type":"number"},"radius":{"type":"number"}}},{"file":"/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts","type":"TiltShiftEffect","extends":["PostProcessingEffect"],"properties":{"offset":{"type":"VolumeParameter"},"rotation":{"type":"VolumeParameter"},"focusArea":{"type":"VolumeParameter"},"feather":{"type":"VolumeParameter"},"kernelSize":{"type":"VolumeParameter"},"resolutionScale":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Tonemapping.ts","type":"ToneMappingEffect","extends":["PostProcessingEffect"],"properties":{"mode":{"type":"VolumeParameter"},"exposure":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Vignette.ts","type":"Vignette","extends":["PostProcessingEffect"],"properties":{"color":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"center":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/PostProcessingEffect.ts","type":"PostProcessingEffect","extends":["Component"],"properties":{"active":{"type":"boolean"}}},{"file":"/src/engine-components/timeline/PlayableDirector.ts","type":"PlayableDirector","extends":["Behaviour"],"properties":{"playOnAwake":{"type":"boolean"},"extrapolationMode":{"type":"DirectorWrapMode"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalAsset","extends":[],"properties":{"guid":{"type":"string"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalReceiverEvent","extends":[],"properties":{"signal":{"type":"SignalAsset"},"reaction":{"type":"EventList<void>"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalReceiver","extends":["Behaviour"],"properties":{"events":{"type":"SignalReceiverEvent[]"}}},{"file":"/src/engine-components/ui/Button.ts","type":"ButtonColors","extends":[],"properties":{"colorMultiplier":{"type":"1"},"disabledColor":{"type":"RGBAColor"},"fadeDuration":{"type":"number"},"highlightedColor":{"type":"RGBAColor"},"normalColor":{"type":"RGBAColor"},"pressedColor":{"type":"RGBAColor"},"selectedColor":{"type":"RGBAColor"}}},{"file":"/src/engine-components/ui/Button.ts","type":"Button","extends":["Behaviour"],"properties":{"onClick":{"type":"EventList<void>"},"colors":{"type":"ButtonColors"},"transition":{"type":"Transition"},"animationTriggers":{"type":"AnimationTriggers"},"animator":{"type":"Animator"},"interactable":{"type":"any"}}},{"file":"/src/engine-components/ui/Canvas.ts","type":"Canvas","extends":["UIRootComponent"],"properties":{"renderOnTop":{"type":"boolean"},"depthWrite":{"type":"boolean"},"doubleSided":{"type":"boolean"},"castShadows":{"type":"boolean"},"receiveShadows":{"type":"boolean"},"rootCanvas":{"type":"Canvas"},"worldCamera":{"type":"Camera"},"planeDistance":{"type":"number"}}},{"file":"/src/engine-components/ui/CanvasGroup.ts","type":"CanvasGroup","extends":["Behaviour"],"properties":{"interactable":{"type":"boolean"},"blocksRaycasts":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Graphic.ts","type":"Graphic","extends":["BaseUIComponent"],"properties":{"raycastTarget":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Image.ts","type":"Sprite","extends":[],"properties":{"texture":{"type":"Texture | null"}}},{"file":"/src/engine-components/ui/Image.ts","type":"Image","extends":["MaskableGraphic"],"properties":{"pixelsPerUnitMultiplier":{"type":"number"}}},{"file":"/src/engine-components/ui/InputField.ts","type":"InputField","extends":["Behaviour"],"properties":{"textComponent":{"type":"Text"},"placeholder":{"type":"Text"},"onValueChanged":{"type":"EventList<any>"},"onEndEdit":{"type":"EventList<any>"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"Padding","extends":[],"properties":{"left":{"type":"number"},"right":{"type":"number"},"top":{"type":"number"},"bottom":{"type":"number"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"LayoutGroup","extends":["Behaviour"],"properties":{"childAlignment":{"type":"TextAnchor"},"reverseArrangement":{"type":"boolean"},"spacing":{"type":"number"},"padding":{"type":"Padding"},"minWidth":{"type":"number"},"minHeight":{"type":"number"},"flexibleHeight":{"type":"number"},"flexibleWidth":{"type":"number"},"preferredHeight":{"type":"number"},"preferredWidth":{"type":"number"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"HorizontalOrVerticalLayoutGroup","extends":["LayoutGroup"],"properties":{"childControlHeight":{"type":"boolean"},"childControlWidth":{"type":"boolean"},"childForceExpandHeight":{"type":"boolean"},"childForceExpandWidth":{"type":"boolean"},"childScaleHeight":{"type":"boolean"},"childScaleWidth":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Outline.ts","type":"Outline","extends":["Behaviour"],"properties":{"effectColor":{"type":"RGBAColor"},"effectDistance":{"type":"Vector2"}}},{"file":"/src/engine-components/ui/Raycaster.ts","type":"ObjectRaycaster","extends":["Raycaster"],"properties":{"ignoreSkinnedMeshes":{"type":"any"}}},{"file":"/src/engine-components/ui/RectTransform.ts","type":"RectTransform","extends":["BaseUIComponent"],"properties":{"sizeDelta":{"type":"Vector2"},"pivot":{"type":"Vector2"},"anchorMin":{"type":"Vector2"},"anchorMax":{"type":"Vector2"}}},{"file":"/src/engine-components/ui/SpatialHtml.ts","type":"SpatialHtml","extends":["Behaviour"],"properties":{"id":{"type":"string | null"},"keepAspect":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Text.ts","type":"Text","extends":["Graphic"],"properties":{"alignment":{"type":"TextAnchor"},"verticalOverflow":{"type":"VerticalWrapMode"},"horizontalOverflow":{"type":"HorizontalWrapMode"},"lineSpacing":{"type":"number"},"supportRichText":{"type":"boolean"},"font":{"type":"string"},"fontStyle":{"type":"FontStyle"}}},{"file":"/src/engine-components/utils/LookAt.ts","type":"LookAt","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"invertForward":{"type":"boolean"},"keepUpDirection":{"type":"boolean"},"copyTargetRotation":{"type":"boolean"}}},{"file":"/src/engine-components/utils/OpenURL.ts","type":"OpenURL","extends":["Behaviour"],"properties":{"url":{"type":"string"},"mode":{"type":"OpenURLMode"},"clickable":{"type":"boolean"}}},{"file":"/src/engine-components/web/CursorFollow.ts","type":"CursorFollow","extends":["Behaviour"],"properties":{"damping":{"type":"number"},"useFullPage":{"type":"boolean"},"keepDistance":{"type":"boolean"},"snapToSurface":{"type":"boolean"}}},{"file":"/src/engine-components/web/HoverAnimation.ts","type":"HoverAnimation","extends":["Behaviour"],"properties":{"type":{"type":"ScaleClipType"},"duration":{"type":"number"},"scaleFactor":{"type":"number"},"hovered":{"type":"AnimationClip | null"},"idle":{"type":"AnimationClip | null"}}},{"file":"/src/engine-components/web/ScrollFollow.ts","type":"ScrollFollow","extends":["Behaviour"],"properties":{"target":{"type":"object[] | object | null"},"damping":{"type":"number"},"invert":{"type":"boolean"},"htmlSelector":{"type":"string | null"},"mode":{"type":"\"window\""},"changed":{"type":"EventList<ScrollFollowEvent>"}}},{"file":"/src/engine-components/web/ViewBox.ts","type":"ViewBox","extends":["Behaviour"],"properties":{"referenceFieldOfView":{"type":"number"},"debug":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/Avatar.ts","type":"Avatar","extends":["Behaviour"],"properties":{"head":{"type":"AssetReference"},"leftHand":{"type":"AssetReference"},"rightHand":{"type":"AssetReference"}}},{"file":"/src/engine-components/webxr/WebARCameraBackground.ts","type":"WebARCameraBackground","extends":["Behaviour"],"properties":{"backgroundTint":{"type":"RGBAColor"}}},{"file":"/src/engine-components/webxr/WebXR.ts","type":"WebXR","extends":["Behaviour"],"properties":{"createVRButton":{"type":"boolean"},"createARButton":{"type":"boolean"},"createSendToQuestButton":{"type":"boolean"},"createQRCode":{"type":"boolean"},"useDefaultControls":{"type":"boolean"},"showControllerModels":{"type":"boolean"},"showHandModels":{"type":"boolean"},"usePlacementReticle":{"type":"boolean"},"customARPlacementReticle":{"type":"AssetReference"},"usePlacementAdjustment":{"type":"boolean"},"arScale":{"type":"number"},"useXRAnchor":{"type":"boolean"},"autoPlace":{"type":"boolean"},"autoCenter":{"type":"boolean"},"useQuicklookExport":{"type":"boolean"},"useDepthSensing":{"type":"boolean"},"useSpatialGrab":{"type":"boolean"},"defaultAvatar":{"type":"AssetReference | boolean"}}},{"file":"/src/engine-components/webxr/WebXRImageTracking.ts","type":"WebXRImageTrackingModel","extends":[],"properties":{"image":{"type":"string"},"widthInMeters":{"type":"number"},"object":{"type":"AssetReference"},"createObjectInstance":{"type":"boolean"},"imageDoesNotMove":{"type":"boolean"},"hideWhenTrackingIsLost":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/WebXRImageTracking.ts","type":"WebXRImageTracking","extends":["Behaviour"],"properties":{"trackedImages":{"type":"WebXRImageTrackingModel[]"},"smooth":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/WebXRPlaneTracking.ts","type":"WebXRPlaneTracking","extends":["Behaviour"],"properties":{"dataTemplate":{"type":"AssetReference"},"occluder":{"type":"any"},"initiateRoomCaptureIfNoData":{"type":"any"},"usePlaneData":{"type":"boolean"},"useMeshData":{"type":"boolean"},"runInVR":{"type":"any"}}},{"file":"/src/engine-components/webxr/WebXRRig.ts","type":"XRRig","extends":["Behaviour"],"properties":{"priority":{"type":"number"}}},{"file":"/src/engine-components/webxr/XRFlag.ts","type":"XRFlag","extends":["Behaviour"],"properties":{"visibleIn":{"type":"number"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerFollow.ts","type":"XRControllerFollow","extends":["Behaviour"],"properties":{"side":{"type":"XRHandedness | number"},"controller":{"type":"boolean"},"hands":{"type":"boolean"},"controlVisibility":{"type":"boolean"},"useGripSpace":{"type":"any"},"resetTransformAfterXRSession":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerModel.ts","type":"XRControllerModel","extends":["Behaviour"],"properties":{"createControllerModel":{"type":"boolean"},"createHandModel":{"type":"boolean"},"customLeftHand":{"type":"AssetReference"},"customRightHand":{"type":"AssetReference"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerMovement.ts","type":"XRControllerMovement","extends":["Behaviour"],"properties":{"movementSpeed":{"type":"any"},"rotationStep":{"type":"any"},"useTeleport":{"type":"boolean"},"usePinchToTeleport":{"type":"boolean"},"useTeleportTarget":{"type":"any"},"useTeleportFade":{"type":"any"},"showRays":{"type":"boolean"},"showHits":{"type":"boolean"}}}]}
1
+ {"components":[{"file":"/src/engine-components/AlignmentConstraint.ts","type":"AlignmentConstraint","extends":["Behaviour"],"properties":{"from":{"type":"GameObject | undefined"},"to":{"type":"GameObject | undefined"}}},{"file":"/src/engine-components/Animation.ts","type":"Animation","extends":["Behaviour"],"properties":{"playAutomatically":{"type":"boolean"},"randomStartTime":{"type":"boolean"},"minMaxSpeed":{"type":"Vec2"},"minMaxOffsetNormalized":{"type":"Vec2"},"loop":{"type":"boolean"},"clampWhenFinished":{"type":"boolean"},"clips":{"type":"AnimationClip[]"}}},{"file":"/src/engine-components/AnimationCurve.ts","type":"Keyframe","extends":[],"properties":{"time":{"type":"number"},"value":{"type":"number"},"inTangent":{"type":"number"},"inWeight":{"type":"number"},"outTangent":{"type":"number"},"outWeight":{"type":"number"},"weightedMode":{"type":"number"}}},{"file":"/src/engine-components/AnimationCurve.ts","type":"AnimationCurve","extends":[],"properties":{"keys":{"type":"Array<Keyframe>"}}},{"file":"/src/engine-components/Animator.ts","type":"Animator","extends":["Behaviour"],"properties":{"applyRootMotion":{"type":"boolean"},"hasRootMotion":{"type":"boolean"},"keepAnimatorControllerStateOnDisable":{"type":"boolean"},"runtimeAnimatorController":{"type":"AnimatorControllerModel | AnimatorController | undefined | null"}}},{"file":"/src/engine-components/AudioSource.ts","type":"AudioSource","extends":["Behaviour"],"properties":{"clip":{"type":"string | MediaStream"},"playOnAwake":{"type":"boolean"},"preload":{"type":"boolean"},"playInBackground":{"type":"boolean"},"pitch":{"type":"number"},"rollOffMode":{"type":"AudioRolloffMode"}}},{"file":"/src/engine-components/AxesHelper.ts","type":"AxesHelper","extends":["Behaviour"],"properties":{"length":{"type":"number"},"depthTest":{"type":"boolean"},"isGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/Camera.ts","type":"Camera","extends":["Behaviour"],"properties":{"aspect":{"type":"number"},"fieldOfView":{"type":"number | undefined"},"nearClipPlane":{"type":"any"},"farClipPlane":{"type":"any"},"orthographic":{"type":"boolean"},"orthographicSize":{"type":"number"},"ARBackgroundAlpha":{"type":"number"},"cullingMask":{"type":"number"},"backgroundBlurriness":{"type":"number | undefined"},"backgroundIntensity":{"type":"number | undefined"},"backgroundRotation":{"type":"Euler | undefined"},"environmentIntensity":{"type":"number | undefined"},"targetTexture":{"type":"RenderTexture | null"}}},{"file":"/src/engine-components/CharacterController.ts","type":"CharacterController","extends":["Behaviour"],"properties":{"center":{"type":"Vector3"},"radius":{"type":"number"},"height":{"type":"number"}}},{"file":"/src/engine-components/CharacterController.ts","type":"CharacterControllerInput","extends":["Behaviour"],"properties":{"controller":{"type":"CharacterController"},"movementSpeed":{"type":"number"},"rotationSpeed":{"type":"number"},"jumpForce":{"type":"number"},"doubleJumpForce":{"type":"number"},"animator":{"type":"Animator"}}},{"file":"/src/engine-components/Collider.ts","type":"Collider","extends":["Behaviour"],"properties":{"attachedRigidbody":{"type":"Rigidbody | null"},"isTrigger":{"type":"boolean"},"sharedMaterial":{"type":"PhysicsMaterial"},"membership":{"type":"number[]"},"filter":{"type":"number[]"}}},{"file":"/src/engine-components/Collider.ts","type":"SphereCollider","extends":["Collider"],"properties":{"radius":{"type":"number"},"center":{"type":"Vector3"}}},{"file":"/src/engine-components/Collider.ts","type":"BoxCollider","extends":["Collider"],"properties":{"size":{"type":"Vector3"},"center":{"type":"Vector3"}}},{"file":"/src/engine-components/Collider.ts","type":"MeshCollider","extends":["Collider"],"properties":{"sharedMesh":{"type":"Mesh"},"convex":{"type":"boolean"}}},{"file":"/src/engine-components/Collider.ts","type":"CapsuleCollider","extends":["Collider"],"properties":{"center":{"type":"Vector3"},"radius":{"type":"number"},"height":{"type":"number"}}},{"file":"/src/engine-components/ContactShadows.ts","type":"ContactShadows","extends":["Behaviour"],"properties":{"autoFit":{"type":"boolean"},"darkness":{"type":"number"},"opacity":{"type":"number"},"blur":{"type":"number"},"occludeBelowGround":{"type":"boolean"},"backfaceShadows":{"type":"boolean"}}},{"file":"/src/engine-components/DeviceFlag.ts","type":"DeviceFlag","extends":["Behaviour"],"properties":{"visibleOn":{"type":"DeviceType"}}},{"file":"/src/engine-components/DragControls.ts","type":"DragControls","extends":["Behaviour"],"properties":{"dragMode":{"type":"DragMode"},"snapGridResolution":{"type":"number"},"keepRotation":{"type":"boolean"},"xrDragMode":{"type":"DragMode"},"xrKeepRotation":{"type":"boolean"},"xrDistanceDragFactor":{"type":"number"},"showGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/DropListener.ts","type":"DropListener","extends":["Behaviour"],"properties":{"dropArea":{"type":"Object3D"},"fitIntoVolume":{"type":"boolean"},"fitVolumeSize":{"type":"any"},"placeAtHitPosition":{"type":"boolean"},"useNetworking":{"type":"boolean"},"onDropped":{"type":"EventList<DropListenerOnDropArguments>"}}},{"file":"/src/engine-components/Duplicatable.ts","type":"Duplicatable","extends":["Behaviour"],"properties":{"parent":{"type":"GameObject | null"},"object":{"type":"GameObject | null"},"limitCount":{"type":"any"}}},{"file":"/src/engine-components/EventTrigger.ts","type":"TriggerEvent","extends":[],"properties":{"eventID":{"type":"EventType"},"callback":{"type":"EventList<any>"}}},{"file":"/src/engine-components/EventTrigger.ts","type":"EventTrigger","extends":["Behaviour"],"properties":{"triggers":{"type":"Array<TriggerEvent>"}}},{"file":"/src/engine-components/Fog.ts","type":"Fog","extends":["Behaviour"],"properties":{"near":{"type":"number"},"far":{"type":"number"},"color":{"type":"Color"}}},{"file":"/src/engine-components/Gizmos.ts","type":"BoxGizmo","extends":["Behaviour"],"properties":{"objectBounds":{"type":"boolean"},"color":{"type":"Color"},"isGizmo":{"type":"boolean"}}},{"file":"/src/engine-components/GridHelper.ts","type":"GridHelper","extends":["Behaviour"],"properties":{"isGizmo":{"type":"boolean"},"color0":{"type":"Color | ColorRepresentation"},"color1":{"type":"Color | ColorRepresentation"}}},{"file":"/src/engine-components/GroundProjection.ts","type":"GroundProjectedEnv","extends":["Behaviour"],"properties":{"applyOnAwake":{"type":"boolean"},"autoFit":{"type":"boolean"},"radius":{"type":"number"},"height":{"type":"number"},"arBlending":{"type":"number"}}},{"file":"/src/engine-components/Joints.ts","type":"Joint","extends":["Behaviour"],"properties":{"connectedBody":{"type":"Rigidbody"}}},{"file":"/src/engine-components/Joints.ts","type":"HingeJoint","extends":["Joint"],"properties":{"anchor":{"type":"Vector3"},"axis":{"type":"Vector3"}}},{"file":"/src/engine-components/LODGroup.ts","type":"LODModel","extends":[],"properties":{"screenRelativeTransitionHeight":{"type":"number"},"distance":{"type":"number"},"renderers":{"type":"Renderer[]"}}},{"file":"/src/engine-components/LODGroup.ts","type":"LODGroup","extends":["Behaviour"],"properties":{"localReferencePoint":{"type":"Vector3 | undefined"},"lodModels":{"type":"LODModel[]"}}},{"file":"/src/engine-components/Light.ts","type":"Light","extends":["Behaviour"],"properties":{"type":{"type":"LightType"},"color":{"type":"Color"},"shadowNearPlane":{"type":"number"},"shadowBias":{"type":"number"},"shadowNormalBias":{"type":"number"},"shadows":{"type":"LightShadows"},"lightmapBakeType":{"type":"LightmapBakeType"},"intensity":{"type":"number"}}},{"file":"/src/engine-components/LookAtConstraint.ts","type":"LookAtConstraint","extends":["Behaviour"],"properties":{"constraintActive":{"type":"boolean"},"locked":{"type":"boolean"},"sources":{"type":"Object3D[]"}}},{"file":"/src/engine-components/NeedleMenu.ts","type":"NeedleMenu","extends":["Behaviour"],"properties":{"position":{"type":"\"top\" | \"bottom\""},"showNeedleLogo":{"type":"boolean"},"showSpatialMenu":{"type":"boolean"},"createFullscreenButton":{"type":"boolean"},"createMuteButton":{"type":"boolean"},"createQRCodeButton":{"type":"boolean"}}},{"file":"/src/engine-components/NestedGltf.ts","type":"NestedGltf","extends":["Behaviour"],"properties":{"filePath":{"type":"AssetReference"},"loaded":{"type":"EventList<{ component: NestedGltf, instance: any, asset: AssetReference }>"}}},{"file":"/src/engine-components/Networking.ts","type":"Networking","extends":["Behaviour"],"properties":{"url":{"type":"string | null"},"urlParameterName":{"type":"string | null"},"localhost":{"type":"string | null"}}},{"file":"/src/engine-components/OffsetConstraint.ts","type":"OffsetConstraint","extends":["Behaviour"],"properties":{"referenceSpace":{"type":"GameObject | undefined"},"from":{"type":"GameObject | undefined"},"positionOffset":{"type":"Vector3"},"rotationOffset":{"type":"Vector3"}}},{"file":"/src/engine-components/OrbitControls.ts","type":"OrbitControls","extends":["Behaviour"],"properties":{"autoTarget":{"type":"boolean"},"autoFit":{"type":"boolean"},"enableRotate":{"type":"boolean"},"autoRotate":{"type":"boolean"},"autoRotateSpeed":{"type":"number"},"minAzimuthAngle":{"type":"number"},"maxAzimuthAngle":{"type":"number"},"minPolarAngle":{"type":"number"},"maxPolarAngle":{"type":"number"},"enableKeys":{"type":"boolean"},"enableDamping":{"type":"boolean"},"dampingFactor":{"type":"number"},"enableZoom":{"type":"boolean"},"minZoom":{"type":"number"},"maxZoom":{"type":"number"},"zoomSpeed":{"type":"number"},"enablePan":{"type":"boolean"},"lookAtConstraint":{"type":"LookAtConstraint | null"},"lookAtConstraint01":{"type":"number"},"allowInterrupt":{"type":"boolean"},"middleClickToFocus":{"type":"boolean"},"doubleClickToFocus":{"type":"boolean"},"clickBackgroundToFitScene":{"type":"number"},"targetBounds":{"type":"Object3D | null"}}},{"file":"/src/engine-components/ReflectionProbe.ts","type":"ReflectionProbe","extends":["Behaviour"],"properties":{"center":{"type":"Vector3"},"size":{"type":"Vector3"}}},{"file":"/src/engine-components/Renderer.ts","type":"Renderer","extends":["Behaviour"],"properties":{"receiveShadows":{"type":"boolean"},"shadowCastingMode":{"type":"ShadowCastingMode"},"lightmapIndex":{"type":"number"},"lightmapScaleOffset":{"type":"Vector4"},"enableInstancing":{"type":"boolean | boolean[] | undefined"},"renderOrder":{"type":"number[] | undefined"},"allowOcclusionWhenDynamic":{"type":"boolean"},"probeAnchor":{"type":"Object3D"},"reflectionProbeUsage":{"type":"ReflectionProbeUsage"}}},{"file":"/src/engine-components/RigidBody.ts","type":"Rigidbody","extends":["Behaviour"],"properties":{"mass":{"type":"number"},"useGravity":{"type":"boolean"},"centerOfMass":{"type":"Vector3"},"constraints":{"type":"RigidbodyConstraints"},"isKinematic":{"type":"boolean"},"drag":{"type":"number"},"angularDrag":{"type":"number"},"detectCollisions":{"type":"boolean"},"sleepThreshold":{"type":"number"},"collisionDetectionMode":{"type":"CollisionDetectionMode"}}},{"file":"/src/engine-components/SceneSwitcher.ts","type":"SceneSwitcher","extends":["Behaviour"],"properties":{"autoLoadFirstScene":{"type":"boolean"},"scenes":{"type":"AssetReference[]"},"loadingScene":{"type":"AssetReference"},"queryParameterName":{"type":"string"},"useSceneName":{"type":"boolean"},"clamp":{"type":"boolean"},"useHistory":{"type":"boolean"},"useKeyboard":{"type":"boolean"},"useSwipe":{"type":"boolean"},"useSceneLighting":{"type":"boolean"},"useSceneBackground":{"type":"boolean"},"preloadNext":{"type":"number"},"preloadPrevious":{"type":"number"},"preloadConcurrent":{"type":"number"},"createMenuButtons":{"type":"boolean"},"sceneLoadingStart":{"type":"EventList<LoadSceneEvent>"},"sceneLoadingProgress":{"type":"EventList<ProgressEvent>"},"sceneLoaded":{"type":"EventList<SceneSwitcher>"}}},{"file":"/src/engine-components/ScreenCapture.ts","type":"ScreenCapture","extends":["Behaviour"],"properties":{"allowStartOnClick":{"type":"boolean"},"autoConnect":{"type":"boolean"},"videoPlayer":{"type":"VideoPlayer | undefined"},"device":{"type":"ScreenCaptureDeviceTypes"},"deviceName":{"type":"string"}}},{"file":"/src/engine-components/SeeThrough.ts","type":"SeeThrough","extends":["Behaviour"],"properties":{"referencePoint":{"type":"Object3D | null"},"fadeDuration":{"type":"number"},"minAlpha":{"type":"number"},"useAlphaHash":{"type":"boolean"},"overrideAlpha":{"type":"number"},"autoUpdate":{"type":"boolean"}}},{"file":"/src/engine-components/ShadowCatcher.ts","type":"ShadowCatcher","extends":["Behaviour"],"properties":{"mode":{"type":"ShadowMode"},"shadowColor":{"type":"RGBAColor"}}},{"file":"/src/engine-components/Skybox.ts","type":"RemoteSkybox","extends":["Behaviour"],"properties":{"url":{"type":"string"},"allowDrop":{"type":"boolean"},"background":{"type":"boolean"},"environment":{"type":"boolean"},"allowNetworking":{"type":"boolean"}}},{"file":"/src/engine-components/SmoothFollow.ts","type":"SmoothFollow","extends":["Behaviour"],"properties":{"target":{"type":"Object3D | null"},"followFactor":{"type":"any"},"rotateFactor":{"type":"any"},"positionAxes":{"type":"Axes"}}},{"file":"/src/engine-components/SpatialTrigger.ts","type":"SpatialTriggerReceiver","extends":["Behaviour"],"properties":{"triggerMask":{"type":"number"},"onEnter":{"type":"EventList<any>"},"onStay":{"type":"EventList<any>"},"onExit":{"type":"EventList<any>"}}},{"file":"/src/engine-components/SpatialTrigger.ts","type":"SpatialTrigger","extends":["Behaviour"],"properties":{"triggerMask":{"type":"number"}}},{"file":"/src/engine-components/SpectatorCamera.ts","type":"SpectatorCamera","extends":["Behaviour"],"properties":{"useKeys":{"type":"boolean"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"Sprite","extends":[],"properties":{"guid":{"type":"string"},"texture":{"type":"Texture"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteSheet","extends":[],"properties":{"sprites":{"type":"Sprite[]"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteData","extends":[],"properties":{"spriteSheet":{"type":"SpriteSheet"},"index":{"type":"number"}}},{"file":"/src/engine-components/SpriteRenderer.ts","type":"SpriteRenderer","extends":["Behaviour"],"properties":{"drawMode":{"type":"SpriteDrawMode"},"size":{"type":"Vec2"},"color":{"type":"RGBAColor"},"sharedMaterial":{"type":"Material"},"transparent":{"type":"boolean"},"cutoutThreshold":{"type":"number"},"castShadows":{"type":"boolean"},"renderOrder":{"type":"number"},"toneMapped":{"type":"boolean"}}},{"file":"/src/engine-components/SyncedCamera.ts","type":"SyncedCamera","extends":["Behaviour"],"properties":{"cameraPrefab":{"type":"Object3D | null | AssetReference"}}},{"file":"/src/engine-components/SyncedRoom.ts","type":"SyncedRoom","extends":["Behaviour"],"properties":{"roomName":{"type":"string"},"urlParameterName":{"type":"string"},"joinRandomRoom":{"type":"boolean"},"requireRoomParameter":{"type":"boolean"},"autoRejoin":{"type":"boolean"},"createJoinButton":{"type":"boolean"},"createViewOnlyButton":{"type":"boolean"},"roomPrefix":{"type":"string"}}},{"file":"/src/engine-components/TransformGizmo.ts","type":"TransformGizmo","extends":["Behaviour"],"properties":{"isGizmo":{"type":"boolean"},"translationSnap":{"type":"number"},"rotationSnapAngle":{"type":"number"},"scaleSnap":{"type":"number"}}},{"file":"/src/engine-components/VideoPlayer.ts","type":"VideoPlayer","extends":["Behaviour"],"properties":{"playOnAwake":{"type":"boolean"},"aspectMode":{"type":"AspectMode"},"clip":{"type":"string | MediaStream | null"},"source":{"type":"VideoSource"},"renderMode":{"type":"VideoRenderMode"},"targetMaterialProperty":{"type":"string"},"targetMaterialRenderer":{"type":"Renderer"},"targetTexture":{"type":"Texture"},"time":{"type":"number"},"isLooping":{"type":"boolean"},"audioOutputMode":{"type":"VideoAudioOutputMode"}}},{"file":"/src/engine-components/Voip.ts","type":"Voip","extends":["Behaviour"],"properties":{"autoConnect":{"type":"boolean"},"runInBackground":{"type":"boolean"},"createMenuButton":{"type":"boolean"}}},{"file":"/src/engine-components/avatar/AvatarBlink_Simple.ts","type":"AvatarBlink_Simple","extends":["Behaviour"],"properties":{"eyes":{"type":"Object3D[]"},"lastBlinkTime":{"type":"number"},"blinkLength":{"type":"number"},"eyesOpen":{"type":"boolean"}}},{"file":"/src/engine-components/avatar/AvatarEyeLook_Rotation.ts","type":"AvatarEyeLook_Rotation","extends":["Behaviour"],"properties":{"head":{"type":"GameObject | null"},"eyes":{"type":"GameObject[] | null"},"target":{"type":"Object3D | null"}}},{"file":"/src/engine-components/avatar/Avatar_MouthShapes.ts","type":"Avatar_MouthShapes","extends":["Behaviour"],"properties":{"idle":{"type":"Object3D[]"},"talking":{"type":"Object3D[]"}}},{"file":"/src/engine-components/export/gltf/GltfExport.ts","type":"GltfExport","extends":["Behaviour"],"properties":{"binary":{"type":"boolean"},"objects":{"type":"Object3D[]"}}},{"file":"/src/engine-components/export/usdz/USDZExporter.ts","type":"CustomBranding","extends":[],"properties":{"callToAction":{"type":"string"},"checkoutTitle":{"type":"string"},"checkoutSubtitle":{"type":"string"},"callToActionURL":{"type":"string"}}},{"file":"/src/engine-components/export/usdz/USDZExporter.ts","type":"USDZExporter","extends":["Behaviour"],"properties":{"objectToExport":{"type":"Object3D | null | undefined"},"autoExportAnimations":{"type":"boolean"},"autoExportAudioSources":{"type":"boolean"},"exportFileName":{"type":"string | null | undefined"},"customUsdzFile":{"type":"string | null | undefined"},"customBranding":{"type":"CustomBranding"},"anchoringType":{"type":"\"plane\" | \"image\" | \"face\" | \"none\""},"maxTextureSize":{"type":"256 | 512 | 1024 | 2048 | 4096 | 8192"},"planeAnchoringAlignment":{"type":"\"horizontal\" | \"vertical\" | \"any\""},"interactive":{"type":"boolean"},"physics":{"type":"boolean"},"allowCreateQuicklookButton":{"type":"boolean"},"quickLookCompatible":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"ChangeTransformOnClick","extends":["Behaviour"],"properties":{"object":{"type":"Object3D"},"target":{"type":"Object3D"},"duration":{"type":"number"},"relativeMotion":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"ChangeMaterialOnClick","extends":["Behaviour"],"properties":{"materialToSwitch":{"type":"Material"},"variantMaterial":{"type":"Material"},"fadeDuration":{"type":"number"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"SetActiveOnClick","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"toggleOnClick":{"type":"boolean"},"targetState":{"type":"boolean"},"hideSelf":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"EmphasizeOnClick","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"duration":{"type":"number"},"motionType":{"type":"EmphasizeActionMotionType"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PlayAudioOnClick","extends":["Behaviour"],"properties":{"target":{"type":"AudioSource"},"clip":{"type":"string"},"toggleOnClick":{"type":"boolean"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PlayAnimationOnClick","extends":["Behaviour"],"properties":{"animator":{"type":"Animator"},"stateName":{"type":"string"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PreliminaryAction","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"PreliminaryTrigger","extends":["Behaviour"],"properties":{"target":{"type":"PreliminaryAction"}}},{"file":"/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts","type":"VisibilityAction","extends":["PreliminaryAction"],"properties":{"type":{"type":"VisibilityActionType"},"duration":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystem.ts","type":"ParticleSystemRenderer","extends":["Behaviour"],"properties":{"renderMode":{"type":"ParticleSystemRenderMode"},"particleMaterial":{"type":"SpriteMaterial | MeshBasicMaterial"},"trailMaterial":{"type":"SpriteMaterial | MeshBasicMaterial"},"maxParticleSize":{"type":"number"},"minParticleSize":{"type":"number"},"velocityScale":{"type":"number"},"cameraVelocityScale":{"type":"number"},"lengthScale":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystem.ts","type":"ParticleSystem","extends":["Behaviour"],"properties":{"colorOverLifetime":{"type":"ColorOverLifetimeModule"},"main":{"type":"MainModule"},"emission":{"type":"EmissionModule"},"sizeOverLifetime":{"type":"SizeOverLifetimeModule"},"shape":{"type":"ShapeModule"},"noise":{"type":"NoiseModule"},"trails":{"type":"TrailModule"},"velocityOverLifetime":{"type":"VelocityOverLifetimeModule"},"limitVelocityOverLifetime":{"type":"LimitVelocityOverLifetimeModule"},"inheritVelocity":{"type":"InheritVelocityModule"},"colorBySpeed":{"type":"ColorBySpeedModule"},"textureSheetAnimation":{"type":"TextureSheetAnimationModule"},"rotationOverLifetime":{"type":"RotationOverLifetimeModule"},"rotationBySpeed":{"type":"RotationBySpeedModule"},"sizeBySpeed":{"type":"SizeBySpeedModule"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"Gradient","extends":[],"properties":{"alphaKeys":{"type":"Array<AlphaKey>"},"colorKeys":{"type":"Array<ColorKey>"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MinMaxCurve","extends":[],"properties":{"mode":{"type":"ParticleSystemCurveMode | ParticleSystemCurveModeKeys"},"constant":{"type":"number"},"constantMin":{"type":"number"},"constantMax":{"type":"number"},"curve":{"type":"AnimationCurve"},"curveMin":{"type":"AnimationCurve"},"curveMax":{"type":"AnimationCurve"},"curveMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MinMaxGradient","extends":[],"properties":{"mode":{"type":"ParticleSystemGradientMode | ParticleSystemGradientModeKeys"},"color":{"type":"RGBAColor | Color"},"colorMin":{"type":"RGBAColor | Color"},"colorMax":{"type":"RGBAColor | Color"},"gradient":{"type":"Gradient"},"gradientMin":{"type":"Gradient"},"gradientMax":{"type":"Gradient"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"MainModule","extends":[],"properties":{"gravityModifier":{"type":"MinMaxCurve"},"startColor":{"type":"MinMaxGradient"},"startDelay":{"type":"MinMaxCurve"},"startLifetime":{"type":"MinMaxCurve"},"startRotation":{"type":"MinMaxCurve"},"startRotationX":{"type":"MinMaxCurve"},"startRotationY":{"type":"MinMaxCurve"},"startRotationZ":{"type":"MinMaxCurve"},"startSize":{"type":"MinMaxCurve"},"startSizeX":{"type":"MinMaxCurve"},"startSizeY":{"type":"MinMaxCurve"},"startSizeZ":{"type":"MinMaxCurve"},"startSpeed":{"type":"MinMaxCurve"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"EmissionModule","extends":[],"properties":{"enabled":{"type":"boolean"},"bursts":{"type":"ParticleBurst[]"},"rateOverTime":{"type":"MinMaxCurve"},"rateOverTimeMultiplier":{"type":"number"},"rateOverDistance":{"type":"MinMaxCurve"},"rateOverDistanceMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ColorOverLifetimeModule","extends":[],"properties":{"color":{"type":"MinMaxGradient"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"SizeOverLifetimeModule","extends":[],"properties":{"size":{"type":"MinMaxCurve"},"x":{"type":"MinMaxCurve"},"y":{"type":"MinMaxCurve"},"z":{"type":"MinMaxCurve"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ShapeModule","extends":[],"properties":{"shapeType":{"type":"ParticleSystemShapeType"},"enabled":{"type":"boolean"},"alignToDirection":{"type":"boolean"},"angle":{"type":"number"},"arc":{"type":"number"},"arcSpread":{"type":"number"},"arcSpeedMultiplier":{"type":"number"},"arcMode":{"type":"ParticleSystemShapeMultiModeValue"},"boxThickness":{"type":"Vector3"},"position":{"type":"Vector3"},"rotation":{"type":"Vector3"},"scale":{"type":"Vector3"},"radius":{"type":"number"},"radiusThickness":{"type":"number"},"sphericalDirectionAmount":{"type":"number"},"randomDirectionAmount":{"type":"number"},"randomPositionAmount":{"type":"number"},"meshShapeType":{"type":"ParticleSystemMeshShapeType"},"meshRenderer":{"type":"MeshRenderer"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"NoiseModule","extends":[],"properties":{"damping":{"type":"boolean"},"enabled":{"type":"boolean"},"frequency":{"type":"number"},"octaveCount":{"type":"number"},"octaveMultiplier":{"type":"number"},"octaveScale":{"type":"number"},"positionAmount":{"type":"MinMaxCurve"},"quality":{"type":"number"},"remap":{"type":"MinMaxCurve"},"remapEnabled":{"type":"boolean"},"remapMultiplier":{"type":"number"},"remapX":{"type":"MinMaxCurve"},"remapXMultiplier":{"type":"number"},"remapY":{"type":"MinMaxCurve"},"remapYMultiplier":{"type":"number"},"remapZ":{"type":"MinMaxCurve"},"remapZMultiplier":{"type":"number"},"scrollSpeedMultiplier":{"type":"number"},"separateAxes":{"type":"boolean"},"strengthMultiplier":{"type":"number"},"strengthX":{"type":"MinMaxCurve"},"strengthXMultiplier":{"type":"number"},"strengthY":{"type":"MinMaxCurve"},"strengthYMultiplier":{"type":"number"},"strengthZ":{"type":"MinMaxCurve"},"strengthZMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"TrailModule","extends":[],"properties":{"enabled":{"type":"boolean"},"attachRibbonToTransform":{"type":"any"},"colorOverLifetime":{"type":"MinMaxGradient"},"colorOverTrail":{"type":"MinMaxGradient"},"dieWithParticles":{"type":"boolean"},"inheritParticleColor":{"type":"boolean"},"lifetime":{"type":"MinMaxCurve"},"lifetimeMultiplier":{"type":"number"},"minVertexDistance":{"type":"number"},"mode":{"type":"ParticleSystemTrailMode"},"ratio":{"type":"number"},"ribbonCount":{"type":"number"},"shadowBias":{"type":"number"},"sizeAffectsLifetime":{"type":"boolean"},"sizeAffectsWidth":{"type":"boolean"},"splitSubEmitterRibbons":{"type":"boolean"},"textureMode":{"type":"ParticleSystemTrailTextureMode"},"widthOverTrail":{"type":"MinMaxCurve"},"widthOverTrailMultiplier":{"type":"number"},"worldSpace":{"type":"boolean"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"VelocityOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"space":{"type":"ParticleSystemSimulationSpace"},"orbitalX":{"type":"MinMaxCurve"},"orbitalY":{"type":"MinMaxCurve"},"orbitalZ":{"type":"MinMaxCurve"},"orbitalXMultiplier":{"type":"number"},"orbitalYMultiplier":{"type":"number"},"orbitalZMultiplier":{"type":"number"},"orbitalOffsetX":{"type":"number"},"orbitalOffsetY":{"type":"number"},"orbitalOffsetZ":{"type":"number"},"speedModifier":{"type":"MinMaxCurve"},"speedModifierMultiplier":{"type":"number"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"TextureSheetAnimationModule","extends":[],"properties":{"animation":{"type":"ParticleSystemAnimationType"},"enabled":{"type":"boolean"},"cycleCount":{"type":"number"},"frameOverTime":{"type":"MinMaxCurve"},"frameOverTimeMultiplier":{"type":"number"},"numTilesX":{"type":"number"},"numTilesY":{"type":"number"},"startFrame":{"type":"MinMaxCurve"},"startFrameMultiplier":{"type":"number"},"rowMode":{"type":"ParticleSystemAnimationRowMode"},"rowIndex":{"type":"number"},"spriteCount":{"type":"number"},"timeMode":{"type":"ParticleSystemAnimationTimeMode"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"RotationOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"separateAxes":{"type":"boolean"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"RotationBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vec2"},"separateAxes":{"type":"boolean"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"LimitVelocityOverLifetimeModule","extends":[],"properties":{"enabled":{"type":"boolean"},"dampen":{"type":"number"},"drag":{"type":"MinMaxCurve"},"dragMultiplier":{"type":"number"},"limit":{"type":"MinMaxCurve"},"limitMultiplier":{"type":"number"},"separateAxes":{"type":"boolean"},"limitX":{"type":"MinMaxCurve"},"limitXMultiplier":{"type":"number"},"limitY":{"type":"MinMaxCurve"},"limitYMultiplier":{"type":"number"},"limitZ":{"type":"MinMaxCurve"},"limitZMultiplier":{"type":"number"},"multiplyDragByParticleSize":{"type":"boolean"},"multiplyDragByParticleVelocity":{"type":"boolean"},"space":{"type":"ParticleSystemSimulationSpace"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"InheritVelocityModule","extends":[],"properties":{"enabled":{"type":"boolean"},"curve":{"type":"MinMaxCurve"},"curveMultiplier":{"type":"number"},"mode":{"type":"ParticleSystemInheritVelocityMode"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"SizeBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vector2"},"separateAxes":{"type":"boolean"},"size":{"type":"MinMaxCurve"},"sizeMultiplier":{"type":"number"},"x":{"type":"MinMaxCurve"},"xMultiplier":{"type":"number"},"y":{"type":"MinMaxCurve"},"yMultiplier":{"type":"number"},"z":{"type":"MinMaxCurve"},"zMultiplier":{"type":"number"}}},{"file":"/src/engine-components/particlesystem/ParticleSystemModules.ts","type":"ColorBySpeedModule","extends":[],"properties":{"enabled":{"type":"boolean"},"range":{"type":"Vector2"},"color":{"type":"MinMaxGradient"}}},{"file":"/src/engine-components/physics/Attractor.ts","type":"Attractor","extends":["Behaviour"],"properties":{"strength":{"type":"number"},"radius":{"type":"number"},"targets":{"type":"Rigidbody[]"}}},{"file":"/src/engine-components/postprocessing/Effects/Antialiasing.ts","type":"Antialiasing","extends":["PostProcessingEffect"],"properties":{"preset":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/BloomEffect.ts","type":"BloomEffect","extends":["PostProcessingEffect"],"properties":{"threshold":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"scatter":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ChromaticAberration.ts","type":"ChromaticAberration","extends":["PostProcessingEffect"],"properties":{"intensity":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ColorAdjustments.ts","type":"ColorAdjustments","extends":["PostProcessingEffect"],"properties":{"postExposure":{"type":"VolumeParameter"},"contrast":{"type":"VolumeParameter"},"hueShift":{"type":"VolumeParameter"},"saturation":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/DepthOfField.ts","type":"DepthOfField","extends":["PostProcessingEffect"],"properties":{"mode":{"type":"DepthOfFieldMode"},"focusDistance":{"type":"VolumeParameter"},"focalLength":{"type":"VolumeParameter"},"aperture":{"type":"VolumeParameter"},"gaussianMaxRadius":{"type":"VolumeParameter"},"resolutionScale":{"type":"VolumeParameter"},"bokehScale":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Pixelation.ts","type":"PixelationEffect","extends":["PostProcessingEffect"],"properties":{"granularity":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts","type":"ScreenSpaceAmbientOcclusion","extends":["PostProcessingEffect"],"properties":{"intensity":{"type":"VolumeParameter"},"falloff":{"type":"VolumeParameter"},"samples":{"type":"VolumeParameter"},"color":{"type":"VolumeParameter"},"luminanceInfluence":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts","type":"ScreenSpaceAmbientOcclusionN8","extends":["PostProcessingEffect"],"properties":{"gammaCorrection":{"type":"boolean"},"aoRadius":{"type":"VolumeParameter"},"falloff":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"color":{"type":"VolumeParameter"},"screenspaceRadius":{"type":"boolean"},"quality":{"type":"ScreenSpaceAmbientOcclusionN8QualityMode"}}},{"file":"/src/engine-components/postprocessing/Effects/Sharpening.ts","type":"SharpeningEffect","extends":["PostProcessingEffect"],"properties":{"amount":{"type":"number"},"radius":{"type":"number"}}},{"file":"/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts","type":"TiltShiftEffect","extends":["PostProcessingEffect"],"properties":{"offset":{"type":"VolumeParameter"},"rotation":{"type":"VolumeParameter"},"focusArea":{"type":"VolumeParameter"},"feather":{"type":"VolumeParameter"},"kernelSize":{"type":"VolumeParameter"},"resolutionScale":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Tonemapping.ts","type":"ToneMappingEffect","extends":["PostProcessingEffect"],"properties":{"mode":{"type":"VolumeParameter"},"exposure":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/Effects/Vignette.ts","type":"Vignette","extends":["PostProcessingEffect"],"properties":{"color":{"type":"VolumeParameter"},"intensity":{"type":"VolumeParameter"},"center":{"type":"VolumeParameter"}}},{"file":"/src/engine-components/postprocessing/PostProcessingEffect.ts","type":"PostProcessingEffect","extends":["Component"],"properties":{"active":{"type":"boolean"}}},{"file":"/src/engine-components/timeline/PlayableDirector.ts","type":"PlayableDirector","extends":["Behaviour"],"properties":{"playOnAwake":{"type":"boolean"},"extrapolationMode":{"type":"DirectorWrapMode"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalAsset","extends":[],"properties":{"guid":{"type":"string"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalReceiverEvent","extends":[],"properties":{"signal":{"type":"SignalAsset"},"reaction":{"type":"EventList<void>"}}},{"file":"/src/engine-components/timeline/SignalAsset.ts","type":"SignalReceiver","extends":["Behaviour"],"properties":{"events":{"type":"SignalReceiverEvent[]"}}},{"file":"/src/engine-components/ui/Button.ts","type":"ButtonColors","extends":[],"properties":{"colorMultiplier":{"type":"1"},"disabledColor":{"type":"RGBAColor"},"fadeDuration":{"type":"number"},"highlightedColor":{"type":"RGBAColor"},"normalColor":{"type":"RGBAColor"},"pressedColor":{"type":"RGBAColor"},"selectedColor":{"type":"RGBAColor"}}},{"file":"/src/engine-components/ui/Button.ts","type":"Button","extends":["Behaviour"],"properties":{"onClick":{"type":"EventList<void>"},"colors":{"type":"ButtonColors"},"transition":{"type":"Transition"},"animationTriggers":{"type":"AnimationTriggers"},"animator":{"type":"Animator"},"interactable":{"type":"any"}}},{"file":"/src/engine-components/ui/Canvas.ts","type":"Canvas","extends":["UIRootComponent"],"properties":{"renderOnTop":{"type":"boolean"},"depthWrite":{"type":"boolean"},"doubleSided":{"type":"boolean"},"castShadows":{"type":"boolean"},"receiveShadows":{"type":"boolean"},"rootCanvas":{"type":"Canvas"},"worldCamera":{"type":"Camera"},"planeDistance":{"type":"number"}}},{"file":"/src/engine-components/ui/CanvasGroup.ts","type":"CanvasGroup","extends":["Behaviour"],"properties":{"interactable":{"type":"boolean"},"blocksRaycasts":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Graphic.ts","type":"Graphic","extends":["BaseUIComponent"],"properties":{"raycastTarget":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Image.ts","type":"Sprite","extends":[],"properties":{"texture":{"type":"Texture | null"}}},{"file":"/src/engine-components/ui/Image.ts","type":"Image","extends":["MaskableGraphic"],"properties":{"pixelsPerUnitMultiplier":{"type":"number"}}},{"file":"/src/engine-components/ui/InputField.ts","type":"InputField","extends":["Behaviour"],"properties":{"textComponent":{"type":"Text"},"placeholder":{"type":"Text"},"onValueChanged":{"type":"EventList<any>"},"onEndEdit":{"type":"EventList<any>"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"Padding","extends":[],"properties":{"left":{"type":"number"},"right":{"type":"number"},"top":{"type":"number"},"bottom":{"type":"number"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"LayoutGroup","extends":["Behaviour"],"properties":{"childAlignment":{"type":"TextAnchor"},"reverseArrangement":{"type":"boolean"},"spacing":{"type":"number"},"padding":{"type":"Padding"},"minWidth":{"type":"number"},"minHeight":{"type":"number"},"flexibleHeight":{"type":"number"},"flexibleWidth":{"type":"number"},"preferredHeight":{"type":"number"},"preferredWidth":{"type":"number"}}},{"file":"/src/engine-components/ui/Layout.ts","type":"HorizontalOrVerticalLayoutGroup","extends":["LayoutGroup"],"properties":{"childControlHeight":{"type":"boolean"},"childControlWidth":{"type":"boolean"},"childForceExpandHeight":{"type":"boolean"},"childForceExpandWidth":{"type":"boolean"},"childScaleHeight":{"type":"boolean"},"childScaleWidth":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Outline.ts","type":"Outline","extends":["Behaviour"],"properties":{"effectColor":{"type":"RGBAColor"},"effectDistance":{"type":"Vector2"}}},{"file":"/src/engine-components/ui/Raycaster.ts","type":"ObjectRaycaster","extends":["Raycaster"],"properties":{"ignoreSkinnedMeshes":{"type":"any"}}},{"file":"/src/engine-components/ui/RectTransform.ts","type":"RectTransform","extends":["BaseUIComponent"],"properties":{"sizeDelta":{"type":"Vector2"},"pivot":{"type":"Vector2"},"anchorMin":{"type":"Vector2"},"anchorMax":{"type":"Vector2"}}},{"file":"/src/engine-components/ui/SpatialHtml.ts","type":"SpatialHtml","extends":["Behaviour"],"properties":{"id":{"type":"string | null"},"keepAspect":{"type":"boolean"}}},{"file":"/src/engine-components/ui/Text.ts","type":"Text","extends":["Graphic"],"properties":{"alignment":{"type":"TextAnchor"},"verticalOverflow":{"type":"VerticalWrapMode"},"horizontalOverflow":{"type":"HorizontalWrapMode"},"lineSpacing":{"type":"number"},"supportRichText":{"type":"boolean"},"font":{"type":"string"},"fontStyle":{"type":"FontStyle"}}},{"file":"/src/engine-components/utils/LookAt.ts","type":"LookAt","extends":["Behaviour"],"properties":{"target":{"type":"Object3D"},"invertForward":{"type":"boolean"},"keepUpDirection":{"type":"boolean"},"copyTargetRotation":{"type":"boolean"}}},{"file":"/src/engine-components/utils/OpenURL.ts","type":"OpenURL","extends":["Behaviour"],"properties":{"url":{"type":"string"},"mode":{"type":"OpenURLMode"},"clickable":{"type":"boolean"}}},{"file":"/src/engine-components/web/CursorFollow.ts","type":"CursorFollow","extends":["Behaviour"],"properties":{"damping":{"type":"number"},"useFullPage":{"type":"boolean"},"keepDistance":{"type":"boolean"},"snapToSurface":{"type":"boolean"}}},{"file":"/src/engine-components/web/HoverAnimation.ts","type":"HoverAnimation","extends":["Behaviour"],"properties":{"type":{"type":"ScaleClipType"},"duration":{"type":"number"},"scaleFactor":{"type":"number"},"hovered":{"type":"AnimationClip | null"},"idle":{"type":"AnimationClip | null"}}},{"file":"/src/engine-components/web/ScrollFollow.ts","type":"ScrollFollow","extends":["Behaviour"],"properties":{"target":{"type":"object[] | object | null"},"damping":{"type":"number"},"invert":{"type":"boolean"},"htmlSelector":{"type":"string | null"},"mode":{"type":"\"window\""},"changed":{"type":"EventList<ScrollFollowEvent>"}}},{"file":"/src/engine-components/web/ViewBox.ts","type":"ViewBox","extends":["Behaviour"],"properties":{"referenceFieldOfView":{"type":"number"},"debug":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/Avatar.ts","type":"Avatar","extends":["Behaviour"],"properties":{"head":{"type":"AssetReference"},"leftHand":{"type":"AssetReference"},"rightHand":{"type":"AssetReference"}}},{"file":"/src/engine-components/webxr/WebARCameraBackground.ts","type":"WebARCameraBackground","extends":["Behaviour"],"properties":{"backgroundTint":{"type":"RGBAColor"}}},{"file":"/src/engine-components/webxr/WebXR.ts","type":"WebXR","extends":["Behaviour"],"properties":{"createVRButton":{"type":"boolean"},"createARButton":{"type":"boolean"},"createSendToQuestButton":{"type":"boolean"},"createQRCode":{"type":"boolean"},"useDefaultControls":{"type":"boolean"},"showControllerModels":{"type":"boolean"},"showHandModels":{"type":"boolean"},"usePlacementReticle":{"type":"boolean"},"customARPlacementReticle":{"type":"AssetReference"},"usePlacementAdjustment":{"type":"boolean"},"arScale":{"type":"number"},"useXRAnchor":{"type":"boolean"},"autoPlace":{"type":"boolean"},"autoCenter":{"type":"boolean"},"useQuicklookExport":{"type":"boolean"},"useDepthSensing":{"type":"boolean"},"useSpatialGrab":{"type":"boolean"},"defaultAvatar":{"type":"AssetReference | boolean"}}},{"file":"/src/engine-components/webxr/WebXRImageTracking.ts","type":"WebXRImageTrackingModel","extends":[],"properties":{"image":{"type":"string"},"widthInMeters":{"type":"number"},"object":{"type":"AssetReference"},"createObjectInstance":{"type":"boolean"},"imageDoesNotMove":{"type":"boolean"},"hideWhenTrackingIsLost":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/WebXRImageTracking.ts","type":"WebXRImageTracking","extends":["Behaviour"],"properties":{"trackedImages":{"type":"WebXRImageTrackingModel[]"},"smooth":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/WebXRPlaneTracking.ts","type":"WebXRPlaneTracking","extends":["Behaviour"],"properties":{"dataTemplate":{"type":"AssetReference"},"occluder":{"type":"any"},"initiateRoomCaptureIfNoData":{"type":"any"},"usePlaneData":{"type":"boolean"},"useMeshData":{"type":"boolean"},"runInVR":{"type":"any"}}},{"file":"/src/engine-components/webxr/WebXRRig.ts","type":"XRRig","extends":["Behaviour"],"properties":{"priority":{"type":"number"}}},{"file":"/src/engine-components/webxr/XRFlag.ts","type":"XRFlag","extends":["Behaviour"],"properties":{"visibleIn":{"type":"number"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerFollow.ts","type":"XRControllerFollow","extends":["Behaviour"],"properties":{"side":{"type":"XRHandedness | number"},"controller":{"type":"boolean"},"hands":{"type":"boolean"},"controlVisibility":{"type":"boolean"},"useGripSpace":{"type":"any"},"resetTransformAfterXRSession":{"type":"boolean"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerModel.ts","type":"XRControllerModel","extends":["Behaviour"],"properties":{"createControllerModel":{"type":"boolean"},"createHandModel":{"type":"boolean"},"customLeftHand":{"type":"AssetReference"},"customRightHand":{"type":"AssetReference"}}},{"file":"/src/engine-components/webxr/controllers/XRControllerMovement.ts","type":"XRControllerMovement","extends":["Behaviour"],"properties":{"movementSpeed":{"type":"any"},"rotationStep":{"type":"any"},"useTeleport":{"type":"boolean"},"usePinchToTeleport":{"type":"boolean"},"useTeleportTarget":{"type":"any"},"useTeleportFade":{"type":"any"},"showRays":{"type":"boolean"},"showHits":{"type":"boolean"}}}]}
@@ -1,5 +1,5 @@
1
- import { BufferGeometry as J, Mesh as q, Box3 as ge, Vector3 as A, Sphere as Oe, CompressedTexture as Ge, Texture as E, Matrix3 as Fe, InterleavedBuffer as We, InterleavedBufferAttribute as Ue, BufferAttribute as ze, TextureLoader as Ee, Matrix4 as _e, Clock as Ne, MeshStandardMaterial as qe } from "./three-CJSAehtG.js";
2
- import { DRACOLoader as Ve, KTX2Loader as Xe, MeshoptDecoder as je, GLTFLoader as xe } from "./three-examples-Doq0rvFU.js";
1
+ import { BufferGeometry as J, Mesh as q, Box3 as ge, Vector3 as A, Sphere as Oe, CompressedTexture as Ge, Texture as E, Matrix3 as Fe, InterleavedBuffer as We, InterleavedBufferAttribute as Ue, BufferAttribute as ze, TextureLoader as Ee, Matrix4 as _e, Clock as Ne, MeshStandardMaterial as qe } from "./three-MHVqtJYj.js";
2
+ import { DRACOLoader as Ve, KTX2Loader as Xe, MeshoptDecoder as je, GLTFLoader as xe } from "./three-examples-C5Ht-QFN.js";
3
3
  const Ke = "";
4
4
  globalThis.GLTF_PROGRESSIVE_VERSION = Ke;
5
5
  console.debug("[gltf-progressive] version -");
@@ -197,7 +197,7 @@ class Le {
197
197
  });
198
198
  }
199
199
  static async createWorker(t) {
200
- const e = new Worker(URL.createObjectURL(new Blob(["import '" + `${new URL('./loader.worker-CiTwpNPW.js', import.meta.url).toString()}` + "';"], { type: 'text/javascript' })), {
200
+ const e = /* new-worker */ new Worker(URL.createObjectURL(new Blob(["import '" + `${new URL('./loader.worker-CiTwpNPW.js', import.meta.url).toString()}` + "';"], { type: 'text/javascript' })), {
201
201
  type: "module"
202
202
  });
203
203
  return new Le(e, t);
@@ -208,7 +208,7 @@ class Le {
208
208
  const s = Qe();
209
209
  let n = e?.renderer;
210
210
  n || (this._webglRenderer ??= (async () => {
211
- const { WebGLRenderer: u } = await import("./three-CJSAehtG.js").then((d) => d.THREE);
211
+ const { WebGLRenderer: u } = await import("./three-MHVqtJYj.js").then((d) => d.THREE);
212
212
  return new u();
213
213
  })(), n = await this._webglRenderer);
214
214
  const l = we(n).ktx2Loader.workerConfig;
@@ -1,4 +1,4 @@
1
- import{BufferGeometry as V,Mesh as G,Box3 as ie,Vector3 as I,Sphere as ve,CompressedTexture as $e,Texture as N,Matrix3 as Re,InterleavedBuffer as je,InterleavedBufferAttribute as Ge,BufferAttribute as Ne,TextureLoader as Ue,Matrix4 as Le,Clock as We,MeshStandardMaterial as Fe}from"./three-qw28ZtTy.min.js";import{DRACOLoader as ze,KTX2Loader as qe,MeshoptDecoder as Ve,GLTFLoader as ae}from"./three-examples-BivkhnvN.min.js";const Xe="";globalThis.GLTF_PROGRESSIVE_VERSION=Xe,console.debug("[gltf-progressive] version -");let k="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",U="https://cdn.needle.tools/static/three/0.179.1/basis2/";const He=k,Ke=U,_e=new URL(k+"draco_decoder.js");_e.searchParams.append("range","true"),fetch(_e,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${k} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),k===He&&be("./include/draco/"),U===Ke&&De("./include/ktx2/")}).finally(()=>{Me()});const Ye=()=>({dracoDecoderPath:k,ktx2TranscoderPath:U});function be(i){k=i,P&&P[ue]!=k?(console.debug("Updating Draco decoder path to "+i),P[ue]=k,P.setDecoderPath(k),P.preload()):console.debug("Setting Draco decoder path to "+i)}function De(i){U=i,C&&C.transcoderPath!=U?(console.debug("Updating KTX2 transcoder path to "+i),C.setTranscoderPath(U),C.init()):console.debug("Setting KTX2 transcoder path to "+i)}function ee(i){return Me(),i?C.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:P,ktx2Loader:C,meshoptDecoder:te}}function le(i){i.dracoLoader||i.setDRACOLoader(P),i.ktx2Loader||i.setKTX2Loader(C),i.meshoptDecoder||i.setMeshoptDecoder(te)}const ue=Symbol("dracoDecoderPath");let P,te,C;function Me(){P||(P=new ze,P[ue]=k,P.setDecoderPath(k),P.setDecoderConfig({type:"js"}),P.preload()),C||(C=new qe,C.setTranscoderPath(U),C.init()),te||(te=Ve)}const de=new WeakMap;function ce(i,t){let e=de.get(i);e?e=Object.assign(e,t):e=t,de.set(i,e)}const Qe=ae.prototype.load;function Je(...i){const t=de.get(this);let e=i[0];const r=new URL(e,window.location.href);if(r.hostname.endsWith("needle.tools")){const o=t?.progressive!==void 0?t.progressive:!0,s=t?.usecase?t.usecase:"default";o?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${s}`:this.requestHeader.Accept=`*/*;usecase=${s}`,e=r.toString()}return i[0]=e,Qe?.call(this,...i)}ae.prototype.load=Je,W("debugprogressive");function W(i){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(i);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function Ze(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const r=i.substring(0,e+1);for(;r.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return r+t}return t}function Oe(){return re!==void 0||(re=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),W("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",re)),re}let re;function Se(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class et{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:r,resolve:o}=this._queue.shift();o({use:s=>this.add(r,s)})}}}const tt=typeof window>"u"&&typeof document>"u",he=Symbol("needle:raycast-mesh");function z(i){return i?.[he]instanceof V?i[he]:null}function rt(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!z(i)){const e=ot(t);e.userData={isRaycastMesh:!0},i[he]=e}}function st(i=!0){if(i){if(X)return;const t=X=G.prototype.raycast;G.prototype.raycast=function(e,r){const o=this,s=z(o);let n;s&&o.isMesh&&(n=o.geometry,o.geometry=s),t.call(this,e,r),n&&(o.geometry=n)}}else{if(!X)return;G.prototype.raycast=X,X=null}}let X=null;function ot(i){const t=new V;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const R=new Array,h=W("debugprogressive");let H,F=-1;if(h){let i=function(){F+=1,F>=t&&(F=-1),console.log(`Toggle LOD level [${F}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(H=!H,console.log(`Toggle wireframe [${H}]`));const r=parseInt(e.key);!isNaN(r)&&r>=0&&(F=r,console.log(`Set LOD level to [${F}]`))})}function Pe(i){if(h&&H!==void 0)if(Array.isArray(i))for(const t of i)Pe(t);else i&&"wireframe"in i&&(i.wireframe=H===!0)}const K=new Array;let nt=0;const it=Oe()?2:10;function at(i){if(K.length<it){const e=K.length;h&&console.warn(`[Worker] Creating new worker #${e}`);const r=ye.createWorker(i||{});return K.push(r),r}const t=nt++%K.length;return K[t]}class ye{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=r=>{const o=r.data;switch(this._debug&&console.log("[Worker] EVENT",o),o.type){case"loaded-gltf":for(const s of this._running)if(s.url===o.result.url){lt(o.result),s.resolve(o.result);const n=s.url;n.startsWith("blob:")&&URL.revokeObjectURL(n)}}},t.onerror=r=>{console.error("[Worker] Error in gltf-progressive worker:",r)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./loader.worker-CiTwpNPW.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new ye(e,t)}_running=[];_webglRenderer=null;async load(t,e){const r=Ye();let o=e?.renderer;o||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await import("./three-qw28ZtTy.min.js").then(a=>a.THREE);return new l})(),o=await this._webglRenderer);const s=ee(o).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const n={type:"load",url:t,dracoDecoderPath:r.dracoDecoderPath,ktx2TranscoderPath:r.ktx2TranscoderPath,ktx2LoaderConfig:s};return this._debug&&console.debug("[Worker] Sending load request",n),this.worker.postMessage(n),new Promise(l=>{this._running.push({url:t.toString(),resolve:l})})}_debug=!1}function lt(i){for(const t of i.geometries){const e=t.geometry,r=new V;if(r.name=e.name||"",e.index){const o=e.index;r.setIndex(ge(o))}for(const o in e.attributes){const s=e.attributes[o],n=ge(s);r.setAttribute(o,n)}if(e.morphAttributes)for(const o in e.morphAttributes){const s=e.morphAttributes[o].map(n=>ge(n));r.morphAttributes[o]=s}if(r.morphTargetsRelative=e.morphTargetsRelative??!1,r.boundingBox=new ie,r.boundingBox.min=new I(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),r.boundingBox.max=new I(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),r.boundingSphere=new ve(new I(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const o of e.groups)r.addGroup(o.start,o.count,o.materialIndex);e.userData&&(r.userData=e.userData),t.geometry=r}for(const t of i.textures){const e=t.texture;let r=null;if(e.isCompressedTexture){const o=e.mipmaps,s=e.image?.width||e.source?.data?.width||-1,n=e.image?.height||e.source?.data?.height||-1;r=new $e(o,s,n,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else r=new N(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),r.mipmaps=e.mipmaps,r.channel=e.channel,r.source.data=e.source.data,r.flipY=e.flipY,r.premultiplyAlpha=e.premultiplyAlpha,r.unpackAlignment=e.unpackAlignment,r.matrix=new Re(...e.matrix.elements);if(!r){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=r}return i}function ge(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,r=e.array,o=new je(r,e.stride);t=new Ge(o,i.itemSize,r.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new Ne(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const ut=W("gltf-progressive-worker"),dt=W("gltf-progressive-reduce-mipmaps"),fe=Symbol("needle-progressive-texture"),$="NEEDLE_progressive";class g{get name(){return $}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){return this.getAssignedLODInformation(t)?.index??-1}static getMaterialMinMaxLODsCount(t,e){const r=this,o="LODS:minmax",s=t[o];if(s!=null)return s;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[o]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&n(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&n(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[o]=e,e;function n(l,a){const u=r.getAssignedLODInformation(l);if(u){const f=r.lodInfos.get(u.key);if(f&&f.lods){a.min_count=Math.min(a.min_count,f.lods.length),a.max_count=Math.max(a.max_count,f.lods.length);for(let w=0;w<f.lods.length;w++){const v=f.lods[w];v.width&&(a.lods[w]=a.lods[w]||{min_height:1/0,max_height:0},a.lods[w].min_height=Math.min(a.lods[w].min_height,v.height),a.lods[w].max_height=Math.max(a.lods[w].max_height,v.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const s of t)if(this.hasLODLevelAvailable(s,e))return!0;return!1}if(t.isMaterial===!0){for(const s of Object.keys(t)){const n=t[s];if(n&&n.isTexture&&this.hasLODLevelAvailable(n,e))return!0}return!1}else if(t.isGroup===!0){for(const s of t.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let r,o;if(t.isMesh?r=t.geometry:(t.isBufferGeometry||t.isTexture)&&(r=t),r&&r?.userData?.LODS){const s=r.userData.LODS;if(o=this.lodInfos.get(s.key),e===void 0)return o!=null;if(o)return Array.isArray(o.lods)?e<o.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof G||t.isMesh===!0){const r=t.geometry,o=this.getAssignedLODInformation(r);if(!o)return Promise.resolve(null);for(const s of R)s.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,g.getOrLoadLOD(r,e).then(s=>{if(Array.isArray(s)){const n=o.index||0;s=s[n]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],s&&r!=s&&(s?.isBufferGeometry?t.geometry=s:h&&console.error("Invalid LOD geometry",s))),s}).catch(s=>(console.error("Error loading mesh LOD",t,s),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const r=t;if(Array.isArray(r.material)){const o=new Array;for(const s of r.material){const n=this.assignTextureLOD(s,e);o.push(n)}return Promise.all(o).then(s=>{const n=new Array;for(const l of s)Array.isArray(l)&&n.push(...l);return n})}else return this.assignTextureLOD(r.material,e)}if(t.isMaterial===!0){const r=t,o=[],s=new Array;if(r.uniforms&&(r.isRawShaderMaterial||r.isShaderMaterial===!0)){const n=r;for(const l of Object.keys(n.uniforms)){const a=n.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,r,l).then(f=>(f&&n.uniforms[l].value!=f&&(n.uniforms[l].value=f,n.uniformsNeedUpdate=!0),f));o.push(u),s.push(l)}}}else for(const n of Object.keys(r)){const l=r[n];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,r,n);o.push(a),s.push(n)}}return Promise.all(o).then(n=>{const l=new Array;for(let a=0;a<n.length;a++){const u=n[a],f=s[a];u&&u.isTexture===!0?l.push({material:r,slot:f,texture:u,level:e}):l.push({material:r,slot:f,texture:null,level:e})}return l})}if(t instanceof N||t.isTexture===!0){const r=t;return this.assignTextureLODForSlot(r,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,r,o){return t?.isTexture!==!0?Promise.resolve(null):o==="glyphMap"?Promise.resolve(t):g.getOrLoadLOD(t,e).then(s=>{if(Array.isArray(s))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(s?.isTexture===!0){if(s!=t&&r&&o){const n=r[o];if(n&&!h){const l=this.getAssignedLODInformation(n);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,r,n,s),null}if(dt&&s.mipmaps){const l=s.mipmaps.length;s.mipmaps.length=Math.min(s.mipmaps.length,3),l!==s.mipmaps.length&&h&&console.debug(`Reduced mipmap count from ${l} to ${s.mipmaps.length} for ${s.uuid}: ${s.image?.width}x${s.image?.height}.`)}r[o]=s}return s}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(s=>(console.error("Error loading LOD",t,s),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[$];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(r=>(this._isLoadingMesh=!1,r&&g.registerMesh(this.url,e.guid,r,e.lods?.length,0,e),r))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,r)=>{if(e?.extensions){const o=e?.extensions[$];if(o){if(!o.lods){h&&console.warn("Texture has no LODs",o);return}let s=!1;for(const n of this.parser.associations.keys())n.isTexture===!0&&this.parser.associations.get(n)?.textures===r&&(s=!0,g.registerTexture(this.url,n,o.lods?.length,r,o));s||this.parser.getDependency("texture",r).then(n=>{n&&g.registerTexture(this.url,n,o.lods?.length,r,o)})}}}),this.parser.json.meshes?.forEach((e,r)=>{if(e?.extensions){const o=e?.extensions[$];if(o&&o.lods){for(const s of this.parser.associations.keys())if(s.isMesh){const n=this.parser.associations.get(s);n?.meshes===r&&g.registerMesh(this.url,o.guid,s,o.lods.length,n.primitives,o)}}}}),null}static registerTexture=(t,e,r,o,s)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${o}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${s.lods[0]?.width}x${s.lods[0]?.height}, uuid: ${e.uuid}`,s,e)}e.source&&(e.source[fe]=s);const n=s.guid;g.assignLODInformation(t,e,n,r,o),g.lodInfos.set(n,s),g.lowresCache.set(n,e)};static registerMesh=(t,e,r,o,s,n)=>{const l=r.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+r.name,{index:s,uuid:r.uuid},n,r),g.assignLODInformation(t,l,e,o,s),g.lodInfos.set(e,n);let a=g.lowresCache.get(e);a?a.push(r.geometry):a=[r.geometry],g.lowresCache.set(e,a),o>0&&!z(r)&&rt(r,l);for(const u of R)u.onRegisteredNewMesh?.(r,n)};static lodInfos=new Map;static previouslyLoaded=new Map;static lowresCache=new Map;static workers=[];static _workersIndex=0;static async getOrLoadLOD(t,e){const r=h=="verbose",o=this.getAssignedLODInformation(t);if(!o)return h&&console.warn(`[gltf-progressive] No LOD information found: ${t.name}, uuid: ${t.uuid}, type: ${t.type}`,t),null;const s=o?.key;let n;if(t.isTexture===!0){const l=t;l.source&&l.source[fe]&&(n=l.source[fe])}if(n||(n=g.lodInfos.get(s)),!n)h&&console.warn(`Can not load LOD ${e}: no LOD info found for "${s}" ${t.name}`,t.type,g.lodInfos);else{if(e>0){let u=!1;const f=Array.isArray(n.lods);if(f&&e>=n.lods.length?u=!0:f||(u=!0),u)return this.lowresCache.get(s)}const l=Array.isArray(n.lods)?n.lods[e]?.path:n.lods;if(!l)return h&&!n["missing:uri"]&&(n["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,n)),null;const a=Ze(o.url,l);if(a.endsWith(".glb")||a.endsWith(".gltf")){if(!n.guid)return console.warn("missing pointer for glb/gltf texture",n),null;const u=a+"_"+n.guid,f=await this.queue.slot(a),w=this.previouslyLoaded.get(u);if(w!==void 0){r&&console.log(`LOD ${e} was already loading/loaded: ${u}`);let p=await w.catch(y=>(console.error(`Error loading LOD ${e} from ${a}
1
+ import{BufferGeometry as V,Mesh as G,Box3 as ie,Vector3 as I,Sphere as ve,CompressedTexture as $e,Texture as N,Matrix3 as Re,InterleavedBuffer as je,InterleavedBufferAttribute as Ge,BufferAttribute as Ne,TextureLoader as Ue,Matrix4 as Le,Clock as We,MeshStandardMaterial as Fe}from"./three-BDW9I486.min.js";import{DRACOLoader as ze,KTX2Loader as qe,MeshoptDecoder as Ve,GLTFLoader as ae}from"./three-examples-fvEPSC8L.min.js";const Xe="";globalThis.GLTF_PROGRESSIVE_VERSION=Xe,console.debug("[gltf-progressive] version -");let k="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",U="https://cdn.needle.tools/static/three/0.179.1/basis2/";const He=k,Ke=U,_e=new URL(k+"draco_decoder.js");_e.searchParams.append("range","true"),fetch(_e,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${k} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),k===He&&be("./include/draco/"),U===Ke&&De("./include/ktx2/")}).finally(()=>{Me()});const Ye=()=>({dracoDecoderPath:k,ktx2TranscoderPath:U});function be(i){k=i,P&&P[ue]!=k?(console.debug("Updating Draco decoder path to "+i),P[ue]=k,P.setDecoderPath(k),P.preload()):console.debug("Setting Draco decoder path to "+i)}function De(i){U=i,C&&C.transcoderPath!=U?(console.debug("Updating KTX2 transcoder path to "+i),C.setTranscoderPath(U),C.init()):console.debug("Setting KTX2 transcoder path to "+i)}function ee(i){return Me(),i?C.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:P,ktx2Loader:C,meshoptDecoder:te}}function le(i){i.dracoLoader||i.setDRACOLoader(P),i.ktx2Loader||i.setKTX2Loader(C),i.meshoptDecoder||i.setMeshoptDecoder(te)}const ue=Symbol("dracoDecoderPath");let P,te,C;function Me(){P||(P=new ze,P[ue]=k,P.setDecoderPath(k),P.setDecoderConfig({type:"js"}),P.preload()),C||(C=new qe,C.setTranscoderPath(U),C.init()),te||(te=Ve)}const de=new WeakMap;function ce(i,t){let e=de.get(i);e?e=Object.assign(e,t):e=t,de.set(i,e)}const Qe=ae.prototype.load;function Je(...i){const t=de.get(this);let e=i[0];const r=new URL(e,window.location.href);if(r.hostname.endsWith("needle.tools")){const o=t?.progressive!==void 0?t.progressive:!0,s=t?.usecase?t.usecase:"default";o?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${s}`:this.requestHeader.Accept=`*/*;usecase=${s}`,e=r.toString()}return i[0]=e,Qe?.call(this,...i)}ae.prototype.load=Je,W("debugprogressive");function W(i){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(i);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function Ze(i,t){if(t===void 0||i===void 0||t.startsWith("./")||t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"))return t;const e=i.lastIndexOf("/");if(e>=0){const r=i.substring(0,e+1);for(;r.endsWith("/")&&t.startsWith("/");)t=t.substring(1);return r+t}return t}function Oe(){return re!==void 0||(re=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),W("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",re)),re}let re;function Se(){if(typeof window>"u")return!1;const i=new URL(window.location.href),t=i.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(i.hostname);return i.hostname==="127.0.0.1"||t}class et{constructor(t=100,e={}){this.maxConcurrent=t,this.debug=e.debug??!1,window.requestAnimationFrame(this.tick)}_running=new Map;_queue=[];debug=!1;tick=()=>{this.internalUpdate(),setTimeout(this.tick,10)};slot(t){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${t}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(e=>{this._queue.push({key:t,resolve:e})})}add(t,e){this._running.has(t)||(this._running.set(t,e),e.finally(()=>{this._running.delete(t),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${t})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${t})`))}internalUpdate(){const t=this.maxConcurrent-this._running.size;for(let e=0;e<t&&this._queue.length>0;e++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:r,resolve:o}=this._queue.shift();o({use:s=>this.add(r,s)})}}}const tt=typeof window>"u"&&typeof document>"u",he=Symbol("needle:raycast-mesh");function z(i){return i?.[he]instanceof V?i[he]:null}function rt(i,t){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!z(i)){const e=ot(t);e.userData={isRaycastMesh:!0},i[he]=e}}function st(i=!0){if(i){if(X)return;const t=X=G.prototype.raycast;G.prototype.raycast=function(e,r){const o=this,s=z(o);let n;s&&o.isMesh&&(n=o.geometry,o.geometry=s),t.call(this,e,r),n&&(o.geometry=n)}}else{if(!X)return;G.prototype.raycast=X,X=null}}let X=null;function ot(i){const t=new V;for(const e in i.attributes)t.setAttribute(e,i.getAttribute(e));return t.setIndex(i.getIndex()),t}const R=new Array,h=W("debugprogressive");let H,F=-1;if(h){let i=function(){F+=1,F>=t&&(F=-1),console.log(`Toggle LOD level [${F}]`)},t=6;window.addEventListener("keyup",e=>{e.key==="p"&&i(),e.key==="w"&&(H=!H,console.log(`Toggle wireframe [${H}]`));const r=parseInt(e.key);!isNaN(r)&&r>=0&&(F=r,console.log(`Set LOD level to [${F}]`))})}function Pe(i){if(h&&H!==void 0)if(Array.isArray(i))for(const t of i)Pe(t);else i&&"wireframe"in i&&(i.wireframe=H===!0)}const K=new Array;let nt=0;const it=Oe()?2:10;function at(i){if(K.length<it){const e=K.length;h&&console.warn(`[Worker] Creating new worker #${e}`);const r=ye.createWorker(i||{});return K.push(r),r}const t=nt++%K.length;return K[t]}class ye{constructor(t,e){this.worker=t,this._debug=e.debug??!1,t.onmessage=r=>{const o=r.data;switch(this._debug&&console.log("[Worker] EVENT",o),o.type){case"loaded-gltf":for(const s of this._running)if(s.url===o.result.url){lt(o.result),s.resolve(o.result);const n=s.url;n.startsWith("blob:")&&URL.revokeObjectURL(n)}}},t.onerror=r=>{console.error("[Worker] Error in gltf-progressive worker:",r)},t.postMessage({type:"init"})}static async createWorker(t){const e=new Worker(URL.createObjectURL(new Blob([`import '${new URL("./loader.worker-CiTwpNPW.js",import.meta.url).toString()}';`],{type:"text/javascript"})),{type:"module"});return new ye(e,t)}_running=[];_webglRenderer=null;async load(t,e){const r=Ye();let o=e?.renderer;o||(this._webglRenderer??=(async()=>{const{WebGLRenderer:l}=await import("./three-BDW9I486.min.js").then(a=>a.THREE);return new l})(),o=await this._webglRenderer);const s=ee(o).ktx2Loader.workerConfig;t instanceof URL?t=t.toString():t.startsWith("file:")?t=URL.createObjectURL(new Blob([t])):!t.startsWith("blob:")&&!t.startsWith("http:")&&!t.startsWith("https:")&&(t=new URL(t,window.location.href).toString());const n={type:"load",url:t,dracoDecoderPath:r.dracoDecoderPath,ktx2TranscoderPath:r.ktx2TranscoderPath,ktx2LoaderConfig:s};return this._debug&&console.debug("[Worker] Sending load request",n),this.worker.postMessage(n),new Promise(l=>{this._running.push({url:t.toString(),resolve:l})})}_debug=!1}function lt(i){for(const t of i.geometries){const e=t.geometry,r=new V;if(r.name=e.name||"",e.index){const o=e.index;r.setIndex(ge(o))}for(const o in e.attributes){const s=e.attributes[o],n=ge(s);r.setAttribute(o,n)}if(e.morphAttributes)for(const o in e.morphAttributes){const s=e.morphAttributes[o].map(n=>ge(n));r.morphAttributes[o]=s}if(r.morphTargetsRelative=e.morphTargetsRelative??!1,r.boundingBox=new ie,r.boundingBox.min=new I(e.boundingBox?.min.x,e.boundingBox?.min.y,e.boundingBox?.min.z),r.boundingBox.max=new I(e.boundingBox?.max.x,e.boundingBox?.max.y,e.boundingBox?.max.z),r.boundingSphere=new ve(new I(e.boundingSphere?.center.x,e.boundingSphere?.center.y,e.boundingSphere?.center.z),e.boundingSphere?.radius),e.groups)for(const o of e.groups)r.addGroup(o.start,o.count,o.materialIndex);e.userData&&(r.userData=e.userData),t.geometry=r}for(const t of i.textures){const e=t.texture;let r=null;if(e.isCompressedTexture){const o=e.mipmaps,s=e.image?.width||e.source?.data?.width||-1,n=e.image?.height||e.source?.data?.height||-1;r=new $e(o,s,n,e.format,e.type,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.anisotropy,e.colorSpace)}else r=new N(e.image,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),r.mipmaps=e.mipmaps,r.channel=e.channel,r.source.data=e.source.data,r.flipY=e.flipY,r.premultiplyAlpha=e.premultiplyAlpha,r.unpackAlignment=e.unpackAlignment,r.matrix=new Re(...e.matrix.elements);if(!r){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}t.texture=r}return i}function ge(i){let t=i;if("isInterleavedBufferAttribute"in i&&i.isInterleavedBufferAttribute){const e=i.data,r=e.array,o=new je(r,e.stride);t=new Ge(o,i.itemSize,r.byteOffset,i.normalized),t.offset=i.offset}else"isBufferAttribute"in i&&i.isBufferAttribute&&(t=new Ne(i.array,i.itemSize,i.normalized),t.usage=i.usage,t.gpuType=i.gpuType,t.updateRanges=i.updateRanges);return t}const ut=W("gltf-progressive-worker"),dt=W("gltf-progressive-reduce-mipmaps"),fe=Symbol("needle-progressive-texture"),$="NEEDLE_progressive";class g{get name(){return $}static getMeshLODExtension(t){const e=this.getAssignedLODInformation(t);return e?.key?this.lodInfos.get(e.key):null}static getPrimitiveIndex(t){return this.getAssignedLODInformation(t)?.index??-1}static getMaterialMinMaxLODsCount(t,e){const r=this,o="LODS:minmax",s=t[o];if(s!=null)return s;if(e||(e={min_count:1/0,max_count:0,lods:[]}),Array.isArray(t)){for(const l of t)this.getMaterialMinMaxLODsCount(l,e);return t[o]=e,e}if(h==="verbose"&&console.log("getMaterialMinMaxLODsCount",t),t.type==="ShaderMaterial"||t.type==="RawShaderMaterial"){const l=t;for(const a of Object.keys(l.uniforms)){const u=l.uniforms[a].value;u?.isTexture===!0&&n(u,e)}}else if(t.isMaterial)for(const l of Object.keys(t)){const a=t[l];a?.isTexture===!0&&n(a,e)}else h&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${t.type}`);return t[o]=e,e;function n(l,a){const u=r.getAssignedLODInformation(l);if(u){const f=r.lodInfos.get(u.key);if(f&&f.lods){a.min_count=Math.min(a.min_count,f.lods.length),a.max_count=Math.max(a.max_count,f.lods.length);for(let w=0;w<f.lods.length;w++){const v=f.lods[w];v.width&&(a.lods[w]=a.lods[w]||{min_height:1/0,max_height:0},a.lods[w].min_height=Math.min(a.lods[w].min_height,v.height),a.lods[w].max_height=Math.max(a.lods[w].max_height,v.height))}}}}}static hasLODLevelAvailable(t,e){if(Array.isArray(t)){for(const s of t)if(this.hasLODLevelAvailable(s,e))return!0;return!1}if(t.isMaterial===!0){for(const s of Object.keys(t)){const n=t[s];if(n&&n.isTexture&&this.hasLODLevelAvailable(n,e))return!0}return!1}else if(t.isGroup===!0){for(const s of t.children)if(s.isMesh===!0&&this.hasLODLevelAvailable(s,e))return!0}let r,o;if(t.isMesh?r=t.geometry:(t.isBufferGeometry||t.isTexture)&&(r=t),r&&r?.userData?.LODS){const s=r.userData.LODS;if(o=this.lodInfos.get(s.key),e===void 0)return o!=null;if(o)return Array.isArray(o.lods)?e<o.lods.length:e===0}return!1}static assignMeshLOD(t,e){if(!t)return Promise.resolve(null);if(t instanceof G||t.isMesh===!0){const r=t.geometry,o=this.getAssignedLODInformation(r);if(!o)return Promise.resolve(null);for(const s of R)s.onBeforeGetLODMesh?.(t,e);return t["LOD:requested level"]=e,g.getOrLoadLOD(r,e).then(s=>{if(Array.isArray(s)){const n=o.index||0;s=s[n]}return t["LOD:requested level"]===e&&(delete t["LOD:requested level"],s&&r!=s&&(s?.isBufferGeometry?t.geometry=s:h&&console.error("Invalid LOD geometry",s))),s}).catch(s=>(console.error("Error loading mesh LOD",t,s),null))}else h&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",t);return Promise.resolve(null)}static assignTextureLOD(t,e=0){if(!t)return Promise.resolve(null);if(t.isMesh===!0){const r=t;if(Array.isArray(r.material)){const o=new Array;for(const s of r.material){const n=this.assignTextureLOD(s,e);o.push(n)}return Promise.all(o).then(s=>{const n=new Array;for(const l of s)Array.isArray(l)&&n.push(...l);return n})}else return this.assignTextureLOD(r.material,e)}if(t.isMaterial===!0){const r=t,o=[],s=new Array;if(r.uniforms&&(r.isRawShaderMaterial||r.isShaderMaterial===!0)){const n=r;for(const l of Object.keys(n.uniforms)){const a=n.uniforms[l].value;if(a?.isTexture===!0){const u=this.assignTextureLODForSlot(a,e,r,l).then(f=>(f&&n.uniforms[l].value!=f&&(n.uniforms[l].value=f,n.uniformsNeedUpdate=!0),f));o.push(u),s.push(l)}}}else for(const n of Object.keys(r)){const l=r[n];if(l?.isTexture===!0){const a=this.assignTextureLODForSlot(l,e,r,n);o.push(a),s.push(n)}}return Promise.all(o).then(n=>{const l=new Array;for(let a=0;a<n.length;a++){const u=n[a],f=s[a];u&&u.isTexture===!0?l.push({material:r,slot:f,texture:u,level:e}):l.push({material:r,slot:f,texture:null,level:e})}return l})}if(t instanceof N||t.isTexture===!0){const r=t;return this.assignTextureLODForSlot(r,e,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(t,e,r,o){return t?.isTexture!==!0?Promise.resolve(null):o==="glyphMap"?Promise.resolve(t):g.getOrLoadLOD(t,e).then(s=>{if(Array.isArray(s))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if(s?.isTexture===!0){if(s!=t&&r&&o){const n=r[o];if(n&&!h){const l=this.getAssignedLODInformation(n);if(l&&l?.level<e)return h==="verbose"&&console.warn("Assigned texture level is already higher: ",l.level,e,r,n,s),null}if(dt&&s.mipmaps){const l=s.mipmaps.length;s.mipmaps.length=Math.min(s.mipmaps.length,3),l!==s.mipmaps.length&&h&&console.debug(`Reduced mipmap count from ${l} to ${s.mipmaps.length} for ${s.uuid}: ${s.image?.width}x${s.image?.height}.`)}r[o]=s}return s}else h=="verbose"&&console.warn("No LOD found for",t,e);return null}).catch(s=>(console.error("Error loading LOD",t,s),null))}parser;url;constructor(t){const e=t.options.path;h&&console.log("Progressive extension registered for",e),this.parser=t,this.url=e}_isLoadingMesh;loadMesh=t=>{if(this._isLoadingMesh)return null;const e=this.parser.json.meshes[t]?.extensions?.[$];return e?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",t).then(r=>(this._isLoadingMesh=!1,r&&g.registerMesh(this.url,e.guid,r,e.lods?.length,0,e),r))):null};afterRoot(t){return h&&console.log("AFTER",this.url,t),this.parser.json.textures?.forEach((e,r)=>{if(e?.extensions){const o=e?.extensions[$];if(o){if(!o.lods){h&&console.warn("Texture has no LODs",o);return}let s=!1;for(const n of this.parser.associations.keys())n.isTexture===!0&&this.parser.associations.get(n)?.textures===r&&(s=!0,g.registerTexture(this.url,n,o.lods?.length,r,o));s||this.parser.getDependency("texture",r).then(n=>{n&&g.registerTexture(this.url,n,o.lods?.length,r,o)})}}}),this.parser.json.meshes?.forEach((e,r)=>{if(e?.extensions){const o=e?.extensions[$];if(o&&o.lods){for(const s of this.parser.associations.keys())if(s.isMesh){const n=this.parser.associations.get(s);n?.meshes===r&&g.registerMesh(this.url,o.guid,s,o.lods.length,n.primitives,o)}}}}),null}static registerTexture=(t,e,r,o,s)=>{if(!e){h&&console.error("!! gltf-progressive: Called register texture without texture");return}if(h){const l=e.image?.width||e.source?.data?.width||0,a=e.image?.height||e.source?.data?.height||0;console.log(`> gltf-progressive: register texture[${o}] "${e.name||e.uuid}", Current: ${l}x${a}, Max: ${s.lods[0]?.width}x${s.lods[0]?.height}, uuid: ${e.uuid}`,s,e)}e.source&&(e.source[fe]=s);const n=s.guid;g.assignLODInformation(t,e,n,r,o),g.lodInfos.set(n,s),g.lowresCache.set(n,e)};static registerMesh=(t,e,r,o,s,n)=>{const l=r.geometry;if(!l){h&&console.warn("gltf-progressive: Register mesh without geometry");return}l.userData||(l.userData={}),h&&console.log("> Progressive: register mesh "+r.name,{index:s,uuid:r.uuid},n,r),g.assignLODInformation(t,l,e,o,s),g.lodInfos.set(e,n);let a=g.lowresCache.get(e);a?a.push(r.geometry):a=[r.geometry],g.lowresCache.set(e,a),o>0&&!z(r)&&rt(r,l);for(const u of R)u.onRegisteredNewMesh?.(r,n)};static lodInfos=new Map;static previouslyLoaded=new Map;static lowresCache=new Map;static workers=[];static _workersIndex=0;static async getOrLoadLOD(t,e){const r=h=="verbose",o=this.getAssignedLODInformation(t);if(!o)return h&&console.warn(`[gltf-progressive] No LOD information found: ${t.name}, uuid: ${t.uuid}, type: ${t.type}`,t),null;const s=o?.key;let n;if(t.isTexture===!0){const l=t;l.source&&l.source[fe]&&(n=l.source[fe])}if(n||(n=g.lodInfos.get(s)),!n)h&&console.warn(`Can not load LOD ${e}: no LOD info found for "${s}" ${t.name}`,t.type,g.lodInfos);else{if(e>0){let u=!1;const f=Array.isArray(n.lods);if(f&&e>=n.lods.length?u=!0:f||(u=!0),u)return this.lowresCache.get(s)}const l=Array.isArray(n.lods)?n.lods[e]?.path:n.lods;if(!l)return h&&!n["missing:uri"]&&(n["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+e,n)),null;const a=Ze(o.url,l);if(a.endsWith(".glb")||a.endsWith(".gltf")){if(!n.guid)return console.warn("missing pointer for glb/gltf texture",n),null;const u=a+"_"+n.guid,f=await this.queue.slot(a),w=this.previouslyLoaded.get(u);if(w!==void 0){r&&console.log(`LOD ${e} was already loading/loaded: ${u}`);let p=await w.catch(y=>(console.error(`Error loading LOD ${e} from ${a}
2
2
  `,y),null)),m=!1;if(p==null||(p instanceof N&&t instanceof N?p.image?.data||p.source?.data?p=this.copySettings(t,p):(m=!0,this.previouslyLoaded.delete(u)):p instanceof V&&t instanceof V&&(p.attributes.position?.array||(m=!0,this.previouslyLoaded.delete(u)))),!m)return p}if(!f.use)return h&&console.log(`LOD ${e} was aborted: ${a}`),null;const v=n,T=new Promise(async(p,m)=>{if(ut){const x=await(await at({})).load(a);if(x.textures.length>0)for(const d of x.textures){let c=d.texture;return g.assignLODInformation(o.url,c,s,e,void 0),t instanceof N&&(c=this.copySettings(t,c)),c&&(c.guid=v.guid),p(c)}if(x.geometries.length>0){const d=new Array;for(const c of x.geometries){const L=c.geometry;g.assignLODInformation(o.url,L,s,e,c.primitiveIndex),d.push(L)}return p(d)}return p(null)}const y=new ae;le(y),h&&(await new Promise(x=>setTimeout(x,1e3)),r&&console.warn("Start loading (delayed) "+a,v.guid));let A=a;if(v&&Array.isArray(v.lods)){const x=v.lods[e];x.hash&&(A+="?v="+x.hash)}const _=await y.loadAsync(A).catch(x=>(console.error(`Error loading LOD ${e} from ${a}
3
3
  `,x),p(null)));if(!_)return p(null);const E=_.parser;r&&console.log("Loading finished "+a,v.guid);let D=0;if(_.parser.json.textures){let x=!1;for(const d of _.parser.json.textures){if(d?.extensions){const c=d?.extensions[$];if(c?.guid&&c.guid===v.guid){x=!0;break}}D++}if(x){let d=await E.getDependency("texture",D);return d&&g.assignLODInformation(o.url,d,s,e,void 0),r&&console.log('change "'+t.name+'" \u2192 "'+d.name+'"',a,D,d,u),t instanceof N&&(d=this.copySettings(t,d)),d&&(d.guid=v.guid),p(d)}else h&&console.warn("Could not find texture with guid",v.guid,_.parser.json)}if(D=0,_.parser.json.meshes){let x=!1;for(const d of _.parser.json.meshes){if(d?.extensions){const c=d?.extensions[$];if(c?.guid&&c.guid===v.guid){x=!0;break}}D++}if(x){const d=await E.getDependency("mesh",D);if(r&&console.log(`Loaded Mesh "${d.name}"`,a,D,d,u),d.isMesh===!0){const c=d.geometry;return g.assignLODInformation(o.url,c,s,e,0),p(c)}else{const c=new Array;for(let L=0;L<d.children.length;L++){const O=d.children[L];if(O.isMesh===!0){const S=O.geometry;g.assignLODInformation(o.url,S,s,e,L),c.push(S)}}return p(c)}}else h&&console.warn("Could not find mesh with guid",v.guid,_.parser.json)}return p(null)});return this.previouslyLoaded.set(u,T),f.use(T),await T}else if(t instanceof N){r&&console.log("Load texture from uri: "+a);const u=await new Ue().loadAsync(a);return u?(u.guid=n.guid,u.flipY=!1,u.needsUpdate=!0,u.colorSpace=t.colorSpace,r&&console.log(n,u)):h&&console.warn("failed loading",a),u}}return null}static maxConcurrent=50;static queue=new et(g.maxConcurrent,{debug:h!=!1});static assignLODInformation(t,e,r,o,s){if(!e)return;e.userData||(e.userData={});const n=new ct(t,r,o,s);e.userData.LODS=n,"source"in e&&typeof e.source=="object"&&(e.source.LODS=n)}static getAssignedLODInformation(t){return t?t.userData?.LODS?t.userData.LODS:"source"in t&&t.source?.LODS?t.source.LODS:null:null}static copySettings(t,e){return e?(h==="verbose"&&console.debug(`Copy texture settings
4
4
  `,t.uuid,`