@needle-tools/engine 2.52.0-pre → 2.54.2-pre

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 (220) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/needle-engine.d.ts +3018 -2680
  3. package/dist/needle-engine.js +439 -439
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +41 -41
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/dist/needle-engine.tsbuildinfo +1 -0
  8. package/lib/engine/codegen/register_types.d.ts +1 -0
  9. package/lib/engine/codegen/register_types.js +346 -0
  10. package/lib/engine/codegen/register_types.js.map +1 -0
  11. package/lib/engine/debug/debug.d.ts +1 -0
  12. package/lib/engine/debug/debug.js +4 -0
  13. package/lib/engine/debug/debug.js.map +1 -1
  14. package/lib/engine/debug/debug_console.js +2 -1
  15. package/lib/engine/debug/debug_console.js.map +1 -1
  16. package/lib/engine/debug/debug_overlay.js +3 -1
  17. package/lib/engine/debug/debug_overlay.js.map +1 -1
  18. package/lib/engine/engine_components.js +2 -2
  19. package/lib/engine/engine_components.js.map +1 -1
  20. package/lib/engine/engine_default_parameters.d.ts +2 -2
  21. package/lib/engine/engine_element.js +4 -2
  22. package/lib/engine/engine_element.js.map +1 -1
  23. package/lib/engine/engine_element_loading.d.ts +1 -0
  24. package/lib/engine/engine_element_loading.js +17 -6
  25. package/lib/engine/engine_element_loading.js.map +1 -1
  26. package/lib/engine/engine_element_overlay.js +4 -2
  27. package/lib/engine/engine_element_overlay.js.map +1 -1
  28. package/lib/engine/engine_fileloader.d.ts +3 -0
  29. package/lib/engine/engine_fileloader.js +8 -0
  30. package/lib/engine/engine_fileloader.js.map +1 -0
  31. package/lib/engine/engine_generic_utils.d.ts +1 -0
  32. package/lib/engine/engine_generic_utils.js +14 -0
  33. package/lib/engine/engine_generic_utils.js.map +1 -0
  34. package/lib/engine/engine_input.js +4 -0
  35. package/lib/engine/engine_input.js.map +1 -1
  36. package/lib/engine/engine_networking_instantiate.d.ts +1 -1
  37. package/lib/engine/engine_networking_instantiate.js +3 -0
  38. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  39. package/lib/engine/engine_networking_websocket.d.ts +1 -0
  40. package/lib/engine/engine_networking_websocket.js +1 -1
  41. package/lib/engine/engine_networking_websocket.js.map +1 -1
  42. package/lib/engine/engine_serialization_builtin_serializer.d.ts +6 -0
  43. package/lib/engine/engine_serialization_builtin_serializer.js +35 -7
  44. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  45. package/lib/engine/engine_serialization_core.d.ts +1 -0
  46. package/lib/engine/engine_serialization_core.js +6 -0
  47. package/lib/engine/engine_serialization_core.js.map +1 -1
  48. package/lib/engine/engine_setup.js +2 -2
  49. package/lib/engine/engine_setup.js.map +1 -1
  50. package/lib/engine/engine_texture.d.ts +3 -0
  51. package/lib/engine/engine_texture.js +4 -0
  52. package/lib/engine/engine_texture.js.map +1 -0
  53. package/lib/engine/engine_utils.d.ts +1 -1
  54. package/lib/engine/engine_utils.js +3 -0
  55. package/lib/engine/engine_utils.js.map +1 -1
  56. package/lib/engine/extensions/NEEDLE_components.d.ts +1 -1
  57. package/lib/engine/extensions/NEEDLE_progressive.d.ts +40 -0
  58. package/lib/engine/extensions/NEEDLE_progressive.js +322 -0
  59. package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -0
  60. package/lib/engine/extensions/extensions.js +2 -2
  61. package/lib/engine/extensions/extensions.js.map +1 -1
  62. package/lib/engine-components/Camera.js +17 -2
  63. package/lib/engine-components/Camera.js.map +1 -1
  64. package/lib/engine-components/GroundProjection.d.ts +2 -1
  65. package/lib/engine-components/GroundProjection.js +19 -12
  66. package/lib/engine-components/GroundProjection.js.map +1 -1
  67. package/lib/engine-components/Light.js +1 -0
  68. package/lib/engine-components/Light.js.map +1 -1
  69. package/lib/engine-components/OrbitControls.js +6 -2
  70. package/lib/engine-components/OrbitControls.js.map +1 -1
  71. package/lib/engine-components/ParticleSystemModules.d.ts +1 -1
  72. package/lib/engine-components/ParticleSystemModules.js +48 -44
  73. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  74. package/lib/engine-components/ReflectionProbe.d.ts +1 -1
  75. package/lib/engine-components/Renderer.d.ts +1 -1
  76. package/lib/engine-components/Renderer.js +4 -9
  77. package/lib/engine-components/Renderer.js.map +1 -1
  78. package/lib/engine-components/Voip.js +13 -4
  79. package/lib/engine-components/Voip.js.map +1 -1
  80. package/lib/engine-components/Volume.js +8 -1
  81. package/lib/engine-components/Volume.js.map +1 -1
  82. package/lib/engine-components/WebXR.d.ts +2 -2
  83. package/lib/engine-components/WebXRAvatar.d.ts +1 -1
  84. package/lib/engine-components/codegen/components.d.ts +99 -95
  85. package/lib/engine-components/codegen/components.js +99 -95
  86. package/lib/engine-components/codegen/components.js.map +1 -1
  87. package/lib/engine-components/export/{GltfExport.d.ts → gltf/GltfExport.d.ts} +2 -2
  88. package/lib/engine-components/export/{GltfExport.js → gltf/GltfExport.js} +7 -7
  89. package/lib/engine-components/export/gltf/GltfExport.js.map +1 -0
  90. package/lib/engine-components/export/usdz/Extension.d.ts +9 -0
  91. package/lib/engine-components/export/usdz/Extension.js +2 -0
  92. package/lib/engine-components/export/usdz/Extension.js.map +1 -0
  93. package/lib/engine-components/export/usdz/USDZExporter.d.ts +26 -0
  94. package/lib/engine-components/export/usdz/USDZExporter.js +209 -0
  95. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -0
  96. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +44 -0
  97. package/lib/engine-components/export/usdz/extensions/Animation.js +264 -0
  98. package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -0
  99. package/lib/engine-components/export/usdz/types.d.ts +34 -0
  100. package/lib/engine-components/export/usdz/types.js +2 -0
  101. package/lib/engine-components/export/usdz/types.js.map +1 -0
  102. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -0
  103. package/lib/engine-components/export/usdz/utils/animationutils.js +46 -0
  104. package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -0
  105. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -0
  106. package/lib/engine-components/export/usdz/utils/quicklook.js +36 -0
  107. package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -0
  108. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -0
  109. package/lib/engine-components/export/usdz/utils/timeutils.js +15 -0
  110. package/lib/engine-components/export/usdz/utils/timeutils.js.map +1 -0
  111. package/lib/engine-components/ui/Button.js +30 -0
  112. package/lib/engine-components/ui/Button.js.map +1 -1
  113. package/lib/engine-components/ui/Graphic.d.ts +2 -0
  114. package/lib/engine-components/ui/Graphic.js +15 -0
  115. package/lib/engine-components/ui/Graphic.js.map +1 -1
  116. package/lib/engine-components/ui/InputField.d.ts +2 -0
  117. package/lib/engine-components/ui/InputField.js +23 -1
  118. package/lib/engine-components/ui/InputField.js.map +1 -1
  119. package/lib/engine-components/ui/Utils.d.ts +4 -1
  120. package/lib/engine-components/ui/Utils.js +15 -12
  121. package/lib/engine-components/ui/Utils.js.map +1 -1
  122. package/lib/engine-components-experimental/Presentation.d.ts +6 -0
  123. package/lib/engine-components-experimental/Presentation.js +11 -0
  124. package/lib/engine-components-experimental/Presentation.js.map +1 -0
  125. package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +18 -0
  126. package/lib/engine-components-experimental/annotation/LineDrawer.js +175 -0
  127. package/lib/engine-components-experimental/annotation/LineDrawer.js.map +1 -0
  128. package/lib/engine-components-experimental/annotation/LinesManager.d.ts +54 -0
  129. package/lib/engine-components-experimental/annotation/LinesManager.js +155 -0
  130. package/lib/engine-components-experimental/annotation/LinesManager.js.map +1 -0
  131. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +26 -0
  132. package/lib/engine-components-experimental/networking/PlayerSync.js +121 -0
  133. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -0
  134. package/lib/engine-schemes/vec2.d.ts +10 -0
  135. package/lib/engine-schemes/vec2.js +26 -0
  136. package/lib/engine-schemes/vec2.js.map +1 -0
  137. package/lib/include/three/ARButton.d.ts +3 -0
  138. package/lib/include/three/ARButton.js +158 -0
  139. package/lib/include/three/ARButton.js.map +1 -0
  140. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -0
  141. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +46 -0
  142. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js.map +1 -0
  143. package/lib/include/three/VRButton.d.ts +5 -0
  144. package/lib/include/three/VRButton.js +122 -0
  145. package/lib/include/three/VRButton.js.map +1 -0
  146. package/lib/tsconfig.tsbuildinfo +1 -0
  147. package/package.json +2 -2
  148. package/src/engine/codegen/register_types.js +212 -204
  149. package/src/engine/debug/debug.ts +5 -0
  150. package/src/engine/debug/debug_console.ts +3 -2
  151. package/src/engine/debug/debug_overlay.ts +3 -1
  152. package/src/engine/engine_components.ts +2 -2
  153. package/src/engine/engine_element.ts +4 -2
  154. package/src/engine/engine_element_loading.ts +13 -6
  155. package/src/engine/engine_element_overlay.ts +4 -2
  156. package/src/engine/engine_input.ts +4 -0
  157. package/src/engine/engine_networking_instantiate.ts +4 -1
  158. package/src/engine/engine_networking_websocket.ts +3 -1
  159. package/src/engine/engine_serialization_builtin_serializer.ts +39 -8
  160. package/src/engine/engine_serialization_core.ts +7 -1
  161. package/src/engine/engine_setup.ts +2 -2
  162. package/src/engine/engine_texture.ts +6 -0
  163. package/src/engine/engine_utils.ts +3 -1
  164. package/src/engine/extensions/NEEDLE_progressive.ts +357 -0
  165. package/src/engine/extensions/extensions.ts +2 -2
  166. package/src/engine-components/Camera.ts +17 -3
  167. package/src/engine-components/GroundProjection.ts +18 -12
  168. package/src/engine-components/Light.ts +3 -1
  169. package/src/engine-components/OrbitControls.ts +7 -3
  170. package/src/engine-components/ParticleSystemModules.ts +50 -47
  171. package/src/engine-components/Renderer.ts +6 -10
  172. package/src/engine-components/Voip.ts +14 -4
  173. package/src/engine-components/Volume.ts +8 -1
  174. package/src/engine-components/WebXR.ts +2 -2
  175. package/src/engine-components/codegen/components.ts +99 -95
  176. package/src/engine-components/export/{GltfExport.ts → gltf/GltfExport.ts} +7 -7
  177. package/src/engine-components/export/usdz/Extension.ts +12 -0
  178. package/src/engine-components/export/usdz/USDZExporter.ts +233 -0
  179. package/src/engine-components/export/usdz/extensions/Animation.ts +306 -0
  180. package/src/engine-components/export/usdz/types.ts +39 -0
  181. package/src/engine-components/export/usdz/utils/animationutils.ts +60 -0
  182. package/src/engine-components/export/usdz/utils/quicklook.ts +43 -0
  183. package/src/engine-components/export/usdz/utils/timeutils.ts +20 -0
  184. package/src/engine-components/ui/Button.ts +8 -8
  185. package/src/engine-components/ui/Graphic.ts +15 -1
  186. package/src/engine-components/ui/InputField.ts +25 -2
  187. package/src/engine-components/ui/Utils.ts +17 -14
  188. package/src/engine-components-experimental/annotation/LineDrawer.ts +10 -7
  189. package/src/engine-components-experimental/annotation/LinesManager.ts +6 -6
  190. package/src/engine-components-experimental/networking/PlayerSync.ts +1 -1
  191. package/lib/engine/engine_caching.d.ts +0 -0
  192. package/lib/engine/engine_caching.js +0 -2
  193. package/lib/engine/engine_caching.js.map +0 -1
  194. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +0 -18
  195. package/lib/engine/extensions/NEEDLE_deferred_texture.js +0 -194
  196. package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +0 -1
  197. package/lib/engine/tests/simulate_avatars.d.ts +0 -0
  198. package/lib/engine/tests/simulate_avatars.js +0 -3
  199. package/lib/engine/tests/simulate_avatars.js.map +0 -1
  200. package/lib/engine-components/NavMesh.d.ts +0 -0
  201. package/lib/engine-components/NavMesh.js +0 -101
  202. package/lib/engine-components/NavMesh.js.map +0 -1
  203. package/lib/engine-components/ParticleSystemBehaviours.d.ts +0 -0
  204. package/lib/engine-components/ParticleSystemBehaviours.js +0 -2
  205. package/lib/engine-components/ParticleSystemBehaviours.js.map +0 -1
  206. package/lib/engine-components/SpringJoint.d.ts +0 -0
  207. package/lib/engine-components/SpringJoint.js +0 -43
  208. package/lib/engine-components/SpringJoint.js.map +0 -1
  209. package/lib/engine-components/export/GltfExport.js.map +0 -1
  210. package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
  211. package/lib/engine-components/ui/CanvasScaler.js +0 -17
  212. package/lib/engine-components/ui/CanvasScaler.js.map +0 -1
  213. package/src/engine/dist/engine_three_utils.js +0 -279
  214. package/src/engine/engine_caching.ts +0 -0
  215. package/src/engine/extensions/NEEDLE_deferred_texture.ts +0 -217
  216. package/src/engine/tests/simulate_avatars.ts +0 -2
  217. package/src/engine-components/NavMesh.ts +0 -117
  218. package/src/engine-components/ParticleSystemBehaviours.ts +0 -0
  219. package/src/engine-components/SpringJoint.ts +0 -45
  220. package/src/engine-components/ui/CanvasScaler.ts +0 -21
