@needle-tools/engine 2.28.0-pre → 2.30.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 (130) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/needle-engine.d.ts +232 -139
  3. package/dist/needle-engine.js +349 -345
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +24 -20
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine.d.ts +1 -0
  8. package/lib/engine/engine_input.d.ts +13 -1
  9. package/lib/engine/engine_input.js +47 -16
  10. package/lib/engine/engine_input.js.map +1 -1
  11. package/lib/engine/engine_physics.d.ts +1 -0
  12. package/lib/engine/engine_physics.js +2 -1
  13. package/lib/engine/engine_physics.js.map +1 -1
  14. package/lib/engine/engine_playerview.d.ts +26 -0
  15. package/lib/engine/engine_playerview.js +65 -0
  16. package/lib/engine/engine_playerview.js.map +1 -0
  17. package/lib/engine/engine_serialization.d.ts +1 -0
  18. package/lib/engine/engine_serialization.js +1 -0
  19. package/lib/engine/engine_serialization.js.map +1 -1
  20. package/lib/engine/engine_serialization_core.js +5 -0
  21. package/lib/engine/engine_serialization_core.js.map +1 -1
  22. package/lib/engine/engine_setup.d.ts +8 -0
  23. package/lib/engine/engine_setup.js +23 -0
  24. package/lib/engine/engine_setup.js.map +1 -1
  25. package/lib/engine/engine_utils.d.ts +1 -1
  26. package/lib/engine/engine_utils.js +25 -8
  27. package/lib/engine/engine_utils.js.map +1 -1
  28. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +1 -1
  29. package/lib/engine/extensions/NEEDLE_deferred_texture.js +26 -14
  30. package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +1 -1
  31. package/lib/engine/extensions/NEEDLE_lighting_settings.js +6 -2
  32. package/lib/engine/extensions/NEEDLE_lighting_settings.js.map +1 -1
  33. package/lib/engine/extensions/extension_utils.js +24 -13
  34. package/lib/engine/extensions/extension_utils.js.map +1 -1
  35. package/lib/engine/extensions/extensions.js +3 -1
  36. package/lib/engine/extensions/extensions.js.map +1 -1
  37. package/lib/engine-components/Camera.js +7 -0
  38. package/lib/engine-components/Camera.js.map +1 -1
  39. package/lib/engine-components/Component.d.ts +1 -1
  40. package/lib/engine-components/Component.js.map +1 -1
  41. package/lib/engine-components/Light.js +1 -0
  42. package/lib/engine-components/Light.js.map +1 -1
  43. package/lib/engine-components/OrbitControls.js +3 -3
  44. package/lib/engine-components/OrbitControls.js.map +1 -1
  45. package/lib/engine-components/ParticleSystem.d.ts +0 -1
  46. package/lib/engine-components/ParticleSystem.js +24 -27
  47. package/lib/engine-components/ParticleSystem.js.map +1 -1
  48. package/lib/engine-components/PlayerColor.js +1 -2
  49. package/lib/engine-components/PlayerColor.js.map +1 -1
  50. package/lib/engine-components/Renderer.d.ts +1 -0
  51. package/lib/engine-components/Renderer.js +10 -3
  52. package/lib/engine-components/Renderer.js.map +1 -1
  53. package/lib/engine-components/ScreenCapture.d.ts +1 -0
  54. package/lib/engine-components/ScreenCapture.js +265 -1
  55. package/lib/engine-components/ScreenCapture.js.map +1 -1
  56. package/lib/engine-components/SpectatorCamera.d.ts +24 -17
  57. package/lib/engine-components/SpectatorCamera.js +435 -182
  58. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  59. package/lib/engine-components/SyncedCamera.d.ts +8 -4
  60. package/lib/engine-components/SyncedCamera.js +15 -18
  61. package/lib/engine-components/SyncedCamera.js.map +1 -1
  62. package/lib/engine-components/SyncedRoom.js +2 -0
  63. package/lib/engine-components/SyncedRoom.js.map +1 -1
  64. package/lib/engine-components/VideoPlayer.d.ts +10 -1
  65. package/lib/engine-components/VideoPlayer.js +64 -15
  66. package/lib/engine-components/VideoPlayer.js.map +1 -1
  67. package/lib/engine-components/Volume.d.ts +4 -0
  68. package/lib/engine-components/Volume.js +44 -3
  69. package/lib/engine-components/Volume.js.map +1 -1
  70. package/lib/engine-components/WebARSessionRoot.d.ts +9 -2
  71. package/lib/engine-components/WebARSessionRoot.js +69 -24
  72. package/lib/engine-components/WebARSessionRoot.js.map +1 -1
  73. package/lib/engine-components/WebXR.d.ts +6 -3
  74. package/lib/engine-components/WebXR.js +43 -7
  75. package/lib/engine-components/WebXR.js.map +1 -1
  76. package/lib/engine-components/WebXRAvatar.d.ts +3 -0
  77. package/lib/engine-components/WebXRAvatar.js +20 -0
  78. package/lib/engine-components/WebXRAvatar.js.map +1 -1
  79. package/lib/engine-components/WebXRController.js +14 -8
  80. package/lib/engine-components/WebXRController.js.map +1 -1
  81. package/lib/engine-components/WebXRSync.js +3 -3
  82. package/lib/engine-components/WebXRSync.js.map +1 -1
  83. package/lib/engine-components/XRFlag.d.ts +2 -1
  84. package/lib/engine-components/XRFlag.js +1 -0
  85. package/lib/engine-components/XRFlag.js.map +1 -1
  86. package/lib/engine-components/ui/CanvasGroup.d.ts +1 -0
  87. package/lib/engine-components/ui/CanvasGroup.js +1 -0
  88. package/lib/engine-components/ui/CanvasGroup.js.map +1 -1
  89. package/lib/engine-components/ui/EventSystem.js +13 -4
  90. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  91. package/lib/engine-components/ui/Graphic.d.ts +1 -0
  92. package/lib/engine-components/ui/Graphic.js +2 -0
  93. package/lib/engine-components/ui/Graphic.js.map +1 -1
  94. package/lib/engine-components/ui/Interfaces.d.ts +2 -0
  95. package/package.json +2 -2
  96. package/src/engine/engine_components.js +16 -0
  97. package/src/engine/engine_input.ts +62 -20
  98. package/src/engine/engine_physics.ts +2 -1
  99. package/src/engine/engine_playerview.ts +80 -0
  100. package/src/engine/engine_serialization.ts +3 -1
  101. package/src/engine/engine_serialization_core.ts +8 -0
  102. package/src/engine/engine_setup.ts +24 -0
  103. package/src/engine/engine_utils.ts +34 -8
  104. package/src/engine/extensions/NEEDLE_deferred_texture.ts +25 -19
  105. package/src/engine/extensions/NEEDLE_lighting_settings.ts +4 -2
  106. package/src/engine/extensions/extension_utils.ts +24 -12
  107. package/src/engine/extensions/extensions.ts +3 -2
  108. package/src/engine-components/Camera.ts +9 -1
  109. package/src/engine-components/Component.ts +1 -1
  110. package/src/engine-components/Light.ts +3 -0
  111. package/src/engine-components/OrbitControls.ts +3 -3
  112. package/src/engine-components/ParticleSystem.ts +25 -26
  113. package/src/engine-components/PlayerColor.ts +1 -1
  114. package/src/engine-components/Renderer.ts +11 -3
  115. package/src/engine-components/ScreenCapture.ts +312 -2
  116. package/src/engine-components/SpectatorCamera.ts +490 -195
  117. package/src/engine-components/SyncedCamera.ts +23 -22
  118. package/src/engine-components/SyncedRoom.ts +1 -0
  119. package/src/engine-components/VideoPlayer.ts +97 -21
  120. package/src/engine-components/Volume.ts +47 -4
  121. package/src/engine-components/WebARSessionRoot.ts +78 -28
  122. package/src/engine-components/WebXR.ts +51 -15
  123. package/src/engine-components/WebXRAvatar.ts +27 -2
  124. package/src/engine-components/WebXRController.ts +21 -15
  125. package/src/engine-components/WebXRSync.ts +3 -3
  126. package/src/engine-components/XRFlag.ts +1 -0
  127. package/src/engine-components/ui/CanvasGroup.ts +2 -0
  128. package/src/engine-components/ui/EventSystem.ts +21 -15
  129. package/src/engine-components/ui/Graphic.ts +3 -0
  130. package/src/engine-components/ui/Interfaces.ts +2 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.30.0-pre] - 2022-10-12
