@needle-tools/engine 3.2.4-alpha.2 → 3.2.5-alpha.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 (125) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/needle-engine.js +19397 -19210
  3. package/dist/needle-engine.min.js +287 -287
  4. package/dist/needle-engine.umd.cjs +281 -281
  5. package/lib/engine/api.d.ts +2 -0
  6. package/lib/engine/api.js +2 -0
  7. package/lib/engine/api.js.map +1 -1
  8. package/lib/engine/codegen/register_types.js +23 -17
  9. package/lib/engine/codegen/register_types.js.map +1 -1
  10. package/lib/engine/engine_element_loading.js +14 -3
  11. package/lib/engine/engine_element_loading.js.map +1 -1
  12. package/lib/engine/engine_networking_auto.js +1 -1
  13. package/lib/engine/engine_networking_auto.js.map +1 -1
  14. package/lib/engine/engine_rendererdata.d.ts +3 -3
  15. package/lib/engine/engine_rendererdata.js +8 -6
  16. package/lib/engine/engine_rendererdata.js.map +1 -1
  17. package/lib/engine-components/DragControls.js +1 -1
  18. package/lib/engine-components/DragControls.js.map +1 -1
  19. package/lib/engine-components/Duplicatable.js +1 -1
  20. package/lib/engine-components/Duplicatable.js.map +1 -1
  21. package/lib/engine-components/Light.js +2 -2
  22. package/lib/engine-components/Light.js.map +1 -1
  23. package/lib/engine-components/PlayerColor.js +1 -1
  24. package/lib/engine-components/PlayerColor.js.map +1 -1
  25. package/lib/engine-components/ShadowCatcher.d.ts +3 -1
  26. package/lib/engine-components/ShadowCatcher.js +14 -0
  27. package/lib/engine-components/ShadowCatcher.js.map +1 -1
  28. package/lib/engine-components/SpectatorCamera.js +2 -2
  29. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  30. package/lib/engine-components/SyncedCamera.js +2 -2
  31. package/lib/engine-components/SyncedCamera.js.map +1 -1
  32. package/lib/engine-components/api.d.ts +1 -0
  33. package/lib/engine-components/api.js +1 -0
  34. package/lib/engine-components/api.js.map +1 -1
  35. package/lib/engine-components/avatar/Avatar_Brain_LookAt.d.ts +1 -1
  36. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js +1 -1
  37. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +1 -1
  38. package/lib/engine-components/avatar/Avatar_MouthShapes.js +1 -1
  39. package/lib/engine-components/avatar/Avatar_MouthShapes.js.map +1 -1
  40. package/lib/engine-components/avatar/Avatar_MustacheShake.js +1 -1
  41. package/lib/engine-components/avatar/Avatar_MustacheShake.js.map +1 -1
  42. package/lib/engine-components/codegen/components.d.ts +20 -17
  43. package/lib/engine-components/codegen/components.js +20 -17
  44. package/lib/engine-components/codegen/components.js.map +1 -1
  45. package/lib/engine-components/export/usdz/USDZExporter.js +2 -2
  46. package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -1
  47. package/lib/engine-components/ui/EventSystem.js +2 -2
  48. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  49. package/lib/engine-components/ui/InputField.js +2 -1
  50. package/lib/engine-components/ui/InputField.js.map +1 -1
  51. package/lib/engine-components/{WebARCameraBackground.d.ts → webxr/WebARCameraBackground.d.ts} +2 -2
  52. package/lib/engine-components/{WebARCameraBackground.js → webxr/WebARCameraBackground.js} +4 -4
  53. package/lib/engine-components/webxr/WebARCameraBackground.js.map +1 -0
  54. package/lib/engine-components/{WebARSessionRoot.d.ts → webxr/WebARSessionRoot.d.ts} +1 -1
  55. package/lib/engine-components/{WebARSessionRoot.js → webxr/WebARSessionRoot.js} +3 -3
  56. package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -0
  57. package/lib/engine-components/{WebXR.d.ts → webxr/WebXR.d.ts} +2 -2
  58. package/lib/engine-components/{WebXR.js → webxr/WebXR.js} +12 -12
  59. package/lib/engine-components/webxr/WebXR.js.map +1 -0
  60. package/lib/engine-components/{WebXRAvatar.d.ts → webxr/WebXRAvatar.d.ts} +3 -3
  61. package/lib/engine-components/{WebXRAvatar.js → webxr/WebXRAvatar.js} +7 -7
  62. package/lib/engine-components/webxr/WebXRAvatar.js.map +1 -0
  63. package/lib/engine-components/{WebXRController.d.ts → webxr/WebXRController.d.ts} +2 -2
  64. package/lib/engine-components/{WebXRController.js → webxr/WebXRController.js} +12 -12
  65. package/lib/engine-components/webxr/WebXRController.js.map +1 -0
  66. package/lib/engine-components/{WebXRGrabRendering.d.ts → webxr/WebXRGrabRendering.d.ts} +3 -3
  67. package/lib/engine-components/{WebXRGrabRendering.js → webxr/WebXRGrabRendering.js} +4 -4
  68. package/lib/engine-components/webxr/WebXRGrabRendering.js.map +1 -0
  69. package/lib/engine-components/{WebXRImageTracking.d.ts → webxr/WebXRImageTracking.d.ts} +1 -1
  70. package/lib/engine-components/{WebXRImageTracking.js → webxr/WebXRImageTracking.js} +5 -4
  71. package/lib/engine-components/webxr/WebXRImageTracking.js.map +1 -0
  72. package/lib/engine-components/webxr/WebXRPlaneTracking.d.ts +29 -0
  73. package/lib/engine-components/webxr/WebXRPlaneTracking.js +210 -0
  74. package/lib/engine-components/webxr/WebXRPlaneTracking.js.map +1 -0
  75. package/lib/engine-components/{WebXRRig.d.ts → webxr/WebXRRig.d.ts} +1 -1
  76. package/lib/engine-components/{WebXRRig.js → webxr/WebXRRig.js} +3 -3
  77. package/lib/engine-components/webxr/WebXRRig.js.map +1 -0
  78. package/lib/engine-components/{WebXRSync.d.ts → webxr/WebXRSync.d.ts} +3 -3
  79. package/lib/engine-components/{WebXRSync.js → webxr/WebXRSync.js} +8 -8
  80. package/lib/engine-components/webxr/WebXRSync.js.map +1 -0
  81. package/lib/engine-components/webxr/index.d.ts +3 -0
  82. package/lib/engine-components/webxr/index.js +4 -0
  83. package/lib/engine-components/webxr/index.js.map +1 -0
  84. package/lib/tsconfig.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/engine/api.ts +2 -0
  87. package/src/engine/codegen/register_types.js +25 -19
  88. package/src/engine/engine_element_loading.ts +25 -10
  89. package/src/engine/engine_networking_auto.ts +1 -1
  90. package/src/engine/engine_rendererdata.ts +16 -14
  91. package/src/engine-components/DragControls.ts +1 -1
  92. package/src/engine-components/Duplicatable.ts +1 -1
  93. package/src/engine-components/Light.ts +2 -2
  94. package/src/engine-components/PlayerColor.ts +1 -1
  95. package/src/engine-components/ShadowCatcher.ts +15 -0
  96. package/src/engine-components/SpectatorCamera.ts +2 -2
  97. package/src/engine-components/SyncedCamera.ts +2 -2
  98. package/src/engine-components/api.ts +1 -0
  99. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +1 -1
  100. package/src/engine-components/avatar/Avatar_MouthShapes.ts +1 -1
  101. package/src/engine-components/avatar/Avatar_MustacheShake.ts +1 -1
  102. package/src/engine-components/codegen/components.ts +20 -17
  103. package/src/engine-components/export/usdz/USDZExporter.ts +2 -2
  104. package/src/engine-components/ui/EventSystem.ts +2 -2
  105. package/src/engine-components/ui/InputField.ts +2 -1
  106. package/src/engine-components/{WebARCameraBackground.ts → webxr/WebARCameraBackground.ts} +4 -4
  107. package/src/engine-components/{WebARSessionRoot.ts → webxr/WebARSessionRoot.ts} +3 -3
  108. package/src/engine-components/{WebXR.ts → webxr/WebXR.ts} +15 -15
  109. package/src/engine-components/{WebXRAvatar.ts → webxr/WebXRAvatar.ts} +9 -9
  110. package/src/engine-components/{WebXRController.ts → webxr/WebXRController.ts} +13 -13
  111. package/src/engine-components/{WebXRGrabRendering.ts → webxr/WebXRGrabRendering.ts} +5 -5
  112. package/src/engine-components/{WebXRImageTracking.ts → webxr/WebXRImageTracking.ts} +5 -4
  113. package/src/engine-components/webxr/WebXRPlaneTracking.ts +254 -0
  114. package/src/engine-components/{WebXRRig.ts → webxr/WebXRRig.ts} +4 -4
  115. package/src/engine-components/{WebXRSync.ts → webxr/WebXRSync.ts} +8 -8
  116. package/src/engine-components/webxr/index.ts +3 -0
  117. package/lib/engine-components/WebARCameraBackground.js.map +0 -1
  118. package/lib/engine-components/WebARSessionRoot.js.map +0 -1
  119. package/lib/engine-components/WebXR.js.map +0 -1
  120. package/lib/engine-components/WebXRAvatar.js.map +0 -1
  121. package/lib/engine-components/WebXRController.js.map +0 -1
  122. package/lib/engine-components/WebXRGrabRendering.js.map +0 -1
  123. package/lib/engine-components/WebXRImageTracking.js.map +0 -1
  124. package/lib/engine-components/WebXRRig.js.map +0 -1
  125. package/lib/engine-components/WebXRSync.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "3.2.4-alpha.2",
