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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/needle-engine.d.ts +2417 -2230
  3. package/dist/needle-engine.js +425 -425
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +49 -49
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/dist/needle-engine.tsbuildinfo +1 -0
  8. package/lib/engine/codegen/register_types.d.ts +1 -0
  9. package/lib/engine/codegen/register_types.js +346 -0
  10. package/lib/engine/codegen/register_types.js.map +1 -0
  11. package/lib/engine/debug/debug.d.ts +1 -0
  12. package/lib/engine/debug/debug.js +4 -0
  13. package/lib/engine/debug/debug.js.map +1 -1
  14. package/lib/engine/debug/debug_console.js +2 -1
  15. package/lib/engine/debug/debug_console.js.map +1 -1
  16. package/lib/engine/debug/debug_overlay.js +3 -1
  17. package/lib/engine/debug/debug_overlay.js.map +1 -1
  18. package/lib/engine/engine_default_parameters.d.ts +2 -2
  19. package/lib/engine/engine_element.js +4 -2
  20. package/lib/engine/engine_element.js.map +1 -1
  21. package/lib/engine/engine_element_loading.d.ts +1 -0
  22. package/lib/engine/engine_element_loading.js +17 -6
  23. package/lib/engine/engine_element_loading.js.map +1 -1
  24. package/lib/engine/engine_element_overlay.js +4 -2
  25. package/lib/engine/engine_element_overlay.js.map +1 -1
  26. package/lib/engine/engine_fileloader.d.ts +3 -0
  27. package/lib/engine/engine_fileloader.js +8 -0
  28. package/lib/engine/engine_fileloader.js.map +1 -0
  29. package/lib/engine/engine_generic_utils.d.ts +1 -0
  30. package/lib/engine/engine_generic_utils.js +14 -0
  31. package/lib/engine/engine_generic_utils.js.map +1 -0
  32. package/lib/engine/engine_input.js +4 -0
  33. package/lib/engine/engine_input.js.map +1 -1
  34. package/lib/engine/engine_networking_websocket.d.ts +1 -0
  35. package/lib/engine/engine_networking_websocket.js +1 -1
  36. package/lib/engine/engine_networking_websocket.js.map +1 -1
  37. package/lib/engine/engine_serialization_builtin_serializer.js +6 -3
  38. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  39. package/lib/engine/engine_utils.d.ts +1 -1
  40. package/lib/engine/engine_utils.js +3 -0
  41. package/lib/engine/engine_utils.js.map +1 -1
  42. package/lib/engine/extensions/NEEDLE_components.d.ts +1 -1
  43. package/lib/engine/extensions/NEEDLE_progressive.d.ts +22 -0
  44. package/lib/engine/extensions/NEEDLE_progressive.js +172 -44
  45. package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -1
  46. package/lib/engine-components/GroundProjection.d.ts +2 -1
  47. package/lib/engine-components/GroundProjection.js +19 -12
  48. package/lib/engine-components/GroundProjection.js.map +1 -1
  49. package/lib/engine-components/ParticleSystemModules.d.ts +1 -1
  50. package/lib/engine-components/ParticleSystemModules.js +48 -44
  51. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  52. package/lib/engine-components/ReflectionProbe.d.ts +1 -1
  53. package/lib/engine-components/Renderer.d.ts +1 -1
  54. package/lib/engine-components/Renderer.js +3 -8
  55. package/lib/engine-components/Renderer.js.map +1 -1
  56. package/lib/engine-components/Volume.js +8 -1
  57. package/lib/engine-components/Volume.js.map +1 -1
  58. package/lib/engine-components/WebXR.d.ts +2 -2
  59. package/lib/engine-components/WebXRAvatar.d.ts +1 -1
  60. package/lib/engine-components/codegen/components.d.ts +99 -99
  61. package/lib/engine-components/codegen/components.js +99 -99
  62. package/lib/engine-components/codegen/components.js.map +1 -1
  63. package/lib/engine-components/export/usdz/USDZExporter.d.ts +1 -0
  64. package/lib/engine-components/export/usdz/USDZExporter.js +17 -1
  65. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  66. package/lib/engine-components/ui/Button.js +30 -0
  67. package/lib/engine-components/ui/Button.js.map +1 -1
  68. package/lib/engine-components/ui/InputField.d.ts +2 -0
  69. package/lib/engine-components/ui/InputField.js +23 -1
  70. package/lib/engine-components/ui/InputField.js.map +1 -1
  71. package/lib/engine-components/ui/Utils.d.ts +2 -0
  72. package/lib/engine-components/ui/Utils.js +10 -9
  73. package/lib/engine-components/ui/Utils.js.map +1 -1
  74. package/lib/engine-components-experimental/Presentation.d.ts +6 -0
  75. package/lib/engine-components-experimental/Presentation.js +11 -0
  76. package/lib/engine-components-experimental/Presentation.js.map +1 -0
  77. package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +18 -0
  78. package/lib/engine-components-experimental/annotation/LineDrawer.js +175 -0
  79. package/lib/engine-components-experimental/annotation/LineDrawer.js.map +1 -0
  80. package/lib/engine-components-experimental/annotation/LinesManager.d.ts +54 -0
  81. package/lib/engine-components-experimental/annotation/LinesManager.js +155 -0
  82. package/lib/engine-components-experimental/annotation/LinesManager.js.map +1 -0
  83. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +26 -0
  84. package/lib/engine-components-experimental/networking/PlayerSync.js +121 -0
  85. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -0
  86. package/lib/engine-schemes/vec2.d.ts +10 -0
  87. package/lib/engine-schemes/vec2.js +26 -0
  88. package/lib/engine-schemes/vec2.js.map +1 -0
  89. package/lib/include/three/ARButton.d.ts +3 -0
  90. package/lib/include/three/ARButton.js +158 -0
  91. package/lib/include/three/ARButton.js.map +1 -0
  92. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -0
  93. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +46 -0
  94. package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js.map +1 -0
  95. package/lib/include/three/VRButton.d.ts +5 -0
  96. package/lib/include/three/VRButton.js +122 -0
  97. package/lib/include/three/VRButton.js.map +1 -0
  98. package/lib/tsconfig.tsbuildinfo +1 -0
  99. package/package.json +1 -1
  100. package/src/engine/codegen/register_types.js +214 -214
  101. package/src/engine/debug/debug.ts +5 -0
  102. package/src/engine/debug/debug_console.ts +3 -2
  103. package/src/engine/debug/debug_overlay.ts +3 -1
  104. package/src/engine/engine_element.ts +4 -2
  105. package/src/engine/engine_element_loading.ts +13 -6
  106. package/src/engine/engine_element_overlay.ts +4 -2
  107. package/src/engine/engine_input.ts +4 -0
  108. package/src/engine/engine_networking_websocket.ts +3 -1
  109. package/src/engine/engine_serialization_builtin_serializer.ts +8 -5
  110. package/src/engine/engine_utils.ts +3 -1
  111. package/src/engine/extensions/NEEDLE_progressive.ts +185 -43
  112. package/src/engine-components/GroundProjection.ts +18 -12
  113. package/src/engine-components/ParticleSystemModules.ts +50 -47
  114. package/src/engine-components/Renderer.ts +5 -9
  115. package/src/engine-components/Volume.ts +8 -1
  116. package/src/engine-components/WebXR.ts +2 -2
  117. package/src/engine-components/codegen/components.ts +99 -99
  118. package/src/engine-components/export/usdz/USDZExporter.ts +19 -2
  119. package/src/engine-components/ui/Button.ts +8 -8
  120. package/src/engine-components/ui/InputField.ts +25 -2
  121. package/src/engine-components/ui/Utils.ts +12 -11
  122. package/src/engine-components-experimental/annotation/LineDrawer.ts +10 -7
  123. package/src/engine-components-experimental/annotation/LinesManager.ts +6 -6
  124. package/src/engine-components-experimental/networking/PlayerSync.ts +1 -1
  125. package/lib/engine/engine_caching.d.ts +0 -0
  126. package/lib/engine/engine_caching.js +0 -2
  127. package/lib/engine/engine_caching.js.map +0 -1
  128. package/lib/engine/tests/simulate_avatars.d.ts +0 -0
  129. package/lib/engine/tests/simulate_avatars.js +0 -3
  130. package/lib/engine/tests/simulate_avatars.js.map +0 -1
  131. package/lib/engine-components/NavMesh.d.ts +0 -0
  132. package/lib/engine-components/NavMesh.js +0 -101
  133. package/lib/engine-components/NavMesh.js.map +0 -1
  134. package/lib/engine-components/ParticleSystemBehaviours.d.ts +0 -0
  135. package/lib/engine-components/ParticleSystemBehaviours.js +0 -2
  136. package/lib/engine-components/ParticleSystemBehaviours.js.map +0 -1
  137. package/lib/engine-components/SpringJoint.d.ts +0 -0
  138. package/lib/engine-components/SpringJoint.js +0 -43
  139. package/lib/engine-components/SpringJoint.js.map +0 -1
  140. package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
  141. package/lib/engine-components/ui/CanvasScaler.js +0 -17
  142. package/lib/engine-components/ui/CanvasScaler.js.map +0 -1
  143. package/src/engine/dist/engine_three_utils.js +0 -279
  144. package/src/engine/engine_caching.ts +0 -0
  145. package/src/engine/tests/simulate_avatars.ts +0 -2
  146. package/src/engine-components/NavMesh.ts +0 -117
  147. package/src/engine-components/ParticleSystemBehaviours.ts +0 -0
  148. package/src/engine-components/SpringJoint.ts +0 -45
  149. package/src/engine-components/ui/CanvasScaler.ts +0 -21