8
+ - Add: Quest 2 passthrough support
9
+ - Add: UI Graphic components now support ``raycastTarget`` again
10
+ - Add: VideoPlayer now supports ``materialTarget`` option which allows for assigning any renderer in the scene that should be used as a video canvas
11
+ - Changed: updated three-mesh-ui dependency version
12
+ - Changed: updated needle-gltfTransform extensions package, fixing an issue with passthrough of texture json pointers
13
+ - Changed: selecting SpectatorCam now requires click (instead of just listening to pointer up event)
14
+ - Fix: Avatars using instanced materials should now update transforms correctly again
15
+
16
+ ## [2.29.0-pre] - 2022-10-10
17
+ - Add: Context.removeCamera method
18
+ - Add: SpectatorCam allows to follow other users across devices by clicking on respective avatar (e.g. clicking SyncedCam avatar or WebXR avatar, ESC or long press to stop spectating)
19
+ - Add: ``Input`` events for pointerdown, pointerup, pointermove and keydown, keyup, keypress. Subscribe via ``this.context.input.addEventListener(InputEvents.pointerdown, evt => {...})``
20
+ - Change: Default WebXR rig matches Unity forward
21
+ - Fix: WebXRController raycast line being rendered as huge line before first world hit
22
+ - Fix: SpectatorCam works again
23
+ - Fix: ``serializable()`` does now not write undefined values if serialize data is undefined
24
+ - Fix: exit VR lighting
25
+
7
26
  ## [2.28.0-pre] - 2022-10-06
8
27
  - Add: ``resolutionScaleFactor`` to context
9
28
  - Fix ``IsLocalNetwork`` regex