@@ -3,160 +3,164 @@ export class __Ignore {}
3
3
  export { AlignmentConstraint } from "../AlignmentConstraint";
4
4
  export { Animation } from "../Animation";
5
5
  export { AnimationCurve } from "../AnimationCurve";
6
+ export { AnimationExtension } from "../export/usdz/extensions/Animation";
7
+ export { AnimationTrackHandler } from "../timeline/TimelineTracks";
6
8
  export { Animator } from "../Animator";
7
9
  export { AnimatorController } from "../AnimatorController";
10
+ export { AttachedObject } from "../WebXRController";
8
11
  export { AudioListener } from "../AudioListener";
9
12
  export { AudioSource } from "../AudioSource";
10
- export { AvatarModel } from "../AvatarLoader";
13
+ export { AudioTrackHandler } from "../timeline/TimelineTracks";
14
+ export { Avatar_Brain_LookAt } from "../avatar/Avatar_Brain_LookAt";
15
+ export { Avatar_MouthShapes } from "../avatar/Avatar_MouthShapes";
16
+ export { Avatar_MustacheShake } from "../avatar/Avatar_MustacheShake";
17
+ export { Avatar_POI } from "../avatar/Avatar_Brain_LookAt";
18
+ export { AvatarBlink_Simple } from "../avatar/AvatarBlink_Simple";
19
+ export { AvatarEyeLook_Rotation } from "../avatar/AvatarEyeLook_Rotation";
11
20
  export { AvatarLoader } from "../AvatarLoader";