3
+ "version": "3.2.5-alpha.1",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in",
5
5
  "main": "dist/needle-engine.umd.cjs",
6
6
  "type": "module",
package/src/engine/api.ts CHANGED
@@ -18,6 +18,7 @@ export * from "./engine_gltf";
18
18
  export * from "./engine_hot_reload";
19
19
  export * from "./engine_gameobject";
20
20
  export * from "./engine_networking";
21
+ export * from "./engine_networking_types";
21
22
  export { syncField } from "./engine_networking_auto";
22
23
  export * from "./engine_networking_files";
23
24
  export * from "./engine_networking_instantiate";
@@ -32,6 +33,7 @@ export * from "./js-extensions";
32
33
  export * from "./engine_scenetools";
33
34
  export * from "./engine_serialization";
34
35
  export * from "./engine_texture";
36
+ export * from "./engine_three_utils";
35
37
  export * from "./engine_time";
36
38
  export * from "./engine_types";
37
39
  export * from "./engine_utils_screenshot";
@@ -1,5 +1,5 @@
1
1
  import { TypeStore } from "./../engine_typestore"
2
-
2
+
3
3
  // Import types
4
4
  import { __Ignore } from "../../engine-components/codegen/components";
5
5
  import { AlignmentConstraint } from "../../engine-components/AlignmentConstraint";
@@ -10,7 +10,7 @@ import { AnimationTrackHandler } from "../../engine-components/timeline/Timeline
10
10
  import { Animator } from "../../engine-components/Animator";
11
11
  import { AnimatorController } from "../../engine-components/AnimatorController";
12
12
  import { Antialiasing } from "../../engine-components/postprocessing/Effects/Antialiasing";