@@ -463,14 +463,10 @@ export class Renderer extends Behaviour implements IRenderer {
463
463
  if (!suppressProgressiveLoading && material._didRequestTextureLOD === undefined && this.allowProgressiveLoading) {
464
464
  material._didRequestTextureLOD = 0;
465
465
  if (debugProgressiveLoading) {
466
- console.log("Load material LOD (with delay)", material.name);
467
- setTimeout(() => {
468
- NEEDLE_progressive.assignTextureLOD(this.context, this.sourceId, material);
469
- }, 2000);
470
- }
471
- else {
472
- NEEDLE_progressive.assignTextureLOD(this.context, this.sourceId, material);
466
+ console.log("Load material LOD", material.name);
473
467
  }
468
+ NEEDLE_progressive.assignTextureLOD(this.context, this.sourceId, material);
469
+
474
470
  }
475
471
 
476
472
  if (material.envMapIntensity !== undefined) {
@@ -549,10 +545,10 @@ export class Renderer extends Behaviour implements IRenderer {
549
545
  // update the reflection probe right before rendering
550
546
  // if we do it immediately the reflection probe might not be enabled yet
551
547
  // (since this method is called from onEnable)
552
- this.startCoroutine(this._updateReflectionProbe(), FrameEvent.OnBeforeRender);
548
+ this.startCoroutine(this._updateReflectionProbe(), FrameEvent.LateUpdate);
553
549
  }
554
550
  }
555
- private *_updateReflectionProbe(){
551
+ private *_updateReflectionProbe() {
556
552
  const obj = this.probeAnchor || this.gameObject;
557
553
  const isAnchor = this.probeAnchor ? true : false;
558
554
  this._reflectionProbe = ReflectionProbe.get(obj, this.context, isAnchor);
@@ -93,7 +93,14 @@ export class VolumeProfile {
93
93
  // three.js range goes from 0..inf
94
94
  if (debug)
95
95
  console.log(colorAdjustments.postExposure);
96
- const exposure = Math.pow(2, colorAdjustments.postExposure?.value ?? 0);
96
+ let exposure = 1;
97
+ // convert to linear
98
+ if (colorAdjustments.postExposure)
99
+ exposure = Math.pow(2, colorAdjustments.postExposure.value);
100
+ // ACES applies a factor of roughly 1.666 ( /= .6 )
101
+ if (context.renderer.toneMapping === ACESFilmicToneMapping) {
102
+ // exposure /= Math.PI / 2;
103
+ }
97
104
  const useExposure = colorAdjustments.postExposure?.overrideState && !remove;
98
105
  context.renderer.toneMappingExposure = useExposure ? exposure : 1;
99
106
  if (!context.renderer.toneMapping)
@@ -86,7 +86,7 @@ export class WebXR extends Behaviour {
86
86
  return listener;
87
87
  }
88
88
 
89
- public static createVRButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement {
89
+ public static createVRButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement | HTMLAnchorElement {
90
90
  if (!WebXR.XRSupported) {
91
91
  console.warn("WebXR is not supported on this device");
92
92
  }
@@ -102,7 +102,7 @@ export class WebXR extends Behaviour {
102
102
  return vrButton;
103
103
  }
104
104
 
105
- public static createARButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement {
105
+ public static createARButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement | HTMLAnchorElement {
106
106
  webXR.__internalAwake();
107
107
  const domOverlayRoot = webXR.webAR?.getAROverlayContainer();
108
108
  const features: any = {};
@@ -3,164 +3,164 @@ export class __Ignore {}
3
3
  export { AlignmentConstraint } from "../AlignmentConstraint";
4
4
  export { Animation } from "../Animation";
5
5
  export { AnimationCurve } from "../AnimationCurve";
6
+ export { AnimationExtension } from "../export/usdz/extensions/Animation";
7
+ export { AnimationTrackHandler } from "../timeline/TimelineTracks";
6
8
  export { Animator } from "../Animator";
7
9
  export { AnimatorController } from "../AnimatorController";
10
+ export { AttachedObject } from "../WebXRController";
8
11
  export { AudioListener } from "../AudioListener";
9
12
  export { AudioSource } from "../AudioSource";
10
- export { AvatarModel } from "../AvatarLoader";
13
+ export { AudioTrackHandler } from "../timeline/TimelineTracks";
14
+ export { Avatar_Brain_LookAt } from "../avatar/Avatar_Brain_LookAt";
15
+ export { Avatar_MouthShapes } from "../avatar/Avatar_MouthShapes";
16
+ export { Avatar_MustacheShake } from "../avatar/Avatar_MustacheShake";
17
+ export { Avatar_POI } from "../avatar/Avatar_Brain_LookAt";
18
+ export { AvatarBlink_Simple } from "../avatar/AvatarBlink_Simple";
19
+ export { AvatarEyeLook_Rotation } from "../avatar/AvatarEyeLook_Rotation";
11
20
  export { AvatarLoader } from "../AvatarLoader";
21
+ export { AvatarMarker } from "../WebXRAvatar";
22
+ export { AvatarModel } from "../AvatarLoader";
12
23
  export { AxesHelper } from "../AxesHelper";
24
+ export { BaseUIComponent } from "../ui/BaseUIComponent";
13
25
  export { BasicIKConstraint } from "../BasicIKConstraint";
26
+ export { BoxCollider } from "../Collider";
27
+ export { BoxGizmo } from "../Gizmos";
14
28
  export { BoxHelperComponent } from "../BoxHelperComponent";
29
+ export { Button } from "../ui/Button";
30
+ export { CallInfo } from "../EventList";
15
31
  export { Camera } from "../Camera";
32
+ export { Canvas } from "../ui/Canvas";
33
+ export { CanvasGroup } from "../ui/CanvasGroup";
34
+ export { CapsuleCollider } from "../Collider";
16
35
  export { CharacterController } from "../CharacterController";
17
36
  export { CharacterControllerInput } from "../CharacterController";
18
37
  export { Collider } from "../Collider";
19
- export { SphereCollider } from "../Collider";
20
- export { BoxCollider } from "../Collider";
21
- export { MeshCollider } from "../Collider";
22
- export { CapsuleCollider } from "../Collider";
23
- export { DeleteBox } from "../DeleteBox";
38
+ export { ColorAdjustments } from "../Volume";
39
+ export { ColorBySpeedModule } from "../ParticleSystemModules";
40
+ export { ColorOverLifetimeModule } from "../ParticleSystemModules";
41
+ export { ControlTrackHandler } from "../timeline/TimelineTracks";
24
42
  export { Deletable } from "../DeleteBox";
43
+ export { DeleteBox } from "../DeleteBox";
25
44
  export { DeviceFlag } from "../DeviceFlag";
26
45
  export { DragControls } from "../DragControls";
27
46
  export { DropListener } from "../DropListener";
28
47
  export { Duplicatable } from "../Duplicatable";
29
- export { CallInfo } from "../EventList";
30
- export { EventListEvent } from "../EventList";
48
+ export { EmissionModule } from "../ParticleSystemModules";
31
49
  export { EventList } from "../EventList";
50
+ export { EventListEvent } from "../EventList";
51
+ export { EventSystem } from "../ui/EventSystem";
32
52
  export { EventTrigger } from "../EventTrigger";
53
+ export { FieldWithDefault } from "../Renderer";
54
+ export { FixedJoint } from "../Joints";
33
55
  export { FlyControls } from "../FlyControls";
34
- export { BoxGizmo } from "../Gizmos";
56
+ export { GltfExport } from "../export/gltf/GltfExport";
57
+ export { GltfExportBox } from "../export/gltf/GltfExport";
58
+ export { Gradient } from "../ParticleSystemModules";
59
+ export { Graphic } from "../ui/Graphic";
60
+ export { GraphicRaycaster } from "../ui/Raycaster";
35
61
  export { GridHelper } from "../GridHelper";
62
+ export { GridLayoutGroup } from "../ui/Layout";
36
63
  export { GroundProjectedEnv } from "../GroundProjection";
37
- export { Interactable } from "../Interactable";
38
- export { UsageMarker } from "../Interactable";
39
- export { FixedJoint } from "../Joints";
40
64
  export { HingeJoint } from "../Joints";
65
+ export { HorizontalLayoutGroup } from "../ui/Layout";
66
+ export { Image } from "../ui/Image";
67
+ export { InheritVelocityModule } from "../ParticleSystemModules";
68
+ export { InputField } from "../ui/InputField";
69
+ export { Interactable } from "../Interactable";
70
+ export { Keyboard } from "../ui/Keyboard";
71
+ export { LayoutGroup } from "../ui/Layout";
41
72
  export { Light } from "../Light";
42
- export { LODModel } from "../LODGroup";
73
+ export { LimitVelocityOverLifetimeModule } from "../ParticleSystemModules";
43
74
  export { LODGroup } from "../LODGroup";
75
+ export { LODModel } from "../LODGroup";
76
+ export { LogStats } from "../debug/LogStats";
44
77
  export { LookAtConstraint } from "../LookAtConstraint";
78
+ export { MainModule } from "../ParticleSystemModules";
79
+ export { MaskableGraphic } from "../ui/Graphic";
80
+ export { MeshCollider } from "../Collider";
81
+ export { MeshRenderer } from "../Renderer";
82
+ export { MinMaxCurve } from "../ParticleSystemModules";
83
+ export { MinMaxGradient } from "../ParticleSystemModules";
45
84
  export { NestedGltf } from "../NestedGltf";
46
85
  export { Networking } from "../Networking";
86
+ export { NoiseModule } from "../ParticleSystemModules";
87
+ export { ObjectRaycaster } from "../ui/Raycaster";
47
88
  export { OffsetConstraint } from "../OffsetConstraint";
48
89
  export { OrbitControls } from "../OrbitControls";
49
- export { SubEmitterSystem } from "../ParticleSystem";
50
- export { ParticleSystemRenderer } from "../ParticleSystem";
51
- export { ParticleSystem } from "../ParticleSystem";
52
- export { Gradient } from "../ParticleSystemModules";
53
- export { MinMaxCurve } from "../ParticleSystemModules";
54
- export { MinMaxGradient } from "../ParticleSystemModules";
55
- export { MainModule } from "../ParticleSystemModules";
56
90
  export { ParticleBurst } from "../ParticleSystemModules";
57
- export { EmissionModule } from "../ParticleSystemModules";
58
- export { ColorOverLifetimeModule } from "../ParticleSystemModules";
59
- export { SizeOverLifetimeModule } from "../ParticleSystemModules";
60
- export { ShapeModule } from "../ParticleSystemModules";
61
- export { NoiseModule } from "../ParticleSystemModules";
62
- export { TrailModule } from "../ParticleSystemModules";
63
- export { VelocityOverLifetimeModule } from "../ParticleSystemModules";
64
- export { TextureSheetAnimationModule } from "../ParticleSystemModules";
65
- export { RotationOverLifetimeModule } from "../ParticleSystemModules";
66
- export { RotationBySpeedModule } from "../ParticleSystemModules";
67
- export { LimitVelocityOverLifetimeModule } from "../ParticleSystemModules";
68
- export { InheritVelocityModule } from "../ParticleSystemModules";
69
- export { SizeBySpeedModule } from "../ParticleSystemModules";
70
- export { ColorBySpeedModule } from "../ParticleSystemModules";
71
91
  export { ParticleSubEmitter } from "../ParticleSystemSubEmitter";
92
+ export { ParticleSystem } from "../ParticleSystem";
93
+ export { ParticleSystemRenderer } from "../ParticleSystem";
94
+ export { PlayableDirector } from "../timeline/PlayableDirector";
72
95
  export { PlayerColor } from "../PlayerColor";
96
+ export { PointerEventData } from "../ui/PointerEvents";
97
+ export { RawImage } from "../ui/Image";
98
+ export { Raycaster } from "../ui/Raycaster";
99
+ export { Rect } from "../ui/RectTransform";
100
+ export { RectTransform } from "../ui/RectTransform";
73
101
  export { ReflectionProbe } from "../ReflectionProbe";
74
- export { FieldWithDefault } from "../Renderer";
102
+ export { RegisteredAnimationInfo } from "../export/usdz/extensions/Animation";
103
+ export { RemoteSkybox } from "../Skybox";
75
104
  export { Renderer } from "../Renderer";
76
- export { MeshRenderer } from "../Renderer";
77
- export { SkinnedMeshRenderer } from "../Renderer";
78
105
  export { RendererLightmap } from "../RendererLightmap";
106
+ export { RGBAColor } from "../js-extensions/RGBAColor";
79
107
  export { Rigidbody } from "../RigidBody";
108
+ export { RotationBySpeedModule } from "../ParticleSystemModules";
109
+ export { RotationOverLifetimeModule } from "../ParticleSystemModules";
80
110
  export { ScreenCapture } from "../ScreenCapture";
81
111
  export { ShadowCatcher } from "../ShadowCatcher";
82
- export { RemoteSkybox } from "../Skybox";
112
+ export { ShapeModule } from "../ParticleSystemModules";
113
+ export { SignalAsset } from "../timeline/SignalAsset";
114
+ export { SignalReceiver } from "../timeline/SignalAsset";
115
+ export { SignalReceiverEvent } from "../timeline/SignalAsset";
116
+ export { SignalTrackHandler } from "../timeline/TimelineTracks";
117
+ export { Size } from "../ui/RectTransform";
118
+ export { SizeBySpeedModule } from "../ParticleSystemModules";
119
+ export { SizeOverLifetimeModule } from "../ParticleSystemModules";
120
+ export { SkinnedMeshRenderer } from "../Renderer";
83
121
  export { SmoothFollow } from "../SmoothFollow";
84
- export { SpatialTriggerReceiver } from "../SpatialTrigger";
122
+ export { SpatialHtml } from "../ui/SpatialHtml";
85
123
  export { SpatialTrigger } from "../SpatialTrigger";
124
+ export { SpatialTriggerReceiver } from "../SpatialTrigger";
86
125
  export { SpectatorCamera } from "../SpectatorCamera";
126
+ export { SphereCollider } from "../Collider";
87
127
  export { Sprite } from "../SpriteRenderer";
88
- export { SpriteSheet } from "../SpriteRenderer";
89
128
  export { SpriteRenderer } from "../SpriteRenderer";
129
+ export { SpriteSheet } from "../SpriteRenderer";
130
+ export { SubEmitterSystem } from "../ParticleSystem";
90
131
  export { SyncedCamera } from "../SyncedCamera";
91
132
  export { SyncedRoom } from "../SyncedRoom";
92
133
  export { SyncedTransform } from "../SyncedTransform";
134
+ export { TeleportTarget } from "../WebXRController";
93
135
  export { TestRunner } from "../TestRunner";
94
136
  export { TestSimulateUserData } from "../TestRunner";
137
+ export { Text } from "../ui/Text";
138
+ export { TextureSheetAnimationModule } from "../ParticleSystemModules";
139
+ export { ToneMapping } from "../Volume";
140
+ export { TrailModule } from "../ParticleSystemModules";
141
+ export { TransformData } from "../export/usdz/extensions/Animation";
95
142
  export { TransformGizmo } from "../TransformGizmo";
143
+ export { UIRaycastUtils } from "../ui/RaycastUtils";
144
+ export { UIRootComponent } from "../ui/BaseUIComponent";
145
+ export { UsageMarker } from "../Interactable";
146
+ export { USDZExporter } from "../export/usdz/USDZExporter";
147
+ export { VelocityOverLifetimeModule } from "../ParticleSystemModules";
148
+ export { VerticalLayoutGroup } from "../ui/Layout";
96
149
  export { VideoPlayer } from "../VideoPlayer";
97
150
  export { Voip } from "../Voip";
98
- export { VolumeParameter } from "../Volume";
151
+ export { Volume } from "../Volume";
99
152
  export { VolumeComponent } from "../Volume";
100
- export { ToneMapping } from "../Volume";
101
- export { ColorAdjustments } from "../Volume";
153
+ export { VolumeParameter } from "../Volume";
102
154
  export { VolumeProfile } from "../Volume";
103
- export { Volume } from "../Volume";
155
+ export { VRUserState } from "../WebXRSync";
156
+ export { WebAR } from "../WebXR";
104
157
  export { WebARSessionRoot } from "../WebARSessionRoot";
105
158
  export { WebXR } from "../WebXR";
106
- export { WebAR } from "../WebXR";
107
- export { AvatarMarker } from "../WebXRAvatar";
108
159
  export { WebXRAvatar } from "../WebXRAvatar";
109
- export { TeleportTarget } from "../WebXRController";
110
160
  export { WebXRController } from "../WebXRController";
111
- export { AttachedObject } from "../WebXRController";
161
+ export { WebXRSync } from "../WebXRSync";
162
+ export { XRFlag } from "../XRFlag";
112
163
  export { XRGrabModel } from "../WebXRGrabRendering";
113
164
  export { XRGrabRendering } from "../WebXRGrabRendering";
114
165
  export { XRRig } from "../WebXRRig";
115
- export { VRUserState } from "../WebXRSync";
116
- export { WebXRSync } from "../WebXRSync";
117
166
  export { XRState } from "../XRFlag";
118
- export { XRFlag } from "../XRFlag";
119
- export { AvatarBlink_Simple } from "../avatar/AvatarBlink_Simple";
120
- export { AvatarEyeLook_Rotation } from "../avatar/AvatarEyeLook_Rotation";
121
- export { Avatar_POI } from "../avatar/Avatar_Brain_LookAt";
122
- export { Avatar_Brain_LookAt } from "../avatar/Avatar_Brain_LookAt";
123
- export { Avatar_MouthShapes } from "../avatar/Avatar_MouthShapes";
124
- export { Avatar_MustacheShake } from "../avatar/Avatar_MustacheShake";
125
- export { LogStats } from "../debug/LogStats";
126
- export { RGBAColor } from "../js-extensions/RGBAColor";
127
- export { PlayableDirector } from "../timeline/PlayableDirector";
128
- export { SignalAsset } from "../timeline/SignalAsset";
129
- export { SignalReceiverEvent } from "../timeline/SignalAsset";
130
- export { SignalReceiver } from "../timeline/SignalAsset";
131
- export { AnimationTrackHandler } from "../timeline/TimelineTracks";
132
- export { AudioTrackHandler } from "../timeline/TimelineTracks";
133
- export { SignalTrackHandler } from "../timeline/TimelineTracks";
134
- export { ControlTrackHandler } from "../timeline/TimelineTracks";
135
- export { BaseUIComponent } from "../ui/BaseUIComponent";
136
- export { UIRootComponent } from "../ui/BaseUIComponent";
137
- export { Button } from "../ui/Button";
138
- export { Canvas } from "../ui/Canvas";
139
- export { CanvasGroup } from "../ui/CanvasGroup";
140
- export { EventSystem } from "../ui/EventSystem";
141
- export { Graphic } from "../ui/Graphic";
142
- export { MaskableGraphic } from "../ui/Graphic";
143
- export { Image } from "../ui/Image";
144
- export { RawImage } from "../ui/Image";
145
- export { InputField } from "../ui/InputField";
146
- export { Keyboard } from "../ui/Keyboard";
147
- export { LayoutGroup } from "../ui/Layout";
148
- export { VerticalLayoutGroup } from "../ui/Layout";
149
- export { HorizontalLayoutGroup } from "../ui/Layout";
150
- export { GridLayoutGroup } from "../ui/Layout";
151
- export { PointerEventData } from "../ui/PointerEvents";
152
- export { Raycaster } from "../ui/Raycaster";
153
- export { ObjectRaycaster } from "../ui/Raycaster";
154
- export { GraphicRaycaster } from "../ui/Raycaster";
155
- export { UIRaycastUtils } from "../ui/RaycastUtils";
156
- export { Size } from "../ui/RectTransform";
157
- export { Rect } from "../ui/RectTransform";
158
- export { RectTransform } from "../ui/RectTransform";
159
- export { SpatialHtml } from "../ui/SpatialHtml";
160
- export { Text } from "../ui/Text";
161
- export { GltfExportBox } from "../export/gltf/GltfExport";
162
- export { GltfExport } from "../export/gltf/GltfExport";
163
- export { USDZExporter } from "../export/usdz/USDZExporter";
164
- export { RegisteredAnimationInfo } from "../export/usdz/extensions/Animation";
165
- export { TransformData } from "../export/usdz/extensions/Animation";
166
- export { AnimationExtension } from "../export/usdz/extensions/Animation";
@@ -12,6 +12,7 @@ import { WebXR } from "../../WebXR"
12
12
  import { serializable } from "../../../engine/engine_serialization";
13
13
  import { showBalloonWarning } from "../../../engine/debug/debug";
14
14
  import { Context } from "../../../engine/engine_setup";
15
+ import { WebARSessionRoot } from "../../WebARSessionRoot";
15
16
 
16
17
  const debug = getParam("debugusdz");
17
18
 
@@ -33,6 +34,7 @@ export class USDZExporter extends Behaviour {
33
34
 
34
35
  private link!: HTMLAnchorElement;
35
36
  private webxr?: WebXR;
37
+ private webARSessionRoot: WebARSessionRoot | undefined;
36
38
 
37
39
 
38
40
  start() {
@@ -65,6 +67,7 @@ export class USDZExporter extends Behaviour {
65
67
  const safari = isSafari();
66
68
  if (debug || (ios && safari)) {
67
69
  this.createQuicklookButton();
70
+ this.webARSessionRoot = GameObject.findObjectOfType(WebARSessionRoot) ?? undefined;
68
71
  this.lastCallback = this.quicklookCallback.bind(this);
69
72
  this.link = ensureQuicklookLinkIsCreated(this.context);
70
73
  this.link.addEventListener('message', this.lastCallback);
@@ -78,6 +81,16 @@ export class USDZExporter extends Behaviour {
78
81
  async exportAsync() {
79
82
  if (!this.objectToExport) return;
80
83
 
84
+ // make sure we apply the AR scale
85
+ if (this.webARSessionRoot) {
86
+ const scene = this.webARSessionRoot.gameObject;
87
+ const scale = 1 / this.webARSessionRoot!.arScale;
88
+ scene.matrix.makeScale(scale, scale, scale);
89
+ if (this.webARSessionRoot.invertForward) {
90
+ scene.matrix.multiply(new THREE.Matrix4().makeRotationY(Math.PI));
91
+ }
92
+ }
93
+
81
94
  const exporter = new ThreeUSDZExporter();
82
95
  const extensions: any = [...this.extensions]
83
96
 
@@ -88,7 +101,7 @@ export class USDZExporter extends Behaviour {
88
101
  if (this.autoExportAnimations)
89
102
  registerAnimatorsImplictly(this.objectToExport, animExt);
90
103
 
91
- const eventArgs = { self: this, exporter: exporter, extensions: extensions };
104
+ const eventArgs = { self: this, exporter: exporter, extensions: extensions, object: this.objectToExport };
92
105
  this.dispatchEvent(new CustomEvent("before-export", { detail: eventArgs }))
93
106
 
94
107
  let name = "needle";
@@ -100,6 +113,8 @@ export class USDZExporter extends Behaviour {
100
113
  const arraybuffer = await exporter.parse(this.objectToExport, extensions);
101
114
  const blob = new Blob([arraybuffer], { type: 'application/octet-stream' });
102
115
 
116
+ this.dispatchEvent(new CustomEvent("after-export", { detail: eventArgs }))
117
+
103
118
  // second file: USDA (without assets)
104
119
  //@ts-ignore
105
120
  // const usda = exporter.lastUsda;
@@ -154,7 +169,7 @@ export class USDZExporter extends Behaviour {
154
169
  await delay(1);
155
170
  this.webxr = GameObject.findObjectOfType(WebXR) ?? undefined;
156
171
  if (this.webxr) {
157
- if(this.webxr.VRButton) this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton);
172
+ if (this.webxr.VRButton) this.webxr.VRButton.parentElement?.removeChild(this.webxr.VRButton);
158
173
  // check if we have an AR button already and re-use that
159
174
  if (this.webxr.ARButton && this._arButton !== this.webxr.ARButton) {
160
175
  this._arButton = this.webxr.ARButton;
@@ -170,6 +185,7 @@ export class USDZExporter extends Behaviour {
170
185
  this.exportAsync();
171
186
  });
172
187
  this.webxr.ARButton.classList.add("quicklook-ar-button");
188
+ this.dispatchEvent(new CustomEvent("created-button", { detail: this.webxr.ARButton }))
173
189
  }
174
190
  // create a button if WebXR didnt create one yet
175
191
  else {
@@ -189,6 +205,7 @@ export class USDZExporter extends Behaviour {
189
205
  button.classList.add('webxr-button');
190
206
  button.classList.add("quicklook-ar-button");
191
207
  container.appendChild(button);
208
+ this.dispatchEvent(new CustomEvent("created-button", { detail: button }))
192
209
  }
193
210
  }
194
211
  else {
@@ -31,21 +31,21 @@ export enum Transition {
31
31
  Animation
32
32
  }
33
33
 
34
- declare class ButtonColors {
34
+ class ButtonColors {
35
35
  @serializable()
36
- colorMultiplier: 1;
36
+ colorMultiplier!: 1;
37
37
  @serializable(RGBAColor)
38
- disabledColor: RGBAColor;
38
+ disabledColor!: RGBAColor;
39
39
  @serializable()
40
- fadeDuration: number;
40
+ fadeDuration!: number;
41
41
  @serializable(RGBAColor)
42
- highlightedColor: RGBAColor;
42
+ highlightedColor!: RGBAColor;
43
43
  @serializable(RGBAColor)
44
- normalColor: RGBAColor;
44
+ normalColor!: RGBAColor;
45
45
  @serializable(RGBAColor)
46
- pressedColor: RGBAColor;
46
+ pressedColor!: RGBAColor;
47
47
  @serializable(RGBAColor)
48
- selectedColor: RGBAColor;
48
+ selectedColor!: RGBAColor;
49
49
  }
50
50
 
51
51
  declare type AnimationTriggers = {
@@ -1,10 +1,13 @@
1
1
  import { Behaviour, GameObject } from "../Component";
2
- import { IPointerClickHandler, IPointerEventHandler } from "./PointerEvents";
2
+ import { IPointerClickHandler, IPointerEventHandler, PointerEventData } from "./PointerEvents";
3
3
  import { FrameEvent } from "../../engine/engine_setup";
4
4
  import { serializable } from "../../engine/engine_serialization_decorator";
5
5
  import { Text } from "./Text";
6
- import { getParam } from "../../engine/engine_utils";
6
+ import { getParam, isiOS } from "../../engine/engine_utils";
7
7
  import { EventList } from "../EventList";
8
+ import { showBalloonMessage } from "../../engine/debug/debug";
9
+ import { Physics } from "../../engine/engine_physics";
10
+ import { tryGetUIComponent } from "./Utils";
8
11
 
9
12
  const debug = getParam("debuginputfield");
10
13
 
@@ -36,6 +39,7 @@ export class InputField extends Behaviour implements IPointerEventHandler {
36
39
  private static htmlField: HTMLInputElement | null = null;
37
40
 
38
41
  private inputEventFn: any;
42
+ private _iosEventFn: any;
39
43
 
40
44
  start() {
41
45
  if (debug)
@@ -45,6 +49,7 @@ export class InputField extends Behaviour implements IPointerEventHandler {
45
49
  onEnable() {
46
50
  if (!InputField.htmlField) {
47
51
  InputField.htmlField = document.createElement("input");
52
+ InputField.htmlField.style.caretColor = "transparent";
48
53
  InputField.htmlField.classList.add("ar");
49
54
  document.body.appendChild(InputField.htmlField);
50
55
  }
@@ -57,6 +62,10 @@ export class InputField extends Behaviour implements IPointerEventHandler {
57
62
  if (this.placeholder && this.textComponent?.text.length) {
58
63
  GameObject.setActive(this.placeholder.gameObject, false);
59
64
  }
65
+ if (isiOS()) {
66
+ this._iosEventFn = this.processInputOniOS.bind(this);
67
+ window.addEventListener("touchend", this._iosEventFn);
68
+ }
60
69
  }
61
70
 
62
71
  onDisable() {
@@ -64,6 +73,9 @@ export class InputField extends Behaviour implements IPointerEventHandler {
64
73
  InputField.htmlField?.removeEventListener("keyup", this.inputEventFn);
65
74
  // InputField.htmlField?.removeEventListener("change", this.inputEventFn);
66
75
  this.onDeselected();
76
+ if (this._iosEventFn) {
77
+ window.removeEventListener("touchend", this._iosEventFn);
78
+ }
67
79
  }
68
80
 
69
81
  onPointerClick(_args) {
@@ -187,6 +199,17 @@ export class InputField extends Behaviour implements IPointerEventHandler {
187
199
  }
188
200
  }
189
201
 
202
+ private processInputOniOS() {
203
+ // focus() on safari ios doesnt open the keyboard when not processed from dom event
204
+ // so we try in a touch end event if this is hit
205
+ const hits = this.context.physics.raycast();
206
+ if (!hits.length) return;
207
+ const hit = hits[0];
208
+ const obj = hit.object;
209
+ const component = tryGetUIComponent(obj);
210
+ if (component?.gameObject === this.gameObject || component?.gameObject.parent === this.gameObject)
211
+ this.selectInputField();
212
+ }
190
213
 
191
214
 
192
215
  // private static _lastDeletionTime: number = 0;
@@ -1,18 +1,19 @@
1
1
 
2
2
  import { FrontSide, DoubleSide, BackSide, TetrahedronGeometry } from "three"
3
3
  import { FrameEvent } from "../../engine/engine_setup";
4
- import { Behaviour, GameObject } from "../Component";
5
- import { $shadowDomOwner } from "./BaseUIComponent";
4
+ import { Behaviour } from "../Component";
5
+ import { $shadowDomOwner, BaseUIComponent } from "./BaseUIComponent";
6
6
 
7
- // export function makeNonRaycastable(obj: THREE.Object3D | null | undefined, recursive: boolean = false) {
8
- // if (!obj) return;
9
- // obj.layers.mask = 2;
10
- // if (recursive && obj.children) {
11
- // for (const ch of obj.children) {
12
- // if (recursive) makeNonRaycastable(ch, true);
13
- // }
14
- // }
15
- // }
7
+ export function tryGetUIComponent(obj: THREE.Object3D): BaseUIComponent | null {
8
+ const owner = obj[$shadowDomOwner];
9
+ if (owner) {
10
+ return owner;
11
+ }
12
+ if(obj.parent) {
13
+ return tryGetUIComponent(obj.parent);
14
+ }
15
+ return null;
16
+ }
16
17
 
17
18
  export function isUIObject(obj: THREE.Object3D) {
18
19
  return obj["isUI"] === true || typeof obj[$shadowDomOwner] === "object";
@@ -14,7 +14,7 @@ import { ControllerEvents, WebXRController } from "../../engine-components/WebXR
14
14
  class LineState {
15
15
  isDrawing: boolean;
16
16
  lastHit: Vector3;
17
- currentHandle: LineHandle;
17
+ currentHandle: LineHandle | null;
18
18
  maxDistance: number;
19
19
  prevDistance: number;
20
20
  lastParent: THREE.Object3D | null;
@@ -31,7 +31,7 @@ class LineState {
31
31
 
32
32
  export class LinesDrawer extends Behaviour {
33
33
 
34
- lines: LinesManager;
34
+ lines!: LinesManager;
35
35
  colliders?: THREE.Object3D[];
36
36
  alignToSurface: boolean = true;
37
37
  addToPaintedObject: boolean = true;
@@ -40,7 +40,7 @@ export class LinesDrawer extends Behaviour {
40
40
 
41
41
  start() {
42
42
  if (!this.lines) {
43
- this.lines = GameObject.getComponent(this.gameObject, LinesManager);
43
+ this.lines = GameObject.getComponent(this.gameObject, LinesManager)!;
44
44
  if (!this.lines)
45
45
  this.lines = GameObject.addNewComponent(this.gameObject, LinesManager);
46
46
  }
@@ -72,9 +72,11 @@ export class LinesDrawer extends Behaviour {
72
72
  if (this.orbit && this._states["mouse"]) {
73
73
  if (this.orbit) this.orbit.enabled = !this._states["mouse"].isDrawing;
74
74
  }
75
+ if (!this.context.mainCamera) return;
75
76
 
76
77
  const multi = this.context.input.getPointerPressedCount() > 1;
77
78
  const sp = this.context.input.getPointerPositionRC(0);
79
+ if (!sp) return;
78
80
  LinesDrawer._raycaster.setFromCamera(sp, this.context.mainCamera);
79
81
  const ray = LinesDrawer._raycaster.ray;
80
82
  this.updateLine("mouse", ray,
@@ -110,14 +112,15 @@ export class LinesDrawer extends Behaviour {
110
112
  state.maxDistance = hit.distance;
111
113
  }
112
114
  pt = hit.point;
113
- pt.add(hit.face.normal.multiplyScalar(0.01));
115
+ if (hit.face)
116
+ pt.add(hit.face.normal.multiplyScalar(0.01));
114
117
  state.prevDistance = hit.distance;
115
118
  }
116
119
  else if (state.maxDistance > 0) {
117
120
  let dist = state.maxDistance;
118
121
  // if we start drawing in thin air:
119
122
  if (!state.currentHandle && state.lastHit) {
120
- const wp = getWorldPosition(this.context.mainCamera);
123
+ const wp = getWorldPosition(this.context.mainCamera!);
121
124
  dist = state.lastHit.distanceTo(wp);
122
125
  }
123
126
  pt = ray.origin.add(ray.direction.multiplyScalar(state.maxDistance));
@@ -165,8 +168,8 @@ export class LinesDrawer extends Behaviour {
165
168
  this._raycastOptions.ray = ray;
166
169
  const hits = this.context.physics.raycast(this._raycastOptions);
167
170
  if (hits.length > 0) {
168
- for(const hit of hits) {
169
- if(!GameObject.isActiveInHierarchy(hit.object)) {
171
+ for (const hit of hits) {
172
+ if (!GameObject.isActiveInHierarchy(hit.object)) {
170
173
  continue;
171
174
  }
172
175
  return hit;