21
+ export { AvatarMarker } from "../WebXRAvatar";
22
+ export { AvatarModel } from "../AvatarLoader";
12
23
  export { AxesHelper } from "../AxesHelper";
24
+ export { BaseUIComponent } from "../ui/BaseUIComponent";
13
25
  export { BasicIKConstraint } from "../BasicIKConstraint";
26
+ export { BoxCollider } from "../Collider";
27
+ export { BoxGizmo } from "../Gizmos";
14
28
  export { BoxHelperComponent } from "../BoxHelperComponent";
29
+ export { Button } from "../ui/Button";
30
+ export { CallInfo } from "../EventList";
15
31
  export { Camera } from "../Camera";
32
+ export { Canvas } from "../ui/Canvas";
33
+ export { CanvasGroup } from "../ui/CanvasGroup";
34
+ export { CapsuleCollider } from "../Collider";
16
35
  export { CharacterController } from "../CharacterController";
17
36
  export { CharacterControllerInput } from "../CharacterController";
18
37
  export { Collider } from "../Collider";
19
- export { SphereCollider } from "../Collider";
20
- export { BoxCollider } from "../Collider";
21
- export { MeshCollider } from "../Collider";
22
- export { CapsuleCollider } from "../Collider";
23
- export { DeleteBox } from "../DeleteBox";
38
+ export { ColorAdjustments } from "../Volume";
39
+ export { ColorBySpeedModule } from "../ParticleSystemModules";
40
+ export { ColorOverLifetimeModule } from "../ParticleSystemModules";
41
+ export { ControlTrackHandler } from "../timeline/TimelineTracks";
24
42
  export { Deletable } from "../DeleteBox";