13
- import { AttachedObject } from "../../engine-components/WebXRController";
13
+ import { AttachedObject } from "../../engine-components/webxr/WebXRController";
14
14
  import { AudioListener } from "../../engine-components/AudioListener";
15
15
  import { AudioSource } from "../../engine-components/AudioSource";
16
16
  import { AudioTrackHandler } from "../../engine-components/timeline/TimelineTracks";
@@ -21,11 +21,12 @@ import { Avatar_POI } from "../../engine-components/avatar/Avatar_Brain_LookAt";
21
21
  import { AvatarBlink_Simple } from "../../engine-components/avatar/AvatarBlink_Simple";
22
22
  import { AvatarEyeLook_Rotation } from "../../engine-components/avatar/AvatarEyeLook_Rotation";
23
23
  import { AvatarLoader } from "../../engine-components/AvatarLoader";
24
- import { AvatarMarker } from "../../engine-components/WebXRAvatar";
24
+ import { AvatarMarker } from "../../engine-components/webxr/WebXRAvatar";
25
25
  import { AvatarModel } from "../../engine-components/AvatarLoader";
26
26
  import { AxesHelper } from "../../engine-components/AxesHelper";
27
27
  import { BaseUIComponent } from "../../engine-components/ui/BaseUIComponent";
28
28
  import { BasicIKConstraint } from "../../engine-components/BasicIKConstraint";
29
+ import { Behaviour } from "../../engine-components/Component";
29
30
  import { Bloom } from "../../engine-components/postprocessing/Effects/Bloom";
30
31
  import { BoxCollider } from "../../engine-components/Collider";
31
32
  import { BoxGizmo } from "../../engine-components/Gizmos";
@@ -43,6 +44,7 @@ import { Collider } from "../../engine-components/Collider";
43
44
  import { ColorAdjustments } from "../../engine-components/postprocessing/Effects/ColorAdjustments";
44
45
  import { ColorBySpeedModule } from "../../engine-components/ParticleSystemModules";
45
46
  import { ColorOverLifetimeModule } from "../../engine-components/ParticleSystemModules";
47
+ import { Component } from "../../engine-components/Component";
46
48
  import { ControlTrackHandler } from "../../engine-components/timeline/TimelineTracks";
47
49
  import { Deletable } from "../../engine-components/DeleteBox";
48
50
  import { DeleteBox } from "../../engine-components/DeleteBox";
@@ -146,7 +148,7 @@ import { SubEmitterSystem } from "../../engine-components/ParticleSystem";
146
148
  import { SyncedCamera } from "../../engine-components/SyncedCamera";
147
149
  import { SyncedRoom } from "../../engine-components/SyncedRoom";
148
150
  import { SyncedTransform } from "../../engine-components/SyncedTransform";
149
- import { TeleportTarget } from "../../engine-components/WebXRController";
151
+ import { TeleportTarget } from "../../engine-components/webxr/WebXRController";
150
152
  import { TestRunner } from "../../engine-components/TestRunner";
151
153
  import { TestSimulateUserData } from "../../engine-components/TestRunner";
152
154
  import { Text } from "../../engine-components/ui/Text";
@@ -168,23 +170,24 @@ import { Voip } from "../../engine-components/Voip";
168
170
  import { Volume } from "../../engine-components/postprocessing/Volume";
169
171
  import { VolumeParameter } from "../../engine-components/postprocessing/VolumeParameter";
170
172
  import { VolumeProfile } from "../../engine-components/postprocessing/VolumeProfile";
171
- import { VRUserState } from "../../engine-components/WebXRSync";
172
- import { WebAR } from "../../engine-components/WebXR";
173
- import { WebARCameraBackground } from "../../engine-components/WebARCameraBackground";
174
- import { WebARSessionRoot } from "../../engine-components/WebARSessionRoot";
175
- import { WebXR } from "../../engine-components/WebXR";
176
- import { WebXRAvatar } from "../../engine-components/WebXRAvatar";
177
- import { WebXRController } from "../../engine-components/WebXRController";
178
- import { WebXRImageTracking } from "../../engine-components/WebXRImageTracking";
179
- import { WebXRImageTrackingModel } from "../../engine-components/WebXRImageTracking";
180
- import { WebXRSync } from "../../engine-components/WebXRSync";
181
- import { WebXRTrackedImage } from "../../engine-components/WebXRImageTracking";
173
+ import { VRUserState } from "../../engine-components/webxr/WebXRSync";
174
+ import { WebAR } from "../../engine-components/webxr/WebXR";
175
+ import { WebARCameraBackground } from "../../engine-components/webxr/WebARCameraBackground";
176
+ import { WebARSessionRoot } from "../../engine-components/webxr/WebARSessionRoot";
177
+ import { WebXR } from "../../engine-components/webxr/WebXR";
178
+ import { WebXRAvatar } from "../../engine-components/webxr/WebXRAvatar";
179
+ import { WebXRController } from "../../engine-components/webxr/WebXRController";
180
+ import { WebXRImageTracking } from "../../engine-components/webxr/WebXRImageTracking";
181
+ import { WebXRImageTrackingModel } from "../../engine-components/webxr/WebXRImageTracking";
182
+ import { WebXRPlaneTracking } from "../../engine-components/webxr/WebXRPlaneTracking";
183
+ import { WebXRSync } from "../../engine-components/webxr/WebXRSync";
184
+ import { WebXRTrackedImage } from "../../engine-components/webxr/WebXRImageTracking";
182
185
  import { XRFlag } from "../../engine-components/XRFlag";