@@ -57,7 +57,7 @@ declare module "engine/engine_utils" {
57
57
  type deepClonePredicate = (owner: any, propertyName: string, current: any) => boolean;
58
58
  export function deepClone(obj: any, predicate?: deepClonePredicate): any;
59
59
  export function delay(milliseconds: number): Promise<void>;
60
- export function getPath(glbLocation: SourceIdentifier | undefined, path: string): string;
60
+ export function getPath(source: SourceIdentifier | undefined, uri: string): string;
61
61
  export type WriteCallback = (data: any) => void;
62
62
  export class Watch {
63
63
  subscribeWrite(callback: WriteCallback): void;
@@ -424,7 +424,7 @@ declare module "engine-components/Component" {
424
424
  static findObjectsOfType<T>(typeName: Constructor<T>, context?: Context | THREE.Object3D): Array<T>;
425
425
  static getComponentInChildren<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T | null;
426
426
  static getComponentsInChildren<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null, arr?: T[] | null): Array<T>;
427
- static getComponentInParent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T>): T | null;
427
+ static getComponentInParent<T>(go: GameObject | THREE.Object3D | Array<Object3D>, typeName: Constructor<T>): T | null;
428
428
  static getComponentsInParent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T>, arr?: Array<T> | null): Array<T>;
429
429
  static getAllComponents(go: GameObject | THREE.Object3D): Behaviour[];
430
430
  static iterateComponents(go: GameObject | THREE.Object3D): Generator<any, void, unknown>;
@@ -517,6 +517,112 @@ declare module "engine-components/Component" {
517
517
  }
518
518
  export { Behaviour, Component, GameObject };
519
519
  }