43
+ export { DeleteBox } from "../DeleteBox";
25
44
  export { DeviceFlag } from "../DeviceFlag";
26
45
  export { DragControls } from "../DragControls";
27
46
  export { DropListener } from "../DropListener";
28
47
  export { Duplicatable } from "../Duplicatable";
29
- export { CallInfo } from "../EventList";
30
- export { EventListEvent } from "../EventList";
48
+ export { EmissionModule } from "../ParticleSystemModules";
31
49
  export { EventList } from "../EventList";
50
+ export { EventListEvent } from "../EventList";
51
+ export { EventSystem } from "../ui/EventSystem";
32
52
  export { EventTrigger } from "../EventTrigger";
53
+ export { FieldWithDefault } from "../Renderer";
54
+ export { FixedJoint } from "../Joints";
33
55
  export { FlyControls } from "../FlyControls";
34
- export { BoxGizmo } from "../Gizmos";
56
+ export { GltfExport } from "../export/gltf/GltfExport";
57
+ export { GltfExportBox } from "../export/gltf/GltfExport";
58
+ export { Gradient } from "../ParticleSystemModules";
59
+ export { Graphic } from "../ui/Graphic";
60
+ export { GraphicRaycaster } from "../ui/Raycaster";
35
61
  export { GridHelper } from "../GridHelper";
62
+ export { GridLayoutGroup } from "../ui/Layout";
36
63
  export { GroundProjectedEnv } from "../GroundProjection";
37
- export { Interactable } from "../Interactable";
38
- export { UsageMarker } from "../Interactable";
39
- export { FixedJoint } from "../Joints";
40
64
  export { HingeJoint } from "../Joints";
65
+ export { HorizontalLayoutGroup } from "../ui/Layout";
66
+ export { Image } from "../ui/Image";
67
+ export { InheritVelocityModule } from "../ParticleSystemModules";
68
+ export { InputField } from "../ui/InputField";
69
+ export { Interactable } from "../Interactable";
70
+ export { Keyboard } from "../ui/Keyboard";
71
+ export { LayoutGroup } from "../ui/Layout";
41
72
  export { Light } from "../Light";
42
- export { LODModel } from "../LODGroup";
73
+ export { LimitVelocityOverLifetimeModule } from "../ParticleSystemModules";
43
74
  export { LODGroup } from "../LODGroup";
75
+ export { LODModel } from "../LODGroup";
76
+ export { LogStats } from "../debug/LogStats";
44
77
  export { LookAtConstraint } from "../LookAtConstraint";
78
+ export { MainModule } from "../ParticleSystemModules";
79
+ export { MaskableGraphic } from "../ui/Graphic";
80
+ export { MeshCollider } from "../Collider";
81
+ export { MeshRenderer } from "../Renderer";
82
+ export { MinMaxCurve } from "../ParticleSystemModules";
83
+ export { MinMaxGradient } from "../ParticleSystemModules";
45
84
  export { NestedGltf } from "../NestedGltf";
46
85
  export { Networking } from "../Networking";
86
+ export { NoiseModule } from "../ParticleSystemModules";
87
+ export { ObjectRaycaster } from "../ui/Raycaster";
47
88
  export { OffsetConstraint } from "../OffsetConstraint";
48
89
  export { OrbitControls } from "../OrbitControls";
49
- export { SubEmitterSystem } from "../ParticleSystem";
50
- export { ParticleSystemRenderer } from "../ParticleSystem";
51
- export { ParticleSystem } from "../ParticleSystem";
52
- export { Gradient } from "../ParticleSystemModules";
53
- export { MinMaxCurve } from "../ParticleSystemModules";
54
- export { MinMaxGradient } from "../ParticleSystemModules";
55
- export { MainModule } from "../ParticleSystemModules";
56
90
  export { ParticleBurst } from "../ParticleSystemModules";
