@needle-tools/engine 3.2.3-alpha → 3.2.4-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 (126) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/needle-engine.js +24012 -22890
  3. package/dist/needle-engine.min.js +363 -363
  4. package/dist/needle-engine.umd.cjs +369 -369
  5. package/lib/engine/api.d.ts +33 -11
  6. package/lib/engine/api.js +33 -11
  7. package/lib/engine/api.js.map +1 -1
  8. package/lib/engine/engine_addressables.d.ts +3 -3
  9. package/lib/engine/engine_addressables.js +0 -1
  10. package/lib/engine/engine_addressables.js.map +1 -1
  11. package/lib/engine/engine_context.d.ts +11 -12
  12. package/lib/engine/engine_context.js +16 -17
  13. package/lib/engine/engine_context.js.map +1 -1
  14. package/lib/engine/engine_fileloader.d.ts +2 -2
  15. package/lib/engine/engine_fileloader.js +2 -2
  16. package/lib/engine/engine_fileloader.js.map +1 -1
  17. package/lib/engine/engine_gameobject.d.ts +8 -8
  18. package/lib/engine/engine_gameobject.js +1 -1
  19. package/lib/engine/engine_gameobject.js.map +1 -1
  20. package/lib/engine/engine_gizmos.d.ts +2 -3
  21. package/lib/engine/engine_gizmos.js +3 -3
  22. package/lib/engine/engine_gizmos.js.map +1 -1
  23. package/lib/engine/engine_gltf_builtin_components.js +4 -5
  24. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  25. package/lib/engine/engine_input.d.ts +7 -7
  26. package/lib/engine/engine_input.js +12 -12
  27. package/lib/engine/engine_input.js.map +1 -1
  28. package/lib/engine/engine_license.js +2 -2
  29. package/lib/engine/engine_license.js.map +1 -1
  30. package/lib/engine/engine_mainloop_utils.d.ts +1 -1
  31. package/lib/engine/engine_mainloop_utils.js +1 -1
  32. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  33. package/lib/engine/engine_networking_auto.d.ts +1 -1
  34. package/lib/engine/engine_networking_auto.js.map +1 -1
  35. package/lib/engine/engine_networking_files.d.ts +4 -4
  36. package/lib/engine/engine_networking_files.js +4 -5
  37. package/lib/engine/engine_networking_files.js.map +1 -1
  38. package/lib/engine/engine_three_utils.d.ts +19 -19
  39. package/lib/engine/engine_three_utils.js +17 -18
  40. package/lib/engine/engine_three_utils.js.map +1 -1
  41. package/lib/engine/extensions/NEEDLE_components.d.ts +6 -5
  42. package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
  43. package/lib/engine/extensions/NEEDLE_lighting_settings.js +14 -6
  44. package/lib/engine/extensions/NEEDLE_lighting_settings.js.map +1 -1
  45. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +3 -4
  46. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +25 -26
  47. package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
  48. package/lib/engine-components/Animation.d.ts +6 -7
  49. package/lib/engine-components/Animation.js +5 -6
  50. package/lib/engine-components/Animation.js.map +1 -1
  51. package/lib/engine-components/Animator.d.ts +3 -4
  52. package/lib/engine-components/Animator.js.map +1 -1
  53. package/lib/engine-components/AnimatorController.js +3 -4
  54. package/lib/engine-components/AnimatorController.js.map +1 -1
  55. package/lib/engine-components/AudioListener.d.ts +2 -2
  56. package/lib/engine-components/AudioListener.js +2 -2
  57. package/lib/engine-components/AudioListener.js.map +1 -1
  58. package/lib/engine-components/AudioSource.d.ts +2 -2
  59. package/lib/engine-components/AudioSource.js +4 -4
  60. package/lib/engine-components/AudioSource.js.map +1 -1
  61. package/lib/engine-components/AvatarLoader.d.ts +7 -7
  62. package/lib/engine-components/AvatarLoader.js +3 -4
  63. package/lib/engine-components/AvatarLoader.js.map +1 -1
  64. package/lib/engine-components/AxesHelper.js.map +1 -1
  65. package/lib/engine-components/BasicIKConstraint.js +2 -2
  66. package/lib/engine-components/BasicIKConstraint.js.map +1 -1
  67. package/lib/engine-components/BoxHelperComponent.d.ts +5 -5
  68. package/lib/engine-components/BoxHelperComponent.js +6 -6
  69. package/lib/engine-components/BoxHelperComponent.js.map +1 -1
  70. package/lib/engine-components/Component.d.ts +45 -47
  71. package/lib/engine-components/Component.js +16 -17
  72. package/lib/engine-components/Component.js.map +1 -1
  73. package/lib/engine-components/DragControls.d.ts +3 -3
  74. package/lib/engine-components/DragControls.js +22 -24
  75. package/lib/engine-components/DragControls.js.map +1 -1
  76. package/lib/engine-components/api.d.ts +3 -0
  77. package/lib/engine-components/api.js +3 -0
  78. package/lib/engine-components/api.js.map +1 -1
  79. package/lib/engine-components/ui/Utils.d.ts +4 -3
  80. package/lib/engine-components/ui/Utils.js.map +1 -1
  81. package/lib/engine-components-experimental/api.d.ts +1 -0
  82. package/lib/engine-components-experimental/api.js +2 -0
  83. package/lib/engine-components-experimental/api.js.map +1 -0
  84. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +2 -1
  85. package/lib/engine-components-experimental/networking/PlayerSync.js +18 -1
  86. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
  87. package/lib/needle-engine.d.ts +1 -5
  88. package/lib/needle-engine.js +4 -5
  89. package/lib/needle-engine.js.map +1 -1
  90. package/lib/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +1 -1
  92. package/plugins/vite/license.js +2 -2
  93. package/src/engine/api.ts +39 -20
  94. package/src/engine/codegen/register_types.js +2 -2
  95. package/src/engine/engine_addressables.ts +6 -7
  96. package/src/engine/engine_context.ts +31 -28
  97. package/src/engine/engine_fileloader.js +2 -2
  98. package/src/engine/engine_gameobject.ts +21 -21
  99. package/src/engine/engine_gizmos.ts +5 -6
  100. package/src/engine/engine_gltf_builtin_components.ts +9 -10
  101. package/src/engine/engine_input.ts +17 -18
  102. package/src/engine/engine_license.ts +2 -2
  103. package/src/engine/engine_mainloop_utils.ts +5 -5
  104. package/src/engine/engine_networking_auto.ts +1 -1
  105. package/src/engine/engine_networking_files.ts +10 -11
  106. package/src/engine/engine_three_utils.ts +37 -37
  107. package/src/engine/extensions/NEEDLE_components.ts +7 -6
  108. package/src/engine/extensions/NEEDLE_lighting_settings.ts +15 -6
  109. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +29 -30
  110. package/src/engine-components/Animation.ts +17 -19
  111. package/src/engine-components/Animator.ts +4 -5
  112. package/src/engine-components/AnimatorController.ts +16 -17
  113. package/src/engine-components/AudioListener.ts +4 -4
  114. package/src/engine-components/AudioSource.ts +8 -8
  115. package/src/engine-components/AvatarLoader.ts +15 -16
  116. package/src/engine-components/AxesHelper.ts +1 -1
  117. package/src/engine-components/BasicIKConstraint.ts +2 -2
  118. package/src/engine-components/BoxHelperComponent.ts +13 -13
  119. package/src/engine-components/Component.ts +65 -68
  120. package/src/engine-components/DragControls.ts +42 -43
  121. package/src/engine-components/ParticleSystemModules.ts +1483 -1483
  122. package/src/engine-components/api.ts +3 -0
  123. package/src/engine-components/ui/Utils.ts +4 -4
  124. package/src/engine-components-experimental/api.ts +1 -0
  125. package/src/engine-components-experimental/networking/PlayerSync.ts +17 -4
  126. package/src/needle-engine.ts +5 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "3.2.3-alpha",
