@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
@@ -1 +1,4 @@
1
+ export { Behaviour, Component, GameObject } from "./Component"
2
+ export * from "./codegen/components";
3
+ export * from "./js-extensions/Object3D";
1
4
  export * from "./ui/PointerEvents"
@@ -1,10 +1,10 @@
1
1
 
2
- import { FrontSide, DoubleSide, BackSide, TetrahedronGeometry } from "three"
2
+ import { FrontSide, DoubleSide, Object3D } from "three"
3
3
  import { FrameEvent } from "../../engine/engine_setup";
4
4
  import { Behaviour } from "../Component";
5
5
  import { $shadowDomOwner, BaseUIComponent } from "./BaseUIComponent";
6
6
 
7
- export function tryGetUIComponent(obj: THREE.Object3D): BaseUIComponent | null {
7
+ export function tryGetUIComponent(obj: Object3D): BaseUIComponent | null {
8
8
  const owner = obj[$shadowDomOwner];
9
9
  if (owner) {
10
10
  return owner;
@@ -15,7 +15,7 @@ export function tryGetUIComponent(obj: THREE.Object3D): BaseUIComponent | null {
15
15
  return null;
16
16
  }
17
17
 
18
- export function isUIObject(obj: THREE.Object3D) {
18
+ export function isUIObject(obj: Object3D) {
19
19
  return obj["isUI"] === true || typeof obj[$shadowDomOwner] === "object";
20
20
  }
21
21
 
@@ -27,7 +27,7 @@ export type RenderSettings = {
27
27
  receiveShadows?: boolean;
28
28
  }
29
29
 
30
- export function updateRenderSettings(shadowComponent: THREE.Object3D, settings: RenderSettings) {
30
+ export function updateRenderSettings(shadowComponent: Object3D, settings: RenderSettings) {
31
31
  if (!shadowComponent) return;
32
32
  // const owner = shadowComponent[$shadowDomOwner];
33
33
  // if (!owner)
@@ -0,0 +1 @@
1
+ export * from "./networking/PlayerSync";
@@ -3,11 +3,12 @@ import { AssetReference } from "../../engine/engine_addressables";
3
3
  import { serializable } from "../../engine/engine_serialization_decorator";
4
4
  import { syncField } from "../../engine/engine_networking_auto"
5
5
  import { RoomEvents } from "../../engine/engine_networking";
6
- import { Object3D } from "three";
7
6
  import { syncDestroy } from "../../engine/engine_networking_instantiate";
8
- import { Vector3 } from "three";
7
+ import { getParam } from "../../engine/engine_utils";
9
8
 
9
+ import { Object3D } from "three";
10
10
 
11
+ const debug = getParam("debugplayersync");
11
12
 
12
13
  export class PlayerSync extends Behaviour {
13
14
  @serializable(AssetReference)
@@ -28,12 +29,20 @@ export class PlayerSync extends Behaviour {
28
29
  }
29
30
 
30
31
  private async onUserJoined(_model) {
32
+ if (debug) console.log("PlayerSync.onUserJoined", _model);
31
33
  const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
32
34
  if (instance) {
33
- let pl = GameObject.getComponent(instance as Object3D, PlayerState);
35
+ let pl = GameObject.getComponent(instance, PlayerState);
34
36
  if (pl) {
35
37
  pl.owner = this.context.connection.connectionId!;
36
38
  }
39
+ else {
40
+ console.error("<strong>Failed finding PlayerState on " + this.asset?.uri + "</strong>: please make sure the asset has a PlayerState component!");
41
+ GameObject.destroySynced(instance);
42
+ }
43
+ }
44
+ else{
45
+ console.warn("PlayerSync: failed instantiating asset!")
37
46
  }
38
47
 
39
48
  // TODO: previously created instances are not re-created when re-joining room
@@ -87,7 +96,7 @@ export class PlayerState extends Behaviour {
87
96
  }
88
97
 
89
98
  //** use to check if a component or gameobject is part of a instance owned by the local player */
90
- static isLocalPlayer(obj: THREE.Object3D | Component): boolean {
99
+ static isLocalPlayer(obj: Object3D | Component): boolean {
91
100
  if (obj instanceof Object3D) {
92
101
  const state = GameObject.getComponentInParent(obj, PlayerState);
93
102
  return state?.isLocalPlayer ?? false;
@@ -129,6 +138,8 @@ export class PlayerState extends Behaviour {
129
138
  }
130
139
 
131
140
  private onOwnerChange(newOwner: string, oldOwner: string) {
141
+ if (debug) console.log("PlayerSync.onOwnerChange", this, "newOwner", newOwner, "oldOwner", oldOwner);
142
+
132
143
  // Remove from local owner array if it was local before
133
144
  const index = PlayerState._local.indexOf(this);
134
145
  if (index >= 0) PlayerState._local.splice(index, 1);
@@ -154,6 +165,7 @@ export class PlayerState extends Behaviour {
154
165
 
155
166
  awake(): void {
156
167
  PlayerState.all.push(this);
168
+ if(debug) console.log("Registered new PlayerState", this, PlayerState.all.length-1, PlayerState.all)
157
169
 
158
170
  this.context.connection.beginListen(RoomEvents.UserLeftRoom, (model: { userId: string }) => {
159
171
  // console.log("USER LEFT", model.userId)
@@ -177,6 +189,7 @@ export class PlayerState extends Behaviour {
177
189
 
178
190
  /** this tells the server that this client has been destroyed and the networking message for the instantiate will be removed */
179
191
  doDestroy() {
192
+ if (debug) console.log("PlayerSync.doDestroy → syncDestroy", this);
180
193
  syncDestroy(this.gameObject, this.context.connection);
181
194
  }
182
195
 
@@ -3,22 +3,18 @@ makeErrorsVisibleForDevelopment();
3
3
 
4
4
  import "./engine/engine_element";
5
5
  import "./engine/engine_setup";
6
-
7
6
  import "./engine-components/CameraUtils"
8
7
 
9
-
10
- export { GameObject, Behaviour } from "./engine-components/Component";
11
- export { serializable, serializeable } from "./engine/engine_serialization_decorator";
12
- export { Collision } from "./engine/engine_types";
13
8
  export * from "./engine/api";
14
9
  export * from "./engine-components/api";
15
- export * from "./engine-components/codegen/components";
16
- export * from "./engine-components/js-extensions/Object3D";
17
-
10
+ export * from "./engine-components-experimental/api";
18
11
 
19
12
  // make accessible for external javascript
20
13
  import { Context } from "./engine/engine_setup";
21
14
  const Needle = { Context: Context };
15
+ if (globalThis["Needle"] !== undefined) {
16
+ console.warn("Needle Engine is already imported");
17
+ }
22
18
  globalThis["Needle"] = Needle;
23
19
  function registerGlobal(obj: object) {
24
20
  for (const key in obj) {
@@ -47,7 +43,7 @@ for (const method of Object.getOwnPropertyNames(GameObject)) {
47
43
 
48
44
  // make three accessible
49
45
  import * as THREE from "three";
50
- if(!globalThis["THREE"]) {
46
+ if (!globalThis["THREE"]) {
51
47
  globalThis["THREE"] = THREE;
52
48
  }
53
49
  else console.warn("Threejs is already imported");