@needle-tools/engine 3.28.7-beta → 3.28.7-beta.1

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 (849) hide show
  1. package/CHANGELOG.md +2259 -2256
  2. package/LICENSE.md +10 -10
  3. package/README.md +52 -52
  4. package/dist/needle-engine.js +9 -12
  5. package/dist/needle-engine.light.js +9 -12
  6. package/dist/needle-engine.light.min.js +8 -11
  7. package/dist/needle-engine.light.umd.cjs +8 -11
  8. package/dist/needle-engine.min.js +8 -11
  9. package/dist/needle-engine.umd.cjs +8 -11
  10. package/lib/engine/api.d.ts +52 -52
  11. package/lib/engine/api.js +51 -51
  12. package/lib/engine/assets/index.d.ts +1 -1
  13. package/lib/engine/assets/index.js +4 -4
  14. package/lib/engine/codegen/register_types.d.ts +1 -1
  15. package/lib/engine/codegen/register_types.js +439 -439
  16. package/lib/engine/debug/debug.d.ts +12 -12
  17. package/lib/engine/debug/debug.js +26 -26
  18. package/lib/engine/debug/debug_console.d.ts +2 -2
  19. package/lib/engine/debug/debug_console.js +204 -204
  20. package/lib/engine/debug/debug_overlay.d.ts +10 -10
  21. package/lib/engine/debug/debug_overlay.js +277 -277
  22. package/lib/engine/debug/index.d.ts +1 -1
  23. package/lib/engine/debug/index.js +1 -1
  24. package/lib/engine/engine_addressables.d.ts +75 -75
  25. package/lib/engine/engine_addressables.js +441 -441
  26. package/lib/engine/engine_application.d.ts +19 -19
  27. package/lib/engine/engine_application.js +45 -45
  28. package/lib/engine/engine_assetdatabase.d.ts +25 -25
  29. package/lib/engine/engine_assetdatabase.js +341 -341
  30. package/lib/engine/engine_camera.d.ts +6 -6
  31. package/lib/engine/engine_camera.js +23 -23
  32. package/lib/engine/engine_components.d.ts +17 -17
  33. package/lib/engine/engine_components.js +273 -273
  34. package/lib/engine/engine_components_internal.d.ts +11 -11
  35. package/lib/engine/engine_components_internal.js +41 -41
  36. package/lib/engine/engine_constants.d.ts +5 -5
  37. package/lib/engine/engine_constants.js +32 -32
  38. package/lib/engine/engine_context.d.ts +269 -269
  39. package/lib/engine/engine_context.js +1242 -1242
  40. package/lib/engine/engine_context_registry.d.ts +50 -50
  41. package/lib/engine/engine_context_registry.js +89 -89
  42. package/lib/engine/engine_coroutine.d.ts +4 -4
  43. package/lib/engine/engine_coroutine.js +21 -21
  44. package/lib/engine/engine_create_objects.d.ts +13 -13
  45. package/lib/engine/engine_create_objects.js +33 -33
  46. package/lib/engine/engine_default_parameters.d.ts +2 -2
  47. package/lib/engine/engine_default_parameters.js +3 -3
  48. package/lib/engine/engine_editor-sync.d.ts +17 -17
  49. package/lib/engine/engine_editor-sync.js +7 -7
  50. package/lib/engine/engine_element.d.ts +55 -55
  51. package/lib/engine/engine_element.js +559 -559
  52. package/lib/engine/engine_element_attributes.d.ts +49 -49
  53. package/lib/engine/engine_element_attributes.js +1 -1
  54. package/lib/engine/engine_element_extras.d.ts +6 -6
  55. package/lib/engine/engine_element_extras.js +13 -13
  56. package/lib/engine/engine_element_loading.d.ts +40 -40
  57. package/lib/engine/engine_element_loading.js +312 -312
  58. package/lib/engine/engine_element_overlay.d.ts +19 -19
  59. package/lib/engine/engine_element_overlay.js +143 -143
  60. package/lib/engine/engine_fileloader.d.ts +3 -3
  61. package/lib/engine/engine_fileloader.js +7 -7
  62. package/lib/engine/engine_gameobject.d.ts +39 -39
  63. package/lib/engine/engine_gameobject.js +559 -559
  64. package/lib/engine/engine_generic_utils.d.ts +1 -1
  65. package/lib/engine/engine_generic_utils.js +13 -13
  66. package/lib/engine/engine_gizmos.d.ts +26 -26
  67. package/lib/engine/engine_gizmos.js +282 -282
  68. package/lib/engine/engine_gltf.d.ts +13 -13
  69. package/lib/engine/engine_gltf.js +15 -15
  70. package/lib/engine/engine_gltf_builtin_components.d.ts +7 -7
  71. package/lib/engine/engine_gltf_builtin_components.js +298 -298
  72. package/lib/engine/engine_hot_reload.d.ts +5 -5
  73. package/lib/engine/engine_hot_reload.js +182 -182
  74. package/lib/engine/engine_input.d.ts +129 -129
  75. package/lib/engine/engine_input.js +799 -799
  76. package/lib/engine/engine_input_utils.d.ts +2 -2
  77. package/lib/engine/engine_input_utils.js +22 -22
  78. package/lib/engine/engine_instancing.d.ts +16 -16
  79. package/lib/engine/engine_instancing.js +36 -36
  80. package/lib/engine/engine_license.d.ts +4 -4
  81. package/lib/engine/engine_license.js +398 -398
  82. package/lib/engine/engine_lifecycle_api.d.ts +14 -14
  83. package/lib/engine/engine_lifecycle_api.js +24 -24
  84. package/lib/engine/engine_lifecycle_functions_internal.d.ts +6 -6
  85. package/lib/engine/engine_lifecycle_functions_internal.js +28 -28
  86. package/lib/engine/engine_lightdata.d.ts +23 -23
  87. package/lib/engine/engine_lightdata.js +86 -86
  88. package/lib/engine/engine_loaders.d.ts +7 -7
  89. package/lib/engine/engine_loaders.js +69 -69
  90. package/lib/engine/engine_mainloop_utils.d.ts +13 -13
  91. package/lib/engine/engine_mainloop_utils.js +426 -426
  92. package/lib/engine/engine_math.d.ts +43 -43
  93. package/lib/engine/engine_math.js +147 -147
  94. package/lib/engine/engine_networking.d.ts +176 -176
  95. package/lib/engine/engine_networking.js +649 -649
  96. package/lib/engine/engine_networking_auto.d.ts +24 -24
  97. package/lib/engine/engine_networking_auto.js +324 -324
  98. package/lib/engine/engine_networking_files.d.ts +23 -23
  99. package/lib/engine/engine_networking_files.js +176 -176
  100. package/lib/engine/engine_networking_files_default_components.d.ts +3 -3
  101. package/lib/engine/engine_networking_files_default_components.js +39 -39
  102. package/lib/engine/engine_networking_instantiate.d.ts +39 -39
  103. package/lib/engine/engine_networking_instantiate.js +302 -302
  104. package/lib/engine/engine_networking_peer.d.ts +15 -15
  105. package/lib/engine/engine_networking_peer.js +132 -132
  106. package/lib/engine/engine_networking_streams.d.ts +90 -90
  107. package/lib/engine/engine_networking_streams.js +428 -428
  108. package/lib/engine/engine_networking_types.d.ts +14 -14
  109. package/lib/engine/engine_networking_types.js +7 -7
  110. package/lib/engine/engine_networking_utils.d.ts +2 -2
  111. package/lib/engine/engine_networking_utils.js +20 -20
  112. package/lib/engine/engine_patcher.d.ts +10 -10
  113. package/lib/engine/engine_patcher.js +142 -142
  114. package/lib/engine/engine_physics.d.ts +115 -115
  115. package/lib/engine/engine_physics.js +228 -228
  116. package/lib/engine/engine_physics.types.d.ts +37 -37
  117. package/lib/engine/engine_physics.types.js +33 -33
  118. package/lib/engine/engine_physics_rapier.d.ts +112 -112
  119. package/lib/engine/engine_physics_rapier.js +1266 -1266
  120. package/lib/engine/engine_playerview.d.ts +26 -26
  121. package/lib/engine/engine_playerview.js +64 -64
  122. package/lib/engine/engine_scenelighting.d.ts +74 -74
  123. package/lib/engine/engine_scenelighting.js +285 -285
  124. package/lib/engine/engine_scenetools.d.ts +35 -35
  125. package/lib/engine/engine_scenetools.js +212 -212
  126. package/lib/engine/engine_serialization.d.ts +4 -4
  127. package/lib/engine/engine_serialization.js +4 -4
  128. package/lib/engine/engine_serialization_builtin_serializer.d.ts +62 -62
  129. package/lib/engine/engine_serialization_builtin_serializer.js +369 -369
  130. package/lib/engine/engine_serialization_core.d.ts +84 -84
  131. package/lib/engine/engine_serialization_core.js +576 -576
  132. package/lib/engine/engine_serialization_decorator.d.ts +15 -15
  133. package/lib/engine/engine_serialization_decorator.js +54 -54
  134. package/lib/engine/engine_setup.d.ts +1 -1
  135. package/lib/engine/engine_setup.js +2 -2
  136. package/lib/engine/engine_shaders.d.ts +31 -31
  137. package/lib/engine/engine_shaders.js +229 -229
  138. package/lib/engine/engine_shims.d.ts +3 -3
  139. package/lib/engine/engine_shims.js +22 -22
  140. package/lib/engine/engine_texture.d.ts +20 -20
  141. package/lib/engine/engine_texture.js +57 -57
  142. package/lib/engine/engine_three_utils.d.ts +51 -51
  143. package/lib/engine/engine_three_utils.js +342 -342
  144. package/lib/engine/engine_time.d.ts +19 -19
  145. package/lib/engine/engine_time.js +47 -47
  146. package/lib/engine/engine_types.d.ts +358 -358
  147. package/lib/engine/engine_types.js +72 -72
  148. package/lib/engine/engine_typestore.d.ts +16 -16
  149. package/lib/engine/engine_typestore.js +35 -35
  150. package/lib/engine/engine_util_decorator.d.ts +12 -12
  151. package/lib/engine/engine_util_decorator.js +115 -115
  152. package/lib/engine/engine_utils.d.ts +104 -104
  153. package/lib/engine/engine_utils.js +518 -518
  154. package/lib/engine/engine_utils_screenshot.d.ts +10 -10
  155. package/lib/engine/engine_utils_screenshot.js +70 -70
  156. package/lib/engine/engine_web_api.d.ts +12 -12
  157. package/lib/engine/engine_web_api.js +112 -112
  158. package/lib/engine/extensions/EXT_texture_exr.d.ts +8 -8
  159. package/lib/engine/extensions/EXT_texture_exr.js +32 -32
  160. package/lib/engine/extensions/NEEDLE_animator_controller_model.d.ts +116 -116
  161. package/lib/engine/extensions/NEEDLE_animator_controller_model.js +91 -91
  162. package/lib/engine/extensions/NEEDLE_components.d.ts +33 -33
  163. package/lib/engine/extensions/NEEDLE_components.js +206 -206
  164. package/lib/engine/extensions/NEEDLE_gameobject_data.d.ts +10 -10
  165. package/lib/engine/extensions/NEEDLE_gameobject_data.js +57 -57
  166. package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +38 -38
  167. package/lib/engine/extensions/NEEDLE_lighting_settings.js +183 -183
  168. package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +18 -18
  169. package/lib/engine/extensions/NEEDLE_lightmaps.js +108 -108
  170. package/lib/engine/extensions/NEEDLE_persistent_assets.d.ts +11 -11
  171. package/lib/engine/extensions/NEEDLE_persistent_assets.js +63 -63
  172. package/lib/engine/extensions/NEEDLE_progressive.d.ts +41 -41
  173. package/lib/engine/extensions/NEEDLE_progressive.js +366 -366
  174. package/lib/engine/extensions/NEEDLE_render_objects.d.ts +13 -13
  175. package/lib/engine/extensions/NEEDLE_render_objects.js +159 -159
  176. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +39 -39
  177. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +544 -544
  178. package/lib/engine/extensions/extension_resolver.d.ts +4 -4
  179. package/lib/engine/extensions/extension_resolver.js +1 -1
  180. package/lib/engine/extensions/extension_utils.d.ts +2 -2
  181. package/lib/engine/extensions/extension_utils.js +140 -140
  182. package/lib/engine/extensions/extensions.d.ts +21 -21
  183. package/lib/engine/extensions/extensions.js +94 -94
  184. package/lib/engine/extensions/index.d.ts +5 -5
  185. package/lib/engine/extensions/index.js +5 -5
  186. package/lib/engine/extensions/usage_tracker.d.ts +13 -13
  187. package/lib/engine/extensions/usage_tracker.js +61 -61
  188. package/lib/engine/js-extensions/Camera.d.ts +1 -1
  189. package/lib/engine/js-extensions/Camera.js +36 -36
  190. package/lib/engine/js-extensions/Layers.d.ts +3 -3
  191. package/lib/engine/js-extensions/Layers.js +19 -19
  192. package/lib/engine/js-extensions/index.d.ts +2 -2
  193. package/lib/engine/js-extensions/index.js +2 -2
  194. package/lib/engine/shaders/shaderData.d.ts +55 -55
  195. package/lib/engine/shaders/shaderData.js +58 -58
  196. package/lib/engine/tests/test_utils.d.ts +2 -2
  197. package/lib/engine/tests/test_utils.js +53 -53
  198. package/lib/engine-components/AlignmentConstraint.d.ts +10 -10
  199. package/lib/engine-components/AlignmentConstraint.js +39 -39
  200. package/lib/engine-components/Animation.d.ts +53 -53
  201. package/lib/engine-components/Animation.js +333 -333
  202. package/lib/engine-components/AnimationCurve.d.ts +16 -16
  203. package/lib/engine-components/AnimationCurve.js +97 -97
  204. package/lib/engine-components/AnimationUtils.d.ts +8 -8
  205. package/lib/engine-components/AnimationUtils.js +110 -110
  206. package/lib/engine-components/Animator.d.ts +81 -81
  207. package/lib/engine-components/Animator.js +229 -229
  208. package/lib/engine-components/AnimatorController.d.ts +57 -57
  209. package/lib/engine-components/AnimatorController.js +887 -887
  210. package/lib/engine-components/AnimatorController.js.map +1 -1
  211. package/lib/engine-components/AudioListener.d.ts +7 -7
  212. package/lib/engine-components/AudioListener.js +30 -30
  213. package/lib/engine-components/AudioSource.d.ts +61 -61
  214. package/lib/engine-components/AudioSource.js +422 -422
  215. package/lib/engine-components/AvatarLoader.d.ts +19 -19
  216. package/lib/engine-components/AvatarLoader.js +173 -173
  217. package/lib/engine-components/AxesHelper.d.ts +9 -9
  218. package/lib/engine-components/AxesHelper.js +44 -44
  219. package/lib/engine-components/BasicIKConstraint.d.ts +9 -9
  220. package/lib/engine-components/BasicIKConstraint.js +43 -43
  221. package/lib/engine-components/BoxHelperComponent.d.ts +16 -16
  222. package/lib/engine-components/BoxHelperComponent.js +89 -89
  223. package/lib/engine-components/Camera.d.ts +70 -70
  224. package/lib/engine-components/Camera.js +450 -450
  225. package/lib/engine-components/CameraUtils.d.ts +1 -1
  226. package/lib/engine-components/CameraUtils.js +77 -77
  227. package/lib/engine-components/CharacterController.d.ts +46 -46
  228. package/lib/engine-components/CharacterController.js +227 -227
  229. package/lib/engine-components/Collider.d.ts +46 -46
  230. package/lib/engine-components/Collider.js +153 -153
  231. package/lib/engine-components/Component.d.ts +228 -228
  232. package/lib/engine-components/Component.js +541 -541
  233. package/lib/engine-components/ContactShadows.d.ts +23 -23
  234. package/lib/engine-components/ContactShadows.js +233 -233
  235. package/lib/engine-components/DeleteBox.d.ts +9 -9
  236. package/lib/engine-components/DeleteBox.js +30 -30
  237. package/lib/engine-components/DeviceFlag.d.ts +12 -12
  238. package/lib/engine-components/DeviceFlag.js +43 -43
  239. package/lib/engine-components/DragControls.d.ts +51 -51
  240. package/lib/engine-components/DragControls.js +516 -516
  241. package/lib/engine-components/DropListener.d.ts +15 -15
  242. package/lib/engine-components/DropListener.js +120 -120
  243. package/lib/engine-components/Duplicatable.d.ts +16 -16
  244. package/lib/engine-components/Duplicatable.js +150 -150
  245. package/lib/engine-components/EventList.d.ts +28 -28
  246. package/lib/engine-components/EventList.js +105 -105
  247. package/lib/engine-components/EventTrigger.d.ts +12 -12
  248. package/lib/engine-components/EventTrigger.js +50 -50
  249. package/lib/engine-components/EventType.d.ts +19 -19
  250. package/lib/engine-components/EventType.js +71 -71
  251. package/lib/engine-components/FlyControls.d.ts +7 -7
  252. package/lib/engine-components/FlyControls.js +25 -25
  253. package/lib/engine-components/Fog.d.ts +20 -20
  254. package/lib/engine-components/Fog.js +60 -60
  255. package/lib/engine-components/Gizmos.d.ts +12 -12
  256. package/lib/engine-components/Gizmos.js +60 -60
  257. package/lib/engine-components/GridHelper.d.ts +12 -12
  258. package/lib/engine-components/GridHelper.js +47 -47
  259. package/lib/engine-components/GroundProjection.d.ts +21 -21
  260. package/lib/engine-components/GroundProjection.js +97 -97
  261. package/lib/engine-components/Interactable.d.ts +10 -10
  262. package/lib/engine-components/Interactable.js +11 -11
  263. package/lib/engine-components/Joints.d.ts +19 -19
  264. package/lib/engine-components/Joints.js +51 -51
  265. package/lib/engine-components/LODGroup.d.ts +30 -30
  266. package/lib/engine-components/LODGroup.js +145 -145
  267. package/lib/engine-components/Light.d.ts +75 -75
  268. package/lib/engine-components/Light.js +475 -475
  269. package/lib/engine-components/LookAtConstraint.d.ts +7 -7
  270. package/lib/engine-components/LookAtConstraint.js +17 -17
  271. package/lib/engine-components/NestedGltf.d.ts +11 -11
  272. package/lib/engine-components/NestedGltf.js +74 -74
  273. package/lib/engine-components/Networking.d.ts +11 -11
  274. package/lib/engine-components/Networking.js +70 -70
  275. package/lib/engine-components/OffsetConstraint.d.ts +14 -14
  276. package/lib/engine-components/OffsetConstraint.js +65 -65
  277. package/lib/engine-components/OrbitControls.d.ts +111 -111
  278. package/lib/engine-components/OrbitControls.js +646 -646
  279. package/lib/engine-components/ParticleSystem.d.ts +145 -145
  280. package/lib/engine-components/ParticleSystem.js +1077 -1077
  281. package/lib/engine-components/ParticleSystemModules.d.ts +489 -489
  282. package/lib/engine-components/ParticleSystemModules.js +1667 -1667
  283. package/lib/engine-components/ParticleSystemSubEmitter.d.ts +25 -25
  284. package/lib/engine-components/ParticleSystemSubEmitter.js +86 -86
  285. package/lib/engine-components/PlayerColor.d.ts +13 -13
  286. package/lib/engine-components/PlayerColor.js +83 -83
  287. package/lib/engine-components/ReflectionProbe.d.ts +22 -22
  288. package/lib/engine-components/ReflectionProbe.js +181 -181
  289. package/lib/engine-components/Renderer.d.ts +112 -112
  290. package/lib/engine-components/Renderer.js +1029 -1029
  291. package/lib/engine-components/RendererLightmap.d.ts +19 -19
  292. package/lib/engine-components/RendererLightmap.js +127 -127
  293. package/lib/engine-components/RigidBody.d.ts +120 -120
  294. package/lib/engine-components/RigidBody.js +452 -452
  295. package/lib/engine-components/SceneSwitcher.d.ts +72 -72
  296. package/lib/engine-components/SceneSwitcher.js +583 -583
  297. package/lib/engine-components/ScreenCapture.d.ts +64 -64
  298. package/lib/engine-components/ScreenCapture.js +405 -405
  299. package/lib/engine-components/ShadowCatcher.d.ts +18 -18
  300. package/lib/engine-components/ShadowCatcher.js +144 -144
  301. package/lib/engine-components/Skybox.d.ts +23 -23
  302. package/lib/engine-components/Skybox.js +287 -287
  303. package/lib/engine-components/SmoothFollow.d.ts +14 -14
  304. package/lib/engine-components/SmoothFollow.js +63 -63
  305. package/lib/engine-components/SpatialTrigger.d.ts +27 -27
  306. package/lib/engine-components/SpatialTrigger.js +144 -144
  307. package/lib/engine-components/SpectatorCamera.d.ts +45 -45
  308. package/lib/engine-components/SpectatorCamera.js +593 -593
  309. package/lib/engine-components/SpriteRenderer.d.ts +48 -48
  310. package/lib/engine-components/SpriteRenderer.js +257 -257
  311. package/lib/engine-components/SyncedCamera.d.ts +27 -27
  312. package/lib/engine-components/SyncedCamera.js +187 -187
  313. package/lib/engine-components/SyncedRoom.d.ts +24 -24
  314. package/lib/engine-components/SyncedRoom.js +162 -162
  315. package/lib/engine-components/SyncedTransform.d.ts +35 -35
  316. package/lib/engine-components/SyncedTransform.js +265 -265
  317. package/lib/engine-components/TestRunner.d.ts +13 -13
  318. package/lib/engine-components/TestRunner.js +99 -99
  319. package/lib/engine-components/TransformGizmo.d.ts +16 -16
  320. package/lib/engine-components/TransformGizmo.js +148 -148
  321. package/lib/engine-components/VideoPlayer.d.ts +86 -86
  322. package/lib/engine-components/VideoPlayer.js +792 -792
  323. package/lib/engine-components/Voip.d.ts +29 -29
  324. package/lib/engine-components/Voip.js +203 -203
  325. package/lib/engine-components/XRFlag.d.ts +33 -33
  326. package/lib/engine-components/XRFlag.js +128 -128
  327. package/lib/engine-components/api.d.ts +15 -15
  328. package/lib/engine-components/api.js +15 -15
  329. package/lib/engine-components/avatar/AvatarBlink_Simple.d.ts +10 -10
  330. package/lib/engine-components/avatar/AvatarBlink_Simple.js +75 -75
  331. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.d.ts +13 -13
  332. package/lib/engine-components/avatar/AvatarEyeLook_Rotation.js +74 -74
  333. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +27 -27
  334. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +119 -119
  335. package/lib/engine-components/avatar/Avatar_MouthShapes.d.ts +13 -13
  336. package/lib/engine-components/avatar/Avatar_MouthShapes.js +78 -78
  337. package/lib/engine-components/avatar/Avatar_MustacheShake.d.ts +8 -8
  338. package/lib/engine-components/avatar/Avatar_MustacheShake.js +28 -28
  339. package/lib/engine-components/codegen/components.d.ts +216 -216
  340. package/lib/engine-components/codegen/components.js +217 -217
  341. package/lib/engine-components/debug/LogStats.d.ts +5 -5
  342. package/lib/engine-components/debug/LogStats.js +18 -18
  343. package/lib/engine-components/export/gltf/GltfExport.d.ts +25 -25
  344. package/lib/engine-components/export/gltf/GltfExport.js +215 -215
  345. package/lib/engine-components/export/index.d.ts +1 -1
  346. package/lib/engine-components/export/index.js +1 -1
  347. package/lib/engine-components/export/usdz/Extension.d.ts +10 -10
  348. package/lib/engine-components/export/usdz/Extension.js +1 -1
  349. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +114 -114
  350. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +1211 -1211
  351. package/lib/engine-components/export/usdz/USDZExporter.d.ts +59 -59
  352. package/lib/engine-components/export/usdz/USDZExporter.js +450 -450
  353. package/lib/engine-components/export/usdz/extensions/Animation.d.ts +69 -69
  354. package/lib/engine-components/export/usdz/extensions/Animation.js +650 -650
  355. package/lib/engine-components/export/usdz/extensions/DocumentExtension.d.ts +5 -5
  356. package/lib/engine-components/export/usdz/extensions/DocumentExtension.js +6 -6
  357. package/lib/engine-components/export/usdz/extensions/USDZText.d.ts +55 -55
  358. package/lib/engine-components/export/usdz/extensions/USDZText.js +246 -246
  359. package/lib/engine-components/export/usdz/extensions/USDZUI.d.ts +8 -8
  360. package/lib/engine-components/export/usdz/extensions/USDZUI.js +100 -100
  361. package/lib/engine-components/export/usdz/extensions/behavior/Actions.d.ts +30 -30
  362. package/lib/engine-components/export/usdz/extensions/behavior/Actions.js +88 -88
  363. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.d.ts +9 -9
  364. package/lib/engine-components/export/usdz/extensions/behavior/AudioExtension.js +52 -52
  365. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.d.ts +22 -22
  366. package/lib/engine-components/export/usdz/extensions/behavior/Behaviour.js +134 -134
  367. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +126 -126
  368. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +824 -824
  369. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.d.ts +133 -133
  370. package/lib/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.js +464 -464
  371. package/lib/engine-components/export/usdz/index.d.ts +3 -3
  372. package/lib/engine-components/export/usdz/index.js +2 -2
  373. package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -3
  374. package/lib/engine-components/export/usdz/utils/animationutils.js +85 -85
  375. package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -2
  376. package/lib/engine-components/export/usdz/utils/quicklook.js +35 -35
  377. package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -1
  378. package/lib/engine-components/export/usdz/utils/timeutils.js +14 -14
  379. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +6 -6
  380. package/lib/engine-components/js-extensions/ExtensionUtils.js +65 -65
  381. package/lib/engine-components/js-extensions/Object3D.d.ts +2 -2
  382. package/lib/engine-components/js-extensions/Object3D.js +140 -140
  383. package/lib/engine-components/js-extensions/RGBAColor.d.ts +14 -14
  384. package/lib/engine-components/js-extensions/RGBAColor.js +49 -49
  385. package/lib/engine-components/js-extensions/index.d.ts +3 -3
  386. package/lib/engine-components/js-extensions/index.js +3 -3
  387. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -13
  388. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +45 -45
  389. package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -12
  390. package/lib/engine-components/postprocessing/Effects/Bloom.js +77 -77
  391. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -8
  392. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +38 -38
  393. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -12
  394. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +81 -81
  395. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -21
  396. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +97 -97
  397. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -7
  398. package/lib/engine-components/postprocessing/Effects/Pixelation.js +28 -28
  399. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +13 -13
  400. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +86 -86
  401. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.d.ts +24 -24
  402. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.js +94 -94
  403. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.d.ts +13 -13
  404. package/lib/engine-components/postprocessing/Effects/TiltShiftEffect.js +62 -62
  405. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -16
  406. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +51 -51
  407. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -11
  408. package/lib/engine-components/postprocessing/Effects/Vignette.js +56 -56
  409. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +33 -33
  410. package/lib/engine-components/postprocessing/PostProcessingEffect.js +126 -126
  411. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +22 -22
  412. package/lib/engine-components/postprocessing/PostProcessingHandler.js +201 -201
  413. package/lib/engine-components/postprocessing/Volume.d.ts +25 -25
  414. package/lib/engine-components/postprocessing/Volume.js +193 -193
  415. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +22 -22
  416. package/lib/engine-components/postprocessing/VolumeParameter.js +80 -80
  417. package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -7
  418. package/lib/engine-components/postprocessing/VolumeProfile.js +41 -41
  419. package/lib/engine-components/postprocessing/index.d.ts +4 -4
  420. package/lib/engine-components/postprocessing/index.js +4 -4
  421. package/lib/engine-components/timeline/PlayableDirector.d.ts +107 -107
  422. package/lib/engine-components/timeline/PlayableDirector.js +624 -624
  423. package/lib/engine-components/timeline/SignalAsset.d.ts +18 -18
  424. package/lib/engine-components/timeline/SignalAsset.js +124 -124
  425. package/lib/engine-components/timeline/TimelineModels.d.ts +88 -88
  426. package/lib/engine-components/timeline/TimelineModels.js +22 -22
  427. package/lib/engine-components/timeline/TimelineTracks.d.ts +90 -90
  428. package/lib/engine-components/timeline/TimelineTracks.js +825 -825
  429. package/lib/engine-components/timeline/index.d.ts +4 -4
  430. package/lib/engine-components/timeline/index.js +3 -3
  431. package/lib/engine-components/ui/BaseUIComponent.d.ts +31 -31
  432. package/lib/engine-components/ui/BaseUIComponent.js +161 -161
  433. package/lib/engine-components/ui/Button.d.ts +56 -56
  434. package/lib/engine-components/ui/Button.js +282 -282
  435. package/lib/engine-components/ui/Canvas.d.ts +67 -67
  436. package/lib/engine-components/ui/Canvas.js +382 -382
  437. package/lib/engine-components/ui/CanvasGroup.d.ts +15 -15
  438. package/lib/engine-components/ui/CanvasGroup.js +53 -53
  439. package/lib/engine-components/ui/EventSystem.d.ts +102 -102
  440. package/lib/engine-components/ui/EventSystem.js +641 -641
  441. package/lib/engine-components/ui/Graphic.d.ts +45 -45
  442. package/lib/engine-components/ui/Graphic.js +236 -236
  443. package/lib/engine-components/ui/Image.d.ts +27 -27
  444. package/lib/engine-components/ui/Image.js +107 -107
  445. package/lib/engine-components/ui/InputField.d.ts +34 -34
  446. package/lib/engine-components/ui/InputField.js +234 -234
  447. package/lib/engine-components/ui/Interfaces.d.ts +38 -38
  448. package/lib/engine-components/ui/Interfaces.js +12 -12
  449. package/lib/engine-components/ui/Layout.d.ts +72 -72
  450. package/lib/engine-components/ui/Layout.js +318 -318
  451. package/lib/engine-components/ui/Outline.d.ts +7 -7
  452. package/lib/engine-components/ui/Outline.js +20 -20
  453. package/lib/engine-components/ui/PointerEvents.d.ts +64 -64
  454. package/lib/engine-components/ui/PointerEvents.js +68 -68
  455. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -11
  456. package/lib/engine-components/ui/RaycastUtils.js +67 -67
  457. package/lib/engine-components/ui/Raycaster.d.ts +18 -18
  458. package/lib/engine-components/ui/Raycaster.js +69 -69
  459. package/lib/engine-components/ui/RectTransform.d.ts +61 -61
  460. package/lib/engine-components/ui/RectTransform.js +343 -343
  461. package/lib/engine-components/ui/SpatialHtml.d.ts +6 -6
  462. package/lib/engine-components/ui/SpatialHtml.js +57 -57
  463. package/lib/engine-components/ui/Text.d.ts +74 -74
  464. package/lib/engine-components/ui/Text.js +534 -534
  465. package/lib/engine-components/ui/Utils.d.ts +23 -23
  466. package/lib/engine-components/ui/Utils.js +90 -90
  467. package/lib/engine-components/ui/index.d.ts +1 -1
  468. package/lib/engine-components/ui/index.js +1 -1
  469. package/lib/engine-components/utils/LookAt.d.ts +13 -13
  470. package/lib/engine-components/utils/LookAt.js +59 -59
  471. package/lib/engine-components/utils/OpenURL.d.ts +21 -21
  472. package/lib/engine-components/utils/OpenURL.js +124 -124
  473. package/lib/engine-components/webxr/WebARCameraBackground.d.ts +19 -19
  474. package/lib/engine-components/webxr/WebARCameraBackground.js +193 -193
  475. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +38 -38
  476. package/lib/engine-components/webxr/WebARSessionRoot.js +407 -407
  477. package/lib/engine-components/webxr/WebXR.d.ts +110 -110
  478. package/lib/engine-components/webxr/WebXR.js +672 -672
  479. package/lib/engine-components/webxr/WebXRAvatar.d.ts +61 -61
  480. package/lib/engine-components/webxr/WebXRAvatar.js +289 -289
  481. package/lib/engine-components/webxr/WebXRController.d.ts +154 -154
  482. package/lib/engine-components/webxr/WebXRController.js +1028 -1028
  483. package/lib/engine-components/webxr/WebXRGrabRendering.d.ts +42 -42
  484. package/lib/engine-components/webxr/WebXRGrabRendering.js +137 -137
  485. package/lib/engine-components/webxr/WebXRImageTracking.d.ts +49 -49
  486. package/lib/engine-components/webxr/WebXRImageTracking.js +336 -336
  487. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +49 -49
  488. package/lib/engine-components/webxr/WebXRPlaneTracking.js +372 -372
  489. package/lib/engine-components/webxr/WebXRRig.d.ts +4 -4
  490. package/lib/engine-components/webxr/WebXRRig.js +19 -19
  491. package/lib/engine-components/webxr/WebXRSync.d.ts +54 -54
  492. package/lib/engine-components/webxr/WebXRSync.js +410 -410
  493. package/lib/engine-components/webxr/index.d.ts +4 -4
  494. package/lib/engine-components/webxr/index.js +4 -4
  495. package/lib/engine-components-experimental/Presentation.d.ts +6 -6
  496. package/lib/engine-components-experimental/Presentation.js +9 -9
  497. package/lib/engine-components-experimental/api.d.ts +1 -1
  498. package/lib/engine-components-experimental/api.js +1 -1
  499. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +50 -50
  500. package/lib/engine-components-experimental/networking/PlayerSync.js +200 -200
  501. package/lib/engine-schemes/api.d.ts +1 -1
  502. package/lib/engine-schemes/api.js +1 -1
  503. package/lib/engine-schemes/schemes.d.ts +7 -7
  504. package/lib/engine-schemes/schemes.js +19 -19
  505. package/lib/engine-schemes/synced-camera-model.d.ts +25 -25
  506. package/lib/engine-schemes/synced-camera-model.js +67 -67
  507. package/lib/engine-schemes/synced-transform-model.d.ts +31 -31
  508. package/lib/engine-schemes/synced-transform-model.js +66 -66
  509. package/lib/engine-schemes/transform.d.ts +12 -12
  510. package/lib/engine-schemes/transform.js +39 -39
  511. package/lib/engine-schemes/vec3.d.ts +11 -11
  512. package/lib/engine-schemes/vec3.js +29 -29
  513. package/lib/engine-schemes/vec4.d.ts +12 -12
  514. package/lib/engine-schemes/vec4.js +33 -33
  515. package/lib/engine-schemes/vr-user-state-buffer.d.ts +36 -36
  516. package/lib/engine-schemes/vr-user-state-buffer.js +103 -103
  517. package/lib/include/three/ARButton.d.ts +3 -3
  518. package/lib/include/three/ARButton.js +151 -151
  519. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -6
  520. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +45 -45
  521. package/lib/include/three/VRButton.d.ts +5 -5
  522. package/lib/include/three/VRButton.js +118 -118
  523. package/lib/needle-engine.d.ts +6 -6
  524. package/lib/needle-engine.js +49 -49
  525. package/package.json +1 -1
  526. package/plugins/common/config.cjs +14 -14
  527. package/plugins/common/config.js +19 -19
  528. package/plugins/common/generator.js +10 -10
  529. package/plugins/common/license.cjs +30 -30
  530. package/plugins/common/version.js +11 -11
  531. package/plugins/next/license.cjs +4 -4
  532. package/plugins/next/next.js +70 -70
  533. package/plugins/types/index.d.ts +1 -1
  534. package/plugins/types/needleConfig.d.ts +21 -21
  535. package/plugins/types/userconfig.d.ts +42 -42
  536. package/plugins/vite/alias.js +70 -70
  537. package/plugins/vite/build.js +19 -19
  538. package/plugins/vite/config.js +73 -73
  539. package/plugins/vite/copyfiles.js +134 -134
  540. package/plugins/vite/defines.js +45 -45
  541. package/plugins/vite/dependency-watcher.js +224 -224
  542. package/plugins/vite/drop-client.js +76 -76
  543. package/plugins/vite/drop.js +82 -82
  544. package/plugins/vite/editor-connection.js +121 -121
  545. package/plugins/vite/facebook-instant-games.js +99 -99
  546. package/plugins/vite/gzip.js +5 -5
  547. package/plugins/vite/imports-logger.js +143 -143
  548. package/plugins/vite/index.js +81 -81
  549. package/plugins/vite/license.js +42 -42
  550. package/plugins/vite/meta.js +149 -149
  551. package/plugins/vite/peer.js +31 -31
  552. package/plugins/vite/poster-client.js +59 -59
  553. package/plugins/vite/poster.js +73 -73
  554. package/plugins/vite/reload-client.js +15 -15
  555. package/plugins/vite/reload.js +363 -363
  556. package/plugins/vite/transform-codegen.js +55 -55
  557. package/plugins/vite/vite-4.4-hack.js +31 -31
  558. package/src/engine/api.ts +54 -54
  559. package/src/engine/assets/index.ts +4 -4
  560. package/src/engine/codegen/register_types.ts +441 -441
  561. package/src/engine/debug/debug.ts +29 -29
  562. package/src/engine/debug/debug_console.ts +213 -213
  563. package/src/engine/debug/debug_overlay.ts +283 -283
  564. package/src/engine/engine.ts +13 -13
  565. package/src/engine/engine_addressables.ts +494 -494
  566. package/src/engine/engine_application.ts +53 -53
  567. package/src/engine/engine_assetdatabase.ts +383 -383
  568. package/src/engine/engine_camera.ts +32 -32
  569. package/src/engine/engine_components.ts +266 -266
  570. package/src/engine/engine_components_internal.ts +42 -42
  571. package/src/engine/engine_constants.ts +42 -42
  572. package/src/engine/engine_context.ts +1386 -1386
  573. package/src/engine/engine_context_registry.ts +103 -103
  574. package/src/engine/engine_coroutine.ts +24 -24
  575. package/src/engine/engine_create_objects.ts +39 -39
  576. package/src/engine/engine_default_parameters.ts +3 -3
  577. package/src/engine/engine_editor-sync.ts +29 -29
  578. package/src/engine/engine_element.ts +592 -592
  579. package/src/engine/engine_element_attributes.ts +61 -61
  580. package/src/engine/engine_element_extras.ts +16 -16
  581. package/src/engine/engine_element_loading.ts +341 -341
  582. package/src/engine/engine_element_overlay.ts +160 -160
  583. package/src/engine/engine_fileloader.js +8 -8
  584. package/src/engine/engine_gameobject.ts +621 -621
  585. package/src/engine/engine_generic_utils.js +13 -13
  586. package/src/engine/engine_gizmos.ts +321 -321
  587. package/src/engine/engine_gltf.ts +30 -30
  588. package/src/engine/engine_gltf_builtin_components.ts +350 -350
  589. package/src/engine/engine_hot_reload.ts +196 -196
  590. package/src/engine/engine_input.ts +879 -879
  591. package/src/engine/engine_input_utils.ts +23 -23
  592. package/src/engine/engine_instancing.ts +42 -42
  593. package/src/engine/engine_license.ts +413 -413
  594. package/src/engine/engine_lifecycle_api.ts +29 -29
  595. package/src/engine/engine_lifecycle_functions_internal.ts +36 -36
  596. package/src/engine/engine_lightdata.ts +113 -113
  597. package/src/engine/engine_loaders.ts +77 -77
  598. package/src/engine/engine_mainloop_utils.ts +431 -431
  599. package/src/engine/engine_math.ts +174 -174
  600. package/src/engine/engine_networking.ts +742 -742
  601. package/src/engine/engine_networking_auto.ts +373 -373
  602. package/src/engine/engine_networking_files.ts +206 -206
  603. package/src/engine/engine_networking_files_default_components.ts +54 -54
  604. package/src/engine/engine_networking_instantiate.ts +362 -362
  605. package/src/engine/engine_networking_peer.ts +158 -158
  606. package/src/engine/engine_networking_streams.ts +489 -489
  607. package/src/engine/engine_networking_types.ts +18 -18
  608. package/src/engine/engine_networking_utils.ts +23 -23
  609. package/src/engine/engine_networking_websocket.ts +2 -2
  610. package/src/engine/engine_patcher.ts +199 -199
  611. package/src/engine/engine_physics.ts +287 -287
  612. package/src/engine/engine_physics.types.ts +43 -43
  613. package/src/engine/engine_physics_rapier.ts +1385 -1385
  614. package/src/engine/engine_playerview.ts +79 -79
  615. package/src/engine/engine_scenelighting.ts +313 -313
  616. package/src/engine/engine_scenetools.ts +242 -242
  617. package/src/engine/engine_serialization.ts +6 -6
  618. package/src/engine/engine_serialization_builtin_serializer.ts +415 -415
  619. package/src/engine/engine_serialization_core.ts +680 -680
  620. package/src/engine/engine_serialization_decorator.ts +68 -68
  621. package/src/engine/engine_setup.ts +1 -1
  622. package/src/engine/engine_shaders.ts +242 -242
  623. package/src/engine/engine_shims.ts +28 -28
  624. package/src/engine/engine_texture.ts +70 -70
  625. package/src/engine/engine_three_utils.ts +382 -382
  626. package/src/engine/engine_time.ts +55 -55
  627. package/src/engine/engine_types.ts +489 -489
  628. package/src/engine/engine_typestore.ts +41 -41
  629. package/src/engine/engine_util_decorator.ts +134 -134
  630. package/src/engine/engine_utils.ts +605 -605
  631. package/src/engine/engine_utils_screenshot.ts +84 -84
  632. package/src/engine/engine_web_api.ts +119 -119
  633. package/src/engine/extensions/EXT_texture_exr.ts +49 -49
  634. package/src/engine/extensions/NEEDLE_animator_controller_model.ts +193 -193
  635. package/src/engine/extensions/NEEDLE_components.ts +250 -250
  636. package/src/engine/extensions/NEEDLE_gameobject_data.ts +82 -82
  637. package/src/engine/extensions/NEEDLE_lighting_settings.ts +210 -210
  638. package/src/engine/extensions/NEEDLE_lightmaps.ts +130 -130
  639. package/src/engine/extensions/NEEDLE_persistent_assets.ts +75 -75
  640. package/src/engine/extensions/NEEDLE_progressive.ts +412 -412
  641. package/src/engine/extensions/NEEDLE_render_objects.ts +209 -209
  642. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +618 -618
  643. package/src/engine/extensions/extension_resolver.ts +4 -4
  644. package/src/engine/extensions/extension_utils.ts +149 -149
  645. package/src/engine/extensions/extensions.ts +118 -118
  646. package/src/engine/extensions/index.ts +4 -4
  647. package/src/engine/extensions/usage_tracker.ts +95 -95
  648. package/src/engine/js-extensions/Camera.ts +34 -34
  649. package/src/engine/js-extensions/Layers.ts +19 -19
  650. package/src/engine/js-extensions/index.ts +1 -1
  651. package/src/engine/shaders/shaderData.ts +67 -67
  652. package/src/engine/tests/test_utils.ts +63 -63
  653. package/src/engine-components/AlignmentConstraint.ts +35 -35
  654. package/src/engine-components/Animation.ts +345 -345
  655. package/src/engine-components/AnimationCurve.ts +83 -83
  656. package/src/engine-components/AnimationUtils.ts +117 -117
  657. package/src/engine-components/Animator.ts +243 -243
  658. package/src/engine-components/AnimatorController.ts +1020 -1020
  659. package/src/engine-components/AudioListener.ts +32 -32
  660. package/src/engine-components/AudioSource.ts +419 -419
  661. package/src/engine-components/AvatarLoader.ts +204 -204
  662. package/src/engine-components/AxesHelper.ts +33 -33
  663. package/src/engine-components/BasicIKConstraint.ts +53 -53
  664. package/src/engine-components/BoxCollider.ts +1 -1
  665. package/src/engine-components/BoxHelperComponent.ts +100 -100
  666. package/src/engine-components/Camera.ts +454 -454
  667. package/src/engine-components/CameraUtils.ts +89 -89
  668. package/src/engine-components/CharacterController.ts +243 -243
  669. package/src/engine-components/Collider.ts +160 -160
  670. package/src/engine-components/Component.ts +670 -670
  671. package/src/engine-components/ContactShadows.ts +265 -265
  672. package/src/engine-components/DeleteBox.ts +35 -35
  673. package/src/engine-components/DeviceFlag.ts +42 -42
  674. package/src/engine-components/DragControls.ts +574 -574
  675. package/src/engine-components/DropListener.ts +112 -112
  676. package/src/engine-components/Duplicatable.ts +146 -146
  677. package/src/engine-components/EventList.ts +125 -125
  678. package/src/engine-components/EventTrigger.ts +47 -47
  679. package/src/engine-components/EventType.ts +87 -87
  680. package/src/engine-components/FlyControls.ts +31 -31
  681. package/src/engine-components/Fog.ts +59 -59
  682. package/src/engine-components/Gizmos.ts +52 -52
  683. package/src/engine-components/GridHelper.ts +40 -40
  684. package/src/engine-components/GroundProjection.ts +97 -97
  685. package/src/engine-components/Interactable.ts +18 -18
  686. package/src/engine-components/Joints.ts +51 -51
  687. package/src/engine-components/LODGroup.ts +145 -145
  688. package/src/engine-components/Light.ts +493 -493
  689. package/src/engine-components/LookAtConstraint.ts +11 -11
  690. package/src/engine-components/NestedGltf.ts +70 -70
  691. package/src/engine-components/Networking.ts +72 -72
  692. package/src/engine-components/OffsetConstraint.ts +59 -59
  693. package/src/engine-components/OrbitControls.ts +653 -653
  694. package/src/engine-components/ParticleSystem.ts +1192 -1192
  695. package/src/engine-components/ParticleSystemModules.ts +1481 -1481
  696. package/src/engine-components/ParticleSystemSubEmitter.ts +110 -110
  697. package/src/engine-components/PlayerColor.ts +93 -93
  698. package/src/engine-components/ReflectionProbe.ts +192 -192
  699. package/src/engine-components/Renderer.ts +1125 -1125
  700. package/src/engine-components/RendererLightmap.ts +145 -145
  701. package/src/engine-components/RigidBody.ts +453 -453
  702. package/src/engine-components/SceneSwitcher.ts +594 -594
  703. package/src/engine-components/ScreenCapture.ts +437 -437
  704. package/src/engine-components/ShadowCatcher.ts +149 -149
  705. package/src/engine-components/Skybox.ts +281 -281
  706. package/src/engine-components/SmoothFollow.ts +57 -57
  707. package/src/engine-components/SpatialTrigger.ts +142 -142
  708. package/src/engine-components/SpectatorCamera.ts +675 -675
  709. package/src/engine-components/SphereCollider.ts +1 -1
  710. package/src/engine-components/SpriteRenderer.ts +244 -244
  711. package/src/engine-components/SyncedCamera.ts +208 -208
  712. package/src/engine-components/SyncedRoom.ts +166 -166
  713. package/src/engine-components/SyncedTransform.ts +336 -336
  714. package/src/engine-components/TestRunner.ts +114 -114
  715. package/src/engine-components/TransformGizmo.ts +157 -157
  716. package/src/engine-components/VideoPlayer.ts +831 -831
  717. package/src/engine-components/Voip.ts +214 -214
  718. package/src/engine-components/XRFlag.ts +138 -138
  719. package/src/engine-components/api.ts +22 -22
  720. package/src/engine-components/avatar/AvatarBlink_Simple.ts +67 -67
  721. package/src/engine-components/avatar/AvatarEyeLook_Rotation.ts +68 -68
  722. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +136 -136
  723. package/src/engine-components/avatar/Avatar_MouthShapes.ts +81 -81
  724. package/src/engine-components/avatar/Avatar_MustacheShake.ts +28 -28
  725. package/src/engine-components/codegen/components.ts +216 -216
  726. package/src/engine-components/debug/LogStats.ts +21 -21
  727. package/src/engine-components/export/gltf/GltfExport.ts +231 -231
  728. package/src/engine-components/export/usdz/Extension.ts +11 -11
  729. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +1773 -1773
  730. package/src/engine-components/export/usdz/USDZExporter.ts +477 -477
  731. package/src/engine-components/export/usdz/extensions/Animation.ts +774 -774
  732. package/src/engine-components/export/usdz/extensions/DocumentExtension.ts +9 -9
  733. package/src/engine-components/export/usdz/extensions/USDZText.ts +287 -287
  734. package/src/engine-components/export/usdz/extensions/USDZUI.ts +119 -119
  735. package/src/engine-components/export/usdz/extensions/behavior/Actions.ts +98 -98
  736. package/src/engine-components/export/usdz/extensions/behavior/AudioExtension.ts +67 -67
  737. package/src/engine-components/export/usdz/extensions/behavior/Behaviour.ts +202 -202
  738. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +963 -963
  739. package/src/engine-components/export/usdz/extensions/behavior/BehavioursBuilder.ts +517 -517
  740. package/src/engine-components/export/usdz/index.ts +2 -2
  741. package/src/engine-components/export/usdz/utils/animationutils.ts +100 -100
  742. package/src/engine-components/export/usdz/utils/quicklook.ts +42 -42
  743. package/src/engine-components/export/usdz/utils/timeutils.ts +19 -19
  744. package/src/engine-components/js-extensions/ExtensionUtils.ts +81 -81
  745. package/src/engine-components/js-extensions/Object3D.ts +181 -181
  746. package/src/engine-components/js-extensions/RGBAColor.ts +54 -54
  747. package/src/engine-components/js-extensions/Vector.ts +16 -16
  748. package/src/engine-components/js-extensions/index.ts +2 -2
  749. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +51 -51
  750. package/src/engine-components/postprocessing/Effects/Bloom.ts +76 -76
  751. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +35 -35
  752. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +96 -96
  753. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +93 -93
  754. package/src/engine-components/postprocessing/Effects/Pixelation.ts +26 -26
  755. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +84 -84
  756. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusionN8.ts +98 -98
  757. package/src/engine-components/postprocessing/Effects/TiltShiftEffect.ts +55 -55
  758. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +54 -54
  759. package/src/engine-components/postprocessing/Effects/Vignette.ts +54 -54
  760. package/src/engine-components/postprocessing/PostProcessingEffect.ts +148 -148
  761. package/src/engine-components/postprocessing/PostProcessingHandler.ts +232 -232
  762. package/src/engine-components/postprocessing/Volume.ts +216 -216
  763. package/src/engine-components/postprocessing/VolumeParameter.ts +92 -92
  764. package/src/engine-components/postprocessing/VolumeProfile.ts +40 -40
  765. package/src/engine-components/postprocessing/index.ts +3 -3
  766. package/src/engine-components/timeline/PlayableDirector.ts +666 -666
  767. package/src/engine-components/timeline/SignalAsset.ts +138 -138
  768. package/src/engine-components/timeline/TimelineModels.ts +93 -93
  769. package/src/engine-components/timeline/TimelineTracks.ts +906 -906
  770. package/src/engine-components/timeline/index.ts +3 -3
  771. package/src/engine-components/ui/BaseUIComponent.ts +195 -195
  772. package/src/engine-components/ui/Button.ts +283 -283
  773. package/src/engine-components/ui/Canvas.ts +390 -390
  774. package/src/engine-components/ui/CanvasGroup.ts +49 -49
  775. package/src/engine-components/ui/EventSystem.ts +736 -736
  776. package/src/engine-components/ui/Graphic.ts +255 -255
  777. package/src/engine-components/ui/Image.ts +102 -102
  778. package/src/engine-components/ui/InputField.ts +290 -290
  779. package/src/engine-components/ui/Interfaces.ts +57 -57
  780. package/src/engine-components/ui/Layout.ts +322 -322
  781. package/src/engine-components/ui/Outline.ts +12 -12
  782. package/src/engine-components/ui/PointerEvents.ts +118 -118
  783. package/src/engine-components/ui/RaycastUtils.ts +68 -68
  784. package/src/engine-components/ui/Raycaster.ts +73 -73
  785. package/src/engine-components/ui/RectTransform.ts +364 -364
  786. package/src/engine-components/ui/SpatialHtml.ts +63 -63
  787. package/src/engine-components/ui/Text.ts +572 -572
  788. package/src/engine-components/ui/Utils.ts +110 -110
  789. package/src/engine-components/utils/LookAt.ts +65 -65
  790. package/src/engine-components/utils/OpenURL.ts +118 -118
  791. package/src/engine-components/webxr/WebARCameraBackground.ts +224 -224
  792. package/src/engine-components/webxr/WebARSessionRoot.ts +446 -446
  793. package/src/engine-components/webxr/WebXR.ts +761 -761
  794. package/src/engine-components/webxr/WebXRAvatar.ts +356 -356
  795. package/src/engine-components/webxr/WebXRController.ts +1168 -1168
  796. package/src/engine-components/webxr/WebXRGrabRendering.ts +150 -150
  797. package/src/engine-components/webxr/WebXRImageTracking.ts +371 -371
  798. package/src/engine-components/webxr/WebXRPlaneTracking.ts +429 -429
  799. package/src/engine-components/webxr/WebXRRig.ts +21 -21
  800. package/src/engine-components/webxr/WebXRSync.ts +463 -463
  801. package/src/engine-components/webxr/index.ts +3 -3
  802. package/src/engine-components-experimental/Presentation.ts +12 -12
  803. package/src/engine-components-experimental/networking/PlayerSync.ts +217 -217
  804. package/src/engine-schemes/COMPILE_SCHEMES.bat +3 -3
  805. package/src/engine-schemes/COMPILE_TS.bat +11 -11
  806. package/src/engine-schemes/schemes.ts +27 -27
  807. package/src/engine-schemes/synced-camera-model.ts +92 -92
  808. package/src/engine-schemes/synced-transform-model.ts +90 -90
  809. package/src/engine-schemes/syncedCamera.fbs +10 -10
  810. package/src/engine-schemes/transform.ts +50 -50
  811. package/src/engine-schemes/transforms.fbs +25 -25
  812. package/src/engine-schemes/vec.fbs +19 -19
  813. package/src/engine-schemes/vec2.ts +33 -33
  814. package/src/engine-schemes/vec3.ts +38 -38
  815. package/src/engine-schemes/vec4.ts +43 -43
  816. package/src/engine-schemes/vr-user-state-buffer.ts +138 -138
  817. package/src/engine-schemes/vrUserStateBuffer.fbs +16 -16
  818. package/src/include/draco/draco_decoder.js +34 -34
  819. package/src/include/draco/draco_wasm_wrapper.js +117 -117
  820. package/src/include/ktx2/basis_transcoder.js +21 -21
  821. package/src/include/needle/arial-msdf.json +1471 -1471
  822. package/src/include/three/ARButton.js +231 -231
  823. package/src/include/three/DragControls.js +231 -231
  824. package/src/include/three/EXT_mesh_gpu_instancing_exporter.js +66 -66
  825. package/src/include/three/VRButton.js +194 -194
  826. package/src/needle-engine.ts +55 -55
  827. package/src/engine/dist/api.js +0 -73
  828. package/src/engine/dist/api.js.meta +0 -7
  829. package/src/engine/dist/engine_networking_streams.js +0 -474
  830. package/src/engine/dist/engine_networking_streams.js.meta +0 -7
  831. package/src/engine-schemes/dist/api.js +0 -17
  832. package/src/engine-schemes/dist/api.js.meta +0 -7
  833. package/src/engine-schemes/dist/schemes.js +0 -25
  834. package/src/engine-schemes/dist/schemes.js.meta +0 -7
  835. package/src/engine-schemes/dist/synced-camera-model.js +0 -74
  836. package/src/engine-schemes/dist/synced-camera-model.js.meta +0 -7
  837. package/src/engine-schemes/dist/synced-transform-model.js +0 -73
  838. package/src/engine-schemes/dist/synced-transform-model.js.meta +0 -7
  839. package/src/engine-schemes/dist/transform.js +0 -46
  840. package/src/engine-schemes/dist/transform.js.meta +0 -7
  841. package/src/engine-schemes/dist/vec2.js +0 -32
  842. package/src/engine-schemes/dist/vec2.js.meta +0 -7
  843. package/src/engine-schemes/dist/vec3.js +0 -36
  844. package/src/engine-schemes/dist/vec3.js.meta +0 -7
  845. package/src/engine-schemes/dist/vec4.js +0 -40
  846. package/src/engine-schemes/dist/vec4.js.meta +0 -7
  847. package/src/engine-schemes/dist/vr-user-state-buffer.js +0 -110
  848. package/src/engine-schemes/dist/vr-user-state-buffer.js.meta +0 -7
  849. package/src/engine-schemes/flatc.exe +0 -0