183
- import { XRGrabModel } from "../../engine-components/WebXRGrabRendering";
184
- import { XRGrabRendering } from "../../engine-components/WebXRGrabRendering";
185
- import { XRRig } from "../../engine-components/WebXRRig";
186
+ import { XRGrabModel } from "../../engine-components/webxr/WebXRGrabRendering";
187
+ import { XRGrabRendering } from "../../engine-components/webxr/WebXRGrabRendering";
188
+ import { XRRig } from "../../engine-components/webxr/WebXRRig";
186
189
  import { XRState } from "../../engine-components/XRFlag";
187
-
190
+
188
191
  // Register types
189
192
  TypeStore.add("__Ignore", __Ignore);
190
193
  TypeStore.add("AlignmentConstraint", AlignmentConstraint);
@@ -211,6 +214,7 @@ TypeStore.add("AvatarModel", AvatarModel);
211
214
  TypeStore.add("AxesHelper", AxesHelper);
212
215
  TypeStore.add("BaseUIComponent", BaseUIComponent);
213
216
  TypeStore.add("BasicIKConstraint", BasicIKConstraint);
217
+ TypeStore.add("Behaviour", Behaviour);
214
218
  TypeStore.add("Bloom", Bloom);
215
219
  TypeStore.add("BoxCollider", BoxCollider);
216
220
  TypeStore.add("BoxGizmo", BoxGizmo);
@@ -228,6 +232,7 @@ TypeStore.add("Collider", Collider);
228
232
  TypeStore.add("ColorAdjustments", ColorAdjustments);
229
233
  TypeStore.add("ColorBySpeedModule", ColorBySpeedModule);
230
234
  TypeStore.add("ColorOverLifetimeModule", ColorOverLifetimeModule);
235
+ TypeStore.add("Component", Component);
231
236
  TypeStore.add("ControlTrackHandler", ControlTrackHandler);
232
237
  TypeStore.add("Deletable", Deletable);
233
238
  TypeStore.add("DeleteBox", DeleteBox);
@@ -362,6 +367,7 @@ TypeStore.add("WebXRAvatar", WebXRAvatar);
362
367
  TypeStore.add("WebXRController", WebXRController);
363
368
  TypeStore.add("WebXRImageTracking", WebXRImageTracking);
364
369
  TypeStore.add("WebXRImageTrackingModel", WebXRImageTrackingModel);
370
+ TypeStore.add("WebXRPlaneTracking", WebXRPlaneTracking);
365
371
  TypeStore.add("WebXRSync", WebXRSync);
366
372
  TypeStore.add("WebXRTrackedImage", WebXRTrackedImage);
367
373
  TypeStore.add("XRFlag", XRFlag);
@@ -8,6 +8,8 @@ import { hasProLicense } from "./engine_license";
8
8
  const debug = getParam("debugloadingbar");
9
9
  const debugRendering = getParam("debugloadingbarrendering");
10
10
 