57
- export { EmissionModule } from "../ParticleSystemModules";
58
- export { ColorOverLifetimeModule } from "../ParticleSystemModules";
59
- export { SizeOverLifetimeModule } from "../ParticleSystemModules";
60
- export { ShapeModule } from "../ParticleSystemModules";
61
- export { NoiseModule } from "../ParticleSystemModules";
62
- export { TrailModule } from "../ParticleSystemModules";
63
- export { VelocityOverLifetimeModule } from "../ParticleSystemModules";
64
- export { TextureSheetAnimationModule } from "../ParticleSystemModules";
65
- export { RotationOverLifetimeModule } from "../ParticleSystemModules";
66
- export { RotationBySpeedModule } from "../ParticleSystemModules";
67
- export { LimitVelocityOverLifetimeModule } from "../ParticleSystemModules";
68
- export { InheritVelocityModule } from "../ParticleSystemModules";
69
- export { SizeBySpeedModule } from "../ParticleSystemModules";
70
- export { ColorBySpeedModule } from "../ParticleSystemModules";
71
91
  export { ParticleSubEmitter } from "../ParticleSystemSubEmitter";
92
+ export { ParticleSystem } from "../ParticleSystem";
93
+ export { ParticleSystemRenderer } from "../ParticleSystem";
94
+ export { PlayableDirector } from "../timeline/PlayableDirector";
72
95
  export { PlayerColor } from "../PlayerColor";
96
+ export { PointerEventData } from "../ui/PointerEvents";
97
+ export { RawImage } from "../ui/Image";
98
+ export { Raycaster } from "../ui/Raycaster";
99
+ export { Rect } from "../ui/RectTransform";
100
+ export { RectTransform } from "../ui/RectTransform";
73
101
  export { ReflectionProbe } from "../ReflectionProbe";
74
- export { FieldWithDefault } from "../Renderer";
102
+ export { RegisteredAnimationInfo } from "../export/usdz/extensions/Animation";
103
+ export { RemoteSkybox } from "../Skybox";
75
104
  export { Renderer } from "../Renderer";
76
- export { MeshRenderer } from "../Renderer";
77
- export { SkinnedMeshRenderer } from "../Renderer";
78
105
  export { RendererLightmap } from "../RendererLightmap";
106
+ export { RGBAColor } from "../js-extensions/RGBAColor";
79
107
  export { Rigidbody } from "../RigidBody";
108
+ export { RotationBySpeedModule } from "../ParticleSystemModules";
109
+ export { RotationOverLifetimeModule } from "../ParticleSystemModules";
80
110
  export { ScreenCapture } from "../ScreenCapture";
81
111
  export { ShadowCatcher } from "../ShadowCatcher";
82
- export { RemoteSkybox } from "../Skybox";
112
+ export { ShapeModule } from "../ParticleSystemModules";
113
+ export { SignalAsset } from "../timeline/SignalAsset";
114
+ export { SignalReceiver } from "../timeline/SignalAsset";
115
+ export { SignalReceiverEvent } from "../timeline/SignalAsset";
116
+ export { SignalTrackHandler } from "../timeline/TimelineTracks";
117
+ export { Size } from "../ui/RectTransform";
118
+ export { SizeBySpeedModule } from "../ParticleSystemModules";
119
+ export { SizeOverLifetimeModule } from "../ParticleSystemModules";
120
+ export { SkinnedMeshRenderer } from "../Renderer";
83
121
  export { SmoothFollow } from "../SmoothFollow";
84
- export { SpatialTriggerReceiver } from "../SpatialTrigger";
122
+ export { SpatialHtml } from "../ui/SpatialHtml";
85
123
  export { SpatialTrigger } from "../SpatialTrigger";
124
+ export { SpatialTriggerReceiver } from "../SpatialTrigger";
86
125
  export { SpectatorCamera } from "../SpectatorCamera";
126
+ export { SphereCollider } from "../Collider";
87
127
  export { Sprite } from "../SpriteRenderer";
88
- export { SpriteSheet } from "../SpriteRenderer";
89
128
  export { SpriteRenderer } from "../SpriteRenderer";
129
+ export { SpriteSheet } from "../SpriteRenderer";
130
+ export { SubEmitterSystem } from "../ParticleSystem";
90
131
  export { SyncedCamera } from "../SyncedCamera";
91
132
  export { SyncedRoom } from "../SyncedRoom";
92
133
  export { SyncedTransform } from "../SyncedTransform";
134
+ export { TeleportTarget } from "../WebXRController";
93
135
  export { TestRunner } from "../TestRunner";
94
136
  export { TestSimulateUserData } from "../TestRunner";
137
+ export { Text } from "../ui/Text";
138
+ export { TextureSheetAnimationModule } from "../ParticleSystemModules";
139
+ export { ToneMapping } from "../Volume";
140
+ export { TrailModule } from "../ParticleSystemModules";
141
+ export { TransformData } from "../export/usdz/extensions/Animation";
95
142
  export { TransformGizmo } from "../TransformGizmo";
143
+ export { UIRaycastUtils } from "../ui/RaycastUtils";
144
+ export { UIRootComponent } from "../ui/BaseUIComponent";
145
+ export { UsageMarker } from "../Interactable";
146
+ export { USDZExporter } from "../export/usdz/USDZExporter";
147
+ export { VelocityOverLifetimeModule } from "../ParticleSystemModules";
148
+ export { VerticalLayoutGroup } from "../ui/Layout";
96
149
  export { VideoPlayer } from "../VideoPlayer";
97
150
  export { Voip } from "../Voip";
98
- export { VolumeParameter } from "../Volume";
151
+ export { Volume } from "../Volume";
99
152
  export { VolumeComponent } from "../Volume";
100
- export { ToneMapping } from "../Volume";
101
- export { ColorAdjustments } from "../Volume";
153
+ export { VolumeParameter } from "../Volume";
102
154
  export { VolumeProfile } from "../Volume";