@@ -1,577 +1,577 @@
1
- import { getParam } from "./engine_utils.js";
2
- import { AnimationClip, Material, Mesh, Texture } from "three";
3
- import { isPersistentAsset } from "./extensions/NEEDLE_persistent_assets.js";
4
- import { debugExtension } from "../engine/engine_default_parameters.js";
5
- import { LogType, addLog } from "./debug/debug_overlay.js";
6
- import { isLocalNetwork } from "./engine_networking_utils.js";
7
- import { $BuiltInTypeFlag } from "./engine_typestore.js";
8
- const debug = getParam("debugserializer");
9
- // internal helper class that we can ask for registered type serializers
10
- // register your own type by deriving from ITypeSerializer and calling helper.register
11
- class SerializationHelper {
12
- register(type, ser) {
13
- if (this.typeMap[type] !== undefined) {
14
- if (this.typeMap[type] === ser)
15
- return;
16
- console.warn("Type " + type + " is already registered", ser, this.typeMap[type]);
17
- }
18
- if (debug)
19
- console.log("Register type serializer for " + type, ser);
20
- this.typeMap[type] = ser;
21
- }
22
- typeMap = {};
23
- getSerializer(type) {
24
- if (!type)
25
- return undefined;
26
- return this.typeMap[type];
27
- }
28
- getSerializerForConstructor(type, level = 0) {
29
- if (level > 20)
30
- return undefined;
31
- if (!type || !type.constructor) {
32
- if (debug)
33
- console.log("invalid type");
34
- return undefined;
35
- }
36
- const name = type.name ?? type.constructor?.name;
37
- if (!name) {
38
- if (debug)
39
- console.log("invalid name", name);
40
- return undefined;
41
- }
42
- const res = this.getSerializer(name);
43
- if (res !== undefined) {
44
- if (debug)
45
- console.log("FOUND " + name, type.name, type.constructor.name, res, this.typeMap);
46
- return res;
47
- }
48
- const parent = Object.getPrototypeOf(type);
49
- const hasPrototypeOrConstructor = parent.prototype || parent.constructor;
50
- // console.log(name, type, parent);
51
- if (!hasPrototypeOrConstructor) {
52
- if (debug)
53
- console.warn("No prototype for " + name, type, type.name, type.prototype, type.constructor.name);
54
- // console.log(type.constructor);
55
- // console.dir(type);
56
- // console.log(Object.getPrototypeOf(type))
57
- // console.dir(parent, Object.getPrototypeOf(type));
58
- // if(level <= 0){
59
- // const t = TypeStore.get(type.name);
60
- // console.log(type['__proto__'].name);
61
- // if(t) return this.getSerializerForConstructor(t, level + 1);
62
- // }
63
- return undefined;
64
- }
65
- const prot = parent.prototype ?? parent.constructor;
66
- if (prot !== type) {
67
- const resultFromChildren = this.getSerializerForConstructor(prot, ++level);
68
- if (resultFromChildren) {
69
- if (debug)
70
- console.log("FOUND " + prot.constructor.name, prot.name, prot, resultFromChildren);
71
- // register sub type
72
- const typeName = prot.name ?? prot.constructor.name;
73
- if (typeName === "Function") {
74
- console.error("Registering Function is not allowed, something went wrong", type, prot, resultFromChildren);
75
- }
76
- else
77
- this.register(typeName, resultFromChildren);
78
- }
79
- return resultFromChildren;
80
- }
81
- return undefined;
82
- }
83
- }
84
- export const helper = new SerializationHelper();
85
- /**
86
- * implement and call super(<type string or array>) with the type names this serializer can handle
87
- * for example:
88
- * class ColorSerializer extends TypeSerializer {
89
- * constructor() {
90
- * super("Color")
91
- * }
92
- * }
93
- */
94
- export class TypeSerializer {
95
- // register<T>(c: Constructor<T> | Constructor<T>[])
96
- // {
97
- // if (Array.isArray(c)) {
98
- // for (const t of c) {
99
- // helper.register(t.name, this);
100
- // }
101
- // }
102
- // else {
103
- // helper.register(c.name, this);
104
- // }
105
- // }
106
- constructor(type) {
107
- if (Array.isArray(type)) {
108
- for (const key of type)
109
- helper.register(key.name, this);
110
- }
111
- else
112
- helper.register(type.name, this);
113
- }
114
- }
115
- /** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
116
- export class ImplementationInformation {
117
- isDevMode = isLocalNetwork();
118
- cache = {};
119
- /** only call when assigning values for the very first time */
120
- registerDefinedKeys(typeName, type) {
121
- if (!this.isDevMode)
122
- return;
123
- if (this.cache[typeName] === undefined) {
124
- this.cache[typeName] = Object.keys(type);
125
- }
126
- }
127
- getDefinedKey(typeName, key) {
128
- if (this.cache[typeName] === undefined)
129
- return false;
130
- const keys = this.cache[typeName];
131
- const res = keys.includes(key);
132
- return res;
133
- }
134
- }
135
- // passed to serializers
136
- export class SerializationContext {
137
- root;
138
- gltf;
139
- /** the url of the glb that is currently being loaded */
140
- gltfId;
141
- object;
142
- target;
143
- nodeId;
144
- nodeToObject;
145
- objectToNode;
146
- context;
147
- path;
148
- type;
149
- /** the serializable attribute for this field (target.path) */
150
- serializable;
151
- /** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
152
- implementationInformation;
153
- constructor(root) {
154
- this.root = root;
155
- }
156
- }
157
- ;
158
- export function serializeObject(obj, context) {
159
- const types = obj.$serializedTypes;
160
- if (types === undefined)
161
- return null;
162
- const res = {};
163
- for (const key in types) {
164
- const val = obj[key];
165
- // if the object bein serialized is some type of object check if we have special handling registered for it
166
- if (val !== undefined && val !== null && typeof val === "object") {
167
- // get type name
168
- // get registered serialization handler
169
- const ser = helper.getSerializerForConstructor(val);
170
- if (ser) {
171
- // serialize data using that handler
172
- res[key] = ser.onSerialize(val, context);
173
- continue;
174
- }
175
- }
176
- res[key] = val;
177
- }
178
- // name is the component type
179
- res["name"] = obj.constructor.name;
180
- // serialize guid
181
- if (typeof obj["guid"] === "string")
182
- res["guid"] = obj["guid"];
183
- return res;
184
- }
185
- const buffer = [];
186
- function collectSerializedTypesInBaseTypes(obj, typeInfoObject) {
187
- if (!obj)
188
- return typeInfoObject;
189
- if (typeof obj.$serializedTypes === "object") {
190
- if (!typeInfoObject)
191
- typeInfoObject = {};
192
- Object.assign(typeInfoObject, obj.$serializedTypes);
193
- }
194
- const parentTarget = Object.getPrototypeOf(obj);
195
- return collectSerializedTypesInBaseTypes(parentTarget, typeInfoObject);
196
- }
197
- export function deserializeObject(obj, serializedData, context) {
198
- if (!obj)
199
- return false;
200
- context.target = obj;
201
- if (obj.onBeforeDeserialize !== undefined) {
202
- const res = obj.onBeforeDeserialize(serializedData, context);
203
- if (typeof res === "boolean")
204
- return res;
205
- }
206
- // const typeInfo = obj.$serializedTypes;
207
- const typeInfo = collectSerializedTypesInBaseTypes(obj);
208
- if (serializedData) {
209
- // restore guid (see serializeObject)
210
- if (typeof serializedData["guid"] === "string")
211
- obj["guid"] = serializedData["guid"];
212
- if (typeInfo) {
213
- for (const key in typeInfo) {
214
- const serializedEntryInfo = typeInfo[key];
215
- const data = serializedData[key];
216
- if (debug)
217
- console.log(key, data, obj, serializedEntryInfo);
218
- if (obj[key] !== undefined && data === undefined) {
219
- // if a field is marked as serialized and has some default value
220
- // but no data was serialized do not override the default value with undefined
221
- continue;
222
- }
223
- context.type = undefined;
224
- context.path = key;
225
- context.serializable = serializedEntryInfo;
226
- if (obj.onBeforeDeserializeMember !== undefined) {
227
- // callback to the instance, if it returns true assume it's done all the things itself
228
- if (obj.onBeforeDeserializeMember(key, data, context) === true)
229
- continue;
230
- }
231
- if (serializedEntryInfo === null) {
232
- obj[key] = data;
233
- // if(typeof data === "string"){
234
- // const serializer = helper.getSerializerForConstructor(String);
235
- // const res = serializer?.onDeserialize(data, context);
236
- // if(res !== undefined) obj[key] = res;
237
- // }
238
- }
239
- else {
240
- if (Array.isArray(serializedEntryInfo)) {
241
- for (let i = 0; i < serializedEntryInfo.length; i++) {
242
- const typeInfoOrConstructor = serializedEntryInfo[i];
243
- const res = tryResolve(typeInfoOrConstructor);
244
- if (res !== undefined || i === serializedEntryInfo.length - 1) {
245
- obj[key] = res;
246
- break;
247
- }
248
- }
249
- }
250
- else {
251
- obj[key] = tryResolve(serializedEntryInfo);
252
- }
253
- buffer.length = 0;
254
- }
255
- if (obj.onAfterDeserializeMember !== undefined) {
256
- obj.onAfterDeserializeMember(key, data, context);
257
- }
258
- function tryResolve(typeInfoOrConstructor) {
259
- const typeInformationOrConstructor = typeInfoOrConstructor;
260
- // if the entry does specify an object of type ITypeInformation and has the type field set
261
- const type = typeInformationOrConstructor.type;
262
- if (type) {
263
- return deserializeObjectWithType(data, type, context, undefined, obj[key]);
264
- }
265
- // it can also just contain a constructor
266
- else {
267
- const constructor = typeInfoOrConstructor;
268
- return deserializeObjectWithType(data, constructor, context, undefined, obj[key]);
269
- }
270
- }
271
- }
272
- }
273
- // ***
274
- // the code below could be used to implictly assign serialized data if they are primitive types
275
- // if we decide not to do this we always have to write out all the $serializedTypes
276
- // ***
277
- implictlyAssignPrimitiveTypes(obj, serializedData);
278
- }
279
- checkObjectAssignments(obj, serializedData, context.implementationInformation);
280
- if (obj.onAfterDeserialize !== undefined) {
281
- obj.onAfterDeserialize(serializedData, context);
282
- }
283
- context.path = undefined;
284
- return true;
285
- }
286
- const blockChecks = getParam("noerrors");
287
- function checkObjectAssignments(obj, serializedData, implementationInformation) {
288
- if (blockChecks)
289
- return;
290
- if (!serializedData)
291
- return;
292
- if (isLocalNetwork() === false)
293
- return;
294
- if (!obj)
295
- return;
296
- // ignore builtin components that we dont want to check
297
- if (obj.constructor && obj.constructor[$BuiltInTypeFlag] === true)
298
- return;
299
- const typeName = obj.constructor?.name;
300
- // test if any object reference is missing serializable
301
- const ownKeys = Object.getOwnPropertyNames(serializedData);
302
- for (const key of ownKeys) {
303
- if (key === "sourceId")
304
- continue;
305
- const value = obj[key];
306
- if (value == null)
307
- continue;
308
- const serialized = serializedData[key];
309
- // check if the field is defined in the class
310
- if (implementationInformation?.getDefinedKey(typeName, key) === false) {
311
- // if the field is defined but the defined key is uppercase we need to show a warning
312
- // because all fields are serialized in lowercase
313
- const firstCharUppercase = key.charAt(0).toUpperCase() + key.slice(1);
314
- if (implementationInformation.getDefinedKey(typeName, firstCharUppercase)) {
315
- addLog(LogType.Warn, "<strong>Please rename</strong> \"" + firstCharUppercase + "\" to \"" + key + "\" in " + typeName);
316
- console.warn("Please use lowercase for field: \"" + firstCharUppercase + "\" in " + typeName, serialized, obj);
317
- }
318
- continue;
319
- }
320
- if (serialized === undefined || serialized === null)
321
- continue;
322
- if (typeof serialized === "object") {
323
- if (value === undefined || !value.isObject3D) {
324
- if (typeof serialized["node"] === "number" || typeof serialized["guid"] === "string") {
325
- if (serialized["could_not_resolve"]) {
326
- continue;
327
- }
328
- const hasOtherKeys = value !== undefined && Object.keys(value).length > 1;
329
- if (!hasOtherKeys) {
330
- addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(Object3D)\n${key}? : Object3D;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
331
- console.warn(typeName, key, obj[key], obj);
332
- continue;
333
- }
334
- }
335
- }
336
- }
337
- if (typeof value === "string") {
338
- if (serialized.endsWith(".gltf") || serialized.endsWith(".glb")) {
339
- addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(AssetReference)\n${key}? : AssetReference;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
340
- console.warn(typeName, key, obj[key], obj);
341
- continue;
342
- }
343
- }
344
- }
345
- }
346
- function implictlyAssignPrimitiveTypes(obj, serializedData) {
347
- // implictly assign serialized primitive fields
348
- for (const key of Object.keys(serializedData)) {
349
- const data = serializedData[key];
350
- if (typeof data === "object" && data !== null && data !== undefined) {
351
- const member = obj[key];
352
- if (!member) {
353
- if (debug)
354
- console.log(key, "is undefined on", obj);
355
- continue;
356
- }
357
- for (const key of Object.keys(data)) {
358
- const targetMember = member[key];
359
- // implictly assign number, string, boolean if they are undefined
360
- if (targetMember !== undefined)
361
- continue;
362
- // resolve serialized primitive types
363
- if (isPrimitiveType(data[key]) && !isPrimitiveType(member)) {
364
- const prop = tryFindPropertyDescriptor(member, key);
365
- if (prop && (prop?.writable === undefined || prop?.writable === false) && (prop.set === undefined)) {
366
- if (debug)
367
- console.warn("Property is not writable \"" + key + "\"", member, prop, data[key], member[key]);
368
- continue;
369
- }
370
- // console.log("ASSIGN", key, member, member[key], targetMember, data[key], prop);
371
- member[key] = data[key];
372
- }
373
- }
374
- }
375
- }
376
- }
377
- function tryFindPropertyDescriptor(obj, key) {
378
- while (obj) {
379
- const desc = Object.getOwnPropertyDescriptor(obj, key);
380
- if (desc)
381
- return desc;
382
- obj = Object.getPrototypeOf(obj);
383
- }
384
- return undefined;
385
- }
386
- function isPrimitiveType(val) {
387
- switch (typeof val) {
388
- case "number":
389
- case "string":
390
- case "boolean":
391
- return true;
392
- }
393
- return false;
394
- }
395
- function deserializeObjectWithType(data, typeOrConstructor, context, typeContext, currentValue) {
396
- // e.g. @serializable((data) => { })
397
- let typeIsFunction = typeof typeOrConstructor === "function" && (typeOrConstructor.prototype === undefined);
398
- let type = typeOrConstructor;
399
- if (typeIsFunction) {
400
- // it's possible to assign a function to serializable to dynamically say which type we expect
401
- // e.g. if you have an array of types and you want the array to be resolved with different class instances
402
- try {
403
- const resolvedType = typeOrConstructor?.call(typeOrConstructor, currentValue);
404
- type = resolvedType;
405
- typeIsFunction = false;
406
- if (type === null || type === undefined)
407
- return;
408
- }
409
- catch (err) {
410
- console.error("Error in callback", err, data);
411
- }
412
- }
413
- context.type = type;
414
- // e.g. when @serializable(Texture) and the texture is already resolved via json pointer from gltf
415
- // then we dont need to do anything else
416
- if (!typeIsFunction && currentValue instanceof type)
417
- return currentValue;
418
- // try to resolve the serializer for a type only once
419
- if (!typeContext) {
420
- typeContext = {
421
- serializer: helper.getSerializerForConstructor(type)
422
- };
423
- }
424
- // if the value was already resolved via the persistent asset extension dont try to override that again
425
- if (currentValue && typeof currentValue === "object" && isPersistentAsset(currentValue)) {
426
- // if the persistent asset was already resolved to a concrete instance we dont need to do anything anymore
427
- if (currentValue["__concreteInstance"]) {
428
- return currentValue["__concreteInstance"];
429
- }
430
- const serializableInstance = currentValue;
431
- if (!serializableInstance.$serializedTypes && type.prototype.$serializedTypes)
432
- serializableInstance.$serializedTypes = type.prototype.$serializedTypes;
433
- if (serializableInstance.$serializedTypes) {
434
- deserializeObject(serializableInstance, data, context);
435
- }
436
- if (currentValue && type !== undefined) {
437
- try {
438
- let instance = null;
439
- // It's still possible that the type has an explicit serializer
440
- // e.g. AnimatorController (or if a user registers a serializer for an arbitrary type and then marks a persistent asset with @serializable)
441
- // we have this for @serializable(AnimatorController)
442
- if (typeContext.serializer) {
443
- instance = typeContext.serializer.onDeserialize(data, context);
444
- }
445
- if (!instance) {
446
- // we create a concrete instance for a persistent asset here
447
- // hence we want to have the same instance across all usages of this asset
448
- instance = new type();
449
- if (debugExtension)
450
- console.log("Create concrete instance for persistent asset", currentValue, "instance:", instance);
451
- assign(instance, currentValue);
452
- }
453
- // save it so if another component references the same persistent asset it will automatically use the concrete instance
454
- currentValue["__concreteInstance"] = instance;
455
- currentValue = instance;
456
- }
457
- catch (err) {
458
- console.error("Error creating instance or creating values on instance", err, currentValue, type);
459
- }
460
- }
461
- return currentValue;
462
- }
463
- // if the type is an array resolve each entries recursively
464
- if (Array.isArray(data)) {
465
- const newArr = [];
466
- for (let i = 0; i < data.length; i++) {
467
- const obj = data[i];
468
- // debugger;
469
- const res = deserializeObjectWithType(obj, typeOrConstructor, context, typeContext, obj);
470
- newArr.push(res);
471
- }
472
- // return value;
473
- return newArr;
474
- }
475
- const ser = typeContext?.serializer;
476
- if (ser) {
477
- return ser.onDeserialize(data, context);
478
- }
479
- // console.log(type.prototype.get("$serializedTypes"));
480
- let instance = undefined;
481
- if (data && (data.isMaterial || data.isTexture || data.isObject3D)) {
482
- // if the data is already a threejs object we dont want to create a new instance
483
- // e.g. if we have a serialized class with a serializable(Material)
484
- instance = data;
485
- }
486
- else {
487
- // happens when exporting e.g. Animation component with only clip assigned (clips array is marked as serialized but it might be undefined if no clips are assigned in e.g. blender)
488
- if (data === undefined)
489
- return undefined;
490
- if (data === null) {
491
- // Dont implictly create instances for three types that are not assigned
492
- // see: https://github.com/needle-tools/needle-tiny/issues/637
493
- if (type === Material || type === Texture || type === Mesh || type === AnimationClip) {
494
- return null;
495
- }
496
- }
497
- try {
498
- // the fallback - this assumes that the type has a constructor that accepts the serialized arguments
499
- // made originally with THREE.Vector3 in mind but SHOULD actually not be used/called anymore
500
- instance = new type(...setBuffer(data));
501
- }
502
- catch (err) {
503
- console.error("Error creating " + context.path, context.target, err);
504
- return;
505
- }
506
- }
507
- // recurse if the deserialized member also implements Iserializable
508
- const serializableInstance = instance;
509
- if (serializableInstance.$serializedTypes) {
510
- deserializeObject(serializableInstance, data, context);
511
- }
512
- return instance;
513
- }
514
- function setBuffer(value) {
515
- buffer.length = 0;
516
- if (typeof value === "object" && value !== null && value !== undefined) {
517
- for (const key of Object.keys(value)) {
518
- buffer.push(value[key]);
519
- }
520
- }
521
- return buffer;
522
- }
523
- /** set to true while assigning properties during instantiation.
524
- * Used for validate decorator to not invoke callbacks on components that are currently in the process of being built */
525
- export const $isAssigningProperties = Symbol("assigned component properties");
526
- // const developmentMode = getParam("dev")
527
- /** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
528
- export function assign(target, source, info) {
529
- if (source === undefined || source === null)
530
- return;
531
- if (target === undefined || target === null)
532
- return;
533
- const onlyDeclared = false;
534
- // if (onlyDeclared === true && target.constructor) {
535
- // if (target.constructor[ALL_PROPERTIES_MARKER] === true)
536
- // onlyDeclared = false;
537
- // }
538
- // if (onlyDeclared !== true && target.constructor) {
539
- // if (target.constructor[STRICT_MARKER] === true)
540
- // onlyDeclared = true;
541
- // }
542
- // if (onlyDeclared === undefined)
543
- // onlyDeclared = true;
544
- // if (developmentMode)
545
- // onlyDeclared = false;
546
- target[$isAssigningProperties] = true;
547
- const typeName = target.constructor?.name ?? "unknown";
548
- // register the keys that the actual type has defined
549
- // this will be used later when checking if deserialization has assigned all properties
550
- // or if anything could not be deserialized to warn the user
551
- info?.registerDefinedKeys(typeName, target);
552
- for (const key of Object.keys(source)) {
553
- const desc = getPropertyDescriptor(target, key);
554
- if (onlyDeclared && desc === undefined)
555
- continue;
556
- if (typeof desc?.value == "function") {
557
- // arrow functions are defined as properties on the object
558
- continue;
559
- }
560
- if (!desc || desc.writable === true) {
561
- target[key] = source[key];
562
- }
563
- else if (desc?.set !== undefined) {
564
- target[key] = source[key];
565
- }
566
- }
567
- delete target[$isAssigningProperties];
568
- }
569
- // we need to recurse because the property might be defined in a base class
570
- function getPropertyDescriptor(obj, prop) {
571
- let desc;
572
- do {
573
- desc = Object.getOwnPropertyDescriptor(obj, prop);
574
- } while (!desc && (obj = Object.getPrototypeOf(obj)));
575
- return desc;
576
- }
1
+ import { getParam } from "./engine_utils.js";
2
+ import { AnimationClip, Material, Mesh, Texture } from "three";
3
+ import { isPersistentAsset } from "./extensions/NEEDLE_persistent_assets.js";
4
+ import { debugExtension } from "../engine/engine_default_parameters.js";
5
+ import { LogType, addLog } from "./debug/debug_overlay.js";
6
+ import { isLocalNetwork } from "./engine_networking_utils.js";
7
+ import { $BuiltInTypeFlag } from "./engine_typestore.js";
8
+ const debug = getParam("debugserializer");
9
+ // internal helper class that we can ask for registered type serializers
10
+ // register your own type by deriving from ITypeSerializer and calling helper.register
11
+ class SerializationHelper {
12
+ register(type, ser) {
13
+ if (this.typeMap[type] !== undefined) {
14
+ if (this.typeMap[type] === ser)
15
+ return;
16
+ console.warn("Type " + type + " is already registered", ser, this.typeMap[type]);
17
+ }
18
+ if (debug)
19
+ console.log("Register type serializer for " + type, ser);
20
+ this.typeMap[type] = ser;
21
+ }
22
+ typeMap = {};
23
+ getSerializer(type) {
24
+ if (!type)
25
+ return undefined;
26
+ return this.typeMap[type];
27
+ }
28
+ getSerializerForConstructor(type, level = 0) {
29
+ if (level > 20)
30
+ return undefined;
31
+ if (!type || !type.constructor) {
32
+ if (debug)
33
+ console.log("invalid type");
34
+ return undefined;
35
+ }
36
+ const name = type.name ?? type.constructor?.name;
37
+ if (!name) {
38
+ if (debug)
39
+ console.log("invalid name", name);
40
+ return undefined;
41
+ }
42
+ const res = this.getSerializer(name);
43
+ if (res !== undefined) {
44
+ if (debug)
45
+ console.log("FOUND " + name, type.name, type.constructor.name, res, this.typeMap);
46
+ return res;
47
+ }
48
+ const parent = Object.getPrototypeOf(type);
49
+ const hasPrototypeOrConstructor = parent.prototype || parent.constructor;
50
+ // console.log(name, type, parent);
51
+ if (!hasPrototypeOrConstructor) {
52
+ if (debug)
53
+ console.warn("No prototype for " + name, type, type.name, type.prototype, type.constructor.name);
54
+ // console.log(type.constructor);
55
+ // console.dir(type);
56
+ // console.log(Object.getPrototypeOf(type))
57
+ // console.dir(parent, Object.getPrototypeOf(type));
58
+ // if(level <= 0){
59
+ // const t = TypeStore.get(type.name);
60
+ // console.log(type['__proto__'].name);
61
+ // if(t) return this.getSerializerForConstructor(t, level + 1);
62
+ // }
63
+ return undefined;
64
+ }
65
+ const prot = parent.prototype ?? parent.constructor;
66
+ if (prot !== type) {
67
+ const resultFromChildren = this.getSerializerForConstructor(prot, ++level);
68
+ if (resultFromChildren) {
69
+ if (debug)
70
+ console.log("FOUND " + prot.constructor.name, prot.name, prot, resultFromChildren);
71
+ // register sub type
72
+ const typeName = prot.name ?? prot.constructor.name;
73
+ if (typeName === "Function") {
74
+ console.error("Registering Function is not allowed, something went wrong", type, prot, resultFromChildren);
75
+ }
76
+ else
77
+ this.register(typeName, resultFromChildren);
78
+ }
79
+ return resultFromChildren;
80
+ }
81
+ return undefined;
82
+ }
83
+ }
84
+ export const helper = new SerializationHelper();
85
+ /**
86
+ * implement and call super(<type string or array>) with the type names this serializer can handle
87
+ * for example:
88
+ * class ColorSerializer extends TypeSerializer {
89
+ * constructor() {
90
+ * super("Color")
91
+ * }
92
+ * }
93
+ */
94
+ export class TypeSerializer {
95
+ // register<T>(c: Constructor<T> | Constructor<T>[])
96
+ // {
97
+ // if (Array.isArray(c)) {
98
+ // for (const t of c) {
99
+ // helper.register(t.name, this);
100
+ // }
101
+ // }
102
+ // else {
103
+ // helper.register(c.name, this);
104
+ // }
105
+ // }
106
+ constructor(type) {
107
+ if (Array.isArray(type)) {
108
+ for (const key of type)
109
+ helper.register(key.name, this);
110
+ }
111
+ else
112
+ helper.register(type.name, this);
113
+ }
114
+ }
115
+ /** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
116
+ export class ImplementationInformation {
117
+ isDevMode = isLocalNetwork();
118
+ cache = {};
119
+ /** only call when assigning values for the very first time */
120
+ registerDefinedKeys(typeName, type) {
121
+ if (!this.isDevMode)
122
+ return;
123
+ if (this.cache[typeName] === undefined) {
124
+ this.cache[typeName] = Object.keys(type);
125
+ }
126
+ }
127
+ getDefinedKey(typeName, key) {
128
+ if (this.cache[typeName] === undefined)
129
+ return false;
130
+ const keys = this.cache[typeName];
131
+ const res = keys.includes(key);
132
+ return res;
133
+ }
134
+ }
135
+ // passed to serializers
136
+ export class SerializationContext {
137
+ root;
138
+ gltf;
139
+ /** the url of the glb that is currently being loaded */
140
+ gltfId;
141
+ object;
142
+ target;
143
+ nodeId;
144
+ nodeToObject;
145
+ objectToNode;
146
+ context;
147
+ path;
148
+ type;
149
+ /** the serializable attribute for this field (target.path) */
150
+ serializable;
151
+ /** holds information if a field was undefined before serialization. This gives us info if we might want to warn the user about missing attributes */
152
+ implementationInformation;
153
+ constructor(root) {
154
+ this.root = root;
155
+ }
156
+ }
157
+ ;
158
+ export function serializeObject(obj, context) {
159
+ const types = obj.$serializedTypes;
160
+ if (types === undefined)
161
+ return null;
162
+ const res = {};
163
+ for (const key in types) {
164
+ const val = obj[key];
165
+ // if the object bein serialized is some type of object check if we have special handling registered for it
166
+ if (val !== undefined && val !== null && typeof val === "object") {
167
+ // get type name
168
+ // get registered serialization handler
169
+ const ser = helper.getSerializerForConstructor(val);
170
+ if (ser) {
171
+ // serialize data using that handler
172
+ res[key] = ser.onSerialize(val, context);
173
+ continue;
174
+ }
175
+ }
176
+ res[key] = val;
177
+ }
178
+ // name is the component type
179
+ res["name"] = obj.constructor.name;
180
+ // serialize guid
181
+ if (typeof obj["guid"] === "string")
182
+ res["guid"] = obj["guid"];
183
+ return res;
184
+ }
185
+ const buffer = [];
186
+ function collectSerializedTypesInBaseTypes(obj, typeInfoObject) {
187
+ if (!obj)
188
+ return typeInfoObject;
189
+ if (typeof obj.$serializedTypes === "object") {
190
+ if (!typeInfoObject)
191
+ typeInfoObject = {};
192
+ Object.assign(typeInfoObject, obj.$serializedTypes);
193
+ }
194
+ const parentTarget = Object.getPrototypeOf(obj);
195
+ return collectSerializedTypesInBaseTypes(parentTarget, typeInfoObject);
196
+ }
197
+ export function deserializeObject(obj, serializedData, context) {
198
+ if (!obj)
199
+ return false;
200
+ context.target = obj;
201
+ if (obj.onBeforeDeserialize !== undefined) {
202
+ const res = obj.onBeforeDeserialize(serializedData, context);
203
+ if (typeof res === "boolean")
204
+ return res;
205
+ }
206
+ // const typeInfo = obj.$serializedTypes;
207
+ const typeInfo = collectSerializedTypesInBaseTypes(obj);
208
+ if (serializedData) {
209
+ // restore guid (see serializeObject)
210
+ if (typeof serializedData["guid"] === "string")
211
+ obj["guid"] = serializedData["guid"];
212
+ if (typeInfo) {
213
+ for (const key in typeInfo) {
214
+ const serializedEntryInfo = typeInfo[key];
215
+ const data = serializedData[key];
216
+ if (debug)
217
+ console.log(key, data, obj, serializedEntryInfo);
218
+ if (obj[key] !== undefined && data === undefined) {
219
+ // if a field is marked as serialized and has some default value
220
+ // but no data was serialized do not override the default value with undefined
221
+ continue;
222
+ }
223
+ context.type = undefined;
224
+ context.path = key;
225
+ context.serializable = serializedEntryInfo;
226
+ if (obj.onBeforeDeserializeMember !== undefined) {
227
+ // callback to the instance, if it returns true assume it's done all the things itself
228
+ if (obj.onBeforeDeserializeMember(key, data, context) === true)
229
+ continue;
230
+ }
231
+ if (serializedEntryInfo === null) {
232
+ obj[key] = data;
233
+ // if(typeof data === "string"){
234
+ // const serializer = helper.getSerializerForConstructor(String);
235
+ // const res = serializer?.onDeserialize(data, context);
236
+ // if(res !== undefined) obj[key] = res;
237
+ // }
238
+ }
239
+ else {
240
+ if (Array.isArray(serializedEntryInfo)) {
241
+ for (let i = 0; i < serializedEntryInfo.length; i++) {
242
+ const typeInfoOrConstructor = serializedEntryInfo[i];
243
+ const res = tryResolve(typeInfoOrConstructor);
244
+ if (res !== undefined || i === serializedEntryInfo.length - 1) {
245
+ obj[key] = res;
246
+ break;
247
+ }
248
+ }
249
+ }
250
+ else {
251
+ obj[key] = tryResolve(serializedEntryInfo);
252
+ }
253
+ buffer.length = 0;
254
+ }
255
+ if (obj.onAfterDeserializeMember !== undefined) {
256
+ obj.onAfterDeserializeMember(key, data, context);
257
+ }
258
+ function tryResolve(typeInfoOrConstructor) {
259
+ const typeInformationOrConstructor = typeInfoOrConstructor;
260
+ // if the entry does specify an object of type ITypeInformation and has the type field set
261
+ const type = typeInformationOrConstructor.type;
262
+ if (type) {
263
+ return deserializeObjectWithType(data, type, context, undefined, obj[key]);
264
+ }
265
+ // it can also just contain a constructor
266
+ else {
267
+ const constructor = typeInfoOrConstructor;
268
+ return deserializeObjectWithType(data, constructor, context, undefined, obj[key]);
269
+ }
270
+ }
271
+ }
272
+ }
273
+ // ***
274
+ // the code below could be used to implictly assign serialized data if they are primitive types
275
+ // if we decide not to do this we always have to write out all the $serializedTypes
276
+ // ***
277
+ implictlyAssignPrimitiveTypes(obj, serializedData);
278
+ }
279
+ checkObjectAssignments(obj, serializedData, context.implementationInformation);
280
+ if (obj.onAfterDeserialize !== undefined) {
281
+ obj.onAfterDeserialize(serializedData, context);
282
+ }
283
+ context.path = undefined;
284
+ return true;
285
+ }
286
+ const blockChecks = getParam("noerrors");
287
+ function checkObjectAssignments(obj, serializedData, implementationInformation) {
288
+ if (blockChecks)
289
+ return;
290
+ if (!serializedData)
291
+ return;
292
+ if (isLocalNetwork() === false)
293
+ return;
294
+ if (!obj)
295
+ return;
296
+ // ignore builtin components that we dont want to check
297
+ if (obj.constructor && obj.constructor[$BuiltInTypeFlag] === true)
298
+ return;
299
+ const typeName = obj.constructor?.name;
300
+ // test if any object reference is missing serializable
301
+ const ownKeys = Object.getOwnPropertyNames(serializedData);
302
+ for (const key of ownKeys) {
303
+ if (key === "sourceId")
304
+ continue;
305
+ const value = obj[key];
306
+ if (value == null)
307
+ continue;
308
+ const serialized = serializedData[key];
309
+ // check if the field is defined in the class
310
+ if (implementationInformation?.getDefinedKey(typeName, key) === false) {
311
+ // if the field is defined but the defined key is uppercase we need to show a warning
312
+ // because all fields are serialized in lowercase
313
+ const firstCharUppercase = key.charAt(0).toUpperCase() + key.slice(1);
314
+ if (implementationInformation.getDefinedKey(typeName, firstCharUppercase)) {
315
+ addLog(LogType.Warn, "<strong>Please rename</strong> \"" + firstCharUppercase + "\" to \"" + key + "\" in " + typeName);
316
+ console.warn("Please use lowercase for field: \"" + firstCharUppercase + "\" in " + typeName, serialized, obj);
317
+ }
318
+ continue;
319
+ }
320
+ if (serialized === undefined || serialized === null)
321
+ continue;
322
+ if (typeof serialized === "object") {
323
+ if (value === undefined || !value.isObject3D) {
324
+ if (typeof serialized["node"] === "number" || typeof serialized["guid"] === "string") {
325
+ if (serialized["could_not_resolve"]) {
326
+ continue;
327
+ }
328
+ const hasOtherKeys = value !== undefined && Object.keys(value).length > 1;
329
+ if (!hasOtherKeys) {
330
+ addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(Object3D)\n${key}? : Object3D;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
331
+ console.warn(typeName, key, obj[key], obj);
332
+ continue;
333
+ }
334
+ }
335
+ }
336
+ }
337
+ if (typeof value === "string") {
338
+ if (serialized.endsWith(".gltf") || serialized.endsWith(".glb")) {
339
+ addLog(LogType.Warn, `<strong>Missing serialization for object reference!</strong>\n\nPlease change to: \n@serializable(AssetReference)\n${key}? : AssetReference;\n\nin script ${typeName}.ts\n<a href="https://docs.needle.tools/serializable" target="_blank">documentation</a>`);
340
+ console.warn(typeName, key, obj[key], obj);
341
+ continue;
342
+ }
343
+ }
344
+ }
345
+ }
346
+ function implictlyAssignPrimitiveTypes(obj, serializedData) {
347
+ // implictly assign serialized primitive fields
348
+ for (const key of Object.keys(serializedData)) {
349
+ const data = serializedData[key];
350
+ if (typeof data === "object" && data !== null && data !== undefined) {
351
+ const member = obj[key];
352
+ if (!member) {
353
+ if (debug)
354
+ console.log(key, "is undefined on", obj);
355
+ continue;
356
+ }
357
+ for (const key of Object.keys(data)) {
358
+ const targetMember = member[key];
359
+ // implictly assign number, string, boolean if they are undefined
360
+ if (targetMember !== undefined)
361
+ continue;
362
+ // resolve serialized primitive types
363
+ if (isPrimitiveType(data[key]) && !isPrimitiveType(member)) {
364
+ const prop = tryFindPropertyDescriptor(member, key);
365
+ if (prop && (prop?.writable === undefined || prop?.writable === false) && (prop.set === undefined)) {
366
+ if (debug)
367
+ console.warn("Property is not writable \"" + key + "\"", member, prop, data[key], member[key]);
368
+ continue;
369
+ }
370
+ // console.log("ASSIGN", key, member, member[key], targetMember, data[key], prop);
371
+ member[key] = data[key];
372
+ }
373
+ }
374
+ }
375
+ }
376
+ }
377
+ function tryFindPropertyDescriptor(obj, key) {
378
+ while (obj) {
379
+ const desc = Object.getOwnPropertyDescriptor(obj, key);
380
+ if (desc)
381
+ return desc;
382
+ obj = Object.getPrototypeOf(obj);
383
+ }
384
+ return undefined;
385
+ }
386
+ function isPrimitiveType(val) {
387
+ switch (typeof val) {
388
+ case "number":
389
+ case "string":
390
+ case "boolean":
391
+ return true;
392
+ }
393
+ return false;
394
+ }
395
+ function deserializeObjectWithType(data, typeOrConstructor, context, typeContext, currentValue) {
396
+ // e.g. @serializable((data) => { })
397
+ let typeIsFunction = typeof typeOrConstructor === "function" && (typeOrConstructor.prototype === undefined);
398
+ let type = typeOrConstructor;
399
+ if (typeIsFunction) {
400
+ // it's possible to assign a function to serializable to dynamically say which type we expect
401
+ // e.g. if you have an array of types and you want the array to be resolved with different class instances
402
+ try {
403
+ const resolvedType = typeOrConstructor?.call(typeOrConstructor, currentValue);
404
+ type = resolvedType;
405
+ typeIsFunction = false;
406
+ if (type === null || type === undefined)
407
+ return;
408
+ }
409
+ catch (err) {
410
+ console.error("Error in callback", err, data);
411
+ }
412
+ }
413
+ context.type = type;
414
+ // e.g. when @serializable(Texture) and the texture is already resolved via json pointer from gltf
415
+ // then we dont need to do anything else
416
+ if (!typeIsFunction && currentValue instanceof type)
417
+ return currentValue;
418
+ // try to resolve the serializer for a type only once
419
+ if (!typeContext) {
420
+ typeContext = {
421
+ serializer: helper.getSerializerForConstructor(type)
422
+ };
423
+ }
424
+ // if the value was already resolved via the persistent asset extension dont try to override that again
425
+ if (currentValue && typeof currentValue === "object" && isPersistentAsset(currentValue)) {
426
+ // if the persistent asset was already resolved to a concrete instance we dont need to do anything anymore
427
+ if (currentValue["__concreteInstance"]) {
428
+ return currentValue["__concreteInstance"];
429
+ }
430
+ const serializableInstance = currentValue;
431
+ if (!serializableInstance.$serializedTypes && type.prototype.$serializedTypes)
432
+ serializableInstance.$serializedTypes = type.prototype.$serializedTypes;
433
+ if (serializableInstance.$serializedTypes) {
434
+ deserializeObject(serializableInstance, data, context);
435
+ }
436
+ if (currentValue && type !== undefined) {
437
+ try {
438
+ let instance = null;
439
+ // It's still possible that the type has an explicit serializer
440
+ // e.g. AnimatorController (or if a user registers a serializer for an arbitrary type and then marks a persistent asset with @serializable)
441
+ // we have this for @serializable(AnimatorController)
442
+ if (typeContext.serializer) {
443
+ instance = typeContext.serializer.onDeserialize(data, context);
444
+ }
445
+ if (!instance) {
446
+ // we create a concrete instance for a persistent asset here
447
+ // hence we want to have the same instance across all usages of this asset
448
+ instance = new type();
449
+ if (debugExtension)
450
+ console.log("Create concrete instance for persistent asset", currentValue, "instance:", instance);
451
+ assign(instance, currentValue);
452
+ }
453
+ // save it so if another component references the same persistent asset it will automatically use the concrete instance
454
+ currentValue["__concreteInstance"] = instance;
455
+ currentValue = instance;
456
+ }
457
+ catch (err) {
458
+ console.error("Error creating instance or creating values on instance", err, currentValue, type);
459
+ }
460
+ }
461
+ return currentValue;
462
+ }
463
+ // if the type is an array resolve each entries recursively
464
+ if (Array.isArray(data)) {
465
+ const newArr = [];
466
+ for (let i = 0; i < data.length; i++) {
467
+ const obj = data[i];
468
+ // debugger;
469
+ const res = deserializeObjectWithType(obj, typeOrConstructor, context, typeContext, obj);
470
+ newArr.push(res);
471
+ }
472
+ // return value;
473
+ return newArr;
474
+ }
475
+ const ser = typeContext?.serializer;
476
+ if (ser) {
477
+ return ser.onDeserialize(data, context);
478
+ }
479
+ // console.log(type.prototype.get("$serializedTypes"));
480
+ let instance = undefined;
481
+ if (data && (data.isMaterial || data.isTexture || data.isObject3D)) {
482
+ // if the data is already a threejs object we dont want to create a new instance
483
+ // e.g. if we have a serialized class with a serializable(Material)
484
+ instance = data;
485
+ }
486
+ else {
487
+ // happens when exporting e.g. Animation component with only clip assigned (clips array is marked as serialized but it might be undefined if no clips are assigned in e.g. blender)
488
+ if (data === undefined)
489
+ return undefined;
490
+ if (data === null) {
491
+ // Dont implictly create instances for three types that are not assigned
492
+ // see: https://github.com/needle-tools/needle-tiny/issues/637
493
+ if (type === Material || type === Texture || type === Mesh || type === AnimationClip) {
494
+ return null;
495
+ }
496
+ }
497
+ try {
498
+ // the fallback - this assumes that the type has a constructor that accepts the serialized arguments
499
+ // made originally with THREE.Vector3 in mind but SHOULD actually not be used/called anymore
500
+ instance = new type(...setBuffer(data));
501
+ }
502
+ catch (err) {
503
+ console.error("Error creating " + context.path, context.target, err);
504
+ return;
505
+ }
506
+ }
507
+ // recurse if the deserialized member also implements Iserializable
508
+ const serializableInstance = instance;
509
+ if (serializableInstance.$serializedTypes) {
510
+ deserializeObject(serializableInstance, data, context);
511
+ }
512
+ return instance;
513
+ }
514
+ function setBuffer(value) {
515
+ buffer.length = 0;
516
+ if (typeof value === "object" && value !== null && value !== undefined) {
517
+ for (const key of Object.keys(value)) {
518
+ buffer.push(value[key]);
519
+ }
520
+ }
521
+ return buffer;
522
+ }
523
+ /** set to true while assigning properties during instantiation.
524
+ * Used for validate decorator to not invoke callbacks on components that are currently in the process of being built */
525
+ export const $isAssigningProperties = Symbol("assigned component properties");
526
+ // const developmentMode = getParam("dev")
527
+ /** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
528
+ export function assign(target, source, info) {
529
+ if (source === undefined || source === null)
530
+ return;
531
+ if (target === undefined || target === null)
532
+ return;
533
+ const onlyDeclared = false;
534
+ // if (onlyDeclared === true && target.constructor) {
535
+ // if (target.constructor[ALL_PROPERTIES_MARKER] === true)
536
+ // onlyDeclared = false;
537
+ // }
538
+ // if (onlyDeclared !== true && target.constructor) {
539
+ // if (target.constructor[STRICT_MARKER] === true)
540
+ // onlyDeclared = true;
541
+ // }
542
+ // if (onlyDeclared === undefined)
543
+ // onlyDeclared = true;
544
+ // if (developmentMode)
545
+ // onlyDeclared = false;
546
+ target[$isAssigningProperties] = true;
547
+ const typeName = target.constructor?.name ?? "unknown";
548
+ // register the keys that the actual type has defined
549
+ // this will be used later when checking if deserialization has assigned all properties
550
+ // or if anything could not be deserialized to warn the user
551
+ info?.registerDefinedKeys(typeName, target);
552
+ for (const key of Object.keys(source)) {
553
+ const desc = getPropertyDescriptor(target, key);
554
+ if (onlyDeclared && desc === undefined)
555
+ continue;
556
+ if (typeof desc?.value == "function") {
557
+ // arrow functions are defined as properties on the object
558
+ continue;
559
+ }
560
+ if (!desc || desc.writable === true) {
561
+ target[key] = source[key];
562
+ }
563
+ else if (desc?.set !== undefined) {
564
+ target[key] = source[key];
565
+ }
566
+ }
567
+ delete target[$isAssigningProperties];
568
+ }
569
+ // we need to recurse because the property might be defined in a base class
570
+ function getPropertyDescriptor(obj, prop) {
571
+ let desc;
572
+ do {
573
+ desc = Object.getOwnPropertyDescriptor(obj, prop);
574
+ } while (!desc && (obj = Object.getPrototypeOf(obj)));
575
+ return desc;
576
+ }
577
577
  //# sourceMappingURL=engine_serialization_core.js.map