@needle-tools/engine 2.33.0-pre → 2.35.0-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 (266) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/needle-engine.d.ts +3045 -2855
  3. package/dist/needle-engine.js +457 -407
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +117 -67
  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 +16 -0
  15. package/lib/engine/engine_components.js +223 -0
  16. package/lib/engine/engine_components.js.map +1 -0
  17. package/lib/engine/engine_create_objects.d.ts +11 -0
  18. package/lib/engine/engine_create_objects.js +20 -0
  19. package/lib/engine/engine_create_objects.js.map +1 -0
  20. package/lib/engine/engine_element.js +2 -2
  21. package/lib/engine/engine_element.js.map +1 -1
  22. package/lib/engine/engine_gameobject.d.ts +33 -0
  23. package/lib/engine/engine_gameobject.js +449 -0
  24. package/lib/engine/engine_gameobject.js.map +1 -0
  25. package/lib/engine/engine_gltf.d.ts +13 -2
  26. package/lib/engine/engine_gltf.js +7 -1
  27. package/lib/engine/engine_gltf.js.map +1 -1
  28. package/lib/engine/engine_gltf_builtin_components.d.ts +3 -3
  29. package/lib/engine/engine_gltf_builtin_components.js +2 -3
  30. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  31. package/lib/engine/engine_instancing.d.ts +5 -0
  32. package/lib/engine/engine_instancing.js +22 -0
  33. package/lib/engine/engine_instancing.js.map +1 -0
  34. package/lib/engine/engine_lightdata.d.ts +1 -1
  35. package/lib/engine/engine_lightdata.js.map +1 -1
  36. package/lib/engine/engine_mainloop_utils.d.ts +2 -2
  37. package/lib/engine/engine_mainloop_utils.js +7 -6
  38. package/lib/engine/engine_mainloop_utils.js.map +1 -1
  39. package/lib/engine/engine_networking.d.ts +2 -11
  40. package/lib/engine/engine_networking.js +1 -7
  41. package/lib/engine/engine_networking.js.map +1 -1
  42. package/lib/engine/engine_networking_files.d.ts +1 -1
  43. package/lib/engine/engine_networking_files.js +8 -7
  44. package/lib/engine/engine_networking_files.js.map +1 -1
  45. package/lib/engine/engine_networking_files_default_components.d.ts +2 -2
  46. package/lib/engine/engine_networking_files_default_components.js +38 -43
  47. package/lib/engine/engine_networking_files_default_components.js.map +1 -1
  48. package/lib/engine/engine_networking_instantiate.d.ts +8 -6
  49. package/lib/engine/engine_networking_instantiate.js +12 -9
  50. package/lib/engine/engine_networking_instantiate.js.map +1 -1
  51. package/lib/engine/engine_networking_types.d.ts +14 -0
  52. package/lib/engine/engine_networking_types.js +8 -0
  53. package/lib/engine/engine_networking_types.js.map +1 -0
  54. package/lib/engine/engine_physics.d.ts +1 -23
  55. package/lib/engine/engine_physics.js +18 -56
  56. package/lib/engine/engine_physics.js.map +1 -1
  57. package/lib/engine/engine_rendererdata.d.ts +1 -1
  58. package/lib/engine/engine_rendererdata.js.map +1 -1
  59. package/lib/engine/engine_scenetools.d.ts +2 -2
  60. package/lib/engine/engine_scenetools.js +22 -5
  61. package/lib/engine/engine_scenetools.js.map +1 -1
  62. package/lib/engine/engine_serialization_builtin_serializer.d.ts +1 -1
  63. package/lib/engine/engine_serialization_core.d.ts +1 -1
  64. package/lib/engine/engine_serialization_decorator.d.ts +1 -1
  65. package/lib/engine/engine_setup.d.ts +14 -15
  66. package/lib/engine/engine_setup.js +34 -23
  67. package/lib/engine/engine_setup.js.map +1 -1
  68. package/lib/engine/engine_three_utils.js +0 -6
  69. package/lib/engine/engine_three_utils.js.map +1 -1
  70. package/lib/engine/engine_types.d.ts +103 -0
  71. package/lib/engine/engine_types.js +49 -0
  72. package/lib/engine/engine_types.js.map +1 -0
  73. package/lib/engine/engine_utils.d.ts +1 -1
  74. package/lib/engine/engine_utils.js.map +1 -1
  75. package/lib/engine/extensions/NEEDLE_components.js +2 -2
  76. package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
  77. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +1 -1
  78. package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +1 -1
  79. package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +1 -1
  80. package/lib/engine/extensions/NEEDLE_render_objects.d.ts +2 -2
  81. package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +1 -1
  82. package/lib/engine/extensions/NEEDLE_techniques_webgl.js +3 -2
  83. package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
  84. package/lib/engine/extensions/extensions.d.ts +1 -1
  85. package/lib/engine-components/Animation.js +1 -1
  86. package/lib/engine-components/Animation.js.map +1 -1
  87. package/lib/engine-components/Animator.js.map +1 -1
  88. package/lib/engine-components/AvatarLoader.js +6 -5
  89. package/lib/engine-components/AvatarLoader.js.map +1 -1
  90. package/lib/engine-components/Camera.d.ts +2 -2
  91. package/lib/engine-components/Camera.js +6 -12
  92. package/lib/engine-components/Camera.js.map +1 -1
  93. package/lib/engine-components/CameraUtils.d.ts +3 -0
  94. package/lib/engine-components/CameraUtils.js +15 -0
  95. package/lib/engine-components/CameraUtils.js.map +1 -0
  96. package/lib/engine-components/Collider.d.ts +1 -0
  97. package/lib/engine-components/Collider.js +4 -0
  98. package/lib/engine-components/Collider.js.map +1 -1
  99. package/lib/engine-components/Component.d.ts +16 -50
  100. package/lib/engine-components/Component.js +67 -465
  101. package/lib/engine-components/Component.js.map +1 -1
  102. package/lib/engine-components/DragControls.js +1 -1
  103. package/lib/engine-components/DragControls.js.map +1 -1
  104. package/lib/engine-components/Duplicatable.js +2 -1
  105. package/lib/engine-components/Duplicatable.js.map +1 -1
  106. package/lib/engine-components/LODGroup.js.map +1 -1
  107. package/lib/engine-components/Light.d.ts +2 -1
  108. package/lib/engine-components/Light.js +2 -2
  109. package/lib/engine-components/Light.js.map +1 -1
  110. package/lib/engine-components/NestedGltf.js +2 -1
  111. package/lib/engine-components/NestedGltf.js.map +1 -1
  112. package/lib/engine-components/OrbitControls.js +4 -2
  113. package/lib/engine-components/OrbitControls.js.map +1 -1
  114. package/lib/engine-components/Renderer.d.ts +3 -5
  115. package/lib/engine-components/Renderer.js +3 -20
  116. package/lib/engine-components/Renderer.js.map +1 -1
  117. package/lib/engine-components/{Rigidbody.d.ts → RigidBody.d.ts} +2 -1
  118. package/lib/engine-components/{Rigidbody.js → RigidBody.js} +1 -1
  119. package/lib/engine-components/{Rigidbody.js.map → RigidBody.js.map} +1 -1
  120. package/lib/engine-components/ScreenCapture.d.ts +0 -10
  121. package/lib/engine-components/ScreenCapture.js +8 -75
  122. package/lib/engine-components/ScreenCapture.js.map +1 -1
  123. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  124. package/lib/engine-components/SyncedCamera.js +3 -2
  125. package/lib/engine-components/SyncedCamera.js.map +1 -1
  126. package/lib/engine-components/SyncedTransform.js +1 -1
  127. package/lib/engine-components/SyncedTransform.js.map +1 -1
  128. package/lib/engine-components/TestRunner.js.map +1 -1
  129. package/lib/engine-components/VideoPlayer.d.ts +14 -3
  130. package/lib/engine-components/VideoPlayer.js +390 -47
  131. package/lib/engine-components/VideoPlayer.js.map +1 -1
  132. package/lib/engine-components/Voip.js +2 -1
  133. package/lib/engine-components/Voip.js.map +1 -1
  134. package/lib/engine-components/WebARSessionRoot.js +1 -1
  135. package/lib/engine-components/WebARSessionRoot.js.map +1 -1
  136. package/lib/engine-components/WebXR.js.map +1 -1
  137. package/lib/engine-components/WebXRAvatar.js +1 -1
  138. package/lib/engine-components/WebXRAvatar.js.map +1 -1
  139. package/lib/engine-components/WebXRController.d.ts +1 -0
  140. package/lib/engine-components/WebXRController.js +40 -9
  141. package/lib/engine-components/WebXRController.js.map +1 -1
  142. package/lib/engine-components/WebXRGrabRendering.d.ts +1 -1
  143. package/lib/engine-components/WebXRGrabRendering.js +1 -1
  144. package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
  145. package/lib/engine-components/WebXRSync.js +1 -1
  146. package/lib/engine-components/WebXRSync.js.map +1 -1
  147. package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +1 -1
  148. package/lib/engine-components/codegen/components.d.ts +1 -2
  149. package/lib/engine-components/codegen/components.js +1 -2
  150. package/lib/engine-components/codegen/components.js.map +1 -1
  151. package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +4 -0
  152. package/lib/engine-components/js-extensions/ExtensionUtils.js +56 -0
  153. package/lib/engine-components/js-extensions/ExtensionUtils.js.map +1 -0
  154. package/lib/engine-components/js-extensions/Object3D.js +16 -41
  155. package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
  156. package/lib/engine-components/js-extensions/Vector.d.ts +2 -0
  157. package/lib/engine-components/js-extensions/Vector.js +16 -0
  158. package/lib/engine-components/js-extensions/Vector.js.map +1 -0
  159. package/lib/engine-components/timeline/PlayableDirector.d.ts +2 -1
  160. package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
  161. package/lib/engine-components/ui/BaseUIComponent.d.ts +1 -0
  162. package/lib/engine-components/ui/BaseUIComponent.js +11 -5
  163. package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
  164. package/lib/engine-components/ui/Canvas.d.ts +3 -0
  165. package/lib/engine-components/ui/Canvas.js +12 -1
  166. package/lib/engine-components/ui/Canvas.js.map +1 -1
  167. package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
  168. package/lib/engine-components/ui/CanvasScaler.js +17 -0
  169. package/lib/engine-components/ui/CanvasScaler.js.map +1 -0
  170. package/lib/engine-components/ui/EventSystem.d.ts +4 -1
  171. package/lib/engine-components/ui/EventSystem.js +28 -39
  172. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  173. package/lib/engine-components/ui/Graphic.js +2 -1
  174. package/lib/engine-components/ui/Graphic.js.map +1 -1
  175. package/lib/engine-components/ui/Keyboard.js +2 -1
  176. package/lib/engine-components/ui/Keyboard.js.map +1 -1
  177. package/lib/engine-components/ui/RaycastUtils.d.ts +11 -0
  178. package/lib/engine-components/ui/RaycastUtils.js +62 -0
  179. package/lib/engine-components/ui/RaycastUtils.js.map +1 -0
  180. package/lib/engine-components/ui/Raycaster.js.map +1 -1
  181. package/lib/engine-components/ui/Text.js +8 -3
  182. package/lib/engine-components/ui/Text.js.map +1 -1
  183. package/lib/engine-components/ui/Utils.js +3 -2
  184. package/lib/engine-components/ui/Utils.js.map +1 -1
  185. package/lib/needle-engine.d.ts +3 -1
  186. package/lib/needle-engine.js +4 -2
  187. package/lib/needle-engine.js.map +1 -1
  188. package/package.json +13 -2
  189. package/src/engine/api.ts +3 -0
  190. package/src/engine/codegen/register_types.js +4 -6
  191. package/src/engine/engine_addressables.ts +12 -10
  192. package/src/engine/{engine_components.js → engine_components.ts} +37 -47
  193. package/src/engine/engine_create_objects.ts +27 -0
  194. package/src/engine/engine_element.ts +2 -2
  195. package/src/engine/engine_gameobject.ts +506 -0
  196. package/src/engine/engine_gltf.ts +21 -2
  197. package/src/engine/engine_gltf_builtin_components.ts +8 -7
  198. package/src/engine/engine_instancing.ts +25 -0
  199. package/src/engine/engine_lightdata.ts +1 -1
  200. package/src/engine/engine_mainloop_utils.ts +13 -11
  201. package/src/engine/engine_networking.ts +3 -14
  202. package/src/engine/engine_networking_files.ts +14 -11
  203. package/src/engine/engine_networking_files_default_components.ts +53 -52
  204. package/src/engine/engine_networking_instantiate.ts +24 -14
  205. package/src/engine/engine_networking_types.ts +19 -0
  206. package/src/engine/engine_physics.ts +21 -75
  207. package/src/engine/engine_rendererdata.ts +1 -1
  208. package/src/engine/engine_scenetools.ts +30 -6
  209. package/src/engine/engine_serialization_core.ts +1 -1
  210. package/src/engine/engine_serialization_decorator.ts +1 -1
  211. package/src/engine/engine_setup.ts +51 -37
  212. package/src/engine/engine_three_utils.ts +0 -8
  213. package/src/engine/engine_types.ts +180 -0
  214. package/src/engine/engine_utils.ts +1 -3
  215. package/src/engine/extensions/NEEDLE_components.ts +2 -2
  216. package/src/engine/extensions/NEEDLE_deferred_texture.ts +1 -1
  217. package/src/engine/extensions/NEEDLE_lighting_settings.ts +1 -1
  218. package/src/engine/extensions/NEEDLE_lightmaps.ts +1 -1
  219. package/src/engine/extensions/NEEDLE_render_objects.ts +4 -4
  220. package/src/engine/extensions/NEEDLE_techniques_webgl.ts +5 -4
  221. package/src/engine/extensions/extensions.ts +1 -1
  222. package/src/engine-components/Animation.ts +1 -1
  223. package/src/engine-components/Animator.ts +3 -3
  224. package/src/engine-components/AvatarLoader.ts +6 -5
  225. package/src/engine-components/Camera.ts +10 -13
  226. package/src/engine-components/CameraUtils.ts +15 -0
  227. package/src/engine-components/Collider.ts +5 -0
  228. package/src/engine-components/Component.ts +83 -535
  229. package/src/engine-components/DragControls.ts +1 -1
  230. package/src/engine-components/Duplicatable.ts +4 -3
  231. package/src/engine-components/LODGroup.ts +1 -1
  232. package/src/engine-components/Light.ts +3 -2
  233. package/src/engine-components/NestedGltf.ts +2 -1
  234. package/src/engine-components/OrbitControls.ts +5 -5
  235. package/src/engine-components/Renderer.ts +7 -21
  236. package/src/engine-components/RigidBody.ts +2 -1
  237. package/src/engine-components/ScreenCapture.ts +11 -77
  238. package/src/engine-components/SpectatorCamera.ts +7 -5
  239. package/src/engine-components/SyncedCamera.ts +3 -2
  240. package/src/engine-components/SyncedTransform.ts +2 -2
  241. package/src/engine-components/TestRunner.ts +1 -2
  242. package/src/engine-components/VideoPlayer.ts +401 -48
  243. package/src/engine-components/Voip.ts +2 -1
  244. package/src/engine-components/WebARSessionRoot.ts +1 -1
  245. package/src/engine-components/WebXR.ts +2 -2
  246. package/src/engine-components/WebXRAvatar.ts +1 -1
  247. package/src/engine-components/WebXRController.ts +40 -10
  248. package/src/engine-components/WebXRGrabRendering.ts +1 -1
  249. package/src/engine-components/WebXRSync.ts +1 -1
  250. package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +2 -1
  251. package/src/engine-components/codegen/components.ts +1 -2
  252. package/src/engine-components/js-extensions/ExtensionUtils.ts +66 -0
  253. package/src/engine-components/js-extensions/Object3D.ts +22 -48
  254. package/src/engine-components/js-extensions/Vector.ts +17 -0
  255. package/src/engine-components/timeline/PlayableDirector.ts +2 -1
  256. package/src/engine-components/ui/BaseUIComponent.ts +17 -6
  257. package/src/engine-components/ui/Canvas.ts +14 -2
  258. package/src/engine-components/ui/CanvasScaler.ts +21 -0
  259. package/src/engine-components/ui/EventSystem.ts +30 -35
  260. package/src/engine-components/ui/Graphic.ts +2 -1
  261. package/src/engine-components/ui/Keyboard.ts +2 -1
  262. package/src/engine-components/ui/RaycastUtils.ts +64 -0
  263. package/src/engine-components/ui/Raycaster.ts +2 -0
  264. package/src/engine-components/ui/Text.ts +8 -4
  265. package/src/engine-components/ui/Utils.ts +3 -2
  266. package/src/needle-engine.ts +7 -2