520
+ declare module "engine/extensions/extension_resolver" {
521
+ import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
522
+ export interface IExtensionReferenceResolver {
523
+ resolve(parser: GLTFParser, path: string): Promise<void> | null;
524
+ }
525
+ }
526
+ declare module "engine/engine_default_parameters" {
527
+ export const showGizmos: string | boolean;
528
+ export const debugExtension: string | boolean;
529
+ }
530
+ declare module "engine/extensions/extension_utils" {
531
+ import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
532
+ export function resolveReferences(parser: GLTFParser, obj: any): Promise<void | void[]>;
533
+ }
534
+ declare module "engine/engine_typestore" {
535
+ class _TypeStore {
536
+ private _types;
537
+ add(key: any, type: any): void;
538
+ get(key: any): any;
539
+ }
540
+ export const TypeStore: _TypeStore;
541
+ }
542
+ declare module "engine/extensions/NEEDLE_persistent_assets" {
543
+ import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
544
+ import { IExtensionReferenceResolver } from "engine/extensions/extension_resolver";
545
+ export const EXTENSION_NAME = "NEEDLE_persistent_assets";
546
+ export function isPersistentAsset(asset: any): boolean;
547
+ export class NEEDLE_persistent_assets implements GLTFLoaderPlugin, IExtensionReferenceResolver {
548
+ get name(): string;
549
+ private parser;
550
+ constructor(parser: GLTFParser);
551
+ afterRoot(_result: GLTF): Promise<void>;
552
+ resolve(parser: GLTFParser, path: string): Promise<void> | null | any;
553
+ }
554
+ }
555
+ declare module "engine/engine_serialization_core" {
556
+ import { GLTF } from "three/examples/jsm/loaders/GLTFLoader";
557
+ import { Object3D } from "three";
558
+ import { Context } from "engine/engine_setup";
559
+ import { SourceIdentifier } from "engine/engine_gltf";
560
+ export type Constructor<T> = {
561
+ new (...args: any[]): T;
562
+ };
563
+ export type NodeToObjectMap = {
564
+ [nodeId: string]: Object3D;
565
+ };
566
+ export type ObjectToNodeMap = {
567
+ [uuid: string]: number;
568
+ };
569
+ class SerializationHelper {
570
+ register(type: string, ser: ITypeSerializer): void;
571
+ typeMap: {
572
+ [type: string]: ITypeSerializer;
573
+ };
574
+ getSerializer(type: string): ITypeSerializer | undefined;
575
+ getSerializerForConstructor(type: any, level?: number): ITypeSerializer | undefined;
576
+ }
577
+ export const helper: SerializationHelper;
578
+ export interface ITypeSerializer {
579
+ onSerialize(data: any, context: SerializationContext): any;
580
+ onDeserialize(data: any, context: SerializationContext): any;
581
+ }
582
+ /**
583
+ * implement and call super(<type string or array>) with the type names this serializer can handle
584
+ * for example:
585
+ * class ColorSerializer extends TypeSerializer {
586
+ * constructor() {
587
+ * super("Color")
588
+ * }
589
+ * }
590
+ */
591
+ export abstract class TypeSerializer implements ITypeSerializer {
592
+ constructor(type: Constructor<any> | Constructor<any>[]);
593
+ abstract onSerialize(data: any, context: SerializationContext): any | void;
594
+ abstract onDeserialize(data: any, context: SerializationContext): any | void;
595
+ }
596
+ export interface ITypeInformation {
597
+ type?: Constructor<any>;
598
+ }
599
+ export class SerializationContext {
600
+ root: THREE.Object3D;
601
+ gltf?: GLTF;
602
+ gltfId?: SourceIdentifier;
603
+ object: THREE.Object3D;
604
+ target?: object;
605
+ nodeId?: number;
606
+ nodeToObject?: NodeToObjectMap;
607
+ objectToNode?: ObjectToNodeMap;
608
+ context?: Context;
609
+ path?: string;
610
+ constructor(root: THREE.Object3D);
611
+ }
612
+ export interface ISerializable {
613
+ $serializedTypes?: {
614
+ [key: string]: Constructor<any> | ITypeInformation | null;
615
+ };
616
+ onBeforeDeserialize?(data: any, context: SerializationContext): void | undefined | boolean;
617
+ onBeforeDeserializeMember?(key: string, data: any, context: SerializationContext): void | undefined | boolean;
618
+ onAfterDeserializeMember?(key: string, data: any, context: SerializationContext): void;
619
+ onAfterDeserialize?(data: any, context: SerializationContext): void;
620
+ }
621
+ export function serializeObject(obj: ISerializable, context: SerializationContext): object | null;
622
+ export function deserializeObject(obj: ISerializable, serializedData: object, context: SerializationContext): boolean;
623
+ /** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
624
+ export function assign(target: any, source: any): void;
625
+ }
520
626
  declare module "engine/engine_input" {
521
627
  import * as THREE from 'three';
522
628
  import { Context } from "engine/engine_setup";
@@ -528,8 +634,19 @@ declare module "engine/engine_input" {
528
634
  pointerType: string;
529
635
  source?: Event;
530
636
  };
637
+ export class KeyEventArgs {
638
+ key: string;
639
+ keyType: string;
640
+ source?: Event;
641
+ constructor(evt: KeyboardEvent);
642
+ }
531
643
  export enum InputEvents {
532
- PointerDown = "pointerDown"
644
+ PointerDown = "pointerdown",
645
+ PointerUp = "pointerup",
646
+ PointerMove = "pointermove",
647
+ KeyDown = "keydown",
648
+ KeyUp = "keyup",
649
+ KeyPressed = "keypress"
533
650
  }
534
651
  export class Input extends EventTarget {
535
652
  _doubleClickTimeThreshold: number;
@@ -609,6 +726,7 @@ declare module "engine/engine_input" {
609
726
  private getPointerIndex;
610
727
  private setPointerState;
611
728
  private setPointerStateT;
729
+ private onDispatchEvent;
612
730
  }
613
731
  export enum KeyCode {
614
732
  BACKSPACE = 8,
@@ -842,7 +960,7 @@ declare module "engine/extensions/NEEDLE_deferred_texture" {
842
960
  import { Context } from "engine/engine_setup";
843
961
  export const EXTENSION_NAME = "NEEDLE_deferred_texture";
844
962
  export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
845
- static assignTextureLOD(context: Context, material: Material, level?: number): void;
963
+ static assignTextureLOD(context: Context, source: SourceIdentifier | undefined, material: Material, level?: number): void;
846
964
  get name(): string;
847
965
  private parser;
848
966
  private sourceId;
@@ -900,6 +1018,7 @@ declare module "engine-components/Renderer" {
900
1018
  private _isInstancingEnabled;
901
1019
  private handles;
902
1020
  private prevLayers;
1021
+ private clearInstancingState;
903
1022
  setInstancingEnabled(enabled: boolean): boolean;
904
1023
  start(): void;
905
1024
  onEnable(): void;
@@ -952,6 +1071,7 @@ declare module "engine/engine_physics" {
952
1071
  }
953
1072
  export class RaycastOptions {
954
1073
  ray: THREE.Ray | undefined;
1074
+ cam: THREE.Camera | undefined | null;
955
1075
  screenPoint: THREE.Vector2 | undefined;
956
1076
  raycaster: THREE.Raycaster | undefined;
957
1077
  results: Array<THREE.Intersection> | undefined;
@@ -1250,112 +1370,6 @@ declare module "engine/extensions/NEEDLE_animator_controller_model" {
1250
1370
  Trigger = 9
1251
1371
  }
1252
1372
  }
1253
- declare module "engine/engine_typestore" {
1254
- class _TypeStore {
1255
- private _types;
1256
- add(key: any, type: any): void;
1257
- get(key: any): any;
1258
- }
1259
- export const TypeStore: _TypeStore;
1260
- }
1261
- declare module "engine/extensions/extension_resolver" {
1262
- import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
1263
- export interface IExtensionReferenceResolver {
1264
- resolve(parser: GLTFParser, path: string): Promise<void> | null;
1265
- }
1266
- }
1267
- declare module "engine/engine_default_parameters" {
1268
- export const showGizmos: string | boolean;
1269
- export const debugExtension: string | boolean;
1270
- }
1271
- declare module "engine/extensions/extension_utils" {
1272
- import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
1273
- export function resolveReferences(parser: GLTFParser, obj: any): Promise<void | void[]>;
1274
- }
1275
- declare module "engine/extensions/NEEDLE_persistent_assets" {
1276
- import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
1277
- import { IExtensionReferenceResolver } from "engine/extensions/extension_resolver";
1278
- export const EXTENSION_NAME = "NEEDLE_persistent_assets";
1279
- export function isPersistentAsset(asset: any): boolean;
1280
- export class NEEDLE_persistent_assets implements GLTFLoaderPlugin, IExtensionReferenceResolver {
1281
- get name(): string;
1282
- private parser;
1283
- constructor(parser: GLTFParser);
1284
- afterRoot(_result: GLTF): Promise<void>;
1285
- resolve(parser: GLTFParser, path: string): Promise<void> | null | any;
1286
- }
1287
- }
1288
- declare module "engine/engine_serialization_core" {
1289
- import { GLTF } from "three/examples/jsm/loaders/GLTFLoader";
1290
- import { Object3D } from "three";
1291
- import { Context } from "engine/engine_setup";
1292
- import { SourceIdentifier } from "engine/engine_gltf";
1293
- export type Constructor<T> = {
1294
- new (...args: any[]): T;
1295
- };
1296
- export type NodeToObjectMap = {
1297
- [nodeId: string]: Object3D;
1298
- };
1299
- export type ObjectToNodeMap = {
1300
- [uuid: string]: number;
1301
- };
1302
- class SerializationHelper {
1303
- register(type: string, ser: ITypeSerializer): void;
1304
- typeMap: {
1305
- [type: string]: ITypeSerializer;
1306
- };
1307
- getSerializer(type: string): ITypeSerializer | undefined;
1308
- getSerializerForConstructor(type: any, level?: number): ITypeSerializer | undefined;
1309
- }
1310
- export const helper: SerializationHelper;
1311
- export interface ITypeSerializer {
1312
- onSerialize(data: any, context: SerializationContext): any;
1313
- onDeserialize(data: any, context: SerializationContext): any;
1314
- }
1315
- /**
1316
- * implement and call super(<type string or array>) with the type names this serializer can handle
1317
- * for example:
1318
- * class ColorSerializer extends TypeSerializer {
1319
- * constructor() {
1320
- * super("Color")
1321
- * }
1322
- * }
1323
- */
1324
- export abstract class TypeSerializer implements ITypeSerializer {
1325
- constructor(type: Constructor<any> | Constructor<any>[]);
1326
- abstract onSerialize(data: any, context: SerializationContext): any | void;
1327
- abstract onDeserialize(data: any, context: SerializationContext): any | void;
1328
- }
1329
- export interface ITypeInformation {
1330
- type?: Constructor<any>;
1331
- }
1332
- export class SerializationContext {
1333
- root: THREE.Object3D;
1334
- gltf?: GLTF;
1335
- gltfId?: SourceIdentifier;
1336
- object: THREE.Object3D;
1337
- target?: object;
1338
- nodeId?: number;
1339
- nodeToObject?: NodeToObjectMap;
1340
- objectToNode?: ObjectToNodeMap;
1341
- context?: Context;
1342
- path?: string;
1343
- constructor(root: THREE.Object3D);
1344
- }
1345
- export interface ISerializable {
1346
- $serializedTypes?: {
1347
- [key: string]: Constructor<any> | ITypeInformation | null;
1348
- };
1349
- onBeforeDeserialize?(data: any, context: SerializationContext): void | undefined | boolean;
1350
- onBeforeDeserializeMember?(key: string, data: any, context: SerializationContext): void | undefined | boolean;
1351
- onAfterDeserializeMember?(key: string, data: any, context: SerializationContext): void;
1352
- onAfterDeserialize?(data: any, context: SerializationContext): void;
1353
- }
1354
- export function serializeObject(obj: ISerializable, context: SerializationContext): object | null;
1355
- export function deserializeObject(obj: ISerializable, serializedData: object, context: SerializationContext): boolean;
1356
- /** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
1357
- export function assign(target: any, source: any): void;
1358
- }
1359
1373
  declare module "engine-components/AnimatorController" {
1360
1374
  import { Animator } from "engine-components/Animator";
1361
1375
  import { AnimatorControllerModel, State } from "engine/extensions/NEEDLE_animator_controller_model";
@@ -1571,6 +1585,7 @@ declare module "engine/engine_serialization" {
1571
1585
  import { serializeObject, deserializeObject } from "engine/engine_serialization_core";
1572
1586
  import * as builtin from "engine/engine_serialization_builtin_serializer";
1573
1587
  export { serializeObject, deserializeObject, builtin };
1588
+ export { serializeable } from "engine/engine_serialization_decorator";
1574
1589
  }
1575
1590
  declare module "engine/extensions/NEEDLE_components" {
1576
1591
  import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
@@ -1823,7 +1838,8 @@ declare module "engine-components/XRFlag" {
1823
1838
  AR = 2,
1824
1839
  VR = 4,
1825
1840
  FirstPerson = 8,
1826
- ThirdPerson = 16
1841
+ ThirdPerson = 16,
1842
+ All = 4294967295
1827
1843
  }
1828
1844
  export class XRState {
1829
1845
  static Global: XRState;
@@ -2077,6 +2093,34 @@ declare module "engine-components/WebXRSync" {
2077
2093
  private getAvatarId;
2078
2094
  }
2079
2095
  }
2096
+ declare module "engine/engine_playerview" {
2097
+ import { Object3D } from "three";
2098
+ import { Context } from "engine/engine_setup";
2099
+ export enum ViewDevice {
2100
+ Browser = "browser",
2101
+ Headset = "headset",
2102
+ Handheld = "handheld"
2103
+ }
2104
+ export class PlayerView {
2105
+ readonly userId: string;
2106
+ readonly context: Context;
2107
+ viewDevice: ViewDevice;
2108
+ get currentObject(): Object3D | undefined | null;
2109
+ set currentObject(obj: Object3D | undefined | null);
2110
+ get isConnected(): boolean;
2111
+ removed: boolean;
2112
+ private _object;
2113
+ constructor(userId: string, context: Context);
2114
+ }
2115
+ export class PlayerViewManager {
2116
+ private readonly context;
2117
+ private readonly playerViews;
2118
+ constructor(context: Context);
2119
+ setPlayerView(id: string, obj: Object3D | undefined | null, device: ViewDevice): void;
2120
+ getPlayerView(id: string | null | undefined): PlayerView | undefined;
2121
+ removePlayerView(id: string, device: ViewDevice): void;
2122
+ }
2123
+ }
2080
2124
  declare module "engine-components/WebXRAvatar" {
2081
2125
  import { Behaviour } from "engine-components/Component";
2082
2126
  import { WebXR } from "engine-components/WebXR";
@@ -2091,6 +2135,7 @@ declare module "engine-components/WebXRAvatar" {
2091
2135
  gameObject: Object3D;
2092
2136
  };
2093
2137
  export class AvatarMarker extends Behaviour {
2138
+ static getAvatar(index: number): AvatarMarker | null;
2094
2139
  static instances: AvatarMarker[];
2095
2140
  static onAvatarMarkerCreated(cb: (args: AvatarMarkerEventArgs) => void): Function;
2096
2141
  static onAvatarMarkerDestroyed(cb: (args: AvatarMarkerEventArgs) => void): Function;
@@ -2107,6 +2152,8 @@ declare module "engine-components/WebXRAvatar" {
2107
2152
  private static loader;
2108
2153
  private _isVisible;
2109
2154
  setVisible(visible: boolean): void;
2155
+ get isWebXRAvatar(): boolean;
2156
+ /** the user id */
2110
2157
  guid: string;
2111
2158
  private root;
2112
2159
  head: THREE.Object3D | null;
@@ -2366,20 +2413,27 @@ declare module "engine-components/WebXRController" {
2366
2413
  declare module "engine-components/WebARSessionRoot" {
2367
2414
  import { Behaviour } from "engine-components/Component";
2368
2415
  import * as THREE from 'three';
2369
- import { XRPose } from "three";
2416
+ import { Matrix4, XRPose } from "three";
2370
2417
  import { WebAR } from "engine-components/WebXR";
2371
2418
  export class WebARSessionRoot extends Behaviour {
2372
2419
  webAR: WebAR | null;
2420
+ get rig(): THREE.Object3D | undefined;
2373
2421
  invertForward: boolean;
2374
2422
  get arScale(): number;
2375
2423
  set arScale(val: number);
2424
+ private readonly _initalMatrix;
2425
+ private readonly _selectStartFn;
2426
+ private readonly _selectEndFn;
2427
+ start(): void;
2376
2428
  private _arScale;
2377
2429
  private _rig;
2378
2430
  private _startPose;
2379
2431
  private _placementPose;
2380
2432
  private _isTouching;
2433
+ private _rigStartPose;
2381
2434
  onBegin(session: THREE.XRSession): void;
2382
- onUpdate(rig: THREE.Object3D | null, _session: THREE.XRSession, pose: XRPose | null | undefined): void;
2435
+ onUpdate(rig: THREE.Object3D | null, _session: THREE.XRSession, pose: XRPose | null | undefined): boolean;
2436
+ placeAt(rig: THREE.Object3D | null, mat: Matrix4): void;
2383
2437
  onEnd(rig: THREE.Object3D | null, _session: THREE.XRSession): void;
2384
2438
  private onSelectStart;
2385
2439
  private onSelectEnd;
@@ -2426,7 +2480,7 @@ declare module "engine-components/WebXR" {
2426
2480
  static createARButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement;
2427
2481
  static resetButtonStyles(button: any): void;
2428
2482
  endSession(): void;
2429
- get Rig(): THREE.Object3D | null;
2483
+ get Rig(): THREE.Object3D;
2430
2484
  private controllers;
2431
2485
  get Controllers(): WebXRController[];
2432
2486
  get LeftController(): WebXRController | null;
@@ -2466,7 +2520,8 @@ declare module "engine-components/WebXR" {
2466
2520
  private onEnterXR_HandleMirrorWindow;
2467
2521
  }
2468
2522
  export class WebAR {
2469
- private webxr;
2523
+ get webxr(): WebXR;
2524
+ private _webxr;
2470
2525
  private reticle;
2471
2526
  private hitTestSource;
2472
2527
  private reticleActive;
@@ -2479,9 +2534,11 @@ declare module "engine-components/WebXR" {
2479
2534
  constructor(webxr: WebXR);
2480
2535
  private arDomOverlay;
2481
2536
  private arOverlayElement;
2537
+ private noHitTestAvailable;
2538
+ private didPlaceARSessionRoot;
2482
2539
  getAROverlayContainer(): HTMLElement | null;
2483
2540
  setReticleActive(active: boolean): void;
2484
- onBegin(session: THREE.XRSession): void;
2541
+ onBegin(session: THREE.XRSession): Promise<void>;
2485
2542
  onEnd(_session: THREE.XRSession): void;
2486
2543
  onUpdate(session: THREE.XRSession, frame: THREE.XRFrame): void;
2487
2544
  }
@@ -2820,10 +2877,12 @@ declare module "engine-components/DragControls" {
2820
2877
  }
2821
2878
  declare module "engine-components/ui/Interfaces" {
2822
2879
  export interface ICanvasGroup {
2880
+ get isCanvasGroup(): boolean;
2823
2881
  blocksRaycasts: boolean;
2824
2882
  interactable: boolean;
2825
2883
  }
2826
2884
  export interface IGraphic {
2885
+ get isGraphic(): boolean;
2827
2886
  raycastTarget: boolean;
2828
2887
  }
2829
2888
  }
@@ -2995,6 +3054,7 @@ declare module "engine/engine_setup" {
2995
3054
  import { Addressables } from "engine/engine_addressables";
2996
3055
  import { Application } from "engine/engine_application";
2997
3056
  import { ILightDataRegistry } from "engine/engine_lightdata";
3057
+ import { PlayerViewManager } from "engine/engine_playerview";
2998
3058
  export const build_scene_functions: {
2999
3059
  [name: string]: (context: Context) => Promise<void>;
3000
3060
  };
@@ -3027,6 +3087,10 @@ declare module "engine/engine_setup" {
3027
3087
  OnAfterRender = 4,
3028
3088
  PhysicsStep = 10
3029
3089
  }
3090
+ export enum XRSessionMode {
3091
+ ImmersiveVR = "immersive-vr",
3092
+ ImmersiveAR = "immersive-ar"
3093
+ }
3030
3094
  export type OnBeforeRenderCallback = (renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, geometry: THREE.BufferGeometry, material: THREE.Material, group: THREE.Group) => void;
3031
3095
  export class Context {
3032
3096
  private static _current;
@@ -3045,6 +3109,7 @@ declare module "engine/engine_setup" {
3045
3109
  get domX(): number;
3046
3110
  get domY(): number;
3047
3111
  get isInXR(): boolean;
3112
+ xrSessionMode: XRSessionMode | undefined;
3048
3113
  get xrSession(): THREE.XRSession | null;
3049
3114
  get arOverlayElement(): HTMLElement;
3050
3115
  scene: THREE.Scene;
@@ -3083,6 +3148,7 @@ declare module "engine/engine_setup" {
3083
3148
  rendererData: RendererData;
3084
3149
  addressables: Addressables;
3085
3150
  lightmaps: ILightDataRegistry;
3151
+ players: PlayerViewManager;
3086
3152
  private _sizeChanged;
3087
3153
  private _isCreated;
3088
3154
  private _stats;
@@ -3096,6 +3162,7 @@ declare module "engine/engine_setup" {
3096
3162
  stopAllCoroutinesFrom(script: Component): void;
3097
3163
  private _cameraStack;
3098
3164
  setCurrentCamera(cam: Camera): void;
3165
+ removeCamera(cam?: Camera | null): void;
3099
3166
  private _onBeforeRenderListeners;
3100
3167
  /** use this to subscribe to onBeforeRender events on threejs objects */
3101
3168
  addBeforeRenderListener(target: THREE.Object3D, callback: OnBeforeRenderCallback): void;
@@ -3663,7 +3730,6 @@ declare module "engine-components/ParticleSystem" {
3663
3730
  private tempQuat;
3664
3731
  awake(): void;
3665
3732
  onEnable(): void;
3666
- update(): void;
3667
3733
  emit(deltaTime: number): void;
3668
3734
  private initializeParticle;
3669
3735
  private updateOverLifetime;
@@ -3708,11 +3774,20 @@ declare module "engine-components/VideoPlayer" {
3708
3774
  Direct = 2,
3709
3775
  APIOnly = 3
3710
3776
  }
3777
+ export enum VideoRenderMode {
3778
+ CameraFarPlane = 0,
3779
+ CameraNearPlane = 1,
3780
+ RenderTexture = 2,
3781
+ MaterialOverride = 3
3782
+ }
3711
3783
  export class VideoPlayer extends Behaviour {
3712
3784
  renderer: THREE.Object3D | null;
3713
3785
  playOnAwake: boolean;
3714
3786
  playOnEnable?: boolean;
3715
- targetMaterialProperty?: string;
3787
+ private renderMode?;
3788
+ private targetMaterialProperty?;
3789
+ private targetMaterialRenderer?;
3790
+ private targetTexture?;
3716
3791
  private time;
3717
3792
  private _playbackSpeed;
3718
3793
  get playbackSpeed(): number;
@@ -3761,6 +3836,7 @@ declare module "engine-components/ScreenCapture" {
3761
3836
  private captureStream;
3762
3837
  open(force?: boolean): Promise<void>;
3763
3838
  close(): void;
3839
+ private handleNetworkedVideo;
3764
3840
  }
3765
3841
  }
3766
3842
  declare module "engine-components/ShadowCatcher" {
@@ -3864,36 +3940,43 @@ declare module "engine-components/SpatialTrigger" {
3864
3940
  declare module "engine-components/SpectatorCamera" {
3865
3941
  import { Behaviour } from "engine-components/Component";
3866
3942
  import { Camera } from "engine-components/Camera";
3943
+ import { PlayerView } from "engine/engine_playerview";
3944
+ export enum SpectatorMode {
3945
+ FirstPerson = 0,
3946
+ ThirdPerson = 1
3947
+ }
3867
3948
  export class SpectatorCamera extends Behaviour {
3868
3949
  cam: Camera | null;
3869
- private _firstPersonMode;
3870
- get firstPersonMode(): boolean;
3871
- set firstPersonMode(val: boolean);
3872
- enableFirstPersonMode(): void;
3873
- enableThirdPersonMode(): void;
3950
+ private _mode;
3951
+ get mode(): SpectatorMode;
3952
+ set mode(val: SpectatorMode);
3953
+ /** if this user is currently spectating someone else */
3954
+ get isSpectating(): boolean;
3955
+ isSpectatingUser(userId: string): boolean;
3956
+ isFollowedBy(userId: string): boolean;
3957
+ /** list of other users that are following me */
3958
+ get followers(): string[];
3959
+ stopSpectating(): void;
3960
+ /** player view to follow */
3961
+ set target(target: PlayerView | undefined);
3962
+ get target(): PlayerView | undefined;
3963
+ requestAllFollowMe(): void;
3964
+ private get isSpectatingSelf();
3874
3965
  private orbit;
3875
- private firstPersonFollow;
3876
- private spectatorUIDomElement;
3966
+ private _handler?;
3877
3967
  private eventSub_WebXRRequestStartEvent;
3878
3968
  private eventSub_WebXRStartEvent;
3879
3969
  private eventSub_WebXREndEvent;
3970
+ private _debug?;
3971
+ private _networking;
3880
3972
  awake(): void;
3881
3973
  onDestroy(): void;
3882
- private toggleView;
3883
- private updateUI;
3884
3974
  private isSupportedPlatform;
3885
3975
  private onXRSessionRequestStart;
3886
3976
  private onXRSessionStart;
3887
3977
  private onXRSessionEnded;
3888
- private _sessionHasStarted;
3889
- private _firstPersonIsSetup;
3890
- private _orbitStartPos;
3891
- private _orbitStartRot;
3892
- private _orbitStartPos2;
3893
- private _orbitStartRot2;
3978
+ private followSelf;
3894
3979
  onAfterRender(): void;
3895
- private setupFollowMode;
3896
- private updateFollowSettings;
3897
3980
  private setAvatarFlagsBeforeRender;
3898
3981
  private resetAvatarFlags;
3899
3982
  }
@@ -3976,11 +4059,15 @@ declare module "engine-schemes/synced-camera-model" {
3976
4059
  }
3977
4060
  declare module "engine-components/SyncedCamera" {
3978
4061
  import { Behaviour } from "engine-components/Component";
3979
- import { Camera } from "engine-components/Camera";
3980
4062
  import { AssetReference } from "engine/engine_addressables";
4063
+ type UserCamInfo = {
4064
+ obj: THREE.Object3D;
4065
+ lastUpdate: number;
4066
+ userId: string;
4067
+ };
3981
4068
  export class SyncedCamera extends Behaviour {
3982
- getUserCamera(userId: string): THREE.Object3D | null;
3983
- cam: Camera | null;
4069
+ static instances: UserCamInfo[];
4070
+ getCameraObject(userId: string): THREE.Object3D | null;
3984
4071
  cameraPrefab: THREE.Object3D | null | AssetReference;
3985
4072
  private _lastWorldPosition;
3986
4073
  private _lastWorldQuaternion;
@@ -3992,7 +4079,6 @@ declare module "engine-components/SyncedCamera" {
3992
4079
  private _camTimeoutInSeconds;
3993
4080
  private _receiveCallback;
3994
4081
  awake(): Promise<void>;
3995
- start(): void;
3996
4082
  onEnable(): void;
3997
4083
  onDisable(): void;
3998
4084
  update(): void;
@@ -4083,10 +4169,14 @@ declare module "engine-components/Volume" {
4083
4169
  export class VolumeProfile {
4084
4170
  components?: VolumeComponent[];
4085
4171
  apply(context: Context): void;
4172
+ unapply(context: Context): void;
4173
+ private onUpdate;
4086
4174
  }
4087
4175
  export class Volume extends Behaviour {
4088
4176
  sharedProfile?: VolumeProfile;
4177
+ awake(): void;
4089
4178
  onEnable(): void;
4179
+ onDisable(): void;
4090
4180
  }
4091
4181
  }
4092
4182
  declare module "engine-components/WebXRGrabRendering" {
@@ -4518,6 +4608,7 @@ declare module "engine-components/ui/Graphic" {
4518
4608
  import { Texture } from 'three';
4519
4609
  import { RectTransform } from "engine-components/ui/RectTransform";
4520
4610
  export class Graphic extends BaseUIComponent implements IGraphic {
4611
+ get isGraphic(): boolean;
4521
4612
  get color(): RGBAColor;
4522
4613
  set color(col: RGBAColor);
4523
4614
  protected onColorChanged(): void;
@@ -4669,6 +4760,7 @@ declare module "engine-components/ui/CanvasGroup" {
4669
4760
  export class CanvasGroup extends Behaviour implements ICanvasGroup {
4670
4761
  get alpha(): number;
4671
4762
  set alpha(val: number);
4763
+ get isCanvasGroup(): boolean;
4672
4764
  private _alpha;
4673
4765
  interactable: boolean;
4674
4766
  blocksRaycasts: boolean;
@@ -5003,6 +5095,7 @@ declare module "engine/engine" {
5003
5095
  LoadingOptions: typeof engine_setup.LoadingOptions;
5004
5096
  ContextArgs: typeof engine_setup.ContextArgs;
5005
5097
  FrameEvent: typeof engine_setup.FrameEvent;
5098
+ XRSessionMode: typeof engine_setup.XRSessionMode;
5006
5099
  Context: typeof engine_setup.Context;
5007
5100
  };
5008
5101
  export { engine as engine };