11
+ declare type LoadingStyleOption = "dark" | "light";
12
+
11
13
  export class LoadingElementOptions {
12
14
  className?: string;
13
15
  additionalClasses?: string[];
@@ -172,6 +174,10 @@ export class EngineLoadingView implements ILoadingViewHandler {
172
174
  private createLoadingElement(existing?: HTMLElement): HTMLElement {
173
175
  if (debug && !existing) console.log("Creating loading element");
174
176
  this._loadingElement = existing || document.createElement("div");
177
+
178
+ const loadingStyle: LoadingStyleOption = this._element.getAttribute("loading-style") as LoadingStyleOption;
179
+ console.log(loadingStyle);
180
+
175
181
  const hasLicense = hasProLicense();
176
182
  if (!existing) {
177
183
  this._loadingElement.style.position = "fixed";
@@ -179,7 +185,10 @@ export class EngineLoadingView implements ILoadingViewHandler {
179
185
  this._loadingElement.style.height = "100%";
180
186
  this._loadingElement.style.left = "0";
181
187
  this._loadingElement.style.top = "0";
182
- this._loadingElement.style.backgroundColor = "#000000";
188
+ if (loadingStyle === "light")
189
+ this._loadingElement.style.backgroundColor = "#ddd";
190
+ else
191
+ this._loadingElement.style.backgroundColor = "#000";
183
192
  this._loadingElement.style.display = "flex";
184
193
  this._loadingElement.style.alignItems = "center";
185
194
  this._loadingElement.style.justifyContent = "center";
@@ -187,6 +196,10 @@ export class EngineLoadingView implements ILoadingViewHandler {
187
196
  this._loadingElement.style.flexDirection = "column";
188
197
  this._loadingElement.style.pointerEvents = "none";
189
198
  this._loadingElement.style.color = "white";
199
+ if (loadingStyle === "light")
200
+ this._loadingElement.style.color = "rgba(0,0,0,.8)";
201
+ else
202
+ this._loadingElement.style.color = "rgba(255,255,255,.5)";
190
203
  if (hasLicense && this._element) {
191
204
  const loadingBackgroundColor = this._element.getAttribute("loading-background-color");
192
205
  if (loadingBackgroundColor) {
@@ -213,7 +226,10 @@ export class EngineLoadingView implements ILoadingViewHandler {
213
226
  loadingBarContainer.style.display = "flex";
214
227
  loadingBarContainer.style.width = maxWidth + "%";
215
228
  loadingBarContainer.style.height = "2px";
216
- loadingBarContainer.style.background = "rgba(255,255,255,.2)"
229
+ if (loadingStyle === "light")
230
+ loadingBarContainer.style.backgroundColor = "rgba(0,0,0,.2)"
231
+ else
232
+ loadingBarContainer.style.backgroundColor = "rgba(255,255,255,.2)"
217
233
  // loadingBarContainer.style.alignItems = "center";
218
234
  this._loadingElement.appendChild(loadingBarContainer);
219
235
 
@@ -244,20 +260,20 @@ export class EngineLoadingView implements ILoadingViewHandler {
244
260
  return Mathf.lerp(maxWidth * .5, 100 - maxWidth * .5, t) + "%";
245
261
  }
246
262
  this._loadingBar.style.background =
247
- `linear-gradient(90deg, #02022B ${getGradientPos(0)}, #0BA398 ${getGradientPos(.4)}, #99CC33 ${getGradientPos(.5)}, #D7DB0A ${getGradientPos(1)})`;
263
+ `linear-gradient(90deg, #02022B ${getGradientPos(0)}, #0BA398 ${getGradientPos(.4)}, #99CC33 ${getGradientPos(.5)}, #D7DB0A ${getGradientPos(1)})`;
248
264
  this._loadingBar.style.backgroundAttachment = "fixed";
249
265
  this._loadingBar.style.width = "0%";
250
266
  this._loadingBar.style.height = "100%";
251
- if(hasLicense && this._element){
267
+ if (hasLicense && this._element) {
252
268
  const primaryColor = this._element.getAttribute("primary-color");
253
269
  const secondaryColor = this._element.getAttribute("secondary-color");
254
- if(primaryColor && secondaryColor){
270
+ if (primaryColor && secondaryColor) {
255
271
  this._loadingBar.style.background = `linear-gradient(90deg, ${primaryColor} ${getGradientPos(0)}, ${secondaryColor} ${getGradientPos(1)})`;
256
272
  }
257
- else if(primaryColor){
273
+ else if (primaryColor) {
258
274
  this._loadingBar.style.background = primaryColor;
259
275
  }
260
- else if(secondaryColor){
276
+ else if (secondaryColor) {
261
277
  this._loadingBar.style.background = secondaryColor;
262
278
  }
263
279
  }
@@ -273,16 +289,15 @@ export class EngineLoadingView implements ILoadingViewHandler {
273
289
  messageContainer.style.display = "flex";
274
290
  messageContainer.style.fontSize = ".8em";
275
291
  messageContainer.style.paddingTop = ".5em";
276
- messageContainer.style.color = "rgba(255,255,255,.5)";
277
292
  messageContainer.style.fontWeight = "200";
278
293
  messageContainer.style.fontFamily = "Roboto, sans-serif";
279
294
  // messageContainer.style.border = "1px solid rgba(255,255,255,.1)";
280
295
  messageContainer.style.justifyContent = "center";
281
296
  this._loadingElement.appendChild(messageContainer);
282
297
 
283
- if(hasLicense && this._element){
298
+ if (hasLicense && this._element) {
284
299
  const loadingTextColor = this._element.getAttribute("loading-text-color");
285
- if(loadingTextColor){
300
+ if (loadingTextColor) {
286
301
  messageContainer.style.color = loadingTextColor;
287
302
  }
288
303
  }
@@ -121,8 +121,8 @@ class ComponentPropertiesSyncer {
121
121
  this._isReceiving = true;
122
122
  for (const key in val) {
123
123
  if (key === "guid") continue;
124
+ // TODO: maybe use serializable here?!
124
125
  const value = val[key];
125
- // console.log("SET", key, value, this.comp.guid, this.comp);
126
126
  this.comp[key] = value;
127
127
  }
128
128
  }
@@ -1,4 +1,4 @@
1
- import { Vector4, EquirectangularReflectionMapping, sRGBEncoding, WebGLCubeRenderTarget, Texture, LightProbe, Color } from "three";
1
+ import { Vector4, EquirectangularReflectionMapping, sRGBEncoding, WebGLCubeRenderTarget, Texture, LightProbe, Color, SphericalHarmonics3 } from "three";
2
2
  import { LightProbeGenerator } from "three/examples/jsm/lights/LightProbeGenerator.js"
3
3
  import { Context } from "./engine_setup";
4
4
  import { SceneLightSettings } from "./extensions/NEEDLE_lighting_settings";
@@ -11,7 +11,7 @@ const debug = getParam("debugenvlight");
11
11
 
12
12
  export declare type SphericalHarmonicsData = {
13
13
  array: number[],
14
- texture: THREE.WebGLCubeRenderTarget | THREE.Texture,
14
+ texture: WebGLCubeRenderTarget | Texture,
15
15
  lightProbe?: LightProbe
16
16
  }
17
17
 
@@ -136,8 +136,8 @@ export class RendererData {
136
136
  }
137
137
  }
138
138
 
139
- disableReflection(sourceId? : SourceIdentifier) {
140
- if(sourceId && sourceId !== this._currentReflectionId) return;
139
+ disableReflection(sourceId?: SourceIdentifier) {
140
+ if (sourceId && sourceId !== this._currentReflectionId) return;
141
141
  const scene = this.context.scene;
142
142
  scene.environment = null;
143
143
  }
@@ -178,13 +178,13 @@ export class LightData {
178
178
  get Array(): number[] | undefined { return this._sphericalHarmonicsArray; }
179
179
 
180
180
  private _context: Context;
181
- private _source: THREE.Texture;
182
- private _sphericalHarmonics: THREE.SphericalHarmonics3 | null = null;
181
+ private _source: Texture;
182
+ private _sphericalHarmonics: SphericalHarmonics3 | null = null;
183
183
  private _sphericalHarmonicsArray?: number[];
184
184
  private _ambientScale: number = 1;
185
185
  private _lightProbe?: LightProbe;
186
186
 
187
- constructor(context: Context, tex: THREE.Texture, ambientScale: number = 1) {
187
+ constructor(context: Context, tex: Texture, ambientScale: number = 1) {
188
188
  this._context = context;
189
189
  this._source = tex;
190
190
  this._ambientScale = ambientScale;
@@ -199,7 +199,7 @@ export class LightData {
199
199
 
200
200
  try {
201
201
  const reflection = this._source;
202
- let rt: THREE.WebGLCubeRenderTarget | null = null;
202
+ let rt: WebGLCubeRenderTarget | null = null;
203
203
  if (reflection) {
204
204
  if (debug) console.log("GENERATING LIGHT PROBE", reflection, this.Source);
205
205
  const size = Math.min(reflection.image.width, 512);
@@ -216,13 +216,15 @@ export class LightData {
216
216
  // console.log(intensityFactor, lightFactor);
217
217
  this._sphericalHarmonics = sampledProbe.sh;
218
218
  this._sphericalHarmonicsArray = this._sphericalHarmonics.toArray();
219
- const factor = ((intensityFactor) / (Math.PI * .5));
220
- for (let i = 0; i < this._sphericalHarmonicsArray.length; i++) {
221
- this._sphericalHarmonicsArray[i] *= factor;
219
+ if (this._sphericalHarmonicsArray) {
220
+ const factor = ((intensityFactor) / (Math.PI * .5));
221
+ for (let i = 0; i < this._sphericalHarmonicsArray.length; i++) {
222
+ this._sphericalHarmonicsArray[i] *= factor;
223
+ }
224
+ sampledProbe.sh.scale(lightFactor);
225
+ if (this._source)
226
+ return { array: this._sphericalHarmonicsArray, texture: this._source, lightProbe: sampledProbe };
222
227
  }
223
- sampledProbe.sh.scale(lightFactor);
224
- if (this._source)
225
- return { array: this._sphericalHarmonicsArray, texture: this._source, lightProbe: sampledProbe };
226
228
  }
227
229
  }
228
230
  catch (err) {
@@ -4,7 +4,7 @@ import { IPointerDownHandler, IPointerEnterHandler, IPointerExitHandler, IPointe
4
4
  import { Context } from "../engine/engine_setup";
5
5
  import { Interactable, UsageMarker } from "./Interactable";
6
6
  import { Rigidbody } from "./RigidBody";
7
- import { WebXR } from "./WebXR";
7
+ import { WebXR } from "./webxr/WebXR";
8
8
  import { Avatar_POI } from "./avatar/Avatar_Brain_LookAt";
9
9
  import { RaycastOptions } from "../engine/engine_physics";
10
10
  import { getWorldPosition, setWorldPosition } from "../engine/engine_three_utils";
@@ -1,5 +1,5 @@
1
1
  import { Behaviour, GameObject } from "./Component";
2
- import { WebXRController, ControllerEvents } from "./WebXRController";
2
+ import { WebXRController, ControllerEvents } from "./webxr/WebXRController";
3
3
  import { DragControls, DragEvents } from "./DragControls";
4
4
  import { Interactable } from "./Interactable";
5
5
  import { Animation } from "./Animation";
@@ -5,8 +5,8 @@ import { setWorldPositionXYZ } from "../engine/engine_three_utils";
5
5
  import { FrameEvent } from "../engine/engine_setup";
6
6
  import { serializable } from "../engine/engine_serialization_decorator";
7
7
  import { Color, DirectionalLight, OrthographicCamera } from "three";
8
- import { WebXR, WebXREvent } from "./WebXR";
9
- import { WebARSessionRoot } from "./WebARSessionRoot";
8
+ import { WebXR, WebXREvent } from "./webxr/WebXR";
9
+ import { WebARSessionRoot } from "./webxr/WebARSessionRoot";
10
10
  import { ILight } from "../engine/engine_types";
11
11
  import { Mathf } from "../engine/engine_math";
12
12
  import { isLocalNetwork } from "../engine/engine_networking_utils";
@@ -1,7 +1,7 @@
1
1
  import { RoomEvents } from "../engine/engine_networking";
2
2
  import { Behaviour, GameObject } from "./Component";
3
3
  import * as THREE from "three";
4
- import { AvatarMarker } from "./WebXRAvatar";
4
+ import { AvatarMarker } from "./webxr/WebXRAvatar";
5
5
  import { WaitForSeconds } from "../engine/engine_coroutine";
6
6
 
7
7
 
@@ -7,6 +7,7 @@ import { serializable } from "../engine/engine_serialization_decorator";
7
7
  enum ShadowMode {
8
8
  ShadowMask = 0,
9
9
  Additive = 1,
10
+ Occluder = 2,
10
11
  }
11
12
 
12
13
  export class ShadowCatcher extends Behaviour {
@@ -28,6 +29,9 @@ export class ShadowCatcher extends Behaviour {
28
29
  case ShadowMode.Additive:
29
30
  this.applyLightBlendMaterial();
30
31
  break;
32
+ case ShadowMode.Occluder:
33
+ this.applyOccluderMaterial();
34
+ break;
31
35
  }
32
36
 
33
37
  }
@@ -88,6 +92,17 @@ export class ShadowCatcher extends Behaviour {
88
92
  }
89
93
  }
90
94
 
95
+ applyOccluderMaterial() {
96
+ const renderer = GameObject.getComponent(this.gameObject, Renderer);
97
+ if (renderer) {
98
+ const material = renderer.sharedMaterial;
99
+ material.depthWrite = true;
100
+ material.stencilWrite = true;
101
+ material.colorWrite = false;
102
+ this.gameObject.renderOrder = -100;
103
+ }
104
+ }
105
+
91
106
  private applyMaterialOptions(material: Material) {
92
107
  if (material) {
93
108
  material.depthWrite = false;
@@ -2,8 +2,8 @@ import { Behaviour, Component, GameObject } from "./Component";
2
2
  import { Camera } from "./Camera";
3
3
  import * as THREE from "three";
4
4
  import { OrbitControls } from "./OrbitControls";
5
- import { WebXR, WebXREvent } from "./WebXR";
6
- import { AvatarMarker } from "./WebXRAvatar";
5
+ import { WebXR, WebXREvent } from "./webxr/WebXR";
6
+ import { AvatarMarker } from "./webxr/WebXRAvatar";
7
7
  import { XRStateFlag } from "./XRFlag";
8
8
  import { SmoothFollow } from "./SmoothFollow";
9
9
  import { Object3D } from "three";
@@ -2,7 +2,7 @@ import { NetworkConnection } from "../engine/engine_networking";
2
2
  import { Behaviour, GameObject } from "./Component";
3
3
  import { Camera } from "./Camera";
4
4
  import * as utils from "../engine/engine_three_utils"
5
- import { WebXR } from "./WebXR";
5
+ import { WebXR } from "./webxr/WebXR";
6
6
  import { Builder } from "flatbuffers";
7
7
  import { SyncedCameraModel } from "../engine-schemes/synced-camera-model";
8
8
  import { Vec3 } from "../engine-schemes/vec3";
@@ -10,7 +10,7 @@ import { registerType } from "../engine-schemes/schemes";
10
10
  import { InstancingUtil } from "../engine/engine_instancing";
11
11
  import { serializable } from "../engine/engine_serialization_decorator";
12
12
  import { Object3D } from "three";
13
- import { AvatarMarker } from "./WebXRAvatar";
13
+ import { AvatarMarker } from "./webxr/WebXRAvatar";
14
14
  import { AssetReference } from "../engine/engine_addressables";
15
15
  import { ViewDevice } from "../engine/engine_playerview";
16
16
  import { InstantiateOptions } from "../engine/engine_gameobject";
@@ -9,5 +9,6 @@ export * from "./export"
9
9
  export * from "./postprocessing"
10
10
  export * from "./timeline"
11
11
  export * from "./ui"
12
+ export * from "./webxr"
12
13
 
13
14
  export { ClearFlags } from "./Camera"
@@ -1,7 +1,7 @@
1
1
  import * as THREE from "three";
2
2
  import { TypeStore } from "../../engine/engine_typestore";
3
3
  import { Behaviour, GameObject } from "../Component";
4
- import { AvatarMarker } from "../WebXRAvatar";
4
+ import { AvatarMarker } from "../webxr/WebXRAvatar";
5
5
  import * as utils from "../../engine/engine_three_utils";
6
6
  import { OwnershipModel } from "../../engine/engine_networking";
7
7
  import { Int8BufferAttribute } from "three";
@@ -1,6 +1,6 @@
1
1
  import { Behaviour, GameObject } from "../Component";
2
2
  import { Voip } from "../Voip";
3
- import { AvatarMarker } from "../WebXRAvatar";
3
+ import { AvatarMarker } from "../webxr/WebXRAvatar";
4
4
  import * as utils from "../../engine/engine_utils";
5
5
  import { Object3D } from "three";
6
6
  import { serializable } from "../../engine/engine_serialization_decorator";
@@ -1,6 +1,6 @@
1
1
  import { Behaviour, GameObject } from "../Component";
2
2
  import { Voip } from "../Voip";
3
- import { AvatarMarker } from "../WebXRAvatar";
3
+ import { AvatarMarker } from "../webxr/WebXRAvatar";
4
4
 
5
5
  export class Avatar_MustacheShake extends Behaviour {
6
6
  private voip: Voip | null = null;
@@ -8,7 +8,7 @@ export { AnimationTrackHandler } from "../timeline/TimelineTracks";
8
8
  export { Animator } from "../Animator";
9
9
  export { AnimatorController } from "../AnimatorController";
10
10
  export { Antialiasing } from "../postprocessing/Effects/Antialiasing";
11
- export { AttachedObject } from "../WebXRController";
11
+ export { AttachedObject } from "../webxr/WebXRController";
12
12
  export { AudioListener } from "../AudioListener";
13
13
  export { AudioSource } from "../AudioSource";
14
14
  export { AudioTrackHandler } from "../timeline/TimelineTracks";
@@ -19,11 +19,12 @@ export { Avatar_POI } from "../avatar/Avatar_Brain_LookAt";
19
19
  export { AvatarBlink_Simple } from "../avatar/AvatarBlink_Simple";
20
20
  export { AvatarEyeLook_Rotation } from "../avatar/AvatarEyeLook_Rotation";
21
21
  export { AvatarLoader } from "../AvatarLoader";
22
- export { AvatarMarker } from "../WebXRAvatar";
22
+ export { AvatarMarker } from "../webxr/WebXRAvatar";
23
23
  export { AvatarModel } from "../AvatarLoader";
24
24
  export { AxesHelper } from "../AxesHelper";
25
25
  export { BaseUIComponent } from "../ui/BaseUIComponent";
26
26
  export { BasicIKConstraint } from "../BasicIKConstraint";
27
+ export { Behaviour } from "../Component";
27
28
  export { Bloom } from "../postprocessing/Effects/Bloom";
28
29
  export { BoxCollider } from "../Collider";
29
30
  export { BoxGizmo } from "../Gizmos";
@@ -41,6 +42,7 @@ export { Collider } from "../Collider";
41
42
  export { ColorAdjustments } from "../postprocessing/Effects/ColorAdjustments";
42
43
  export { ColorBySpeedModule } from "../ParticleSystemModules";
43
44
  export { ColorOverLifetimeModule } from "../ParticleSystemModules";
45
+ export { Component } from "../Component";
44
46
  export { ControlTrackHandler } from "../timeline/TimelineTracks";
45
47
  export { Deletable } from "../DeleteBox";
46
48
  export { DeleteBox } from "../DeleteBox";
@@ -141,7 +143,7 @@ export { SubEmitterSystem } from "../ParticleSystem";
141
143
  export { SyncedCamera } from "../SyncedCamera";
142
144
  export { SyncedRoom } from "../SyncedRoom";
143
145
  export { SyncedTransform } from "../SyncedTransform";
144
- export { TeleportTarget } from "../WebXRController";
146
+ export { TeleportTarget } from "../webxr/WebXRController";
145
147
  export { TestRunner } from "../TestRunner";
146
148
  export { TestSimulateUserData } from "../TestRunner";
147
149
  export { Text } from "../ui/Text";
@@ -163,19 +165,20 @@ export { Voip } from "../Voip";
163
165
  export { Volume } from "../postprocessing/Volume";
164
166
  export { VolumeParameter } from "../postprocessing/VolumeParameter";
165
167
  export { VolumeProfile } from "../postprocessing/VolumeProfile";
166
- export { VRUserState } from "../WebXRSync";
167
- export { WebAR } from "../WebXR";
168
- export { WebARCameraBackground } from "../WebARCameraBackground";
169
- export { WebARSessionRoot } from "../WebARSessionRoot";
170
- export { WebXR } from "../WebXR";
171
- export { WebXRAvatar } from "../WebXRAvatar";
172
- export { WebXRController } from "../WebXRController";
173
- export { WebXRImageTracking } from "../WebXRImageTracking";
174
- export { WebXRImageTrackingModel } from "../WebXRImageTracking";
175
- export { WebXRSync } from "../WebXRSync";
176
- export { WebXRTrackedImage } from "../WebXRImageTracking";
168
+ export { VRUserState } from "../webxr/WebXRSync";
169
+ export { WebAR } from "../webxr/WebXR";
170
+ export { WebARCameraBackground } from "../webxr/WebARCameraBackground";
171
+ export { WebARSessionRoot } from "../webxr/WebARSessionRoot";
172
+ export { WebXR } from "../webxr/WebXR";
173
+ export { WebXRAvatar } from "../webxr/WebXRAvatar";
174
+ export { WebXRController } from "../webxr/WebXRController";
175
+ export { WebXRImageTracking } from "../webxr/WebXRImageTracking";
176
+ export { WebXRImageTrackingModel } from "../webxr/WebXRImageTracking";
177
+ export { WebXRPlaneTracking } from "../webxr/WebXRPlaneTracking";
178
+ export { WebXRSync } from "../webxr/WebXRSync";
179
+ export { WebXRTrackedImage } from "../webxr/WebXRImageTracking";
177
180
  export { XRFlag } from "../XRFlag";
178
- export { XRGrabModel } from "../WebXRGrabRendering";
179
- export { XRGrabRendering } from "../WebXRGrabRendering";
180
- export { XRRig } from "../WebXRRig";
181
+ export { XRGrabModel } from "../webxr/WebXRGrabRendering";
182
+ export { XRGrabRendering } from "../webxr/WebXRGrabRendering";
183
+ export { XRRig } from "../webxr/WebXRRig";
181
184
  export { XRState } from "../XRFlag";
@@ -8,11 +8,11 @@ import { getFormattedDate } from "./utils/timeutils";
8
8
  import { registerAnimatorsImplictly } from "./utils/animationutils";
9
9
  import { IUSDZExporterExtension } from "./Extension";
10
10
  import { Behaviour, GameObject } from "../../Component";
11
- import { WebXR } from "../../WebXR"
11
+ import { WebXR } from "../../webxr/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
+ import { WebARSessionRoot } from "../../webxr/WebARSessionRoot";
16
16
 
17
17
  const debug = getParam("debugusdz");
18
18
 
@@ -1,7 +1,7 @@
1
1
  import { RaycastOptions } from "../../engine/engine_physics";
2
2
  import { Behaviour, Component, GameObject } from "../Component";
3
- import { WebXR } from "../WebXR";
4
- import { ControllerEvents, WebXRController } from "../WebXRController";
3
+ import { WebXR } from "../webxr/WebXR";
4
+ import { ControllerEvents, WebXRController } from "../webxr/WebXRController";
5
5
  import * as ThreeMeshUI from 'three-mesh-ui'
6
6
  import { Context } from "../../engine/engine_setup";
7
7
  import { OrbitControls } from "../OrbitControls";
@@ -144,7 +144,8 @@ export class InputField extends Behaviour implements IPointerEventHandler {
144
144
  if (this.placeholder && (!this.textComponent || this.textComponent.text.length <= 0))
145
145
  GameObject.setActive(this.placeholder.gameObject, true);
146
146
 
147
- this.onEndEdit?.invoke();
147
+ if (InputField.htmlField)
148
+ this.onEndEdit?.invoke(InputField.htmlField.value);
148
149
  }
149
150
 
150
151
 
@@ -1,7 +1,7 @@
1
- import { Behaviour } from "./Component";
2
- import { serializable } from "../engine/engine_serialization_decorator";
3
- import { RGBAColor } from "../engine-components/js-extensions/RGBAColor"
4
- import { WebXR } from "../engine-components/WebXR";
1
+ import { Behaviour } from "../Component";
2
+ import { serializable } from "../../engine/engine_serialization_decorator";
3
+ import { RGBAColor } from "../js-extensions/RGBAColor"
4
+ import { WebXR } from "./WebXR";
5
5
  import {
6
6
  Camera as ThreeCamera,
7
7
  Scene,
@@ -1,8 +1,8 @@
1
- import { Behaviour, GameObject } from "./Component";
1
+ import { Behaviour, GameObject } from "../Component";
2
2
  import { Matrix4, Object3D } from "three";
3
3
  import { WebAR, WebXR } from "./WebXR";
4
- import { InstancingUtil } from "../engine/engine_instancing";
5
- import { serializable } from "../engine/engine_serialization_decorator";
4
+ import { InstancingUtil } from "../../engine/engine_instancing";
5
+ import { serializable } from "../../engine/engine_serialization_decorator";
6
6
 
7
7
  // https://github.com/takahirox/takahirox.github.io/blob/master/js.mmdeditor/examples/js/controls/DeviceOrientationControls.js
8
8