103
- export { Volume } from "../Volume";
155
+ export { VRUserState } from "../WebXRSync";
156
+ export { WebAR } from "../WebXR";
104
157
  export { WebARSessionRoot } from "../WebARSessionRoot";
105
158
  export { WebXR } from "../WebXR";
106
- export { WebAR } from "../WebXR";
107
- export { AvatarMarker } from "../WebXRAvatar";
108
159
  export { WebXRAvatar } from "../WebXRAvatar";
109
- export { TeleportTarget } from "../WebXRController";
110
160
  export { WebXRController } from "../WebXRController";
111
- export { AttachedObject } from "../WebXRController";
161
+ export { WebXRSync } from "../WebXRSync";
162
+ export { XRFlag } from "../XRFlag";
112
163
  export { XRGrabModel } from "../WebXRGrabRendering";
113
164
  export { XRGrabRendering } from "../WebXRGrabRendering";
114
165
  export { XRRig } from "../WebXRRig";
115
- export { VRUserState } from "../WebXRSync";
116
- export { WebXRSync } from "../WebXRSync";
117
166
  export { XRState } from "../XRFlag";
118
- export { XRFlag } from "../XRFlag";
119
- export { AvatarBlink_Simple } from "../avatar/AvatarBlink_Simple";
120
- export { AvatarEyeLook_Rotation } from "../avatar/AvatarEyeLook_Rotation";
121
- export { Avatar_POI } from "../avatar/Avatar_Brain_LookAt";
122
- export { Avatar_Brain_LookAt } from "../avatar/Avatar_Brain_LookAt";
123
- export { Avatar_MouthShapes } from "../avatar/Avatar_MouthShapes";
124
- export { Avatar_MustacheShake } from "../avatar/Avatar_MustacheShake";
125
- export { LogStats } from "../debug/LogStats";
126
- export { GltfExportBox } from "../export/GltfExport";
127
- export { GltfExport } from "../export/GltfExport";
128
- export { RGBAColor } from "../js-extensions/RGBAColor";
129
- export { PlayableDirector } from "../timeline/PlayableDirector";
130
- export { SignalAsset } from "../timeline/SignalAsset";
131
- export { SignalReceiverEvent } from "../timeline/SignalAsset";
132
- export { SignalReceiver } from "../timeline/SignalAsset";
133
- export { AnimationTrackHandler } from "../timeline/TimelineTracks";
134
- export { AudioTrackHandler } from "../timeline/TimelineTracks";
135
- export { SignalTrackHandler } from "../timeline/TimelineTracks";
136
- export { ControlTrackHandler } from "../timeline/TimelineTracks";
137
- export { BaseUIComponent } from "../ui/BaseUIComponent";
138
- export { UIRootComponent } from "../ui/BaseUIComponent";
139
- export { Button } from "../ui/Button";
140
- export { Canvas } from "../ui/Canvas";
141
- export { CanvasGroup } from "../ui/CanvasGroup";
142
- export { EventSystem } from "../ui/EventSystem";
143
- export { Graphic } from "../ui/Graphic";
144
- export { MaskableGraphic } from "../ui/Graphic";
145
- export { Image } from "../ui/Image";
146
- export { RawImage } from "../ui/Image";
147
- export { InputField } from "../ui/InputField";
148
- export { Keyboard } from "../ui/Keyboard";
149
- export { LayoutGroup } from "../ui/Layout";
150
- export { VerticalLayoutGroup } from "../ui/Layout";
151
- export { HorizontalLayoutGroup } from "../ui/Layout";
152
- export { GridLayoutGroup } from "../ui/Layout";
153
- export { PointerEventData } from "../ui/PointerEvents";
154
- export { Raycaster } from "../ui/Raycaster";
155
- export { ObjectRaycaster } from "../ui/Raycaster";
156
- export { GraphicRaycaster } from "../ui/Raycaster";
157
- export { UIRaycastUtils } from "../ui/RaycastUtils";
158
- export { Size } from "../ui/RectTransform";
159
- export { Rect } from "../ui/RectTransform";
160
- export { RectTransform } from "../ui/RectTransform";
161
- export { SpatialHtml } from "../ui/SpatialHtml";
162
- export { Text } from "../ui/Text";
@@ -1,12 +1,12 @@
1
- import { Behaviour, GameObject } from "../Component";
1
+ import { Behaviour, GameObject } from "../../Component";
2
2
  import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js';
3
- import GLTFMeshGPUInstancingExtension from '../../include/three/EXT_mesh_gpu_instancing_exporter.js';
4
- import { Renderer } from "../Renderer";
3
+ import GLTFMeshGPUInstancingExtension from '../../../include/three/EXT_mesh_gpu_instancing_exporter.js';
4
+ import { Renderer } from "../../Renderer";
5
5
  import { Object3D, Vector3 } from "three";
6
- import { SerializationContext } from "../../engine/engine_serialization_core";
7
- import { NEEDLE_components } from "../../engine/extensions/NEEDLE_components";
8
- import { getWorldPosition } from "../../engine/engine_three_utils";
9
- import { BoxHelperComponent } from "../BoxHelperComponent";
6
+ import { SerializationContext } from "../../../engine/engine_serialization_core";
7
+ import { NEEDLE_components } from "../../../engine/extensions/NEEDLE_components";
8
+ import { getWorldPosition } from "../../../engine/engine_three_utils";
9
+ import { BoxHelperComponent } from "../../BoxHelperComponent";
10
10
  import { AnimationClip } from "three";
