@needle-tools/engine 2.34.0-pre → 2.35.1-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 (245) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/needle-engine.d.ts +3128 -2942
  3. package/dist/needle-engine.js +455 -455
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +54 -54
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/api.d.ts +3 -0
  8. package/lib/engine/api.js +4 -0
  9. package/lib/engine/api.js.map +1 -0
  10. package/lib/engine/engine.d.ts +4 -3
  11. package/lib/engine/engine_addressables.d.ts +5 -4
  12. package/lib/engine/engine_addressables.js +8 -7
  13. package/lib/engine/engine_addressables.js.map +1 -1
  14. package/lib/engine/engine_components.d.ts +17 -0
  15. package/lib/engine/engine_components.js +240 -0
  16. package/lib/engine/engine_components.js.map +1 -0
  17. package/lib/engine/engine_element.js +4 -3
  18. package/lib/engine/engine_element.js.map +1 -1
  19. package/lib/engine/engine_element_loading.js +4 -1
  20. package/lib/engine/engine_element_loading.js.map +1 -1
  21. package/lib/engine/engine_gameobject.d.ts +33 -0
  22. package/lib/engine/engine_gameobject.js +449 -0
  23. package/lib/engine/engine_gameobject.js.map +1 -0
  24. package/lib/engine/engine_gltf.d.ts +13 -2
  25. package/lib/engine/engine_gltf.js +7 -1
  26. package/lib/engine/engine_gltf.js.map +1 -1
  27. package/lib/engine/engine_gltf_builtin_components.d.ts +3 -3
  28. package/lib/engine/engine_gltf_builtin_components.js +2 -3
  29. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  30. package/lib/engine/engine_lightdata.d.ts +1 -1
  31. package/lib/engine/engine_lightdata.js.map +1 -1
  32. package/lib/engine/engine_mainloop_utils.d.ts +2 -2
  33. package/lib/engine/engine_mainloop_utils.js +7 -6
  34. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  35. package/lib/engine/engine_networking.d.ts +6 -10
  36. package/lib/engine/engine_networking.js +7 -11
  37. package/lib/engine/engine_networking.js.map +1 -1
  38. package/lib/engine/engine_networking_files.d.ts +1 -1
  39. package/lib/engine/engine_networking_files.js +8 -7
  40. package/lib/engine/engine_networking_files.js.map +1 -1
  41. package/lib/engine/engine_networking_files_default_components.d.ts +2 -2
  42. package/lib/engine/engine_networking_files_default_components.js +38 -43
  43. package/lib/engine/engine_networking_files_default_components.js.map +1 -1
  44. package/lib/engine/engine_networking_instantiate.d.ts +8 -6
  45. package/lib/engine/engine_networking_instantiate.js +12 -9
  46. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  47. package/lib/engine/engine_networking_types.d.ts +14 -0
  48. package/lib/engine/engine_networking_types.js +8 -0
  49. package/lib/engine/engine_networking_types.js.map +1 -0
  50. package/lib/engine/engine_physics.d.ts +5 -24
  51. package/lib/engine/engine_physics.js +27 -61
  52. package/lib/engine/engine_physics.js.map +1 -1
  53. package/lib/engine/engine_rendererdata.d.ts +1 -1
  54. package/lib/engine/engine_rendererdata.js.map +1 -1
  55. package/lib/engine/engine_scenetools.d.ts +2 -2
  56. package/lib/engine/engine_scenetools.js +22 -5
  57. package/lib/engine/engine_scenetools.js.map +1 -1
  58. package/lib/engine/engine_serialization_builtin_serializer.d.ts +1 -1
  59. package/lib/engine/engine_serialization_core.d.ts +1 -1
  60. package/lib/engine/engine_serialization_decorator.d.ts +1 -1
  61. package/lib/engine/engine_setup.d.ts +14 -15
  62. package/lib/engine/engine_setup.js +34 -23
  63. package/lib/engine/engine_setup.js.map +1 -1
  64. package/lib/engine/engine_three_utils.js +0 -6
  65. package/lib/engine/engine_three_utils.js.map +1 -1
  66. package/lib/engine/engine_types.d.ts +108 -0
  67. package/lib/engine/engine_types.js +50 -0
  68. package/lib/engine/engine_types.js.map +1 -0
  69. package/lib/engine/engine_utils.d.ts +1 -1
  70. package/lib/engine/engine_utils.js.map +1 -1
  71. package/lib/engine/extensions/NEEDLE_components.js +2 -2
  72. package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
  73. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +1 -1
  74. package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +1 -1
  75. package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +1 -1
  76. package/lib/engine/extensions/NEEDLE_render_objects.d.ts +2 -2
  77. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +1 -1
  78. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +3 -2
  79. package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
  80. package/lib/engine/extensions/extensions.d.ts +1 -1
  81. package/lib/engine-components/Animator.js.map +1 -1
  82. package/lib/engine-components/AvatarLoader.js +6 -5
  83. package/lib/engine-components/AvatarLoader.js.map +1 -1
  84. package/lib/engine-components/Camera.d.ts +2 -2
  85. package/lib/engine-components/Camera.js +6 -12
  86. package/lib/engine-components/Camera.js.map +1 -1
  87. package/lib/engine-components/CameraUtils.d.ts +3 -0
  88. package/lib/engine-components/CameraUtils.js +15 -0
  89. package/lib/engine-components/CameraUtils.js.map +1 -0
  90. package/lib/engine-components/Collider.d.ts +3 -1
  91. package/lib/engine-components/Collider.js +11 -0
  92. package/lib/engine-components/Collider.js.map +1 -1
  93. package/lib/engine-components/Component.d.ts +21 -55
  94. package/lib/engine-components/Component.js +67 -466
  95. package/lib/engine-components/Component.js.map +1 -1
  96. package/lib/engine-components/Duplicatable.js +2 -1
  97. package/lib/engine-components/Duplicatable.js.map +1 -1
  98. package/lib/engine-components/LODGroup.js.map +1 -1
  99. package/lib/engine-components/Light.d.ts +2 -1
  100. package/lib/engine-components/Light.js +2 -2
  101. package/lib/engine-components/Light.js.map +1 -1
  102. package/lib/engine-components/NestedGltf.js +2 -1
  103. package/lib/engine-components/NestedGltf.js.map +1 -1
  104. package/lib/engine-components/Networking.d.ts +3 -1
  105. package/lib/engine-components/Networking.js +3 -0
  106. package/lib/engine-components/Networking.js.map +1 -1
  107. package/lib/engine-components/OrbitControls.js +4 -2
  108. package/lib/engine-components/OrbitControls.js.map +1 -1
  109. package/lib/engine-components/Renderer.d.ts +3 -2
  110. package/lib/engine-components/Renderer.js +2 -0
  111. package/lib/engine-components/Renderer.js.map +1 -1
  112. package/lib/engine-components/{Rigidbody.d.ts → RigidBody.d.ts} +2 -1
  113. package/lib/engine-components/{Rigidbody.js → RigidBody.js} +1 -1
  114. package/lib/engine-components/{Rigidbody.js.map → RigidBody.js.map} +1 -1
  115. package/lib/engine-components/ScreenCapture.js.map +1 -1
  116. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  117. package/lib/engine-components/SyncedCamera.js +2 -1
  118. package/lib/engine-components/SyncedCamera.js.map +1 -1
  119. package/lib/engine-components/SyncedTransform.js.map +1 -1
  120. package/lib/engine-components/TestRunner.js.map +1 -1
  121. package/lib/engine-components/Voip.js +2 -1
  122. package/lib/engine-components/Voip.js.map +1 -1
  123. package/lib/engine-components/WebXR.js.map +1 -1
  124. package/lib/engine-components/WebXRController.js +28 -8
  125. package/lib/engine-components/WebXRController.js.map +1 -1
  126. package/lib/engine-components/WebXRGrabRendering.d.ts +1 -1
  127. package/lib/engine-components/WebXRGrabRendering.js +1 -1
  128. package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
  129. package/lib/engine-components/WebXRSync.js +1 -1
  130. package/lib/engine-components/WebXRSync.js.map +1 -1
  131. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +1 -1
  132. package/lib/engine-components/codegen/components.d.ts +1 -1
  133. package/lib/engine-components/codegen/components.js +1 -1
  134. package/lib/engine-components/codegen/components.js.map +1 -1
  135. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +4 -0
  136. package/lib/engine-components/js-extensions/ExtensionUtils.js +56 -0
  137. package/lib/engine-components/js-extensions/ExtensionUtils.js.map +1 -0
  138. package/lib/engine-components/js-extensions/Object3D.js +27 -50
  139. package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
  140. package/lib/engine-components/js-extensions/Vector.d.ts +2 -0
  141. package/lib/engine-components/js-extensions/Vector.js +16 -0
  142. package/lib/engine-components/js-extensions/Vector.js.map +1 -0
  143. package/lib/engine-components/timeline/PlayableDirector.d.ts +2 -1
  144. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  145. package/lib/engine-components/ui/BaseUIComponent.d.ts +1 -0
  146. package/lib/engine-components/ui/BaseUIComponent.js +11 -5
  147. package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
  148. package/lib/engine-components/ui/Canvas.d.ts +3 -0
  149. package/lib/engine-components/ui/Canvas.js +12 -1
  150. package/lib/engine-components/ui/Canvas.js.map +1 -1
  151. package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
  152. package/lib/engine-components/ui/CanvasScaler.js +17 -0
  153. package/lib/engine-components/ui/CanvasScaler.js.map +1 -0
  154. package/lib/engine-components/ui/EventSystem.d.ts +1 -1
  155. package/lib/engine-components/ui/EventSystem.js +11 -31
  156. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  157. package/lib/engine-components/ui/Graphic.js +2 -1
  158. package/lib/engine-components/ui/Graphic.js.map +1 -1
  159. package/lib/engine-components/ui/Keyboard.js +2 -1
  160. package/lib/engine-components/ui/Keyboard.js.map +1 -1
  161. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -0
  162. package/lib/engine-components/ui/RaycastUtils.js +62 -0
  163. package/lib/engine-components/ui/RaycastUtils.js.map +1 -0
  164. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  165. package/lib/engine-components/ui/Text.js +8 -3
  166. package/lib/engine-components/ui/Text.js.map +1 -1
  167. package/lib/engine-components/ui/Utils.js +3 -2
  168. package/lib/engine-components/ui/Utils.js.map +1 -1
  169. package/lib/needle-engine.d.ts +3 -1
  170. package/lib/needle-engine.js +4 -2
  171. package/lib/needle-engine.js.map +1 -1
  172. package/package.json +12 -1
  173. package/src/engine/api.ts +3 -0
  174. package/src/engine/codegen/register_types.js +2 -2
  175. package/src/engine/engine_addressables.ts +12 -10
  176. package/src/engine/{engine_components.js → engine_components.ts} +66 -61
  177. package/src/engine/engine_element.ts +4 -3
  178. package/src/engine/engine_element_loading.ts +5 -1
  179. package/src/engine/engine_gameobject.ts +506 -0
  180. package/src/engine/engine_gltf.ts +21 -2
  181. package/src/engine/engine_gltf_builtin_components.ts +8 -7
  182. package/src/engine/engine_lightdata.ts +1 -1
  183. package/src/engine/engine_mainloop_utils.ts +13 -11
  184. package/src/engine/engine_networking.ts +14 -17
  185. package/src/engine/engine_networking_files.ts +14 -11
  186. package/src/engine/engine_networking_files_default_components.ts +53 -52
  187. package/src/engine/engine_networking_instantiate.ts +24 -14
  188. package/src/engine/engine_networking_types.ts +19 -0
  189. package/src/engine/engine_physics.ts +45 -77
  190. package/src/engine/engine_rendererdata.ts +1 -1
  191. package/src/engine/engine_scenetools.ts +30 -6
  192. package/src/engine/engine_serialization_core.ts +1 -1
  193. package/src/engine/engine_serialization_decorator.ts +1 -1
  194. package/src/engine/engine_setup.ts +51 -37
  195. package/src/engine/engine_three_utils.ts +0 -8
  196. package/src/engine/engine_types.ts +188 -0
  197. package/src/engine/engine_utils.ts +1 -3
  198. package/src/engine/extensions/NEEDLE_components.ts +2 -2
  199. package/src/engine/extensions/NEEDLE_deferred_texture.ts +1 -1
  200. package/src/engine/extensions/NEEDLE_lighting_settings.ts +1 -1
  201. package/src/engine/extensions/NEEDLE_lightmaps.ts +1 -1
  202. package/src/engine/extensions/NEEDLE_render_objects.ts +4 -4
  203. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +5 -4
  204. package/src/engine/extensions/extensions.ts +1 -1
  205. package/src/engine-components/Animator.ts +3 -3
  206. package/src/engine-components/AvatarLoader.ts +6 -5
  207. package/src/engine-components/Camera.ts +10 -13
  208. package/src/engine-components/CameraUtils.ts +15 -0
  209. package/src/engine-components/Collider.ts +17 -2
  210. package/src/engine-components/Component.ts +87 -541
  211. package/src/engine-components/Duplicatable.ts +4 -3
  212. package/src/engine-components/LODGroup.ts +1 -1
  213. package/src/engine-components/Light.ts +3 -2
  214. package/src/engine-components/NestedGltf.ts +2 -1
  215. package/src/engine-components/Networking.ts +6 -1
  216. package/src/engine-components/OrbitControls.ts +5 -5
  217. package/src/engine-components/Renderer.ts +5 -1
  218. package/src/engine-components/RigidBody.ts +2 -1
  219. package/src/engine-components/ScreenCapture.ts +1 -1
  220. package/src/engine-components/SpectatorCamera.ts +7 -5
  221. package/src/engine-components/SyncedCamera.ts +2 -1
  222. package/src/engine-components/SyncedTransform.ts +1 -1
  223. package/src/engine-components/TestRunner.ts +1 -2
  224. package/src/engine-components/Voip.ts +2 -1
  225. package/src/engine-components/WebXR.ts +2 -2
  226. package/src/engine-components/WebXRController.ts +30 -10
  227. package/src/engine-components/WebXRGrabRendering.ts +1 -1
  228. package/src/engine-components/WebXRSync.ts +1 -1
  229. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +2 -1
  230. package/src/engine-components/codegen/components.ts +1 -1
  231. package/src/engine-components/js-extensions/ExtensionUtils.ts +66 -0
  232. package/src/engine-components/js-extensions/Object3D.ts +37 -61
  233. package/src/engine-components/js-extensions/Vector.ts +17 -0
  234. package/src/engine-components/timeline/PlayableDirector.ts +2 -1
  235. package/src/engine-components/ui/BaseUIComponent.ts +17 -6
  236. package/src/engine-components/ui/Canvas.ts +14 -2
  237. package/src/engine-components/ui/CanvasScaler.ts +21 -0
  238. package/src/engine-components/ui/EventSystem.ts +11 -25
  239. package/src/engine-components/ui/Graphic.ts +2 -1
  240. package/src/engine-components/ui/Keyboard.ts +2 -1
  241. package/src/engine-components/ui/RaycastUtils.ts +64 -0
  242. package/src/engine-components/ui/Raycaster.ts +2 -0
  243. package/src/engine-components/ui/Text.ts +8 -4
  244. package/src/engine-components/ui/Utils.ts +3 -2
  245. package/src/needle-engine.ts +7 -2