3
+ "version": "3.2.4-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",
@@ -7,11 +7,11 @@ export const needleLicense = (command, config, userSettings) => {
7
7
  name: "needle-license",
8
8
  enforce: 'pre',
9
9
  async transform(src, id) {
10
- if (id.includes("engine/engine_license.ts")) {
10
+ if (id.includes("engine/engine_license") || id.includes("needle-tools_engine.js")) {
11
11
  const needleConfig = await loadConfig();
12
12
  if (needleConfig) {
13
13
  if (needleConfig.hasProLicense !== undefined && typeof needleConfig.hasProLicense === "boolean") {
14
- src = src.replace("const HAS_LICENSE = false;", "const HAS_LICENSE = " + needleConfig.hasProLicense + ";");
14
+ src = src.replace("NEEDLE_ENGINE_COMMERCIAL_USE_LICENSE = false;", "NEEDLE_ENGINE_COMMERCIAL_USE_LICENSE = " + needleConfig.hasProLicense + ";");
15
15
  return { code: src, map: null }
16
16
  }
17
17
  }
package/src/engine/api.ts CHANGED
@@ -1,20 +1,46 @@
1
- export * from "./engine_constants";
2
- export { TypeStore } from "./engine_typestore";
3
- export * from "./engine_context_registry";
1
+
4
2
  export * from "./extensions/extensions"
5
- export { InstancingUtil } from "./engine_instancing";
6
- export * from "./engine_gameobject";
3
+ export * from "./engine_addressables";
4
+ export * from "./engine_application"
5
+ export * from "./engine_assetdatabase"
6
+ export * from "./engine_components_internal";
7
7
  export * from "./engine_components";
8
8
  export * from "./engine_components_internal";
9
- export { AssetReference, ImageReference } from "./engine_addressables";
10
- export { Context, FrameEvent } from "./engine_setup";
11
- export * from "./debug/debug";
12
- export { validate } from "./engine_util_decorator"
9
+ export * from "./engine_context_registry"
10
+ export * from "./engine_context";
11
+ export * from "./engine_coroutine"
12
+ export * from "./engine_constants";
13
+ export * from "./debug";
14
+ export * from "./engine_element";
13
15
  export { Gizmos } from "./engine_gizmos"
16
+ export * from "./engine_gltf";
17
+ export * from "./engine_hot_reload";
18
+ export * from "./engine_gameobject";
19
+ export * from "./engine_networking";
20
+ export { syncField } from "./engine_networking_auto";
21
+ export * from "./engine_networking_files";
22
+ export * from "./engine_networking_instantiate";
23
+ export * from "./engine_networking_utils";
24
+ export * from "./engine_patcher"
25
+ export * from "./engine_playerview"
26
+ export * from "./engine_physics"
27
+ export * from "./engine_physics.types"
28
+ export * from "./engine_input";
29
+ export * from "./engine_math";
30
+ export * from "./js-extensions";
14
31
  export * from "./engine_scenetools";
15
- export * from "./engine_math"
16
- export * from "./js-extensions"
17
- export { hasProLicense } from "./engine_license"
32
+ export * from "./engine_serialization";
33
+ export * from "./engine_texture";
34
+ export * from "./engine_time";
35
+ export * from "./engine_types";
36
+ export * from "./engine_utils_screenshot";
37
+ export * from "./engine_web_api";
38
+
39
+ export { TypeStore } from "./engine_typestore";
40
+
41
+ export { InstancingUtil } from "./engine_instancing";
42
+ export { validate, prefix } from "./engine_util_decorator"
43
+ export { hasProLicense } from "./engine_license";
18
44
 
19
45
  export {
20
46
  // url params
@@ -32,11 +58,4 @@ export {
32
58
  isiOS,
33
59
  isSafari,
34
60
  isQuest,
35
- } from "./engine_utils";
36
-
37
- export {
38
- setUsageTrackingEnabled,
39
- isUsageTrackingEnabled,
40
- findUsers,
41
- getUserCount
42
- } from "./engine_assetdatabase"
61
+ } from "./engine_utils";
@@ -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";
@@ -184,7 +184,7 @@ import { XRGrabModel } from "../../engine-components/WebXRGrabRendering";
184
184
  import { XRGrabRendering } from "../../engine-components/WebXRGrabRendering";
185
185
  import { XRRig } from "../../engine-components/WebXRRig";
186
186
  import { XRState } from "../../engine-components/XRFlag";
187
-
187
+
188
188
  // Register types
189
189
  TypeStore.add("__Ignore", __Ignore);
190
190
  TypeStore.add("AlignmentConstraint", AlignmentConstraint);
@@ -1,11 +1,10 @@
1
1
  import { getParam, resolveUrl } from "../engine/engine_utils";
2
- // import { loadSync, parseSync } from "./engine_scenetools";
3
2
  import { SerializationContext, TypeSerializer } from "./engine_serialization_core";
4
3
  import { Context } from "./engine_setup";
5
- import { Group, Object3D, Scene, Texture } from "three";
4
+ import { Group, Object3D, Texture } from "three";
6
5
  import { processNewScripts } from "./engine_mainloop_utils";
7
6
  import { registerPrefabProvider, syncInstantiate } from "./engine_networking_instantiate";
8
- import { download, hash } from "./engine_web_api";
7
+ import { download } from "./engine_web_api";
9
8
  import { getLoader } from "./engine_gltf";
10
9
  import { SourceIdentifier } from "./engine_types";
11
10
  import { destroy, instantiate, InstantiateOptions, isDestroyed } from "./engine_gameobject";
@@ -185,11 +184,11 @@ export class AssetReference {
185
184
  }
186
185
  }
187
186
 
188
- async instantiate(parent?: THREE.Object3D | InstantiateOptions) {
187
+ async instantiate(parent?: Object3D | InstantiateOptions) {
189
188
  return this.onInstantiate(parent, false);
190
189
  }
191
190
 
192
- async instantiateSynced(parent?: THREE.Object3D | InstantiateOptions, saveOnServer: boolean = true) {
191
+ async instantiateSynced(parent?: Object3D | InstantiateOptions, saveOnServer: boolean = true) {
193
192
  return this.onInstantiate(parent, true, saveOnServer);
194
193
  }
195
194
 
@@ -211,7 +210,7 @@ export class AssetReference {
211
210
  }
212
211
  }
213
212
 
214
- private async onInstantiate(parent?: THREE.Object3D | InstantiateOptions, networked: boolean = false, saveOnServer?: boolean) {
213
+ private async onInstantiate(parent?: Object3D | InstantiateOptions, networked: boolean = false, saveOnServer?: boolean) {
215
214
  const context = Context.Current;
216
215
  if (!parent) parent = context.scene;
217
216
  if (this.mustLoad) {
@@ -282,7 +281,7 @@ export class AssetReference {
282
281
  * and call destroy on the player marker root
283
282
  * @returns the scene root object if the asset was a glb/gltf
284
283
  */
285
- private tryGetActualGameObjectRoot(asset: any): THREE.Object3D | null {
284
+ private tryGetActualGameObjectRoot(asset: any): Object3D | null {
286
285
  if (asset && asset.scene) {
287
286
  // some exporters produce additional root objects
288
287
  const scene = asset.scene as Group;
@@ -1,5 +1,8 @@
1
- import { Camera, Clock, DepthTexture, PerspectiveCamera, WebGLRenderer, WebGLRenderTarget } from 'three'
2
- import * as THREE from 'three'
1
+ import { BufferGeometry, Camera, Clock, Color, DepthTexture, Group,
2
+ Material, NearestFilter, NoToneMapping, Object3D, PCFSoftShadowMap,
3
+ PerspectiveCamera, RGBAFormat, Scene, sRGBEncoding,
4
+ Texture, WebGLRenderer, WebGLRenderTarget
5
+ } from 'three'
3
6
  import { Input } from './engine_input';
4
7
  import { Physics } from './engine_physics';
5
8
  import { Time } from './engine_time';
@@ -50,7 +53,7 @@ export class ContextArgs {
50
53
  name?: string;
51
54
  alias?: string;
52
55
  domElement: HTMLElement | null;
53
- renderer?: THREE.WebGLRenderer = undefined;
56
+ renderer?: WebGLRenderer = undefined;
54
57
  hash?: string;
55
58
 
56
59
  constructor(domElement: HTMLElement | null) {
@@ -74,7 +77,7 @@ export enum XRSessionMode {
74
77
  ImmersiveAR = "immersive-ar",
75
78
  }
76
79
 
77
- export declare type OnBeforeRenderCallback = (renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, geometry: THREE.BufferGeometry, material: THREE.Material, group: THREE.Group) => void
80
+ export declare type OnBeforeRenderCallback = (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group) => void
78
81
 
79
82
 
80
83
  export function registerComponent(script: IComponent, context?: Context) {
@@ -175,8 +178,8 @@ export class Context implements IContext {
175
178
  }
176
179
  private _currentFrameEvent: FrameEvent = FrameEvent.Undefined;
177
180
 
178
- scene: THREE.Scene;
179
- renderer: THREE.WebGLRenderer;
181
+ scene: Scene;
182
+ renderer: WebGLRenderer;
180
183
  composer: EffectComposer | null = null;
181
184
 
182
185
  // all scripts
@@ -191,7 +194,7 @@ export class Context implements IContext {
191
194
  scripts_WithCorroutines: IComponent[] = [];
192
195
  coroutines: { [FrameEvent: number]: Array<CoroutineData> } = {}
193
196
 
194
- get mainCamera(): THREE.Camera | null {
197
+ get mainCamera(): Camera | null {
195
198
  if (this.mainCameraComponent) {
196
199
  const cam = this.mainCameraComponent as ICamera;
197
200
  if (!cam.cam)
@@ -251,21 +254,21 @@ export class Context implements IContext {
251
254
 
252
255
  // some tonemapping other than "NONE" is required for adjusting exposure with EXR environments
253
256
  this.renderer.toneMappingExposure = 1; // range [0...inf] instead of the usual -15..15
254
- this.renderer.toneMapping = THREE.NoToneMapping; // could also set to LinearToneMapping, ACESFilmicToneMapping
257
+ this.renderer.toneMapping = NoToneMapping; // could also set to LinearToneMapping, ACESFilmicToneMapping
255
258
 
256
- this.renderer.setClearColor(new THREE.Color('lightgrey'), 0);
259
+ this.renderer.setClearColor(new Color('lightgrey'), 0);
257
260
  // @ts-ignore
258
261
  this.renderer.antialias = true;
259
262
  // @ts-ignore
260
263
  this.renderer.alpha = false;
261
264
  this.renderer.shadowMap.enabled = true;
262
- this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
265
+ this.renderer.shadowMap.type = PCFSoftShadowMap;
263
266
  this.renderer.setSize(this.domWidth, this.domHeight);
264
- this.renderer.outputEncoding = THREE.sRGBEncoding;
267
+ this.renderer.outputEncoding = sRGBEncoding;
265
268
  this.renderer.physicallyCorrectLights = true;
266
269
  }
267
270
 
268
- this.scene = new THREE.Scene();
271
+ this.scene = new Scene();
269
272
 
270
273
  ContextRegistry.register(this);
271
274
 
@@ -328,7 +331,7 @@ export class Context implements IContext {
328
331
  }
329
332
  }
330
333
 
331
- updateAspect(camera: THREE.PerspectiveCamera, width?: number, height?: number) {
334
+ updateAspect(camera: PerspectiveCamera, width?: number, height?: number) {
332
335
  if (!camera) return;
333
336
  if (width === undefined)
334
337
  width = this.domWidth;
@@ -410,7 +413,7 @@ export class Context implements IContext {
410
413
  if (index >= 0) this._cameraStack.splice(index, 1);
411
414
  this._cameraStack.push(cam);
412
415
  this.mainCameraComponent = cam;
413
- const camera = cam.cam as THREE.PerspectiveCamera;
416
+ const camera = cam.cam as PerspectiveCamera;
414
417
  if (camera.isPerspectiveCamera)
415
418
  this.updateAspect(camera);
416
419
  (this.mainCameraComponent as ICamera)?.applyClearFlagsIfIsActiveCamera();
@@ -434,7 +437,7 @@ export class Context implements IContext {
434
437
  private _onBeforeRenderListeners: { [key: string]: OnBeforeRenderCallback[] } = {};
435
438
 
436
439
  /** use this to subscribe to onBeforeRender events on threejs objects */
437
- addBeforeRenderListener(target: THREE.Object3D, callback: OnBeforeRenderCallback) {
440
+ addBeforeRenderListener(target: Object3D, callback: OnBeforeRenderCallback) {
438
441
  if (!this._onBeforeRenderListeners[target.uuid]) {
439
442
  this._onBeforeRenderListeners[target.uuid] = [];
440
443
  const onBeforeRenderCallback = (renderer, scene, camera, geometry, material, group) => {
@@ -450,7 +453,7 @@ export class Context implements IContext {
450
453
  this._onBeforeRenderListeners[target.uuid].push(callback);
451
454
  }
452
455
 
453
- removeBeforeRenderListener(target: THREE.Object3D, callback: OnBeforeRenderCallback) {
456
+ removeBeforeRenderListener(target: Object3D, callback: OnBeforeRenderCallback) {
454
457
  if (this._onBeforeRenderListeners[target.uuid]) {
455
458
  const arr = this._onBeforeRenderListeners[target.uuid];
456
459
  const idx = arr.indexOf(callback);
@@ -473,11 +476,11 @@ export class Context implements IContext {
473
476
  this._requireColorTexture = val;
474
477
  }
475
478
 
476
- get depthTexture(): THREE.DepthTexture | null {
479
+ get depthTexture(): DepthTexture | null {
477
480
  return this._renderTarget?.depthTexture || null;
478
481
  }
479
482
 
480
- get opaqueColorTexture(): THREE.Texture | null {
483
+ get opaqueColorTexture(): Texture | null {
481
484
  return this._renderTarget?.texture || null;
482
485
  }
483
486
 
@@ -822,17 +825,17 @@ export class Context implements IContext {
822
825
  if (!this.mainCamera) return;
823
826
  if (!this._requireDepthTexture && !this._requireColorTexture) return;
824
827
  if (!this._renderTarget) {
825
- this._renderTarget = new THREE.WebGLRenderTarget(this.domWidth, this.domHeight);
828
+ this._renderTarget = new WebGLRenderTarget(this.domWidth, this.domHeight);
826
829
  if (this._requireDepthTexture) {
827
830
  const dt = new DepthTexture(this.domWidth, this.domHeight);;
828
831
  this._renderTarget.depthTexture = dt;
829
832
  }
830
833
  if (this._requireColorTexture) {
831
- this._renderTarget.texture = new THREE.Texture();
834
+ this._renderTarget.texture = new Texture();
832
835
  this._renderTarget.texture.generateMipmaps = false;
833
- this._renderTarget.texture.minFilter = THREE.NearestFilter;
834
- this._renderTarget.texture.magFilter = THREE.NearestFilter;
835
- this._renderTarget.texture.format = THREE.RGBAFormat;
836
+ this._renderTarget.texture.minFilter = NearestFilter;
837
+ this._renderTarget.texture.magFilter = NearestFilter;
838
+ this._renderTarget.texture.format = RGBAFormat;
836
839
  }
837
840
  }
838
841
  const rt = this._renderTarget;
@@ -909,24 +912,24 @@ export class Context implements IContext {
909
912
  }
910
913
 
911
914
 
912
- // const scene = new THREE.Scene();
915
+ // const scene = new Scene();
913
916
  // const useComposer = utils.getParam("postfx");
914
917
  // const renderer = new WebGLRenderer({ antialias: true });
915
918
  // const composer = useComposer ? new EffectComposer(renderer) : undefined;
916
919
 
917
- // renderer.setClearColor(new THREE.Color('lightgrey'), 0)
920
+ // renderer.setClearColor(new Color('lightgrey'), 0)
918
921
  // renderer.antialias = true;
919
922
  // renderer.alpha = false;
920
923
  // renderer.shadowMap.enabled = true;
921
- // renderer.shadowMap.type = THREE.PCFSoftShadowMap;
924
+ // renderer.shadowMap.type = PCFSoftShadowMap;
922
925
  // renderer.setSize(window.innerWidth, window.innerHeight);
923
- // renderer.outputEncoding = THREE.sRGBEncoding;
926
+ // renderer.outputEncoding = sRGBEncoding;
924
927
  // renderer.physicallyCorrectLights = true;
925
928
  // document.body.appendChild(renderer.domElement);
926
929
 
927
930
  // // generation pushes loading requests in this array
928
931
  // const sceneData: {
929
- // mainCamera: THREE.Camera | undefined
932
+ // mainCamera: Camera | undefined
930
933
  // } = {
931
934
  // preparing: [],
932
935
  // resolving: [],
@@ -1,6 +1,6 @@
1
- import * as THREE from "three";
1
+ import { FileLoader } from "three";
2
2
 
3
- export const loader = new THREE.FileLoader();
3
+ export const loader = new FileLoader();
4
4
 
5
5
  export async function loadFileAsync(url) {
6
6
  return new Promise((resolve, reject) => {
@@ -1,4 +1,4 @@
1
- import { BufferGeometry, InstancedBufferGeometry, Material, Mesh, Object3D, Texture } from "three";
1
+ import { Bone, Object3D, Quaternion, SkinnedMesh, Vector3 } from "three";
2
2
  import { processNewScripts } from "./engine_mainloop_utils";
3
3
  import { InstantiateIdProvider } from "./engine_networking_instantiate";
4
4
  import { Context, registerComponent } from "./engine_setup";
@@ -36,9 +36,9 @@ export class InstantiateOptions {
36
36
  parent?: string | undefined | Object3D;
37
37
  /** for duplicatable parenting */
38
38
  keepWorldPosition?: boolean
39
- position?: THREE.Vector3 | undefined;
40
- rotation?: THREE.Quaternion | undefined;
41
- scale?: THREE.Vector3 | undefined;
39
+ position?: Vector3 | undefined;
40
+ rotation?: Quaternion | undefined;
41
+ scale?: Vector3 | undefined;
42
42
 
43
43
  visible?: boolean | undefined;
44
44
 
@@ -88,14 +88,14 @@ export function isActiveInHierarchy(go: Object3D): boolean {
88
88
  return go[activeInHierarchyFieldName] || isUsingInstancing(go);
89
89
  }
90
90
 
91
- export function markAsInstancedRendered(go: THREE.Object3D, instanced: boolean) {
91
+ export function markAsInstancedRendered(go: Object3D, instanced: boolean) {
92
92
  go[$isUsingInstancing] = instanced;
93
93
  }
94
94
 
95
- export function isUsingInstancing(instance: THREE.Object3D): boolean { return InstancingUtil.isUsingInstancing(instance); }
95
+ export function isUsingInstancing(instance: Object3D): boolean { return InstancingUtil.isUsingInstancing(instance); }
96
96
 
97
97
 
98
- export function findByGuid(guid: string, hierarchy: THREE.Object3D): GameObject | IComponent | null | undefined {
98
+ export function findByGuid(guid: string, hierarchy: Object3D): GameObject | IComponent | null | undefined {
99
99
  return tryFindObject(guid, hierarchy, true, true);
100
100
  }
101
101
 
@@ -159,7 +159,7 @@ function internalDestroy(instance: Object3D | Component, recursive: boolean = tr
159
159
 
160
160
  declare type ForEachComponentCallback = (comp: Component) => any;
161
161
 
162
- export function foreachComponent(instance: THREE.Object3D, cb: ForEachComponentCallback, recursive: boolean = true): any {
162
+ export function foreachComponent(instance: Object3D, cb: ForEachComponentCallback, recursive: boolean = true): any {
163
163
  return internalForEachComponent(instance, cb, recursive);
164
164
  }
165
165
 
@@ -198,8 +198,8 @@ function internalForEachComponent(instance: Object3D, cb: ForEachComponentCallba
198
198
  }
199
199
 
200
200
  declare class NewGameObjectReferenceInfo {
201
- original: THREE.Object3D;
202
- clone: THREE.Object3D;
201
+ original: Object3D;
202
+ clone: Object3D;
203
203
  }
204
204
 
205
205
  export function instantiate(instance: GameObject | Object3D | null, opts: InstantiateOptions | null = null): GameObject | null {
@@ -210,7 +210,7 @@ export function instantiate(instance: GameObject | Object3D | null, opts: Instan
210
210
  // if x is defined assume this is a vec3 - this is just to not break everything at once and stay a little bit backwards compatible
211
211
  if (opts["x"] !== undefined) {
212
212
  options = new InstantiateOptions();
213
- options.position = opts as unknown as THREE.Vector3;
213
+ options.position = opts as unknown as Vector3;
214
214
  }
215
215
  else {
216
216
  // if (opts instanceof InstantiateOptions)
@@ -276,12 +276,12 @@ export function instantiate(instance: GameObject | Object3D | null, opts: Instan
276
276
 
277
277
 
278
278
  function internalInstantiate(
279
- context: Context, instance: GameObject | THREE.Object3D, opts: InstantiateOptions | null,
279
+ context: Context, instance: GameObject | Object3D, opts: InstantiateOptions | null,
280
280
  componentsList: Array<Component>,
281
281
  newGameObjectsMap: { [key: string]: NewGameObjectReferenceInfo },
282
282
  skinnedMeshesMap: { [key: string]: NewGameObjectReferenceInfo }
283
283
  )
284
- : GameObject | THREE.Object3D | null {
284
+ : GameObject | Object3D | null {
285
285
  if (!instance) return null;
286
286
  // prepare, remove things that dont work out of the box
287
287
  // e.g. user data we want to manually clone
@@ -290,7 +290,7 @@ function internalInstantiate(
290
290
  instance.userData = {};
291
291
  const children = instance.children;
292
292
  instance.children = [];
293
- let clone: THREE.Object3D | GameObject;
293
+ let clone: Object3D | GameObject;
294
294
  clone = instance.clone(false);
295
295
  apply(clone);
296
296
  // if(instance[$originalGuid])
@@ -408,9 +408,9 @@ function resolveAndBindSkinnedMeshBones(
408
408
  ) {
409
409
  for (const key in skinnedMeshes) {
410
410
  const val = skinnedMeshes[key];
411
- const original = val.original as THREE.SkinnedMesh;
411
+ const original = val.original as SkinnedMesh;
412
412
  const originalSkeleton = original.skeleton;
413
- const clone = val.clone as THREE.SkinnedMesh;
413
+ const clone = val.clone as SkinnedMesh;
414
414
  // clone.updateWorldMatrix(true, true);
415
415
  if (!originalSkeleton) {
416
416
  console.warn("Skinned mesh has no skeleton?", val);
@@ -426,16 +426,16 @@ function resolveAndBindSkinnedMeshBones(
426
426
  // clone.bindMatrix.multiplyScalar(.025);
427
427
  // console.assert(originalSkeleton.uuid !== clonedSkeleton.uuid);
428
428
  // console.assert(originalBones.length === clonedSkeleton.bones.length);
429
- const bones: Array<THREE.Bone> = [];
429
+ const bones: Array<Bone> = [];
430
430
  clonedSkeleton.bones = bones;
431
431
  for (let i = 0; i < originalBones.length; i++) {
432
432
  const bone = originalBones[i];
433
433
  const newBoneInfo = newObjectsMap[bone.uuid];
434
- const clonedBone = newBoneInfo.clone as THREE.Bone;
434
+ const clonedBone = newBoneInfo.clone as Bone;
435
435
  // console.log("NEW BONE: ", clonedBone, "BEFORE", newBoneInfo.original);
436
436
  bones.push(clonedBone);
437
437
  }
438
- // clone.skeleton = new THREE.Skeleton(bones);
438
+ // clone.skeleton = new Skeleton(bones);
439
439
  // clone.skeleton.update();
440
440
  // clone.pose();
441
441
  // clone.scale.set(1,1,1);
@@ -443,7 +443,7 @@ function resolveAndBindSkinnedMeshBones(
443
443
  // console.log("ORIG", original, "CLONE", clone);
444
444
  }
445
445
  for (const key in skinnedMeshes) {
446
- const clone = skinnedMeshes[key].clone as THREE.SkinnedMesh;
446
+ const clone = skinnedMeshes[key].clone as SkinnedMesh;
447
447
  clone.skeleton.update();
448
448
  // clone.skeleton.calculateInverses();
449
449
  clone.bind(clone.skeleton, clone.bindMatrix);
@@ -532,7 +532,7 @@ function resolveReferences(newObjectsMap: { [key: string]: NewGameObjectReferenc
532
532
 
533
533
  }
534
534
 
535
- function postProcessNewInstance(copy: THREE.Object3D, key: string, value: IComponent | Object3D | any, newObjectsMap: { [key: string]: NewGameObjectReferenceInfo }) {
535
+ function postProcessNewInstance(copy: Object3D, key: string, value: IComponent | Object3D | any, newObjectsMap: { [key: string]: NewGameObjectReferenceInfo }) {
536
536
  if (value === null || value === undefined) return;
537
537
  if ((value as IComponent).isComponent === true) {
538
538
  const originalGameObjectReference = value["gameObject"];
@@ -1,7 +1,6 @@
1
- import * as THREE from 'three';
2
1
  import { BufferAttribute, Line, BoxGeometry, EdgesGeometry, Color, LineSegments, LineBasicMaterial, Object3D, Mesh, SphereGeometry, ColorRepresentation, Vector3, Box3, Quaternion, CylinderGeometry } from 'three';
3
2
  import { Context } from './engine_setup';
4
- import { setWorldPosition, setWorldPositionXYZ } from './engine_three_utils';
3
+ import { setWorldPositionXYZ } from './engine_three_utils';
5
4
  import { Vec3, Vec4 } from './engine_types';
6
5
 
7
6
  const _tmp = new Vector3();
@@ -109,12 +108,12 @@ export class Gizmos {
109
108
  }
110
109
 
111
110
  const box: BoxGeometry = new BoxGeometry(1, 1, 1);
112
- export function CreateWireCube(col: THREE.ColorRepresentation | null = null): THREE.LineSegments {
111
+ export function CreateWireCube(col: ColorRepresentation | null = null): LineSegments {
113
112
  const color = new Color(col ?? 0xdddddd);
114
- // const material = new THREE.MeshBasicMaterial();
115
- // material.color = new THREE.Color(col ?? 0xdddddd);
113
+ // const material = new MeshBasicMaterial();
114
+ // material.color = new Color(col ?? 0xdddddd);
116
115
  // material.wireframe = true;
117
- // const box = new THREE.Mesh(box, material);
116
+ // const box = new Mesh(box, material);
118
117
  // box.name = "BOX_GIZMO";
119
118
  const edges = new EdgesGeometry(box);
120
119
  const line = new LineSegments(edges, new LineBasicMaterial({ color: color }));
@@ -1,7 +1,5 @@
1
1
  import "./codegen/register_types";
2
2
  import { TypeStore } from "./engine_typestore";
3
- import * as THREE from "three";
4
- // import { GameObject } from "../engine-components/Component";
5
3
  import { InstantiateIdProvider } from "./engine_networking_instantiate"
6
4
  import { Context } from "./engine_setup";
7
5
  import { deserializeObject, serializeObject } from "./engine_serialization";
@@ -15,6 +13,7 @@ import { addNewComponent } from "./engine_components";
15
13
  import { getParam } from "./engine_utils";
16
14
  import { LogType, showBalloonMessage } from "./debug/debug";
17
15
  import { isLocalNetwork } from "./engine_networking_utils";
16
+ import { Object3D } from "three";
18
17
 
19
18
 
20
19
  const debug = debugExtension;
@@ -43,7 +42,7 @@ const $context_deserialize_queue = Symbol("deserialize-queue");
43
42
 
44
43
  export async function createBuiltinComponents(context: Context, gltfId: SourceIdentifier, gltf, seed: number | null | UIDProvider = null, extension?: NEEDLE_components) {
45
44
  if (!gltf) return;
46
- const lateResolve: Array<(gltf: THREE.Object3D) => {}> = [];
45
+ const lateResolve: Array<(gltf: Object3D) => {}> = [];
47
46
 
48
47
  let idProvider: UIDProvider | null = seed as UIDProvider;
49
48
  if (typeof idProvider === "number") {
@@ -145,15 +144,15 @@ declare interface IGltfBuiltinComponentData {
145
144
  declare class DeserializeData {
146
145
  instance: any;
147
146
  compData: IGltfbuiltinComponent;
148
- obj: THREE.Object3D;
147
+ obj: Object3D;
149
148
  }
150
149
 
151
- declare type LateResolveCallback = (gltf: THREE.Object3D) => void;
150
+ declare type LateResolveCallback = (gltf: Object3D) => void;
152
151
 
153
152
  const unknownComponentsBuffer: Array<string> = [];
154
153
 
155
154
 
156
- async function onCreateBuiltinComponents(context: SerializationContext, obj: THREE.Object3D,
155
+ async function onCreateBuiltinComponents(context: SerializationContext, obj: Object3D,
157
156
  deserialize: DeserializeData[], lateResolve: LateResolveCallback[]) {
158
157
  if (!obj) return;
159
158
 
@@ -324,13 +323,13 @@ function handleDeserialization(data: DeserializeData, context: SerializationCont
324
323
  // function tryResolveType(type, entry): any | undefined {
325
324
  // switch (type) {
326
325
  // case "Vector2":
327
- // return new THREE.Vector2(entry.x, entry.y);
326
+ // return new Vector2(entry.x, entry.y);
328
327
  // case "Vector3":
329
- // return new THREE.Vector3(entry.x, entry.y, entry.z);
328
+ // return new Vector3(entry.x, entry.y, entry.z);
330
329
  // case "Vector4":
331
- // return new THREE.Vector4(entry.x, entry.y, entry.z, entry.w);
330
+ // return new Vector4(entry.x, entry.y, entry.z, entry.w);
332
331
  // case "Quaternion":
333
- // return new THREE.Quaternion(entry.x, entry.y, entry.z, entry.w);
332
+ // return new Quaternion(entry.x, entry.y, entry.z, entry.w);
334
333
  // }
335
334
  // return undefined;
336
335
  // }
@@ -1,4 +1,3 @@
1
- import * as THREE from 'three';
2
1
  import { Vector2 } from 'three';
3
2
  import { showBalloonMessage, showBalloonWarning } from './debug/debug';
4
3
  import { assign } from './engine_serialization_core';
@@ -58,8 +57,8 @@ export class Input extends EventTarget {
58
57
  _doubleClickTimeThreshold = .2;
59
58
  _longPressTimeThreshold = 1;
60
59
 
61
- get mousePosition(): THREE.Vector2 { return this._pointerPositions[0]; };
62
- get mousePositionRC(): THREE.Vector2 { return this._pointerPositionsRC[0]; }
60
+ get mousePosition(): Vector2 { return this._pointerPositions[0]; };
61
+ get mousePositionRC(): Vector2 { return this._pointerPositionsRC[0]; }
63
62
  get mouseDown(): boolean { return this._pointerDown[0]; }
64
63
  get mouseUp(): boolean { return this._pointerUp[0]; }
65
64
  get mouseClick(): boolean { return this._pointerClick[0]; }
@@ -91,19 +90,19 @@ export class Input extends EventTarget {
91
90
  return count;
92
91
  }
93
92
 
94
- getPointerPosition(i: number): THREE.Vector2 | null {
93
+ getPointerPosition(i: number): Vector2 | null {
95
94
  if (i >= this._pointerPositions.length) return null;
96
95
  return this._pointerPositions[i];
97
96
  }
98
- getPointerPositionLastFrame(i: number): THREE.Vector2 | null {
97
+ getPointerPositionLastFrame(i: number): Vector2 | null {
99
98
  if (i >= this._pointerPositionsLastFrame.length) return null;
100
99
  return this._pointerPositionsLastFrame[i];
101
100
  }
102
- getPointerPositionDelta(i: number): THREE.Vector2 | null {
101
+ getPointerPositionDelta(i: number): Vector2 | null {
103
102
  if (i >= this._pointerPositionsDelta.length) return null;
104
103
  return this._pointerPositionsDelta[i];
105
104
  }
106
- getPointerPositionRC(i: number): THREE.Vector2 | null {
105
+ getPointerPositionRC(i: number): Vector2 | null {
107
106
  if (i >= this._pointerPositionsRC.length) return null;
108
107
  return this._pointerPositionsRC[i];
109
108
  }
@@ -213,11 +212,11 @@ export class Input extends EventTarget {
213
212
  private _pointerClick: boolean[] = [false];
214
213
  private _pointerDoubleClick: boolean[] = [false];
215
214
  private _pointerPressed: boolean[] = [false];
216
- private _pointerPositions: THREE.Vector2[] = [new THREE.Vector2()];
217
- private _pointerPositionsLastFrame: THREE.Vector2[] = [new THREE.Vector2()];
218
- private _pointerPositionsDelta: THREE.Vector2[] = [new THREE.Vector2()];
219
- private _pointerPositionsRC: THREE.Vector2[] = [new THREE.Vector2()];
220
- private _pointerPositionDown: THREE.Vector2[] = [new THREE.Vector2()];
215
+ private _pointerPositions: Vector2[] = [new Vector2()];
216
+ private _pointerPositionsLastFrame: Vector2[] = [new Vector2()];
217
+ private _pointerPositionsDelta: Vector2[] = [new Vector2()];
218
+ private _pointerPositionsRC: Vector2[] = [new Vector2()];
219
+ private _pointerPositionDown: Vector2[] = [new Vector2()];
221
220
  private _pointerDownTime: number[] = [];
222
221
  private _pointerUpTime: number[] = [];
223
222
  private _pointerUpTimestamp: number[] = [];
@@ -505,9 +504,9 @@ export class Input extends EventTarget {
505
504
  while (evt.button >= this._pointerTypes.length) this._pointerTypes.push(evt.pointerType);
506
505
  this._pointerTypes[evt.button] = evt.pointerType;
507
506
 
508
- while (evt.button >= this._pointerPositionDown.length) this._pointerPositionDown.push(new THREE.Vector2());
507
+ while (evt.button >= this._pointerPositionDown.length) this._pointerPositionDown.push(new Vector2());
509
508
  this._pointerPositionDown[evt.button].set(evt.clientX, evt.clientY);
510
- while (evt.button >= this._pointerPositions.length) this._pointerPositions.push(new THREE.Vector2());
509
+ while (evt.button >= this._pointerPositions.length) this._pointerPositions.push(new Vector2());
511
510
  this._pointerPositions[evt.button].set(evt.clientX, evt.clientY);
512
511
 
513
512
  if (evt.button >= this._pointerDownTime.length) this._pointerDownTime.push(0);
@@ -577,9 +576,9 @@ export class Input extends EventTarget {
577
576
 
578
577
  private updatePointerPosition(evt: PointerEventArgs) {
579
578
  // console.log("MOVE");
580
- while (evt.button >= this._pointerPositions.length) this._pointerPositions.push(new THREE.Vector2());
581
- while (evt.button >= this._pointerPositionsLastFrame.length) this._pointerPositionsLastFrame.push(new THREE.Vector2());
582
- while (evt.button >= this._pointerPositionsDelta.length) this._pointerPositionsDelta.push(new THREE.Vector2());
579
+ while (evt.button >= this._pointerPositions.length) this._pointerPositions.push(new Vector2());
580
+ while (evt.button >= this._pointerPositionsLastFrame.length) this._pointerPositionsLastFrame.push(new Vector2());
581
+ while (evt.button >= this._pointerPositionsDelta.length) this._pointerPositionsDelta.push(new Vector2());
583
582
 
584
583
  const lf = this._pointerPositionsLastFrame[evt.button];
585
584
  lf.copy(this._pointerPositions[evt.button]);
@@ -593,7 +592,7 @@ export class Input extends EventTarget {
593
592
  // we want to have the position 01 on the canvas for raycasting
594
593
  const px = evt.clientX;
595
594
  const py = evt.clientY;
596
- while (evt.button >= this._pointerPositionsRC.length) this._pointerPositionsRC.push(new THREE.Vector2());
595
+ while (evt.button >= this._pointerPositionsRC.length) this._pointerPositionsRC.push(new Vector2());
597
596
  const rc = this._pointerPositionsRC[evt.button];
598
597
  rc.set(px, py);
599
598
  this.convertScreenspaceToRaycastSpace(rc);