@@ -1,13 +1,12 @@
1
1
  import * as THREE from "three";
2
- import * as object from "../engine/engine_components";
3
2
  import { Mathf } from "../engine/engine_math";
4
3
  import * as threeutils from "../engine/engine_three_utils";
5
- import * as utils from "../engine/engine_utils";
6
4
  import { activeInHierarchyFieldName } from "../engine/engine_constants";
7
5
  import { Context, FrameEvent } from "../engine/engine_setup";
8
6
  import * as main from "../engine/engine_mainloop_utils";
9
- import { InstantiateIdProvider, syncDestroy, syncInstantiate } from "../engine/engine_networking_instantiate";
10
- import * as Object3DExtensions from "./js-extensions/Object3D";
7
+ import { syncDestroy, syncInstantiate } from "../engine/engine_networking_instantiate";
8
+ import { addNewComponentInstance, destroyComponentInstance, findObjectOfType, findObjectsOfType, getComponent, getComponentInChildren, getComponentInParent, getComponents, getComponentsInChildren, getComponentsInParent, getOrAddComponent, moveComponentInstance, removeComponent } from "../engine/engine_components";
9
+ import { findByGuid, destroy, instantiate, foreachComponent, markAsInstancedRendered, isActiveInHierarchy, isActiveSelf, isUsingInstancing } from "../engine/engine_gameobject";
11
10
  // export interface ISerializationCallbackReceiver {