@@ -1,10 +1,11 @@
1
- import { Behaviour, GameObject, InstantiateOptions } from "./Component";
1
+ import { Behaviour, GameObject } from "./Component";
2
2
  import { WebXRController, ControllerEvents } from "./WebXRController";
3
3
  import { DragControls, DragEvents } from "./DragControls";
4
4
  import { Interactable } from "./Interactable";
5
5
  import { Animation } from "./Animation";
6
6
  import { Vector3, Quaternion, Object3D } from "three";
7
7
  import { serializeable } from "../engine/engine_serialization_decorator";
8
+ import { InstantiateOptions } from "../engine/engine_gameobject";
8
9
 
9
10
  export class Duplicatable extends Interactable {
10
11
 
@@ -35,7 +36,7 @@ export class Duplicatable extends Interactable {
35
36
  // }
36
37
  // console.log(this, this.object);
37
38
  if (this.object) {
38
- if (this.object === this.gameObject) {
39
+ if (this.object as any === this.gameObject) {
39
40
  console.error("Can not duplicate self");
40
41
  return;
41
42
  }
@@ -90,7 +91,7 @@ export class Duplicatable extends Interactable {
90
91
  if (!this.object) return null;
91
92
  if (selected === this.gameObject || this.handleMultiObject(selected)) {
92
93
 
93
- if (this.object === this.gameObject) return null;
94
+ if (this.object as any === this.gameObject) return null;
94
95
  this.object.visible = true;
95
96
 
96
97
  if (this._startPosition)
@@ -31,7 +31,7 @@ class LOD {
31
31
  this.model = model;
32
32
  this.renderers = [];
33
33
  for (const guid of model.renderers) {
34
- const rend = this.findRenderer(guid, group.gameObject);// GameObject.findByGuid(guid, group.gameObject) as Renderer;
34
+ const rend = this.findRenderer(guid, group.gameObject as GameObject);// GameObject.findByGuid(guid, group.gameObject) as Renderer;
35
35
  if (rend && rend.gameObject) {
36
36
  this.renderers.push(rend);
37
37
  }
@@ -7,6 +7,7 @@ import { serializeable } from "../engine/engine_serialization_decorator";
7
7
  import { Color, DirectionalLight, OrthographicCamera } from "three";
8
8
  import { WebXR, WebXREvent } from "./WebXR";
9
9
  import { WebARSessionRoot } from "./WebARSessionRoot";
10
+ import { ILight } from "../engine/engine_types";
10
11
 
11
12
  // https://threejs.org/examples/webgl_shadowmap_csm.html
12
13
 
@@ -82,7 +83,7 @@ enum LightShadows {
82
83
  Soft = 2,
83
84
  }
84
85
 
85
- export class Light extends Behaviour {
86
+ export class Light extends Behaviour implements ILight {
86
87
 
87
88
  @serializeable()
88
89
  private type: LightType = 0;
@@ -263,7 +264,7 @@ export class Light extends Behaviour {
263
264
  private _webARRoot?: WebARSessionRoot;
264
265
 
265
266
  private onWebXRStarted() {
266
- this._webARRoot = this.gameObject.getComponentInParent(WebARSessionRoot) ?? undefined;
267
+ this._webARRoot = GameObject.getComponentInParent(this.gameObject, WebARSessionRoot) ?? undefined;
267
268
  this.startCoroutine(this._updateLightIntensityInARRoutine());
268
269
  }
269
270
 
@@ -1,8 +1,9 @@
1
1
  import { getParam } from "../engine/engine_utils";
2
- import { Behaviour, InstantiateOptions } from "../engine-components/Component";
2
+ import { Behaviour } from "../engine-components/Component";
3
3
  import { AssetReference, ProgressCallback } from "../engine/engine_addressables";
4
4
  import { serializeable } from "../engine/engine_serialization_decorator";
5
5
  import { InstantiateIdProvider } from "../engine/engine_networking_instantiate";
6
+ import { InstantiateOptions } from "../engine/engine_gameobject";
6
7
 
7
8
  const debug = getParam("debugnestedgltf");
8
9
 
@@ -1,8 +1,9 @@
1
+ import { INetworkingWebsocketUrlProvider } from "../engine/engine_networking";
1
2
  import { isLocalNetwork } from "../engine/engine_networking_utils";
2
3
  import { getParam } from "../engine/engine_utils";
3
4
  import { Behaviour } from "./Component";
4
5
 
5
- export class Networking extends Behaviour {
6
+ export class Networking extends Behaviour implements INetworkingWebsocketUrlProvider {
6
7
 
7
8
  url: string | null = null;
8
9
  urlParameterName: string | null = null;
@@ -10,6 +11,10 @@ export class Networking extends Behaviour {
10
11
  // used when local host is detected
11
12
  localhost: string | null = null;
12
13
 
14
+ awake(){
15
+ this.context.connection.registerProvider(this);
16
+ }
17
+
13
18
  getWebsocketUrl(): string | null {
14
19
 
15
20
  let socketurl = this.url ? Networking.GetUrl(this.url, this.localhost) : null;
@@ -1,12 +1,12 @@
1
1
  import { Behaviour, GameObject } from "./Component";
2
- import { Camera } from "./Camera";
2
+ // import { Camera } from "./Camera";
3
3
  import { OrbitControls as ThreeOrbitControls } from "three/examples/jsm/controls/OrbitControls";
4
4
  import { LookAtConstraint } from "./LookAtConstraint";
5
5
  import * as THREE from "three";
6
6
  import { getWorldPosition } from "../engine/engine_three_utils";
7
- import { Physics, RaycastOptions } from "../engine/engine_physics";
7
+ import { RaycastOptions } from "../engine/engine_physics";
8
8
  import { serializeable } from "../engine/engine_serialization_decorator";
9
- import { Vector3 } from "three";
9
+ import { Camera } from "./Camera";
10
10
 
11
11
  export class OrbitControls extends Behaviour {
12
12
  public get controls() {
@@ -30,7 +30,7 @@ export class OrbitControls extends Behaviour {
30
30
  minZoom: number = 0;
31
31
  maxZoom: number = Infinity;
32
32
  enablePan: boolean = true;
33
- @serializeable()
33
+ @serializeable(LookAtConstraint)
34
34
  lookAtConstraint: LookAtConstraint | null = null;
35
35
  lookAtConstraint01: number = 1;
36
36
  middleClickToFocus: boolean = true;
@@ -61,10 +61,10 @@ export class OrbitControls extends Behaviour {
61
61
  }
62
62
 
63
63
  onEnable() {
64
+
64
65
  this._enableTime = this.context.time.time;
65
66
  const camGo = GameObject.getComponent(this.gameObject, Camera);
66
67
  const cam = camGo?.cam;
67
-
68
68
  if (!this._controls) {
69
69
  console.assert(cam !== null && cam !== undefined, "Missing camera", this);
70
70
  if (cam)
@@ -9,6 +9,10 @@ import { Material, Texture, Vector4 } from "three";
9
9
  import { NEEDLE_render_objects } from "../engine/extensions/NEEDLE_render_objects";
10
10
  import { NEEDLE_deferred_texture } from "../engine/extensions/NEEDLE_deferred_texture";
11
11
  import { NEED_UPDATE_INSTANCE_KEY } from "../engine/engine_instancing";
12
+ import { IRenderer } from "../engine/engine_types";
13
+
14
+ // for staying compatible with old code
15
+ export { InstancingUtil } from "../engine/engine_instancing";
12
16
 
13
17
  const suppressInstancing = getParam("noInstancing");
14
18
  const debugLightmap = getParam("debuglightmaps") ? true : false;
@@ -99,7 +103,7 @@ class SharedMaterialArray {
99
103
 
100
104
  }
101
105
 
102
- export class Renderer extends Behaviour {
106
+ export class Renderer extends Behaviour implements IRenderer {
103
107
 
104
108
  @serializeable()
105
109
  receiveShadows: boolean = false;
@@ -6,8 +6,9 @@ import { getWorldPosition } from "../engine/engine_three_utils";
6
6
  import { serializeable } from "../engine/engine_serialization_decorator";
7
7
  import { Watch } from "../engine/engine_utils";
8
8
  import { Vector3 } from "three";
9
+ import { IRigidbody } from "../engine/engine_types";
9
10
 
10
- export class Rigidbody extends Behaviour {
11
+ export class Rigidbody extends Behaviour implements IRigidbody {
11
12
 
12
13
  @serializeable()
13
14
  mass: number = 1;
@@ -5,11 +5,11 @@ import { Context } from "../engine/engine_setup";
5
5
  import { RoomEvents } from "../engine/engine_networking";
6
6
  import { UserJoinedOrLeftRoomModel } from "../engine/engine_networking";
7
7
  import { serializeable } from "../engine/engine_serialization";
8
- import { IModel } from "../engine/engine_networking";
9
8
  import { IPointerClickHandler } from "./ui/PointerEvents";
10
9
  import { EventDispatcher } from "three";
11
10
  import { AudioSource } from "./AudioSource";
12
11
  import { getParam } from "../engine/engine_utils";
12
+ import { IModel } from "../engine/engine_networking_types";
13
13
 
14
14
  const debug = getParam("debugscreenshare");
15
15
 
@@ -12,7 +12,9 @@ import { Context } from "../engine/engine_setup";
12
12
  import { getParam } from "../engine/engine_utils";
13
13
  import { PlayerView, ViewDevice } from "../engine/engine_playerview";
14
14
  import { RaycastOptions } from "../engine/engine_physics";
15
- import { IModel, RoomEvents } from "../engine/engine_networking";
15
+ import { RoomEvents } from "../engine/engine_networking";
16
+ import { ICamera } from "../engine/engine_types";
17
+ import { IModel } from "../engine/engine_networking_types";
16
18
 
17
19
 
18
20
  export enum SpectatorMode {
@@ -177,7 +179,7 @@ export class SpectatorCamera extends Behaviour {
177
179
  }
178
180
 
179
181
  private onXRSessionEnded(_evt) {
180
- this.context.removeCamera(this.cam);
182
+ this.context.removeCamera(this.cam as ICamera);
181
183
  GameObject.setActive(this.gameObject, false);
182
184
  if (this.orbit) this.orbit.enabled = true;
183
185
  this._handler?.set(undefined);
@@ -355,16 +357,16 @@ class SpectatorHandler implements ISpectatorHandler {
355
357
  // this.context.setCurrentCamera(this.cam);
356
358
  if (debug) console.log("FOLLOW", followObject);
357
359
  if (!this.context.isInXR) {
358
- this.context.setCurrentCamera(this.cam);
360
+ this.context.setCurrentCamera(this.cam as ICamera);
359
361
  }
360
- else this.context.removeCamera(this.cam);
362
+ else this.context.removeCamera(this.cam as ICamera);
361
363
  }
362
364
 
363
365
  disable() {
364
366
  if (debug) console.log("STOP FOLLOW", this.currentObject);
365
367
  this.view = undefined;
366
368
  this.currentObject = undefined;
367
- this.context.removeCamera(this.cam);
369
+ this.context.removeCamera(this.cam as ICamera);
368
370
  if (this.follow)
369
371
  this.follow.enabled = false;
370
372
  }
@@ -1,5 +1,5 @@
1
1
  import { NetworkConnection } from "../engine/engine_networking";
2
- import { Behaviour, GameObject, InstantiateOptions } from "./Component";
2
+ import { Behaviour, GameObject } from "./Component";
3
3
  import { Camera } from "./Camera";
4
4
  import * as utils from "../engine/engine_three_utils"
5
5
  import { WebXR } from "./WebXR";
@@ -13,6 +13,7 @@ import { Object3D } from "three";
13
13
  import { AvatarMarker } from "./WebXRAvatar";
14
14
  import { AssetReference } from "../engine/engine_addressables";
15
15
  import { ViewDevice } from "../engine/engine_playerview";
16
+ import { InstantiateOptions } from "../engine/engine_gameobject";
16
17
 
17
18
  const SyncedCameraModelIdentifier = "SCAM";
18
19
  registerType(SyncedCameraModelIdentifier, SyncedCameraModel.getRootAsSyncedCameraModel);
@@ -1,5 +1,5 @@
1
1
  import * as THREE from 'three'
2
- import { IModel, OwnershipModel, RoomEvents } from "../engine/engine_networking"
2
+ import { OwnershipModel, RoomEvents } from "../engine/engine_networking"
3
3
  import { Behaviour, GameObject } from "./Component";
4
4
  import { Rigidbody } from "./RigidBody";
5
5
  import * as utils from "../engine/engine_utils"
@@ -3,10 +3,9 @@ import * as tests from "../engine/tests/test_utils";
3
3
  import { createTransformModel, SyncedTransform, SyncedTransformIdentifier } from "./SyncedTransform";
4
4
  import * as flatbuffers from 'flatbuffers';
5
5
  import { SyncedTransformModel } from "../engine-schemes/synced-transform-model";
6
- import * as schemes from "../engine-schemes/schemes";
7
- import { IModel, NetworkConnection } from "../engine/engine_networking";
8
6
  import { Rigidbody } from "./Rigidbody";
9
7
  import { Vector3 } from "three";
8
+ import { IModel } from "../engine/engine_networking_types";
10
9
 
11
10
  export class TestRunner extends Behaviour {
12
11
  awake(): void {
@@ -1,11 +1,12 @@
1
1
 
2
2
  import { Behaviour } from "./Component";
3
3
  import * as THREE from "three";
4
- import { RoomEvents, SendQueue } from "../engine/engine_networking"
4
+ import { RoomEvents } from "../engine/engine_networking"
5
5
  import Peer, { MediaConnection } from "peerjs"
6
6
  import { AudioSource } from "./AudioSource";
7
7
  import * as utils from "../engine/engine_utils"
8
8
  import { AudioAnalyser } from "three";
9
+ import { SendQueue } from "../engine/engine_networking_types";
9
10
 
10
11
  export const noVoip = "noVoip";
11
12
  const debug = utils.getParam("debugvoip");
@@ -285,7 +285,7 @@ export class WebXR extends Behaviour {
285
285
  // build controllers before session begins - this seems to fix issue with controller models not appearing/not getting connection event
286
286
  this.ensureRig();
287
287
  for (let i = 0; i < 2; i++) {
288
- WebXRController.Create(this, i, this.gameObject, ControllerType.PhysicalDevice);
288
+ WebXRController.Create(this, i, this.gameObject as GameObject, ControllerType.PhysicalDevice);
289
289
  }
290
290
 
291
291
  WebXR.events.dispatchEvent({ type: WebXREvent.RequestVRSession });
@@ -499,7 +499,7 @@ export class WebAR {
499
499
 
500
500
  const deviceType = navigator.userAgent?.includes("OculusBrowser") ? ControllerType.PhysicalDevice : ControllerType.Touch;
501
501
  for (let i = 0; i < 4; i++) {
502
- WebXRController.Create(this.webxr, i, this.webxr.gameObject, deviceType)
502
+ WebXRController.Create(this.webxr, i, this.webxr.gameObject as GameObject, deviceType)
503
503
  }
504
504
 
505
505
  if (!this.sessionRoot || this.sessionRoot.destroyed || !this.sessionRoot.activeAndEnabled)
@@ -13,7 +13,9 @@ import * as utils from "../engine/engine_three_utils"
13
13
  import { Interactable, UsageMarker } from "./Interactable";
14
14
  import { InstancingUtil } from "../engine/engine_instancing";
15
15
  import { Rigidbody } from "./RigidBody";
16
- import { getParam } from "../engine/engine_utils";
16
+ import { delay, getParam } from "../engine/engine_utils";
17
+ import { UIRaycastUtils } from "./ui/RaycastUtils";
18
+ import { RaycastResult } from "cannon-es";
17
19
 
18
20
  const debug = getParam("debugwebxrcontroller");
19
21
 
@@ -128,7 +130,7 @@ export class WebXRController extends Behaviour {
128
130
 
129
131
  // TODO: replace with component events
130
132
  public static removeEventListener(evt: ControllerEvents, callback: (controller: WebXRController, args: any) => void) {
131
- if(!callback) return;
133
+ if (!callback) return;
132
134
  const list = this.eventSubs[evt] ?? [];
133
135
  const idx = list.indexOf(callback);
134
136
  if (idx >= 0) list.splice(idx, 1);
@@ -568,6 +570,7 @@ export class WebXRController extends Behaviour {
568
570
  if (this.webXR.Rig) {
569
571
  factor /= this.webXR.Rig.scale.x;
570
572
  }
573
+ // if (!hit) factor = 0;
571
574
 
572
575
  if (this.raycastLine) {
573
576
  this.raycastLine.scale.z = factor * (this.lastHit?.distance ?? 9999);
@@ -625,11 +628,11 @@ export class WebXRController extends Behaviour {
625
628
  if (intersections && intersections.length > 0) {
626
629
  for (const intersection of intersections) {
627
630
  const object = intersection.object;
628
- if (!this.testIsVisible(object)) {
629
- if (debug)
630
- console.log("not visible");
631
- continue;
632
- }
631
+ // if (!this.testIsVisible(object)) {
632
+ // if (debug)
633
+ // console.log("not visible");
634
+ // continue;
635
+ // }
633
636
  this.lastSelectStartObject = object;
634
637
  const args = { selected: object, grab: object };
635
638
  const subs = WebXRController.eventSubs[ControllerEvents.SelectStart];
@@ -687,8 +690,12 @@ export class WebXRController extends Behaviour {
687
690
  }
688
691
 
689
692
  private testIsVisible(obj: THREE.Object3D | null): boolean {
690
- if (!obj) return true;
691
- return GameObject.isActiveInHierarchy(obj);
693
+ if (!obj) return false;
694
+ if (GameObject.isActiveInHierarchy(obj) === false) return false;
695
+ if (UIRaycastUtils.isInteractable(obj) === false) {
696
+ return false;
697
+ }
698
+ return true;
692
699
  // if (!obj.visible) return false;
693
700
  // return this.testIsVisible(obj.parent);
694
701
  }
@@ -729,7 +736,20 @@ export class WebXRController extends Behaviour {
729
736
  opts.layerMask = new THREE.Layers();
730
737
  opts.layerMask.set(0);
731
738
  opts.ray = this.getRay();
732
- return this.context.physics.raycast(opts);
739
+ const hits = this.context.physics.raycast(opts);
740
+ for (let i = 0; i < hits.length; i++) {
741
+ const hit = hits[i];
742
+ const obj = hit.object;
743
+ if (!this.testIsVisible(obj)) {
744
+ hits.splice(i, 1);
745
+ i--;
746
+ continue;
747
+ }
748
+ hit.object = UIRaycastUtils.getObject(obj);
749
+ break;
750
+ }
751
+ // console.log(...hits);
752
+ return hits;
733
753
  }
734
754
  }
735
755
 
@@ -1,10 +1,10 @@
1
- import { IModel, SendQueue } from "../engine/engine_networking";
2
1
  import { getWorldPosition, setWorldPosition, setWorldPositionXYZ } from "../engine/engine_three_utils";
3
2
  import { Behaviour, GameObject } from "./Component";
4
3
  import { AttachedObject, AttachedObjectEvents } from "./WebXRController";
5
4
  import * as THREE from "three";
6
5
  import { PlayerColor } from "./PlayerColor";
7
6
  import { Context } from "../engine/engine_setup";
7
+ import { IModel, SendQueue } from "../engine/engine_networking_types";
8
8
 
9
9
  enum XRGrabEvent {
10
10
  StartOrUpdate = "xr-grab-visual-start-or-update",
@@ -182,7 +182,7 @@ export class WebXRSync extends Behaviour {
182
182
 
183
183
  async awake() {
184
184
 
185
- if(!this.webXR) this.webXR = this.gameObject.getComponent(WebXR);
185
+ if(!this.webXR) this.webXR = GameObject.getComponent(this.gameObject, WebXR);
186
186
  if(!this.webXR) this.webXR = GameObject.findObjectOfType(WebXR, this.context);
187
187
 
188
188
  if(!this.webXR)
@@ -3,9 +3,10 @@ import { TypeStore } from "../../engine/engine_typestore";
3
3
  import { Behaviour, GameObject } from "../Component";
4
4
  import { AvatarMarker } from "../WebXRAvatar";
5
5
  import * as utils from "../../engine/engine_three_utils";
6
- import { IModel, OwnershipModel } from "../../engine/engine_networking";
6
+ import { OwnershipModel } from "../../engine/engine_networking";
7
7
  import { Int8BufferAttribute } from "three";
8
8
  import { Context } from "../../engine/engine_setup";
9
+ import { IModel } from "../../engine/engine_networking_types";
9
10
 
10
11
  export class Avatar_POI {
11
12
 
@@ -16,7 +16,6 @@ export { Camera } from "../Camera";
16
16
  export { Collider } from "../Collider";
17
17
  export { SphereCollider } from "../Collider";
18
18
  export { BoxCollider } from "../Collider";
19
- export { InstantiateOptions } from "../Component";
20
19
  export { DeleteBox } from "../DeleteBox";
21
20
  export { Deletable } from "../DeleteBox";
22
21
  export { DeviceFlag } from "../DeviceFlag";
@@ -132,6 +131,7 @@ export { PointerEventData } from "../ui/PointerEvents";
132
131
  export { Raycaster } from "../ui/Raycaster";
133
132
  export { ObjectRaycaster } from "../ui/Raycaster";
134
133
  export { GraphicRaycaster } from "../ui/Raycaster";
134
+ export { UIRaycastUtils } from "../ui/RaycastUtils";
135
135
  export { Size } from "../ui/RectTransform";
136
136
  export { Rect } from "../ui/RectTransform";
137
137
  export { RectTransform } from "../ui/RectTransform";
@@ -0,0 +1,66 @@
1
+
2
+ const handlers : Map<any, ApplyPrototypeExtension> = new Map();
3
+
4
+ export function applyPrototypeExtensions(obj : any){
5
+ if(!obj) return;
6
+ const prototype = obj.prototype;
7
+ if(!prototype) return;
8
+ let handler = handlers.get(prototype);
9
+ if(!handler){
10
+ handler = createPrototypeExtensionHandler(prototype);
11
+ handlers.set(prototype, handler);
12
+ }
13
+ handler.apply(obj);
14
+ }
15
+
16
+ function createPrototypeExtensionHandler(prototype: any) {
17
+ return new ApplyPrototypeExtension(prototype);
18
+ }
19
+
20
+ export interface IApplyPrototypeExtension {
21
+ apply(object: object): void;
22
+ }
23
+
24
+ class ApplyPrototypeExtension implements IApplyPrototypeExtension {
25
+
26
+ private readonly $symbol: symbol;
27
+ private readonly extensions: string[];
28
+ private readonly descriptors: Array<PropertyDescriptor | undefined>;
29
+
30
+ constructor(prototype: object) {
31
+ this.$symbol = Symbol("prototype-extension");
32
+ // used to decorate cloned object3D objects with the same added components defined above
33
+ this.extensions = Object.keys(prototype);
34
+ this.descriptors = new Array<PropertyDescriptor | undefined>();
35
+ for (let i = 0; i < this.extensions.length; i++) {
36
+ const key = this.extensions[i];
37
+ const descriptor = Object.getOwnPropertyDescriptor(prototype, key);
38
+ if (descriptor) {
39
+ this.descriptors.push(descriptor);
40
+ }
41
+ }
42
+ }
43
+
44
+ apply(object: object): void {
45
+
46
+ if (object[this.$symbol]) return;
47
+ object[this.$symbol] = true;
48
+
49
+ // const prototype = object.constructor.prototype;
50
+
51
+ for (let i = 0; i < this.extensions.length; i++) {
52
+ const key = this.extensions[i];
53
+ const desc = this.descriptors[i];
54
+ if (desc) {
55
+ // if (prototype) {
56
+ // const exists = Object.getOwnPropertyDescriptor(prototype, key);
57
+ // if (exists) {
58
+ // continue;
59
+ // }
60
+ // }
61
+ // console.trace("DEFINE", object.name, key);
62
+ Object.defineProperty(object, key, desc);
63
+ }
64
+ }
65
+ }
66
+ }
@@ -1,18 +1,28 @@
1
+ import { applyPrototypeExtensions } from "./ExtensionUtils";
1
2
  import { Object3D } from "three";
2
- import { Behaviour, Component, Constructor, ConstructorConcrete, GameObject } from "../Component";
3
+ import { Constructor, ConstructorConcrete, IComponent } from "../../engine/engine_types"
4
+ import { IComponent as Component } from "../../engine/engine_types";
5
+ import { addNewComponentInstance, getComponent, getComponentInChildren, getComponentInParent, getComponents, getComponentsInChildren, getComponentsInParent, getOrAddComponent, removeComponent } from "../../engine/engine_components";
6
+
7
+ // used to decorate cloned object3D objects with the same added components defined above
8
+ export function apply(object: Object3D) {
9
+ if (object && object.isObject3D === true)
10
+ applyPrototypeExtensions(object);
11
+ }
3
12
 
4
- const decorated = Symbol("GameObject.decorated");
5
13
 
6
14
  // this is a fix to allow gameObject active animation be applied to a three object
7
- Object.defineProperty(Object3D.prototype, "activeSelf", {
8
- get: function () {
9
- return this.visible;
10
- },
11
- set: function (val: boolean | number) {
12
- const state = typeof val === "number" ? val > 0.5 : val;
13
- this.visible = state;
14
- }
15
- });
15
+ if (!Object.getOwnPropertyDescriptor(Object3D.prototype, "activeSelf")) {
16
+ Object.defineProperty(Object3D.prototype, "activeSelf", {
17
+ get: function () {
18
+ return this.visible;
19
+ },
20
+ set: function (val: boolean | number) {
21
+ const state = typeof val === "number" ? val > 0.5 : val;
22
+ this.visible = state;
23
+ }
24
+ });
25
+ }
16
26
 
17
27
 
18
28
  // do we still need this?
@@ -20,72 +30,38 @@ Object3D.prototype["SetActive"] = function (active: boolean) {
20
30
  this.visible = active;
21
31
  }
22
32
 
23
- Object3D.prototype["addNewComponent"] = function <T extends Behaviour>(type: ConstructorConcrete<T>) {
24
- return GameObject.addNewComponent(this, type);
33
+ Object3D.prototype["addNewComponent"] = function <T extends Component>(type: ConstructorConcrete<T>) {
34
+ return addNewComponentInstance(this, new type());
25
35
  }
26
36
 
27
37
  Object3D.prototype["removeComponent"] = function (inst: Component) {
28
- return GameObject.removeComponent(inst);
38
+ return removeComponent(this, inst);
29
39
  }
30
40
 
31
- Object3D.prototype["getOrAddComponent"] = function <T>(typeName: Constructor<T> | null): T {
32
- return GameObject.getOrAddComponent(this, typeName);
41
+ Object3D.prototype["getOrAddComponent"] = function <T extends IComponent>(typeName: ConstructorConcrete<T>): T {
42
+ return getOrAddComponent<T>(this, typeName);
33
43
  }
34
44
 
35
- Object3D.prototype["getComponent"] = function <T>(type: Constructor<T>) {
36
- return GameObject.getComponent(this, type);
45
+ Object3D.prototype["getComponent"] = function <T extends IComponent>(type: Constructor<T>) {
46
+ return getComponent(this, type);
37
47
  }
38
48
 
39
- Object3D.prototype["getComponents"] = function <T>(type: Constructor<T>, arr?: []) {
40
- return GameObject.getComponents(this, type, arr);
49
+ Object3D.prototype["getComponents"] = function <T extends IComponent>(type: Constructor<T>, arr?: []) {
50
+ return getComponents(this, type, arr);
41
51
  }
42
52
 
43
- Object3D.prototype["getComponentInChildren"] = function <T>(type: Constructor<T>) {
44
- return GameObject.getComponentInChildren(this, type);
53
+ Object3D.prototype["getComponentInChildren"] = function <T extends IComponent>(type: Constructor<T>) {
54
+ return getComponentInChildren(this, type);
45
55
  }
46
56
 
47
- Object3D.prototype["getComponentsInChildren"] = function <T>(type: Constructor<T>, arr?: []) {
48
- return GameObject.getComponentsInChildren(this, type, arr);
57
+ Object3D.prototype["getComponentsInChildren"] = function <T extends IComponent>(type: Constructor<T>, arr?: []) {
58
+ return getComponentsInChildren(this, type, arr);
49
59
  }
50
60
 
51
- Object3D.prototype["getComponentInParent"] = function <T>(type: Constructor<T>) {
52
- return GameObject.getComponentInParent(this, type);
61
+ Object3D.prototype["getComponentInParent"] = function <T extends IComponent>(type: Constructor<T>) {
62
+ return getComponentInParent(this, type);
53
63
  }
54
64
 
55
65
  Object3D.prototype["getComponentsInParent"] = function <T>(type: Constructor<T>, arr?: []) {
56
- return GameObject.getComponentsInParent(this, type, arr);
66
+ return getComponentsInParent(this, type, arr);
57
67
  }
58
-
59
-
60
- // used to decorate cloned object3D objects with the same added components defined above
61
- const extensions = Object.keys(Object3D.prototype);
62
- const descriptors = new Array<PropertyDescriptor | undefined>();
63
- for (let i = 0; i < extensions.length; i++) {
64
- const key = extensions[i];
65
- const descriptor = Object.getOwnPropertyDescriptor(Object3D.prototype, key);
66
- if (descriptor) {
67
- descriptors.push(descriptor);
68
- }
69
- }
70
-
71
- export function apply(object: Object3D) {
72
- if (object[decorated]) return;
73
- object[decorated] = true;
74
-
75
- // const prototype = object.constructor.prototype;
76
-
77
- for (let i = 0; i < extensions.length; i++) {
78
- const key = extensions[i];
79
- const desc = descriptors[i];
80
- if (desc) {
81
- // if (prototype) {
82
- // const exists = Object.getOwnPropertyDescriptor(prototype, key);
83
- // if (exists) {
84
- // continue;
85
- // }
86
- // }
87
- // console.trace("DEFINE", object.name, key);
88
- Object.defineProperty(object, key, desc);
89
- }
90
- }
91
- }
@@ -0,0 +1,17 @@
1
+ import { applyPrototypeExtensions } from "./ExtensionUtils";
2
+ import { Mathf } from "../../engine/engine_math";
3
+ import { Vector3 } from "three";
4
+
5
+ export function apply(object: Vector3) {
6
+ if (object && object.isVector3 === true) {
7
+ console.log(object);
8
+ applyPrototypeExtensions(object);
9
+ }
10
+ }
11
+
12
+ Vector3.prototype["slerp"] = function (end: Vector3, t: number) {
13
+ const len1 = this.length();
14
+ const len2 = end.length();
15
+ const targetLen = Mathf.lerp(len1, len2, t);
16
+ return this.lerp(end, t).normalize().multiplyScalar(targetLen);
17
+ }