11
11
 
12
12
 
@@ -0,0 +1,12 @@
1
+ import { USDZObject } from "./types";
2
+
3
+
4
+ export interface IUSDZExporterExtension {
5
+
6
+ get extensionName(): string;
7
+ onBeforeBuildDocument?(context);
8
+ onAfterBuildDocument?(context);
9
+ onExportObject?(object, model : USDZObject, context);
10
+ onAfterSerialize?(context);
11
+ onAfterHierarchy?(context);
12
+ }
@@ -0,0 +1,233 @@
1
+ import { delay, getParam, isiOS, isMobileDevice, isSafari } from "../../../engine/engine_utils";
2
+ import { Object3D, Color } from "three";
3
+ import * as THREE from "three";
4
+ import { USDZExporter as ThreeUSDZExporter } from "three/examples/jsm/exporters/USDZExporter";
5
+ import { AnimationExtension } from "./extensions/Animation"
6
+ import { ensureQuicklookLinkIsCreated } from "./utils/quicklook";
7
+ import { getFormattedDate } from "./utils/timeutils";
8
+ import { registerAnimatorsImplictly } from "./utils/animationutils";
9
+ import { IUSDZExporterExtension } from "./Extension";
10
+ import { Behaviour, GameObject } from "../../Component";
11
+ import { WebXR } from "../../WebXR"
12
+ import { serializable } from "../../../engine/engine_serialization";
13
+ import { showBalloonWarning } from "../../../engine/debug/debug";
14
+ import { Context } from "../../../engine/engine_setup";
15
+ import { WebARSessionRoot } from "../../WebARSessionRoot";
16
+
17
+ const debug = getParam("debugusdz");
18
+
19
+ export type QuickLookOverlay = {
20
+ callToAction?: string;
21
+ checkoutTitle?: string;
22
+ checkoutSubtitle?: string;
23
+ }
24
+
25
+ export class USDZExporter extends Behaviour {
26
+
27
+ @serializable(Object3D)
28
+ objectToExport?: THREE.Object3D;
29
+
30
+ @serializable()
31
+ autoExportAnimations: boolean = false;
32
+
33
+ extensions: IUSDZExporterExtension[] = [];
34
+
35
+ private link!: HTMLAnchorElement;
36
+ private webxr?: WebXR;
37
+ private webARSessionRoot: WebARSessionRoot | undefined;
38
+
39
+
40
+ start() {
41
+ if (debug) {
42
+ window.addEventListener("keydown", (evt) => {
43
+ switch (evt.key) {
44
+ case "t":
45
+ this.exportAsync();
46
+ break;
47
+ }
48
+ });
49
+ if (isMobileDevice()) {
50
+ setTimeout(() => {
51
+ this.exportAsync();
52
+ }, 2000)
53
+ }
54
+ }
55
+ document.getElementById("open-in-ar")?.addEventListener("click", (evt) => {
56
+ evt.preventDefault();
57
+ this.exportAsync();
58
+ });
59
+
60
+ if (!this.objectToExport) this.objectToExport = this.gameObject;
61
+ }
62
+
63
+
64
+
65
+ onEnable() {
66
+ const ios = isiOS()
67
+ const safari = isSafari();
68
+ if (debug || (ios && safari)) {
69
+ this.createQuicklookButton();
70
+ this.webARSessionRoot = GameObject.findObjectOfType(WebARSessionRoot) ?? undefined;
71
+ this.lastCallback = this.quicklookCallback.bind(this);
72
+ this.link = ensureQuicklookLinkIsCreated(this.context);
73
+ this.link.addEventListener('message', this.lastCallback);
74
+ }
75
+ }
76
+
77
+ onDisable() {
78
+ this.link?.removeEventListener('message', this.lastCallback);
79
+ }
80
+
81
+ async exportAsync() {
82
+ if (!this.objectToExport) return;
83
+
84
+ // make sure we apply the AR scale
85
+ if (this.webARSessionRoot) {
86
+ const scene = this.webARSessionRoot.gameObject;
87
+ const scale = 1 / this.webARSessionRoot!.arScale;
88
+ scene.matrix.makeScale(scale, scale, scale);
89
+ if (this.webARSessionRoot.invertForward) {
90
+ scene.matrix.multiply(new THREE.Matrix4().makeRotationY(Math.PI));
91
+ }
92
+ }
93
+
94
+ const exporter = new ThreeUSDZExporter();
95
+ const extensions: any = [...this.extensions]
96
+
97
+ // collect animators and their clips
98
+ const animExt = new AnimationExtension();
99
+ extensions.push(animExt);
100
+
101
+ if (this.autoExportAnimations)
102
+ registerAnimatorsImplictly(this.objectToExport, animExt);
103
+
104
+ const eventArgs = { self: this, exporter: exporter, extensions: extensions, object: this.objectToExport };
105
+ this.dispatchEvent(new CustomEvent("before-export", { detail: eventArgs }))
106
+
107
+ let name = "needle";
108
+ if (debug) name += "-" + getFormattedDate();
109
+
110
+ //@ts-ignore
111
+ exporter.debug = debug;
112
+ //@ts-ignore
113
+ const arraybuffer = await exporter.parse(this.objectToExport, extensions);
114
+ const blob = new Blob([arraybuffer], { type: 'application/octet-stream' });
115
+
116
+ this.dispatchEvent(new CustomEvent("after-export", { detail: eventArgs }))
117
+
118
+ // second file: USDA (without assets)
119
+ //@ts-ignore
120
+ // const usda = exporter.lastUsda;
121
+ // const blob2 = new Blob([usda], { type: 'text/plain' });
122
+ // this.link.download = name + ".usda";
123
+ // this.link.href = URL.createObjectURL(blob2);
124
+ // this.link.click();
125
+
126
+ // see https://developer.apple.com/documentation/arkit/adding_an_apple_pay_button_or_a_custom_action_in_ar_quick_look
127
+ const overlay = this.buildQuicklookOverlay();
128
+ const callToAction = overlay.callToAction ? encodeURIComponent(overlay.callToAction) : "";
129
+ const checkoutTitle = overlay.checkoutTitle ? encodeURIComponent(overlay.checkoutTitle) : "";
130
+ const checkoutSubtitle = overlay.checkoutSubtitle ? encodeURIComponent(overlay.checkoutSubtitle) : "";
131
+ this.link.href = URL.createObjectURL(blob) + `#callToAction=${callToAction}&checkoutTitle=${checkoutTitle}&checkoutSubtitle=${checkoutSubtitle}&`;
132
+
133
+
134
+ if (!this.lastCallback) {
135
+ this.lastCallback = this.quicklookCallback.bind(this);
136
+ this.link.addEventListener('message', this.lastCallback);
137
+ }
138
+
139
+ // open quicklook
140
+ this.link.download = name + ".usdz";
141
+ this.link.click();
142
+
143
+ // TODO detect QuickLook availability:
144
+ // https://webkit.org/blog/8421/viewing-augmented-reality-assets-in-safari-for-ios/#:~:text=inside%20the%20anchor.-,Feature%20Detection,-To%20detect%20support
145
+ }
146
+
147
+ private lastCallback?: any;
148
+
149
+ private quicklookCallback(event) {
150
+ if ((event as any)?.data == '_apple_ar_quicklook_button_tapped') {
151
+ if (debug) showBalloonWarning("Quicklook closed via call to action button");
152
+ this.dispatchEvent(new CustomEvent("quicklook-button-tapped", { detail: this }));
153
+ }
154
+ }
155
+
156
+ private buildQuicklookOverlay(): QuickLookOverlay {
157
+ const obj: QuickLookOverlay = {};
158
+ obj.callToAction = "Close";
159
+ obj.checkoutTitle = "🌵 Made with Needle";
160
+ obj.checkoutSubtitle = "_";
161
+ // Use the quicklook-overlay event to customize the overlay
162
+ this.dispatchEvent(new CustomEvent("quicklook-overlay", { detail: obj }));
163
+ return obj;
164
+ }
165
+
166
+ private _arButton?: HTMLElement;
167
+ private async createQuicklookButton() {
168
+ if (!this.webxr) {
169
+ await delay(1);
170
+ this.webxr = GameObject.findObjectOfType(WebXR) ?? undefined;
171
+ if (this.webxr) {
172
+ if (this.webxr.VRButton) this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton);
173
+ // check if we have an AR button already and re-use that
174
+ if (this.webxr.ARButton && this._arButton !== this.webxr.ARButton) {
175
+ this._arButton = this.webxr.ARButton;
176
+ // Hack to remove the immersiveweb link
177
+ const linkInButton = this.webxr.ARButton.parentElement?.querySelector("a");
178
+ if (linkInButton) {
179
+ linkInButton.href = "";
180
+ }
181
+ this.webxr.ARButton.innerText = "Open in Quicklook";
182
+ this.webxr.ARButton.disabled = false;
183
+ this.webxr.ARButton.addEventListener("click", evt => {
184
+ evt.preventDefault();
185
+ this.exportAsync();
186
+ });
187
+ this.webxr.ARButton.classList.add("quicklook-ar-button");
188
+ this.dispatchEvent(new CustomEvent("created-button", { detail: this.webxr.ARButton }))
189
+ }
190
+ // create a button if WebXR didnt create one yet
191
+ else {
192
+ this.webxr.createARButton = false;
193
+ this.webxr.createVRButton = false;
194
+ let container = window.document.querySelector(".webxr-buttons");
195
+ if (!container) {
196
+ container = document.createElement("div");
197
+ container.classList.add("webxr-buttons");
198
+ }
199
+ const button = document.createElement("button");
200
+ button.innerText = "Open in Quicklook";
201
+ button.addEventListener("click", () => {
202
+ this.exportAsync();
203
+ });
204
+ button.classList.add('webxr-ar-button');
205
+ button.classList.add('webxr-button');
206
+ button.classList.add("quicklook-ar-button");
207
+ container.appendChild(button);
208
+ this.dispatchEvent(new CustomEvent("created-button", { detail: button }))
209
+ }
210
+ }
211
+ else {
212
+ console.warn("Could not find WebXR component: will not create Quicklook button", Context.Current);
213
+ }
214
+ }
215
+ }
216
+
217
+ private resetStyles(el: HTMLElement) {
218
+ el.style.position = "";
219
+ el.style.top = "";
220
+ el.style.left = "";
221
+ el.style.width = "";
222
+ el.style.height = "";
223
+ el.style.margin = "";
224
+ el.style.padding = "";
225
+ el.style.border = "";
226
+ el.style.background = "";
227
+ el.style.color = "";
228
+ el.style.font = "";
229
+ el.style.textAlign = "";
230
+ el.style.opacity = "";
231
+ el.style.zIndex = "";
232
+ }
233
+ }