12
11
  // onBeforeSerialize?(): object | void;
13
12
  // onAfterSerialize?();
@@ -15,31 +14,6 @@ import * as Object3DExtensions from "./js-extensions/Object3D";
15
14
  // onAfterDeserialize?();
16
15
  // onDeserialize?(key: string, value: any): any | void;
17
16
  // }
18
- const debug = utils.getParam("debugcomponents");
19
- export var HideFlags;
20
- (function (HideFlags) {
21
- HideFlags[HideFlags["None"] = 0] = "None";
22
- HideFlags[HideFlags["HideInHierarchy"] = 1] = "HideInHierarchy";
23
- HideFlags[HideFlags["HideInInspector"] = 2] = "HideInInspector";
24
- HideFlags[HideFlags["DontSaveInEditor"] = 4] = "DontSaveInEditor";
25
- HideFlags[HideFlags["NotEditable"] = 8] = "NotEditable";
26
- HideFlags[HideFlags["DontSaveInBuild"] = 16] = "DontSaveInBuild";
27
- HideFlags[HideFlags["DontUnloadUnusedAsset"] = 32] = "DontUnloadUnusedAsset";
28
- HideFlags[HideFlags["DontSave"] = 52] = "DontSave";
29
- HideFlags[HideFlags["HideAndDontSave"] = 61] = "HideAndDontSave";
30
- })(HideFlags || (HideFlags = {}));
31
- export class InstantiateOptions {
32
- idProvider;
33
- //** parent guid */
34
- parent;
35
- /** for duplicatable parenting */
36
- keepWorldPosition;
37
- position;
38
- rotation;
39
- scale;
40
- visible;
41
- context;
42
- }
43
17
  class GameObject extends THREE.Object3D {
44
18
  guid;
45
19
  static setActive(go, active, processStart = true) {
@@ -51,38 +25,17 @@ class GameObject extends THREE.Object3D {
51
25
  main.processStart(Context.Current, go);
52
26
  }
53
27
  static isActiveSelf(go) {
54
- return go.visible || GameObject.isUsingInstancing(go);
28
+ return isActiveSelf(go);
55
29
  }
56
30
  static isActiveInHierarchy(go) {
57
- return go[activeInHierarchyFieldName] || GameObject.isUsingInstancing(go);
31
+ return isActiveInHierarchy(go);
58
32
  }
59
33
  static markAsInstancedRendered(go, instanced) {
60
- go["__isUsingInstancing"] = instanced;
34
+ markAsInstancedRendered(go, instanced);
61
35
  }
62
- static isUsingInstancing(instance) { return instance["__isUsingInstancing"] === true; }
36
+ static isUsingInstancing(instance) { return isUsingInstancing(instance); }
63
37
  static foreachComponent(instance, cb, recursive = true) {
64
- if (!instance)
65
- return;
66
- if (instance.userData.components) {
67
- for (let i = 0; i < instance.userData.components.length; i++) {
68
- const comp = instance.userData.components[i];
69
- if (comp instanceof Behaviour) {
70
- const res = cb(comp);
71
- if (res !== undefined)
72
- return res;
73
- }
74
- }
75
- }
76
- if (recursive && instance.children) {
77
- for (let i = 0; i < instance.children.length; i++) {
78
- const child = instance.children[i];
79
- if (!child)
80
- continue;
81
- const res = GameObject.foreachComponent(child, cb, recursive);
82
- if (res !== undefined)
83
- return res;
84
- }
85
- }
38
+ return foreachComponent(instance, cb, recursive);
86
39
  }
87
40
  static instantiateSynced(instance, opts) {
88
41
  if (!instance)
@@ -90,336 +43,7 @@ class GameObject extends THREE.Object3D {
90
43
  return syncInstantiate(instance, opts);
91
44
  }
92
45
  static instantiate(instance, opts = null) {
93
- if (instance === null)
94
- return null;
95
- let options = null;
96
- if (opts !== null) {
97
- // 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
98
- if (opts["x"] !== undefined) {
99
- options = new InstantiateOptions();
100
- options.position = opts;
101
- }
102
- else {
103
- // if (opts instanceof InstantiateOptions)
104
- options = opts;
105
- // else {
106
- // options = new InstantiateOptions();
107
- // Object.assign(options, opts);
108
- // }
109
- }
110
- }
111
- let context = Context.Current;
112
- if (options?.context)
113
- context = options.context;
114
- if (debug && context.alias)
115
- console.log("context", context.alias);
116
- // we need to create the id provider before calling internal instantiate because cloned gameobjects also create new guids
117
- if (options && !options.idProvider) {
118
- options.idProvider = new InstantiateIdProvider(Date.now());
119
- }
120
- const components = [];
121
- const goMapping = {}; // used to resolve references on components to components on other gameobjects to their new counterpart
122
- const skinnedMeshes = {};
123
- const clone = this.internalInstantiate(context, instance, options, components, goMapping, skinnedMeshes);
124
- if (clone) {
125
- this.resolveReferences(goMapping);
126
- this.resolveAndBindSkinnedMeshBones(skinnedMeshes, goMapping);
127
- }
128
- if (debug) {
129
- threeutils.logHierarchy(instance, true);
130
- threeutils.logHierarchy(clone, true);
131
- }
132
- const guidsMap = {};
133
- for (const i in components) {
134
- const copy = components[i];
135
- const oldGuid = copy.guid;
136
- if (options && options.idProvider) {
137
- copy.guid = options.idProvider.generateUUID();
138
- guidsMap[oldGuid] = copy.guid;
139
- if (debug)
140
- console.log(copy.name, copy.guid);
141
- }
142
- object.registerComponent(copy, context);
143
- if (copy.__internalNewInstanceCreated)
144
- copy.__internalNewInstanceCreated();
145
- }
146
- for (const i in components) {
147
- const copy = components[i];
148
- if (copy.resolveGuids)
149
- copy.resolveGuids(guidsMap);
150
- if (copy.enabled === false)
151
- continue;
152
- else
153
- copy.enabled = true;
154
- }
155
- main.processNewScripts(context);
156
- return clone;
157
- }
158
- static internalInstantiate(context, instance, opts, componentsList, newGameObjectsMap, skinnedMeshesMap) {
159
- if (!instance)
160
- return null;
161
- // prepare, remove things that dont work out of the box
162
- // e.g. user data we want to manually clone
163
- // also children throw errors (e.g. recursive toJson with nested meshes)
164
- const userData = instance.userData;
165
- instance.userData = {};
166
- const children = instance.children;
167
- instance.children = [];
168
- let clone;
169
- clone = instance.clone(false);
170
- Object3DExtensions.apply(clone);
171
- instance.userData = userData;
172
- instance.children = children;
173
- // make reference from old id to new object
174
- newGameObjectsMap[instance.uuid] = { original: instance, clone: clone };
175
- if (instance.type === "SkinnedMesh") {
176
- skinnedMeshesMap[instance.uuid] = { original: instance, clone: clone };
177
- }
178
- // DO NOT EVER RENAME BECAUSE IT BREAKS / MIGHT BREAK ANIMATIONS
179
- // clone.name += " (Clone)";
180
- if (opts?.visible !== undefined)
181
- clone.visible = opts.visible;
182
- if (opts?.idProvider) {
183
- clone.uuid = opts.idProvider.generateUUID();
184
- const cloneGo = clone;
185
- if (cloneGo)
186
- cloneGo.guid = clone.uuid;
187
- }
188
- if (instance.animations && instance.animations.length > 0) {
189
- clone.animations = [...instance.animations];
190
- }
191
- const parent = instance.parent;
192
- if (parent) {
193
- parent.add(clone);
194
- }
195
- // apply transform
196
- if (opts?.position) {
197
- threeutils.setWorldPosition(clone, opts.position);
198
- }
199
- else
200
- clone.position.copy(instance.position);
201
- if (opts?.rotation) {
202
- threeutils.setWorldQuaternion(clone, opts.rotation);
203
- // clone.quaternion.copy(opts.rotation);
204
- }
205
- else
206
- clone.quaternion.copy(instance.quaternion);
207
- if (opts?.scale) {
208
- // TODO: make set world scale work
209
- clone.scale.copy(opts.scale);
210
- }
211
- else
212
- clone.scale.copy(instance.scale);
213
- if (opts?.parent && opts.parent !== "scene") {
214
- let requestedParent = null;
215
- if (typeof opts.parent === "string") {
216
- requestedParent = utils.tryFindObject(opts.parent, context.scene, true);
217
- }
218
- else {
219
- requestedParent = opts.parent;
220
- }
221
- if (requestedParent) {
222
- const func = opts.keepWorldPosition === true ? requestedParent.attach : requestedParent.add;
223
- if (!func)
224
- console.error("Invalid parent object", requestedParent, "received when instantiating:", instance);
225
- else
226
- func.call(requestedParent, clone);
227
- }
228
- else
229
- console.warn("could not find parent:", opts.parent);
230
- }
231
- for (const [key, value] of Object.entries(instance.userData)) {
232
- if (key === "components")
233
- continue;
234
- clone.userData[key] = value;
235
- }
236
- if (instance.userData?.components) {
237
- const components = instance.userData.components;
238
- const newComponents = [];
239
- clone.userData.components = newComponents;
240
- for (let i = 0; i < components.length; i++) {
241
- const comp = components[i];
242
- const copy = Object.create(comp);
243
- Object.assign(copy, comp);
244
- newComponents.push(copy);
245
- copy.gameObject = clone;
246
- // copy.transform = clone;
247
- componentsList.push(copy);
248
- }
249
- }
250
- // children should just clone the original transform
251
- if (opts) {
252
- opts.position = undefined;
253
- opts.rotation = undefined;
254
- opts.scale = undefined;
255
- opts.parent = undefined;
256
- }
257
- for (const ch in instance.children) {
258
- const child = instance.children[ch];
259
- const newChild = GameObject.internalInstantiate(context, child, opts, componentsList, newGameObjectsMap, skinnedMeshesMap);
260
- if (newChild)
261
- clone.add(newChild);
262
- }
263
- return clone;
264
- }
265
- static resolveAndBindSkinnedMeshBones(skinnedMeshes, newObjectsMap) {
266
- for (const key in skinnedMeshes) {
267
- const val = skinnedMeshes[key];
268
- const original = val.original;
269
- const originalSkeleton = original.skeleton;
270
- const clone = val.clone;
271
- // clone.updateWorldMatrix(true, true);
272
- if (!originalSkeleton) {
273
- console.warn("Skinned mesh has no skeleton?", val);
274
- continue;
275
- }
276
- const originalBones = originalSkeleton.bones;
277
- const clonedSkeleton = clone.skeleton.clone();
278
- clone.skeleton = clonedSkeleton;
279
- clone.bindMatrix.clone().copy(original.bindMatrix);
280
- // console.log(clone.bindMatrix)
281
- clone.bindMatrixInverse.copy(original.bindMatrixInverse);
282
- // clone.bindMatrix.multiplyScalar(.025);
283
- // console.assert(originalSkeleton.uuid !== clonedSkeleton.uuid);
284
- // console.assert(originalBones.length === clonedSkeleton.bones.length);
285
- const bones = [];
286
- clonedSkeleton.bones = bones;
287
- for (let i = 0; i < originalBones.length; i++) {
288
- const bone = originalBones[i];
289
- const newBoneInfo = newObjectsMap[bone.uuid];
290
- const clonedBone = newBoneInfo.clone;
291
- // console.log("NEW BONE: ", clonedBone, "BEFORE", newBoneInfo.original);
292
- bones.push(clonedBone);
293
- }
294
- // clone.skeleton = new THREE.Skeleton(bones);
295
- // clone.skeleton.update();
296
- // clone.pose();
297
- // clone.scale.set(1,1,1);
298
- // clone.position.y += .1;
299
- // console.log("ORIG", original, "CLONE", clone);
300
- }
301
- for (const key in skinnedMeshes) {
302
- const clone = skinnedMeshes[key].clone;
303
- clone.skeleton.update();
304
- // clone.skeleton.calculateInverses();
305
- clone.bind(clone.skeleton, clone.bindMatrix);
306
- clone.updateMatrixWorld(true);
307
- // clone.pose();
308
- }
309
- }
310
- // private static bindNewSkinnedMeshBones(source, clone) {
311
- // const sourceLookup = new Map();
312
- // const cloneLookup = new Map();
313
- // // const clone = source.clone(false);
314
- // function parallelTraverse(a, b, callback) {
315
- // callback(a, b);
316
- // for (let i = 0; i < a.children.length; i++) {
317
- // parallelTraverse(a.children[i], b.children[i], callback);
318
- // }
319
- // }
320
- // parallelTraverse(source, clone, function (sourceNode, clonedNode) {
321
- // sourceLookup.set(clonedNode, sourceNode);
322
- // cloneLookup.set(sourceNode, clonedNode);
323
- // });
324
- // clone.traverse(function (node) {
325
- // if (!node.isSkinnedMesh) return;
326
- // const clonedMesh = node;
327
- // const sourceMesh = sourceLookup.get(node);
328
- // const sourceBones = sourceMesh.skeleton.bones;
329
- // clonedMesh.skeleton = sourceMesh.skeleton.clone();
330
- // clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);
331
- // clonedMesh.skeleton.bones = sourceBones.map(function (bone) {
332
- // return cloneLookup.get(bone);
333
- // });
334
- // clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);
335
- // });
336
- // return clone;
337
- // }
338
- static resolveReferences(newObjectsMap) {
339
- // for every object that is newly created we want to update references to their newly created counterparts
340
- // e.g. a collider instance referencing a rigidbody instance should be updated so that
341
- // the cloned collider does not reference the cloned rigidbody (instead of the original rigidbody)
342
- for (const key in newObjectsMap) {
343
- const val = newObjectsMap[key];
344
- const clone = val.clone;
345
- // resolve references
346
- if (clone.userData?.components) {
347
- for (let i = 0; i < clone.userData.components.length; i++) {
348
- const copy = clone.userData.components[i];
349
- // find referenced within a cloned gameobject
350
- const entries = Object.entries(copy);
351
- // console.log(copy, entries);
352
- for (const [key, value] of entries) {
353
- if (Array.isArray(value)) {
354
- const clonedArray = [];
355
- copy[key] = clonedArray;
356
- // console.log(copy, key, value, copy[key]);
357
- for (let i = 0; i < value.length; i++) {
358
- const entry = value[i];
359
- // push value types into new array
360
- if (typeof entry !== "object") {
361
- clonedArray.push(entry);
362
- continue;
363
- }
364
- const res = this.postProcessNewInstance(copy, key, entry, newObjectsMap);
365
- if (res !== undefined)
366
- clonedArray.push(res);
367
- else
368
- clonedArray.push(entry);
369
- }
370
- // console.log(copy[key])
371
- }
372
- else if (typeof value === "object") {
373
- const res = this.postProcessNewInstance(copy, key, value, newObjectsMap);
374
- if (res !== undefined) {
375
- copy[key] = res;
376
- }
377
- }
378
- }
379
- }
380
- }
381
- }
382
- }
383
- static postProcessNewInstance(copy, key, value, newObjectsMap) {
384
- if (value instanceof Component || value instanceof Behaviour) {
385
- const originalGameObjectReference = value["gameObject"];
386
- // console.log(key, value, originalGameObjectReference);
387
- if (originalGameObjectReference) {
388
- const id = originalGameObjectReference.uuid;
389
- const newGameObject = newObjectsMap[id]?.clone;
390
- if (!newGameObject) {
391
- // reference has not changed!
392
- if (debug)
393
- console.log("reference did not change", key, copy, value);
394
- return;
395
- }
396
- const index = originalGameObjectReference.userData.components.indexOf(value);
397
- if (index >= 0) {
398
- if (debug)
399
- console.log(key, id);
400
- const found = newGameObject.userData.components[index];
401
- return found;
402
- }
403
- else {
404
- console.warn("could not find component", key, value);
405
- }
406
- }
407
- }
408
- else if (value instanceof THREE.Object3D) {
409
- // console.log(value);
410
- if (key === "gameObject")
411
- return;
412
- const originalGameObjectReference = value;
413
- if (originalGameObjectReference) {
414
- const id = originalGameObjectReference.uuid;
415
- const newGameObject = newObjectsMap[id]?.clone;
416
- if (newGameObject) {
417
- if (debug)
418
- console.log(key, "old", value, "new", newGameObject);
419
- return newGameObject;
420
- }
421
- }
422
- }
46
+ return instantiate(instance, opts);
423
47
  }
424
48
  static destroySynced(instance, context, recursive = true) {
425
49
  if (!instance)
@@ -429,38 +53,7 @@ class GameObject extends THREE.Object3D {
429
53
  syncDestroy(go, context.connection, recursive);
430
54
  }
431
55
  static destroy(instance, recursive = true, isRoot = true) {
432
- const comp = instance;
433
- if (comp.isComponent) {
434
- comp.destroy();
435
- return;
436
- }
437
- const obj = instance;
438
- if (debug)
439
- console.log(obj);
440
- if (recursive && obj.children) {
441
- for (const ch of obj.children) {
442
- GameObject.destroy(ch, recursive, false);
443
- }
444
- }
445
- const components = obj.userData.components;
446
- if (components) {
447
- let lastLength = components.length;
448
- for (let i = 0; i < components.length; i++) {
449
- const comp = components[i];
450
- if (comp.destroy) {
451
- if (debug)
452
- console.log("destroying", comp);
453
- comp.destroy();
454
- }
455
- // components will be removed from componentlist in destroy
456
- if (components.length < lastLength) {
457
- lastLength = components.length;
458
- i--;
459
- }
460
- }
461
- }
462
- if (isRoot)
463
- obj.removeFromParent();
56
+ return destroy(instance, recursive, isRoot);
464
57
  }
465
58
  /**
466
59
  * Add an object to parent and also ensure all components are being registered
@@ -518,24 +111,22 @@ class GameObject extends THREE.Object3D {
518
111
  }
519
112
  static addNewComponent(go, type, callAwake = true) {
520
113
  const instance = new type();
521
- object.addNewComponentInstance(instance, go, callAwake);
114
+ //@ts-ignore
115
+ addNewComponentInstance(go, instance, callAwake);
522
116
  return instance;
523
117
  }
524
118
  static addComponent(go, instance) {
525
119
  if (instance.gameObject == null) {
526
120
  throw new Error("Did you mean to create a new component? Use addNewComponent");
527
121
  }
528
- object.moveComponentInstance(instance, go);
122
+ moveComponentInstance(instance, go);
529
123
  }
530
124
  static removeComponent(instance) {
531
- object.removeComponent(instance.gameObject, instance);
125
+ removeComponent(instance.gameObject, instance);
532
126
  return instance;
533
127
  }
534
128
  static getOrAddComponent(go, typeName) {
535
- const comp = this.getComponent(go, typeName);
536
- if (comp)
537
- return comp;
538
- return this.addNewComponent(go, typeName);
129
+ return getOrAddComponent(go, typeName);
539
130
  }
540
131
  static getComponent(go, typeName) {
541
132
  if (go === null)
@@ -544,35 +135,36 @@ class GameObject extends THREE.Object3D {
544
135
  // not ideal, but I dont know a good/sane way to do this otherwise
545
136
  // const res = TypeStore.get(typeName);
546
137
  // if(res) typeName = res;
547
- return object.getComponent(typeName, go);
138
+ return getComponent(typeName, go);
548
139
  }
549
140
  static getComponents(go, typeName, arr = null) {
550
141
  if (go === null)
551
142
  return arr ?? [];
552
- return object.getComponents(typeName, go, arr);
143
+ return getComponents(typeName, go, arr);
553
144
  }
554
145
  static findByGuid(guid, hierarchy) {
555
- return utils.tryFindObject(guid, hierarchy, true, true);
146
+ const res = findByGuid(guid, hierarchy);
147
+ return res;
556
148
  }
557
149
  static findObjectOfType(typeName, context, includeInactive = true) {
558
- return object.findObjectOfType(typeName, context, includeInactive);
150
+ return findObjectOfType(typeName, context, includeInactive);
559
151
  }
560
152
  static findObjectsOfType(typeName, context) {
561
153
  const arr = [];
562
- object.findObjectsOfType(typeName, arr, context);
154
+ findObjectsOfType(typeName, arr, context);
563
155
  return arr;
564
156
  }
565
157
  static getComponentInChildren(go, typeName) {
566
- return object.getComponentInChildren(typeName, go);
158
+ return getComponentInChildren(typeName, go);
567
159
  }
568
160
  static getComponentsInChildren(go, typeName, arr = null) {
569
- return object.getComponentsInChildren(typeName, go, arr);
161
+ return getComponentsInChildren(typeName, go, arr ?? undefined);
570
162
  }
571
163
  static getComponentInParent(go, typeName) {
572
- return object.getComponentInParent(typeName, go);
164
+ return getComponentInParent(typeName, go);
573
165
  }
574
166
  static getComponentsInParent(go, typeName, arr = null) {
575
- return object.getComponentsInParent(typeName, go, arr);
167
+ return getComponentsInParent(typeName, go, arr);
576
168
  }
577
169
  static getAllComponents(go) {
578
170
  const componentsList = go.userData?.components;
@@ -656,6 +248,11 @@ class Component {
656
248
  return true;
657
249
  return res;
658
250
  }
251
+ set __isActiveInHierarchy(val) {
252
+ if (!this.gameObject)
253
+ return;
254
+ this.gameObject[activeInHierarchyFieldName] = val;
255
+ }
659
256
  gameObject;
660
257
  guid = "invalid";
661
258
  sourceId;
@@ -677,10 +274,9 @@ class Component {
677
274
  return this.__destroyed;
678
275
  }
679
276
  destroy() {
680
- if (this.destroyed)
277
+ if (this.__destroyed)
681
278
  return;
682
- // console.log("destroy", this);
683
- object.destroyComponentInstance(this);
279
+ this.__internalDestroy();
684
280
  }
685
281
  __didAwake = false;
686
282
  __didStart = false;
@@ -712,10 +308,11 @@ class Component {
712
308
  }
713
309
  __internalEnable() {
714
310
  if (this.__didEnable)
715
- return;
311
+ return false;
716
312
  // console.trace("INTERNAL ENABLE");
717
313
  this.__didEnable = true;
718
314
  this.onEnable();
315
+ return true;
719
316
  }
720
317
  __internalDisable() {
721
318
  if (!this.__didEnable)
@@ -725,7 +322,39 @@ class Component {
725
322
  this.onDisable();
726
323
  this._collisions?.clear();
727
324
  }
325
+ __internalDestroy() {
326
+ if (this.__destroyed)
327
+ return;
328
+ this.__destroyed = true;
329
+ this.destroy?.call(this);
330
+ // console.log("destroy", this);
331
+ destroyComponentInstance(this);
332
+ }
333
+ // isActiveAndEnabled: boolean = false;
334
+ get enabled() {
335
+ return this.__isEnabled ?? true; // if it has no enabled field it is always enabled
336
+ }
337
+ set enabled(val) {
338
+ // when called from animationclip we receive numbers
339
+ // due to interpolation they can be anything between 0 and 1
340
+ if (typeof val === "number") {
341
+ if (val >= 0.5)
342
+ val = true;
343
+ else
344
+ val = false;
345
+ }
346
+ // need to check here because codegen is calling this before everything is setup
347
+ if (!this.__didAwake)
348
+ return;
349
+ if (val) {
350
+ this.__internalEnable();
351
+ }
352
+ else {
353
+ this.__internalDisable();
354
+ }
355
+ }
728
356
  constructor() {
357
+ // super();
729
358
  this.__internalNewInstanceCreated();
730
359
  }
731
360
  _collisionExitRoutine;
@@ -908,7 +537,7 @@ class Component {
908
537
  Component._worldQuaternionBuffer.setFromEuler(Component._worldEulerBuffer);
909
538
  this.worldQuaternion = Component._worldQuaternionBuffer;
910
539
  }
911
- static _forward = new THREE.Vector3(0, 0, 1);
540
+ static _forward = new THREE.Vector3();
912
541
  get forward() {
913
542
  return Component._forward.set(0, 0, -1).applyQuaternion(this.worldQuaternion);
914
543
  }
@@ -936,33 +565,6 @@ class Component {
936
565
  }
937
566
  }
938
567
  class Behaviour extends Component {
939
- // isActiveAndEnabled: boolean = false;
940
- get enabled() {
941
- return this.__isEnabled ?? true; // if it has no enabled field it is always enabled
942
- }
943
- set enabled(val) {
944
- // when called from animationclip we receive numbers
945
- // due to interpolation they can be anything between 0 and 1
946
- if (typeof val === "number") {
947
- if (val >= 0.5)
948
- val = true;
949
- else
950
- val = false;
951
- }
952
- if (val === this.__isEnabled)
953
- return;
954
- this.__isEnabled = val;
955
- // console.log(val);
956
- // need to check here because codegen is calling this before everything is setup
957
- if (!this.__didAwake)
958
- return;
959
- if (val) {
960
- this.__internalEnable();
961
- }
962
- else {
963
- this.__internalDisable();
964
- }
965
- }
966
568
  }
967
569
  export { Behaviour, Component, GameObject };
968
570
  //# sourceMappingURL=Component.js.map