@needle-tools/engine 2.29.0-pre → 2.31.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 (101) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/needle-engine.d.ts +847 -757
  3. package/dist/needle-engine.js +347 -343
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +16 -12
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine.d.ts +1 -0
  8. package/lib/engine/engine_physics.d.ts +19 -8
  9. package/lib/engine/engine_physics.js +57 -48
  10. package/lib/engine/engine_physics.js.map +1 -1
  11. package/lib/engine/engine_serialization.d.ts +1 -0
  12. package/lib/engine/engine_serialization.js +1 -0
  13. package/lib/engine/engine_serialization.js.map +1 -1
  14. package/lib/engine/engine_setup.d.ts +5 -0
  15. package/lib/engine/engine_setup.js +6 -0
  16. package/lib/engine/engine_setup.js.map +1 -1
  17. package/lib/engine/engine_utils.d.ts +1 -1
  18. package/lib/engine/engine_utils.js +25 -8
  19. package/lib/engine/engine_utils.js.map +1 -1
  20. package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +1 -1
  21. package/lib/engine/extensions/NEEDLE_deferred_texture.js +26 -14
  22. package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +1 -1
  23. package/lib/engine/extensions/extension_utils.js +24 -13
  24. package/lib/engine/extensions/extension_utils.js.map +1 -1
  25. package/lib/engine/extensions/extensions.js +3 -1
  26. package/lib/engine/extensions/extensions.js.map +1 -1
  27. package/lib/engine-components/Camera.js +7 -1
  28. package/lib/engine-components/Camera.js.map +1 -1
  29. package/lib/engine-components/Component.d.ts +10 -0
  30. package/lib/engine-components/Component.js +53 -0
  31. package/lib/engine-components/Component.js.map +1 -1
  32. package/lib/engine-components/OrbitControls.js +2 -1
  33. package/lib/engine-components/OrbitControls.js.map +1 -1
  34. package/lib/engine-components/Renderer.d.ts +1 -0
  35. package/lib/engine-components/Renderer.js +10 -3
  36. package/lib/engine-components/Renderer.js.map +1 -1
  37. package/lib/engine-components/Rigidbody.d.ts +1 -1
  38. package/lib/engine-components/Rigidbody.js +3 -3
  39. package/lib/engine-components/Rigidbody.js.map +1 -1
  40. package/lib/engine-components/ScreenCapture.d.ts +35 -5
  41. package/lib/engine-components/ScreenCapture.js +542 -25
  42. package/lib/engine-components/ScreenCapture.js.map +1 -1
  43. package/lib/engine-components/SpectatorCamera.js +29 -5
  44. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  45. package/lib/engine-components/SyncedRoom.js +2 -0
  46. package/lib/engine-components/SyncedRoom.js.map +1 -1
  47. package/lib/engine-components/VideoPlayer.d.ts +14 -1
  48. package/lib/engine-components/VideoPlayer.js +86 -16
  49. package/lib/engine-components/VideoPlayer.js.map +1 -1
  50. package/lib/engine-components/Volume.d.ts +4 -0
  51. package/lib/engine-components/Volume.js +44 -3
  52. package/lib/engine-components/Volume.js.map +1 -1
  53. package/lib/engine-components/WebARSessionRoot.d.ts +9 -2
  54. package/lib/engine-components/WebARSessionRoot.js +69 -24
  55. package/lib/engine-components/WebARSessionRoot.js.map +1 -1
  56. package/lib/engine-components/WebXR.d.ts +6 -3
  57. package/lib/engine-components/WebXR.js +42 -7
  58. package/lib/engine-components/WebXR.js.map +1 -1
  59. package/lib/engine-components/WebXRAvatar.js +4 -0
  60. package/lib/engine-components/WebXRAvatar.js.map +1 -1
  61. package/lib/engine-components/WebXRController.js +13 -7
  62. package/lib/engine-components/WebXRController.js.map +1 -1
  63. package/lib/engine-components/ui/CanvasGroup.d.ts +1 -0
  64. package/lib/engine-components/ui/CanvasGroup.js +1 -0
  65. package/lib/engine-components/ui/CanvasGroup.js.map +1 -1
  66. package/lib/engine-components/ui/EventSystem.js +13 -4
  67. package/lib/engine-components/ui/EventSystem.js.map +1 -1
  68. package/lib/engine-components/ui/Graphic.d.ts +1 -0
  69. package/lib/engine-components/ui/Graphic.js +2 -0
  70. package/lib/engine-components/ui/Graphic.js.map +1 -1
  71. package/lib/engine-components/ui/Interfaces.d.ts +2 -0
  72. package/lib/needle-engine.d.ts +1 -0
  73. package/lib/needle-engine.js +1 -0
  74. package/lib/needle-engine.js.map +1 -1
  75. package/package.json +2 -2
  76. package/src/engine/engine_physics.ts +74 -57
  77. package/src/engine/engine_serialization.ts +3 -1
  78. package/src/engine/engine_setup.ts +6 -0
  79. package/src/engine/engine_utils.ts +34 -8
  80. package/src/engine/extensions/NEEDLE_deferred_texture.ts +25 -19
  81. package/src/engine/extensions/extension_utils.ts +24 -12
  82. package/src/engine/extensions/extensions.ts +3 -2
  83. package/src/engine-components/Camera.ts +9 -2
  84. package/src/engine-components/Component.ts +58 -0
  85. package/src/engine-components/OrbitControls.ts +2 -1
  86. package/src/engine-components/Renderer.ts +11 -3
  87. package/src/engine-components/RigidBody.ts +2 -2
  88. package/src/engine-components/ScreenCapture.ts +610 -28
  89. package/src/engine-components/SpectatorCamera.ts +28 -5
  90. package/src/engine-components/SyncedRoom.ts +1 -0
  91. package/src/engine-components/VideoPlayer.ts +123 -23
  92. package/src/engine-components/Volume.ts +47 -4
  93. package/src/engine-components/WebARSessionRoot.ts +78 -28
  94. package/src/engine-components/WebXR.ts +50 -15
  95. package/src/engine-components/WebXRAvatar.ts +5 -0
  96. package/src/engine-components/WebXRController.ts +20 -14
  97. package/src/engine-components/ui/CanvasGroup.ts +2 -0
  98. package/src/engine-components/ui/EventSystem.ts +21 -15
  99. package/src/engine-components/ui/Graphic.ts +3 -0
  100. package/src/engine-components/ui/Interfaces.ts +2 -0
  101. package/src/needle-engine.ts +1 -0
@@ -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;
@@ -350,789 +350,833 @@ declare module "engine/engine_networking_instantiate" {
350
350
  export type PrefabProviderCallback = (guid: string) => Promise<GameObject | null>;
351
351
  export function registerPrefabProvider(key: string, fn: PrefabProviderCallback): void;
352
352
  }
353
- declare module "engine-components/Component" {
354
- import * as THREE from "three";
355
- import { Context, FrameEvent } from "engine/engine_setup";
356
- import { Object3D } from "three";
357
- import { SourceIdentifier } from "engine/engine_gltf";
358
- export interface UIDProvider {
359
- seed: number;
360
- generateUUID(): string;
361
- }
362
- export enum HideFlags {
363
- None = 0,
364
- HideInHierarchy = 1,
365
- HideInInspector = 2,
366
- DontSaveInEditor = 4,
367
- NotEditable = 8,
368
- DontSaveInBuild = 16,
369
- DontUnloadUnusedAsset = 32,
370
- DontSave = 52,
371
- HideAndDontSave = 61
372
- }
373
- export type Constructor<T> = abstract new (...args: any[]) => T;
374
- export type ConstructorConcrete<T> = new (...args: any[]) => T;
375
- export type GuidsMap = {
376
- [key: string]: string;
353
+ declare module "engine-components/ui/Utils" {
354
+ import { FrameEvent } from "engine/engine_setup";
355
+ import { Behaviour } from "engine-components/Component";
356
+ export function isUIObject(obj: THREE.Object3D): boolean;
357
+ export type RenderSettings = {
358
+ renderOnTop?: boolean;
359
+ doubleSided?: boolean;
360
+ depthWrite?: boolean;
361
+ castShadows?: boolean;
362
+ receiveShadows?: boolean;
377
363
  };
378
- type FunctionName = string;
379
- export class InstantiateOptions {
380
- idProvider?: UIDProvider | undefined;
381
- parent?: string | undefined | Object3D;
382
- /** for duplicatable parenting */
383
- keepWorldPosition?: boolean;
384
- position?: THREE.Vector3 | undefined;
385
- rotation?: THREE.Quaternion | undefined;
386
- scale?: THREE.Vector3 | undefined;
387
- visible?: boolean | undefined;
388
- context?: Context | undefined;
389
- }
390
- abstract class GameObject extends THREE.Object3D implements THREE.Object3D {
391
- guid: string | undefined;
392
- static setActive(go: THREE.Object3D, active: boolean): void;
393
- static isActiveSelf(go: THREE.Object3D): boolean;
394
- static isActiveInHierarchy(go: THREE.Object3D): boolean;
395
- static markAsInstancedRendered(go: THREE.Object3D, instanced: boolean): void;
396
- static isUsingInstancing(instance: THREE.Object3D): boolean;
397
- static foreachComponent(instance: THREE.Object3D, cb: (comp: Component) => any, recursive?: boolean): any;
398
- static instantiateSynced(instance: GameObject | THREE.Object3D | null, opts: InstantiateOptions): GameObject | null;
399
- static instantiate(instance: GameObject | THREE.Object3D | null, opts?: InstantiateOptions | null): GameObject | null;
400
- private static internalInstantiate;
401
- private static resolveAndBindSkinnedMeshBones;
402
- private static resolveReferences;
403
- private static postProcessNewInstance;
404
- static destroySynced(instance: THREE.Object3D | Component, context?: Context, recursive?: boolean): void;
405
- static destroy(instance: THREE.Object3D | Component, recursive?: boolean, isRoot?: boolean): void;
406
- /**
407
- * Add an object to parent and also ensure all components are being registered
408
- */
409
- static add(instance: THREE.Object3D | null | undefined, parent: THREE.Object3D, context?: Context): void;
410
- /**
411
- * Removes the object from its parent and deactivates all of its components
412
- */
413
- static remove(instance: THREE.Object3D | null | undefined): void;
414
- static invokeOnChildren(go: THREE.Object3D | null | undefined, functionName: string | FunctionName, ...args: any): void;
415
- static invoke(go: THREE.Object3D | null | undefined, functionName: string | FunctionName, children?: boolean, ...args: any): void;
416
- static addNewComponent<T extends Behaviour>(go: GameObject | THREE.Object3D, type: ConstructorConcrete<T>, callAwake?: boolean): T;
417
- static addComponent(go: GameObject, instance: Component): void;
418
- static removeComponent(instance: Component): Component;
419
- static getOrAddComponent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T;
420
- static getComponent<T>(go: GameObject | THREE.Object3D | null, typeName: Constructor<T> | null): T | null;
421
- static getComponents<T>(go: GameObject | THREE.Object3D | null, typeName: Constructor<T> | null, arr?: T[] | null): T[];
422
- static findByGuid(guid: string, hierarchy: THREE.Object3D): GameObject | Behaviour | null | undefined;
423
- static findObjectOfType<T>(typeName: Constructor<T> | string, context?: Context | THREE.Object3D, includeInactive?: boolean): T | null;
424
- static findObjectsOfType<T>(typeName: Constructor<T>, context?: Context | THREE.Object3D): Array<T>;
425
- static getComponentInChildren<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T | null;
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 | Array<Object3D>, typeName: Constructor<T>): T | null;
428
- static getComponentsInParent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T>, arr?: Array<T> | null): Array<T>;
429
- static getAllComponents(go: GameObject | THREE.Object3D): Behaviour[];
430
- static iterateComponents(go: GameObject | THREE.Object3D): Generator<any, void, unknown>;
431
- abstract addNewComponent<T>(type: Constructor<T>): T | null;
432
- abstract removeComponent(comp: Component): Component;
433
- abstract getOrAddComponent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T;
434
- abstract getComponent<T>(type: Constructor<T>): T | null;
435
- abstract getComponents<T>(type: Constructor<T>, arr?: T[]): Array<T>;
436
- abstract getComponentInChildren<T>(type: Constructor<T>): T | null;
437
- abstract getComponentsInChildren<T>(type: Constructor<T>, arr?: T[]): Array<T>;
438
- abstract getComponentInParent<T>(type: Constructor<T>): T | null;
439
- abstract getComponentsInParent<T>(type: Constructor<T>, arr?: T[]): Array<T>;
440
- }
441
- class Component implements EventTarget {
442
- get isComponent(): boolean;
443
- private __context;
444
- get context(): Context;
445
- set context(context: Context);
446
- get scene(): THREE.Scene;
447
- get layer(): number;
448
- get name(): string;
449
- private __name?;
450
- set name(str: string);
451
- get tag(): string;
452
- set tag(str: string);
453
- get static(): any;
454
- get hideFlags(): HideFlags;
455
- get activeAndEnabled(): boolean;
456
- private get __isActive();
457
- private get __isActiveInHierarchy();
458
- gameObject: GameObject;
459
- guid: string;
460
- sourceId?: SourceIdentifier;
461
- /** called on a component with a map of old to new guids (e.g. when instantiate generated new guids and e.g. timeline track bindings needs to remape them) */
462
- resolveGuids?(guidsMap: GuidsMap): void;
364
+ export function updateRenderSettings(shadowComponent: THREE.Object3D, settings: RenderSettings): void;
365
+ export type RevocableProxy = {
366
+ proxy: any;
367
+ revoke: () => void;
368
+ };
369
+ /** internal method to proxy a field to detect changes */
370
+ export function onChange<T extends object>(caller: T, field: string, callback: (newValue: any, oldValue: any) => void): RevocableProxy;
371
+ /** internal method to schedula a function at a specific moment in the update loop */
372
+ export function scheduleAction(caller: Behaviour, action: Function, timing?: FrameEvent): void;
373
+ }
374
+ declare module "engine/engine_serialization_decorator" {
375
+ import { Constructor } from "engine-components/Component";
376
+ export type TypeResolver<T> = (data: any) => Constructor<T> | null;
377
+ export const serializeable: <T>(type?: Constructor<T> | TypeResolver<T> | (Constructor<any> | TypeResolver<T>)[] | null | undefined) => (_target: any, _propertyKey: string) => void;
378
+ export const ALL_PROPERTIES_MARKER = "__NEEDLE__ALL_PROPERTIES";
379
+ /** @deprecated current not used */
380
+ export function allProperties(constructor: Function): void;
381
+ export const STRICT_MARKER = "__NEEDLE__STRICT";
382
+ /** @deprecated current not used */
383
+ export function strict(constructor: Function): void;
384
+ }
385
+ declare module "engine-components/Rigidbody" {
386
+ import { Behaviour } from "engine-components/Component";
387
+ import * as CANNON from 'cannon-es';
388
+ import * as THREE from 'three';
389
+ export class Rigidbody extends Behaviour {
390
+ mass: number;
391
+ set isKinematic(kinematic: boolean);
392
+ get isKinematic(): boolean;
393
+ private _isKinematic;
394
+ drag: number;
395
+ angularDrag: number;
396
+ detectCollisions: boolean;
397
+ sleepThreshold: number;
398
+ get body(): CANNON.Body | null;
399
+ private static tempPosition;
400
+ private _body;
401
+ private currentVelocity;
402
+ private _smoothedVelocity;
403
+ private lastWorldPosition;
404
+ private dirty;
405
+ private transformProxy?;
463
406
  awake(): void;
407
+ start(): void;
464
408
  onEnable(): void;
465
409
  onDisable(): void;
466
410
  onDestroy(): void;
467
- start?(): void;
468
- earlyUpdate?(): void;
469
- update?(): void;
470
- lateUpdate?(): void;
471
- onBeforeRender?(frame: THREE.XRFrame | null): void;
472
- onAfterRender?(): void;
473
- startCoroutine(routine: Generator, evt?: FrameEvent): Generator;
474
- stopCoroutine(routine: Generator, evt?: FrameEvent): void;
475
- get destroyed(): boolean;
476
- destroy(): void;
477
- protected __didAwake: boolean;
478
- private __didStart;
479
- protected __didEnable: boolean;
480
- protected __isEnabled: boolean | undefined;
481
- private __destroyed;
482
- __internalNewInstanceCreated(): void;
483
- __internalAwake(): void;
484
- __internalStart(): void;
485
- __internalEnable(): void;
486
- __internalDisable(): void;
487
- constructor();
488
- private static _worldPositionBuffer;
489
- private static _worldQuaternionBuffer;
490
- private static _worldEulerBuffer;
491
- private _worldPosition;
492
- private _worldQuaternion;
493
- private static _tempQuaternionBuffer2;
494
- private _worldEuler;
495
- private _worldRotation;
496
- get worldPosition(): THREE.Vector3;
497
- set worldPosition(val: THREE.Vector3);
498
- setWorldPosition(x: number, y: number, z: number): void;
499
- get worldQuaternion(): THREE.Quaternion;
500
- set worldQuaternion(val: THREE.Quaternion);
501
- setWorldQuaternion(x: number, y: number, z: number, w: number): void;
502
- get worldEuler(): THREE.Euler;
503
- set worldEuler(val: THREE.Euler);
504
- get worldRotation(): THREE.Vector3;
505
- set worldRotation(val: THREE.Vector3);
506
- setWorldRotation(x: number, y: number, z: number, degrees?: boolean): void;
507
- private static _forward;
508
- get forward(): THREE.Vector3;
509
- private _eventListeners;
510
- addEventListener(type: string, listener: EventListener): void;
511
- removeEventListener(type: string, listener: EventListener): void;
512
- dispatchEvent(evt: Event): boolean;
513
- }
514
- class Behaviour extends Component {
515
- get enabled(): boolean;
516
- set enabled(val: boolean);
411
+ earlyUpdate(): void;
412
+ onBeforeRender(): void;
413
+ initialize(): void;
414
+ wakeUp(): void;
415
+ applyForce(vec: THREE.Vector3, rel: THREE.Vector3 | undefined): void;
416
+ getVelocity(): THREE.Vector3;
417
+ setVelocity(x: number, y: number, z: number): void;
418
+ get smoothedVelocity(): THREE.Vector3;
419
+ setAngularVelocity(x: number, y: number, z: number): void;
420
+ private static copyVector3;
421
+ setBodyFromGameObject(velocity?: THREE.Vector3 | null | {
422
+ x: number;
423
+ y: number;
424
+ z: number;
425
+ }): void;
426
+ private updateVelocity;
517
427
  }
518
- export { Behaviour, Component, GameObject };
519
428
  }
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;
429
+ declare module "engine-components/RendererLightmap" {
430
+ import { GameObject } from "engine-components/Component";
431
+ import * as THREE from "three";
432
+ import { Texture } from "three";
433
+ import { Context } from "engine/engine_setup";
434
+ export class RendererLightmap {
435
+ get lightmap(): Texture | null;
436
+ set lightmap(tex: Texture | null);
437
+ lightmapIndex: number;
438
+ lightmapScaleOffset: THREE.Vector4;
439
+ private context;
440
+ private gameObject;
441
+ private lightmapTexture;
442
+ private lightmapScaleOffsetUniform;
443
+ private lightmapUniform;
444
+ private beforeRenderCallback?;
445
+ constructor(gameObject: GameObject, context: Context);
446
+ init(lightmapIndex: number, lightmapScaleOffset: THREE.Vector4, lightmapTexture: THREE.Texture, debug?: boolean): void;
447
+ bindOnBeforeRender(): void;
448
+ private onBeforeRenderThreeComplete;
449
+ private setupLightmap;
450
+ onBeforeRenderThree(material: THREE.Material): void;
451
+ private setLightmapDebugMaterial;
524
452
  }
525
453
  }
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;
454
+ declare module "engine/extensions/NEEDLE_render_objects" {
455
+ import { SourceIdentifier } from "engine/engine_gltf";
456
+ import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
457
+ import { Renderer } from "engine-components/Renderer";
458
+ export class NEEDLE_render_objects implements GLTFLoaderPlugin {
459
+ private static stencils;
460
+ static applyStencil(obj?: Renderer | null): void;
461
+ private parser;
462
+ private source;
463
+ constructor(parser: GLTFParser, source: SourceIdentifier);
464
+ afterRoot(_result: GLTF): Promise<void> | null;
539
465
  }
540
- export const TypeStore: _TypeStore;
466
+ export const EXTENSION_NAME = "NEEDLE_render_objects";
541
467
  }
542
- declare module "engine/extensions/NEEDLE_persistent_assets" {
468
+ declare module "engine/engine_loaders" {
469
+ import { Context } from "engine/engine_setup";
470
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
471
+ export function setDracoDecoderPath(path: string | undefined): void;
472
+ export function setDracoDecoderType(type: string | undefined): void;
473
+ export function setKtx2TranscoderPath(path: string): void;
474
+ export function addDracoAndKTX2Loaders(loader: GLTFLoader, context: Context): void;
475
+ }
476
+ declare module "engine/extensions/NEEDLE_deferred_texture" {
477
+ import { Material } from "three";
543
478
  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 {
479
+ import { SourceIdentifier } from "engine/engine_gltf";
480
+ import { Context } from "engine/engine_setup";
481
+ export const EXTENSION_NAME = "NEEDLE_deferred_texture";
482
+ export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
483
+ static assignTextureLOD(context: Context, source: SourceIdentifier | undefined, material: Material, level?: number): void;
548
484
  get name(): string;
549
485
  private parser;
550
- constructor(parser: GLTFParser);
551
- afterRoot(_result: GLTF): Promise<void>;
552
- resolve(parser: GLTFParser, path: string): Promise<void> | null | any;
486
+ private sourceId;
487
+ private context;
488
+ constructor(parser: GLTFParser, sourceId: SourceIdentifier, context: Context);
489
+ private _loading;
490
+ afterRoot(gltf: GLTF): null;
491
+ private static cache;
492
+ private static resolved;
493
+ private static getOrLoadTexture;
553
494
  }
554
495
  }
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;
496
+ declare module "engine-components/Renderer" {
497
+ import { Behaviour } from "engine-components/Component";
498
+ import * as THREE from "three";
499
+ import { Texture } from "three";
500
+ export class FieldWithDefault {
501
+ path: string | null;
502
+ asset: object | null;
503
+ default: any;
576
504
  }
577
- export const helper: SerializationHelper;
578
- export interface ITypeSerializer {
579
- onSerialize(data: any, context: SerializationContext): any;
580
- onDeserialize(data: any, context: SerializationContext): any;
505
+ export enum RenderState {
506
+ Both = 0,
507
+ Back = 1,
508
+ Front = 2
581
509
  }
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;
510
+ class SharedMaterialArray {
511
+ private _renderer;
512
+ private _targets;
513
+ is(renderer: Renderer): boolean;
514
+ constructor(renderer: Renderer);
515
+ get length(): number;
516
+ private setMaterial;
517
+ private getMaterial;
595
518
  }
596
- export interface ITypeInformation {
597
- type?: Constructor<any>;
519
+ export class Renderer extends Behaviour {
520
+ receiveShadows: boolean;
521
+ shadowCastingMode: ShadowCastingMode;
522
+ lightmapIndex: number;
523
+ lightmapScaleOffset: THREE.Vector4;
524
+ enableInstancing: boolean[] | undefined;
525
+ renderOrder: number[] | undefined;
526
+ allowOcclusionWhenDynamic: boolean;
527
+ private _lightmaps?;
528
+ get material(): THREE.Material;
529
+ set material(mat: THREE.Material);
530
+ private _sharedMaterials;
531
+ get sharedMaterials(): SharedMaterialArray;
532
+ static get shouldSuppressInstancing(): string | boolean;
533
+ private _lightmapTextureOverride;
534
+ get lightmap(): Texture | null;
535
+ set lightmap(tex: Texture | null | undefined);
536
+ get hasLightmap(): boolean;
537
+ awake(): void;
538
+ private _isInstancingEnabled;
539
+ private handles;
540
+ private prevLayers;
541
+ private clearInstancingState;
542
+ setInstancingEnabled(enabled: boolean): boolean;
543
+ start(): void;
544
+ onEnable(): void;
545
+ onDisable(): void;
546
+ onDestroy(): void;
547
+ applyStencil(): void;
548
+ onBeforeRenderThree(_renderer: any, _scene: any, _camera: any, _geometry: any, material: any, _group: any): void;
549
+ onBeforeRender(): void;
550
+ onAfterRender(): void;
551
+ private applySettings;
598
552
  }
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);
553
+ export class MeshRenderer extends Renderer {
611
554
  }
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;
555
+ export class SkinnedMeshRenderer extends MeshRenderer {
556
+ awake(): void;
557
+ }
558
+ export enum ShadowCastingMode {
559
+ Off = 0,
560
+ On = 1,
561
+ TwoSided = 2,
562
+ ShadowsOnly = 3
563
+ }
564
+ export class InstancingUtil {
565
+ static markDirty(go: THREE.Object3D | null, recursive?: boolean): void;
620
566
  }
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
567
  }
626
- declare module "engine/engine_input" {
568
+ declare module "engine-components/Collider" {
569
+ import { Behaviour } from "engine-components/Component";
570
+ import { Rigidbody } from "engine-components/Rigidbody";
571
+ import { Shape } from "cannon-es";
572
+ export class Collider extends Behaviour {
573
+ attachedRigidbody: Rigidbody | null;
574
+ isTrigger: boolean;
575
+ protected _shape: Shape | null;
576
+ awake(): void;
577
+ onEnable(): void;
578
+ onDisable(): void;
579
+ }
580
+ export class SphereCollider extends Collider {
581
+ radius: number;
582
+ center: THREE.Vector3;
583
+ onEnable(): void;
584
+ }
585
+ export class BoxCollider extends Collider {
586
+ size: THREE.Vector3;
587
+ center: THREE.Vector3;
588
+ onEnable(): void;
589
+ }
590
+ }
591
+ declare module "engine/engine_physics" {
592
+ import * as CANNON from 'cannon-es';
627
593
  import * as THREE from 'three';
628
594
  import { Context } from "engine/engine_setup";
629
- export type PointerEventArgs = {
630
- button: number;
631
- clientX: number;
632
- clientY: number;
633
- pointerId?: number;
634
- pointerType: string;
635
- source?: Event;
595
+ import { Rigidbody } from "engine-components/Rigidbody";
596
+ import { GameObject } from "engine-components/Component";
597
+ import { Object3D, Vector3 } from 'three';
598
+ import { Collider } from "engine-components/Collider";
599
+ export class BodyOptions {
600
+ mass: number;
601
+ kinematic: boolean;
602
+ physicsEvents: boolean;
603
+ drag: number;
604
+ angularDrag: number;
605
+ sleepThreshold: number;
606
+ }
607
+ type CannonCollision = {
608
+ body: CANNON.Body;
609
+ contact: CANNON.ContactEquation;
610
+ target: CANNON.Body;
611
+ type: string;
636
612
  };
637
- export class KeyEventArgs {
638
- key: string;
639
- keyType: string;
640
- source?: Event;
641
- constructor(evt: KeyboardEvent);
613
+ export class RaycastOptions {
614
+ ray: THREE.Ray | undefined;
615
+ cam: THREE.Camera | undefined | null;
616
+ screenPoint: THREE.Vector2 | undefined;
617
+ raycaster: THREE.Raycaster | undefined;
618
+ results: Array<THREE.Intersection> | undefined;
619
+ targets: Array<THREE.Object3D> | undefined;
620
+ recursive: boolean | undefined;
621
+ minDistance: number | undefined;
622
+ maxDistance: number | undefined;
623
+ lineThreshold: number | undefined;
624
+ layerMask: THREE.Layers | number | undefined;
625
+ ignore: THREE.Object3D[] | undefined;
626
+ screenPointFromOffset(ox: number, oy: number): void;
627
+ setMask(mask: number): void;
628
+ static AllLayers: number;
642
629
  }
643
- export enum InputEvents {
644
- PointerDown = "pointerdown",
645
- PointerUp = "pointerup",
646
- PointerMove = "pointermove",
647
- KeyDown = "keydown",
648
- KeyUp = "keyup",
649
- KeyPressed = "keypress"
630
+ export class SphereIntersection implements THREE.Intersection {
631
+ distance: number;
632
+ point: THREE.Vector3;
633
+ object: THREE.Object3D;
634
+ constructor(object: THREE.Object3D, distance: number, point: THREE.Vector3);
650
635
  }
651
- export class Input extends EventTarget {
652
- _doubleClickTimeThreshold: number;
653
- _longPressTimeThreshold: number;
654
- get mousePosition(): THREE.Vector2;
655
- get mousePositionRC(): THREE.Vector2;
656
- get mouseDown(): boolean;
657
- get mouseUp(): boolean;
658
- get mouseClick(): boolean;
659
- get mouseDoubleClick(): boolean;
660
- get mousePressed(): boolean;
661
- get mouseWheelChanged(): boolean;
662
- private _specialCursorTrigger;
663
- setCursorPointer(): void;
664
- setCursorNormal(): void;
665
- getPointerPressedCount(): number;
666
- getPointerPosition(i: number): THREE.Vector2 | null;
667
- getPointerPositionLastFrame(i: number): THREE.Vector2 | null;
668
- getPointerPositionDelta(i: number): THREE.Vector2 | null;
669
- getPointerPositionRC(i: number): THREE.Vector2 | null;
670
- getPointerDown(i: number): boolean;
671
- getPointerUp(i: number): boolean;
672
- getPointerPressed(i: number): boolean;
673
- getPointerClicked(i: number): boolean;
674
- getPointerDoubleClicked(i: number): boolean;
675
- getPointerDownTime(i: number): number;
676
- getPointerUpTime(i: number): number;
677
- getPointerLongPress(i: number): boolean;
678
- getIsMouse(i: number): boolean;
679
- getIsTouch(i: number): boolean;
680
- getTouchesPressedCount(): number;
681
- getMouseWheelChanged(i?: number): boolean;
682
- getPointerEvent(i: number): Event | undefined;
636
+ export class Physics {
637
+ private readonly raycaster;
638
+ private readonly defaultRaycastOptions;
639
+ private readonly targetBuffer;
640
+ private readonly defaultThresholds;
641
+ private sphereResults;
642
+ private sphereMask;
643
+ sphereOverlap(spherePos: THREE.Vector3, radius: number): Array<THREE.Intersection>;
644
+ private tempBoundingBox;
645
+ private onSphereOverlap;
646
+ raycastFromRay(ray: THREE.Ray, options?: RaycastOptions | null): Array<THREE.Intersection>;
647
+ raycast(options?: RaycastOptions | null): Array<THREE.Intersection>;
648
+ get isUpdating(): boolean;
649
+ private _isUpdatingPhysicsWorld;
683
650
  private context;
684
- private _pointerDown;
685
- private _pointerUp;
686
- private _pointerClick;
687
- private _pointerDoubleClick;
688
- private _pointerPressed;
689
- private _pointerPositions;
690
- private _pointerPositionsLastFrame;
691
- private _pointerPositionsDelta;
692
- private _pointerPositionsRC;
693
- private _pointerPositionDown;
694
- private _pointerDownTime;
695
- private _pointerUpTime;
696
- private _pointerIds;
697
- private _pointerTypes;
698
- private _mouseWheelChanged;
699
- private _pointerEvent;
700
- getKeyDown(): string | null;
701
- getKeyPressed(): string | null;
702
- isKeyDown(keyCode: number): boolean;
703
- isKeyUp(keyCode: number): boolean;
704
- isKeyPressed(keyCode: number): boolean;
705
- createPointerDown(args: PointerEventArgs): void;
706
- createPointerMove(args: PointerEventArgs): void;
707
- createPointerUp(args: PointerEventArgs): void;
651
+ private world;
652
+ private objects;
653
+ private tempPosition;
654
+ private tempQuaternion;
708
655
  constructor(context: Context);
709
- private onLostFocus;
710
- private onEndOfFrame;
711
- private keysPressed;
712
- private onKeyDown;
713
- private onKeyPressed;
714
- private onKeyUp;
715
- private onMouseWheel;
716
- private onTouchMove;
717
- private onTouchUp;
718
- private onPointerDown;
719
- private onPointerMove;
720
- private onPointerUp;
721
- private isInRect;
722
- private onDown;
723
- private onMove;
724
- private onUp;
725
- private updatePointerPosition;
726
- private getPointerIndex;
727
- private setPointerState;
728
- private setPointerStateT;
729
- private onDispatchEvent;
656
+ addPreStepListener(listener: (evt: any) => void): void;
657
+ addPostStepListener(listener: (evt: any) => void): void;
658
+ addConstraint(constraint: CANNON.Constraint): void;
659
+ setGravity(vec: THREE.Vector3): void;
660
+ multiplyGravity(vec: THREE.Vector3): void;
661
+ addBody(go: GameObject, body: CANNON.Body): void;
662
+ removeBody(go: GameObject, body: CANNON.Body, removeCompletely?: boolean): void;
663
+ removeShape(obj: THREE.Object3D, shape: CANNON.Shape): void;
664
+ createBody(obj: THREE.Object3D, settings: BodyOptions): CANNON.Body;
665
+ addBoxCollider(obj: THREE.Object3D, trigger: boolean, center: THREE.Vector3, size: THREE.Vector3, rb: Rigidbody | null): CANNON.Shape;
666
+ addSphereCollider(obj: THREE.Object3D, center: THREE.Vector3, radius: number, rb: Rigidbody | null): CANNON.Shape;
667
+ addMeshCollider(_obj: THREE.Object3D): void;
668
+ private isAlreadyRegistered;
669
+ private addShape;
670
+ step(deltaTime: number): void;
671
+ private temp;
672
+ private tempQuat;
673
+ postStep(): void;
674
+ private internalCreateBody;
675
+ private registerCollisionEvents;
676
+ private unregisterCollisionEvents;
677
+ private onBeginContact;
678
+ private raiseCollisionEvents;
679
+ private onEndContact;
730
680
  }
731
- export enum KeyCode {
732
- BACKSPACE = 8,
733
- TAB = 9,
734
- ENTER = 13,
735
- SHIFT = 16,
736
- CTRL = 17,
737
- ALT = 18,
738
- PAUSE = 19,
739
- CAPS_LOCK = 20,
740
- ESCAPE = 27,
741
- SPACE = 32,
742
- PAGE_UP = 33,
743
- PAGE_DOWN = 34,
744
- END = 35,
745
- HOME = 36,
746
- LEFT_ARROW = 37,
747
- UP_ARROW = 38,
748
- RIGHT_ARROW = 39,
749
- DOWN_ARROW = 40,
750
- INSERT = 45,
751
- DELETE = 46,
752
- KEY_0 = 48,
753
- KEY_1 = 49,
754
- KEY_2 = 50,
755
- KEY_3 = 51,
756
- KEY_4 = 52,
757
- KEY_5 = 53,
758
- KEY_6 = 54,
759
- KEY_7 = 55,
760
- KEY_8 = 56,
761
- KEY_9 = 57,
762
- KEY_A = 65,
763
- KEY_B = 66,
764
- KEY_C = 67,
765
- KEY_D = 68,
766
- KEY_E = 69,
767
- KEY_F = 70,
768
- KEY_G = 71,
769
- KEY_H = 72,
770
- KEY_I = 73,
771
- KEY_J = 74,
772
- KEY_K = 75,
773
- KEY_L = 76,
774
- KEY_M = 77,
775
- KEY_N = 78,
776
- KEY_O = 79,
777
- KEY_P = 80,
778
- KEY_Q = 81,
779
- KEY_R = 82,
780
- KEY_S = 83,
781
- KEY_T = 84,
782
- KEY_U = 85,
783
- KEY_V = 86,
784
- KEY_W = 87,
785
- KEY_X = 88,
786
- KEY_Y = 89,
787
- KEY_Z = 90,
788
- LEFT_META = 91,
789
- RIGHT_META = 92,
790
- SELECT = 93,
791
- NUMPAD_0 = 96,
792
- NUMPAD_1 = 97,
793
- NUMPAD_2 = 98,
794
- NUMPAD_3 = 99,
795
- NUMPAD_4 = 100,
796
- NUMPAD_5 = 101,
797
- NUMPAD_6 = 102,
798
- NUMPAD_7 = 103,
799
- NUMPAD_8 = 104,
800
- NUMPAD_9 = 105,
801
- MULTIPLY = 106,
802
- ADD = 107,
803
- SUBTRACT = 109,
804
- DECIMAL = 110,
805
- DIVIDE = 111,
806
- F1 = 112,
807
- F2 = 113,
808
- F3 = 114,
809
- F4 = 115,
810
- F5 = 116,
811
- F6 = 117,
812
- F7 = 118,
813
- F8 = 119,
814
- F9 = 120,
815
- F10 = 121,
816
- F11 = 122,
817
- F12 = 123,
818
- NUM_LOCK = 144,
819
- SCROLL_LOCK = 145,
820
- SEMICOLON = 186,
821
- EQUALS = 187,
822
- COMMA = 188,
823
- DASH = 189,
824
- PERIOD = 190,
825
- FORWARD_SLASH = 191,
826
- GRAVE_ACCENT = 192,
827
- OPEN_BRACKET = 219,
828
- BACK_SLASH = 220,
829
- CLOSE_BRACKET = 221,
830
- SINGLE_QUOTE = 222
681
+ export class Collision {
682
+ private readonly collision;
683
+ readonly me: Object3D;
684
+ private _normal?;
685
+ get normal(): Vector3;
686
+ private _collider?;
687
+ get collider(): Collider;
688
+ get gameObject(): Object3D;
689
+ constructor(obj: Object3D, collision: CannonCollision);
831
690
  }
832
691
  }
833
- declare module "engine-components/ui/Utils" {
834
- import { FrameEvent } from "engine/engine_setup";
835
- import { Behaviour } from "engine-components/Component";
836
- export function isUIObject(obj: THREE.Object3D): boolean;
837
- export type RenderSettings = {
838
- renderOnTop?: boolean;
839
- doubleSided?: boolean;
840
- depthWrite?: boolean;
841
- castShadows?: boolean;
842
- receiveShadows?: boolean;
843
- };
844
- export function updateRenderSettings(shadowComponent: THREE.Object3D, settings: RenderSettings): void;
845
- export type RevocableProxy = {
846
- proxy: any;
847
- revoke: () => void;
692
+ declare module "engine-components/Component" {
693
+ import * as THREE from "three";
694
+ import { Context, FrameEvent } from "engine/engine_setup";
695
+ import { Object3D } from "three";
696
+ import { SourceIdentifier } from "engine/engine_gltf";
697
+ import { Collision } from "engine/engine_physics";
698
+ export interface UIDProvider {
699
+ seed: number;
700
+ generateUUID(): string;
701
+ }
702
+ export enum HideFlags {
703
+ None = 0,
704
+ HideInHierarchy = 1,
705
+ HideInInspector = 2,
706
+ DontSaveInEditor = 4,
707
+ NotEditable = 8,
708
+ DontSaveInBuild = 16,
709
+ DontUnloadUnusedAsset = 32,
710
+ DontSave = 52,
711
+ HideAndDontSave = 61
712
+ }
713
+ export type Constructor<T> = abstract new (...args: any[]) => T;
714
+ export type ConstructorConcrete<T> = new (...args: any[]) => T;
715
+ export type GuidsMap = {
716
+ [key: string]: string;
848
717
  };
849
- /** internal method to proxy a field to detect changes */
850
- export function onChange<T extends object>(caller: T, field: string, callback: (newValue: any, oldValue: any) => void): RevocableProxy;
851
- /** internal method to schedula a function at a specific moment in the update loop */
852
- export function scheduleAction(caller: Behaviour, action: Function, timing?: FrameEvent): void;
853
- }
854
- declare module "engine/engine_serialization_decorator" {
855
- import { Constructor } from "engine-components/Component";
856
- export type TypeResolver<T> = (data: any) => Constructor<T> | null;
857
- export const serializeable: <T>(type?: Constructor<T> | TypeResolver<T> | (Constructor<any> | TypeResolver<T>)[] | null | undefined) => (_target: any, _propertyKey: string) => void;
858
- export const ALL_PROPERTIES_MARKER = "__NEEDLE__ALL_PROPERTIES";
859
- /** @deprecated current not used */
860
- export function allProperties(constructor: Function): void;
861
- export const STRICT_MARKER = "__NEEDLE__STRICT";
862
- /** @deprecated current not used */
863
- export function strict(constructor: Function): void;
864
- }
865
- declare module "engine-components/Rigidbody" {
866
- import { Behaviour } from "engine-components/Component";
867
- import * as CANNON from 'cannon-es';
868
- import * as THREE from 'three';
869
- export class Rigidbody extends Behaviour {
870
- mass: number;
871
- set isKinematic(kinematic: boolean);
872
- get isKinematic(): boolean;
873
- private _isKinematic;
874
- drag: number;
875
- angularDrag: number;
876
- detectCollision: boolean;
877
- sleepThreshold: number;
878
- get body(): CANNON.Body | null;
879
- private static tempPosition;
880
- private _body;
881
- private currentVelocity;
882
- private _smoothedVelocity;
883
- private lastWorldPosition;
884
- private dirty;
885
- private transformProxy?;
718
+ type FunctionName = string;
719
+ export class InstantiateOptions {
720
+ idProvider?: UIDProvider | undefined;
721
+ parent?: string | undefined | Object3D;
722
+ /** for duplicatable parenting */
723
+ keepWorldPosition?: boolean;
724
+ position?: THREE.Vector3 | undefined;
725
+ rotation?: THREE.Quaternion | undefined;
726
+ scale?: THREE.Vector3 | undefined;
727
+ visible?: boolean | undefined;
728
+ context?: Context | undefined;
729
+ }
730
+ abstract class GameObject extends THREE.Object3D implements THREE.Object3D {
731
+ guid: string | undefined;
732
+ static setActive(go: THREE.Object3D, active: boolean): void;
733
+ static isActiveSelf(go: THREE.Object3D): boolean;
734
+ static isActiveInHierarchy(go: THREE.Object3D): boolean;
735
+ static markAsInstancedRendered(go: THREE.Object3D, instanced: boolean): void;
736
+ static isUsingInstancing(instance: THREE.Object3D): boolean;
737
+ static foreachComponent(instance: THREE.Object3D, cb: (comp: Component) => any, recursive?: boolean): any;
738
+ static instantiateSynced(instance: GameObject | THREE.Object3D | null, opts: InstantiateOptions): GameObject | null;
739
+ static instantiate(instance: GameObject | THREE.Object3D | null, opts?: InstantiateOptions | null): GameObject | null;
740
+ private static internalInstantiate;
741
+ private static resolveAndBindSkinnedMeshBones;
742
+ private static resolveReferences;
743
+ private static postProcessNewInstance;
744
+ static destroySynced(instance: THREE.Object3D | Component, context?: Context, recursive?: boolean): void;
745
+ static destroy(instance: THREE.Object3D | Component, recursive?: boolean, isRoot?: boolean): void;
746
+ /**
747
+ * Add an object to parent and also ensure all components are being registered
748
+ */
749
+ static add(instance: THREE.Object3D | null | undefined, parent: THREE.Object3D, context?: Context): void;
750
+ /**
751
+ * Removes the object from its parent and deactivates all of its components
752
+ */
753
+ static remove(instance: THREE.Object3D | null | undefined): void;
754
+ static invokeOnChildren(go: THREE.Object3D | null | undefined, functionName: string | FunctionName, ...args: any): void;
755
+ static invoke(go: THREE.Object3D | null | undefined, functionName: string | FunctionName, children?: boolean, ...args: any): void;
756
+ static addNewComponent<T extends Behaviour>(go: GameObject | THREE.Object3D, type: ConstructorConcrete<T>, callAwake?: boolean): T;
757
+ static addComponent(go: GameObject, instance: Component): void;
758
+ static removeComponent(instance: Component): Component;
759
+ static getOrAddComponent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T;
760
+ static getComponent<T>(go: GameObject | THREE.Object3D | null, typeName: Constructor<T> | null): T | null;
761
+ static getComponents<T>(go: GameObject | THREE.Object3D | null, typeName: Constructor<T> | null, arr?: T[] | null): T[];
762
+ static findByGuid(guid: string, hierarchy: THREE.Object3D): GameObject | Behaviour | null | undefined;
763
+ static findObjectOfType<T>(typeName: Constructor<T> | string, context?: Context | THREE.Object3D, includeInactive?: boolean): T | null;
764
+ static findObjectsOfType<T>(typeName: Constructor<T>, context?: Context | THREE.Object3D): Array<T>;
765
+ static getComponentInChildren<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T | null;
766
+ static getComponentsInChildren<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null, arr?: T[] | null): Array<T>;
767
+ static getComponentInParent<T>(go: GameObject | THREE.Object3D | Array<Object3D>, typeName: Constructor<T>): T | null;
768
+ static getComponentsInParent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T>, arr?: Array<T> | null): Array<T>;
769
+ static getAllComponents(go: GameObject | THREE.Object3D): Behaviour[];
770
+ static iterateComponents(go: GameObject | THREE.Object3D): Generator<any, void, unknown>;
771
+ abstract addNewComponent<T>(type: Constructor<T>): T | null;
772
+ abstract removeComponent(comp: Component): Component;
773
+ abstract getOrAddComponent<T>(go: GameObject | THREE.Object3D, typeName: Constructor<T> | null): T;
774
+ abstract getComponent<T>(type: Constructor<T>): T | null;
775
+ abstract getComponents<T>(type: Constructor<T>, arr?: T[]): Array<T>;
776
+ abstract getComponentInChildren<T>(type: Constructor<T>): T | null;
777
+ abstract getComponentsInChildren<T>(type: Constructor<T>, arr?: T[]): Array<T>;
778
+ abstract getComponentInParent<T>(type: Constructor<T>): T | null;
779
+ abstract getComponentsInParent<T>(type: Constructor<T>, arr?: T[]): Array<T>;
780
+ }
781
+ class Component implements EventTarget {
782
+ get isComponent(): boolean;
783
+ private __context;
784
+ get context(): Context;
785
+ set context(context: Context);
786
+ get scene(): THREE.Scene;
787
+ get layer(): number;
788
+ get name(): string;
789
+ private __name?;
790
+ set name(str: string);
791
+ get tag(): string;
792
+ set tag(str: string);
793
+ get static(): any;
794
+ get hideFlags(): HideFlags;
795
+ get activeAndEnabled(): boolean;
796
+ private get __isActive();
797
+ private get __isActiveInHierarchy();
798
+ gameObject: GameObject;
799
+ guid: string;
800
+ sourceId?: SourceIdentifier;
801
+ /** called on a component with a map of old to new guids (e.g. when instantiate generated new guids and e.g. timeline track bindings needs to remape them) */
802
+ resolveGuids?(guidsMap: GuidsMap): void;
886
803
  awake(): void;
887
- start(): void;
888
804
  onEnable(): void;
889
805
  onDisable(): void;
890
806
  onDestroy(): void;
891
- earlyUpdate(): void;
892
- onBeforeRender(): void;
893
- initialize(): void;
894
- wakeUp(): void;
895
- applyForce(vec: THREE.Vector3, rel: THREE.Vector3 | undefined): void;
896
- getVelocity(): THREE.Vector3;
897
- setVelocity(x: number, y: number, z: number): void;
898
- get smoothedVelocity(): THREE.Vector3;
899
- setAngularVelocity(x: number, y: number, z: number): void;
900
- private static copyVector3;
901
- setBodyFromGameObject(velocity?: THREE.Vector3 | null | {
902
- x: number;
903
- y: number;
904
- z: number;
905
- }): void;
906
- private updateVelocity;
907
- }
908
- }
909
- declare module "engine-components/RendererLightmap" {
910
- import { GameObject } from "engine-components/Component";
911
- import * as THREE from "three";
912
- import { Texture } from "three";
913
- import { Context } from "engine/engine_setup";
914
- export class RendererLightmap {
915
- get lightmap(): Texture | null;
916
- set lightmap(tex: Texture | null);
917
- lightmapIndex: number;
918
- lightmapScaleOffset: THREE.Vector4;
919
- private context;
920
- private gameObject;
921
- private lightmapTexture;
922
- private lightmapScaleOffsetUniform;
923
- private lightmapUniform;
924
- private beforeRenderCallback?;
925
- constructor(gameObject: GameObject, context: Context);
926
- init(lightmapIndex: number, lightmapScaleOffset: THREE.Vector4, lightmapTexture: THREE.Texture, debug?: boolean): void;
927
- bindOnBeforeRender(): void;
928
- private onBeforeRenderThreeComplete;
929
- private setupLightmap;
930
- onBeforeRenderThree(material: THREE.Material): void;
931
- private setLightmapDebugMaterial;
807
+ start?(): void;
808
+ earlyUpdate?(): void;
809
+ update?(): void;
810
+ lateUpdate?(): void;
811
+ onBeforeRender?(frame: THREE.XRFrame | null): void;
812
+ onAfterRender?(): void;
813
+ onCollisionEnter?(col: Collision): any;
814
+ onCollisionExit?(col: Collision): any;
815
+ onCollisionStay?(col: Collision): any;
816
+ startCoroutine(routine: Generator, evt?: FrameEvent): Generator;
817
+ stopCoroutine(routine: Generator, evt?: FrameEvent): void;
818
+ get destroyed(): boolean;
819
+ destroy(): void;
820
+ protected __didAwake: boolean;
821
+ private __didStart;
822
+ protected __didEnable: boolean;
823
+ protected __isEnabled: boolean | undefined;
824
+ private __destroyed;
825
+ __internalNewInstanceCreated(): void;
826
+ __internalAwake(): void;
827
+ __internalStart(): void;
828
+ __internalEnable(): void;
829
+ __internalDisable(): void;
830
+ constructor();
831
+ private _collisionExitRoutine;
832
+ private _collisions;
833
+ private __internalResetsCachedPhysicsData;
834
+ __internalHandleCollision(col: Collision): void;
835
+ sendExitCollisionEvent(obj: Object3D): void;
836
+ private __waitForCollisionExit;
837
+ private static _worldPositionBuffer;
838
+ private static _worldQuaternionBuffer;
839
+ private static _worldEulerBuffer;
840
+ private _worldPosition;
841
+ private _worldQuaternion;
842
+ private static _tempQuaternionBuffer2;
843
+ private _worldEuler;
844
+ private _worldRotation;
845
+ get worldPosition(): THREE.Vector3;
846
+ set worldPosition(val: THREE.Vector3);
847
+ setWorldPosition(x: number, y: number, z: number): void;
848
+ get worldQuaternion(): THREE.Quaternion;
849
+ set worldQuaternion(val: THREE.Quaternion);
850
+ setWorldQuaternion(x: number, y: number, z: number, w: number): void;
851
+ get worldEuler(): THREE.Euler;
852
+ set worldEuler(val: THREE.Euler);
853
+ get worldRotation(): THREE.Vector3;
854
+ set worldRotation(val: THREE.Vector3);
855
+ setWorldRotation(x: number, y: number, z: number, degrees?: boolean): void;
856
+ private static _forward;
857
+ get forward(): THREE.Vector3;
858
+ private _eventListeners;
859
+ addEventListener(type: string, listener: EventListener): void;
860
+ removeEventListener(type: string, listener: EventListener): void;
861
+ dispatchEvent(evt: Event): boolean;
862
+ }
863
+ class Behaviour extends Component {
864
+ get enabled(): boolean;
865
+ set enabled(val: boolean);
932
866
  }
867
+ export { Behaviour, Component, GameObject };
933
868
  }
934
- declare module "engine/extensions/NEEDLE_render_objects" {
935
- import { SourceIdentifier } from "engine/engine_gltf";
936
- import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
937
- import { Renderer } from "engine-components/Renderer";
938
- export class NEEDLE_render_objects implements GLTFLoaderPlugin {
939
- private static stencils;
940
- static applyStencil(obj?: Renderer | null): void;
941
- private parser;
942
- private source;
943
- constructor(parser: GLTFParser, source: SourceIdentifier);
944
- afterRoot(_result: GLTF): Promise<void> | null;
869
+ declare module "engine/extensions/extension_resolver" {
870
+ import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
871
+ export interface IExtensionReferenceResolver {
872
+ resolve(parser: GLTFParser, path: string): Promise<void> | null;
945
873
  }
946
- export const EXTENSION_NAME = "NEEDLE_render_objects";
947
874
  }
948
- declare module "engine/engine_loaders" {
949
- import { Context } from "engine/engine_setup";
950
- import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
951
- export function setDracoDecoderPath(path: string | undefined): void;
952
- export function setDracoDecoderType(type: string | undefined): void;
953
- export function setKtx2TranscoderPath(path: string): void;
954
- export function addDracoAndKTX2Loaders(loader: GLTFLoader, context: Context): void;
875
+ declare module "engine/engine_default_parameters" {
876
+ export const showGizmos: string | boolean;
877
+ export const debugExtension: string | boolean;
955
878
  }
956
- declare module "engine/extensions/NEEDLE_deferred_texture" {
957
- import { Material } from "three";
879
+ declare module "engine/extensions/extension_utils" {
880
+ import { GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
881
+ export function resolveReferences(parser: GLTFParser, obj: any): Promise<void | void[]>;
882
+ }
883
+ declare module "engine/engine_typestore" {
884
+ class _TypeStore {
885
+ private _types;
886
+ add(key: any, type: any): void;
887
+ get(key: any): any;
888
+ }
889
+ export const TypeStore: _TypeStore;
890
+ }
891
+ declare module "engine/extensions/NEEDLE_persistent_assets" {
958
892
  import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
959
- import { SourceIdentifier } from "engine/engine_gltf";
960
- import { Context } from "engine/engine_setup";
961
- export const EXTENSION_NAME = "NEEDLE_deferred_texture";
962
- export class NEEDLE_deferred_texture implements GLTFLoaderPlugin {
963
- static assignTextureLOD(context: Context, material: Material, level?: number): void;
893
+ import { IExtensionReferenceResolver } from "engine/extensions/extension_resolver";
894
+ export const EXTENSION_NAME = "NEEDLE_persistent_assets";
895
+ export function isPersistentAsset(asset: any): boolean;
896
+ export class NEEDLE_persistent_assets implements GLTFLoaderPlugin, IExtensionReferenceResolver {
964
897
  get name(): string;
965
898
  private parser;
966
- private sourceId;
967
- private context;
968
- constructor(parser: GLTFParser, sourceId: SourceIdentifier, context: Context);
969
- private _loading;
970
- afterRoot(gltf: GLTF): null;
971
- private static cache;
972
- private static resolved;
973
- private static getOrLoadTexture;
899
+ constructor(parser: GLTFParser);
900
+ afterRoot(_result: GLTF): Promise<void>;
901
+ resolve(parser: GLTFParser, path: string): Promise<void> | null | any;
974
902
  }
975
903
  }
976
- declare module "engine-components/Renderer" {
977
- import { Behaviour } from "engine-components/Component";
978
- import * as THREE from "three";
979
- import { Texture } from "three";
980
- export class FieldWithDefault {
981
- path: string | null;
982
- asset: object | null;
983
- default: any;
984
- }
985
- export enum RenderState {
986
- Both = 0,
987
- Back = 1,
988
- Front = 2
989
- }
990
- class SharedMaterialArray {
991
- private _renderer;
992
- private _targets;
993
- is(renderer: Renderer): boolean;
994
- constructor(renderer: Renderer);
995
- get length(): number;
996
- private setMaterial;
997
- private getMaterial;
904
+ declare module "engine/engine_serialization_core" {
905
+ import { GLTF } from "three/examples/jsm/loaders/GLTFLoader";
906
+ import { Object3D } from "three";
907
+ import { Context } from "engine/engine_setup";
908
+ import { SourceIdentifier } from "engine/engine_gltf";
909
+ export type Constructor<T> = {
910
+ new (...args: any[]): T;
911
+ };
912
+ export type NodeToObjectMap = {
913
+ [nodeId: string]: Object3D;
914
+ };
915
+ export type ObjectToNodeMap = {
916
+ [uuid: string]: number;
917
+ };
918
+ class SerializationHelper {
919
+ register(type: string, ser: ITypeSerializer): void;
920
+ typeMap: {
921
+ [type: string]: ITypeSerializer;
922
+ };
923
+ getSerializer(type: string): ITypeSerializer | undefined;
924
+ getSerializerForConstructor(type: any, level?: number): ITypeSerializer | undefined;
998
925
  }
999
- export class Renderer extends Behaviour {
1000
- receiveShadows: boolean;
1001
- shadowCastingMode: ShadowCastingMode;
1002
- lightmapIndex: number;
1003
- lightmapScaleOffset: THREE.Vector4;
1004
- enableInstancing: boolean[] | undefined;
1005
- renderOrder: number[] | undefined;
1006
- allowOcclusionWhenDynamic: boolean;
1007
- private _lightmaps?;
1008
- get material(): THREE.Material;
1009
- set material(mat: THREE.Material);
1010
- private _sharedMaterials;
1011
- get sharedMaterials(): SharedMaterialArray;
1012
- static get shouldSuppressInstancing(): string | boolean;
1013
- private _lightmapTextureOverride;
1014
- get lightmap(): Texture | null;
1015
- set lightmap(tex: Texture | null | undefined);
1016
- get hasLightmap(): boolean;
1017
- awake(): void;
1018
- private _isInstancingEnabled;
1019
- private handles;
1020
- private prevLayers;
1021
- setInstancingEnabled(enabled: boolean): boolean;
1022
- start(): void;
1023
- onEnable(): void;
1024
- onDisable(): void;
1025
- onDestroy(): void;
1026
- applyStencil(): void;
1027
- onBeforeRenderThree(_renderer: any, _scene: any, _camera: any, _geometry: any, material: any, _group: any): void;
1028
- onBeforeRender(): void;
1029
- onAfterRender(): void;
1030
- private applySettings;
926
+ export const helper: SerializationHelper;
927
+ export interface ITypeSerializer {
928
+ onSerialize(data: any, context: SerializationContext): any;
929
+ onDeserialize(data: any, context: SerializationContext): any;
1031
930
  }
1032
- export class MeshRenderer extends Renderer {
931
+ /**
932
+ * implement and call super(<type string or array>) with the type names this serializer can handle
933
+ * for example:
934
+ * class ColorSerializer extends TypeSerializer {
935
+ * constructor() {
936
+ * super("Color")
937
+ * }
938
+ * }
939
+ */
940
+ export abstract class TypeSerializer implements ITypeSerializer {
941
+ constructor(type: Constructor<any> | Constructor<any>[]);
942
+ abstract onSerialize(data: any, context: SerializationContext): any | void;
943
+ abstract onDeserialize(data: any, context: SerializationContext): any | void;
1033
944
  }
1034
- export class SkinnedMeshRenderer extends MeshRenderer {
1035
- awake(): void;
945
+ export interface ITypeInformation {
946
+ type?: Constructor<any>;
1036
947
  }
1037
- export enum ShadowCastingMode {
1038
- Off = 0,
1039
- On = 1,
1040
- TwoSided = 2,
1041
- ShadowsOnly = 3
948
+ export class SerializationContext {
949
+ root: THREE.Object3D;
950
+ gltf?: GLTF;
951
+ gltfId?: SourceIdentifier;
952
+ object: THREE.Object3D;
953
+ target?: object;
954
+ nodeId?: number;
955
+ nodeToObject?: NodeToObjectMap;
956
+ objectToNode?: ObjectToNodeMap;
957
+ context?: Context;
958
+ path?: string;
959
+ constructor(root: THREE.Object3D);
1042
960
  }
1043
- export class InstancingUtil {
1044
- static markDirty(go: THREE.Object3D | null, recursive?: boolean): void;
961
+ export interface ISerializable {
962
+ $serializedTypes?: {
963
+ [key: string]: Constructor<any> | ITypeInformation | null;
964
+ };
965
+ onBeforeDeserialize?(data: any, context: SerializationContext): void | undefined | boolean;
966
+ onBeforeDeserializeMember?(key: string, data: any, context: SerializationContext): void | undefined | boolean;
967
+ onAfterDeserializeMember?(key: string, data: any, context: SerializationContext): void;
968
+ onAfterDeserialize?(data: any, context: SerializationContext): void;
1045
969
  }
970
+ export function serializeObject(obj: ISerializable, context: SerializationContext): object | null;
971
+ export function deserializeObject(obj: ISerializable, serializedData: object, context: SerializationContext): boolean;
972
+ /** Object.assign behaviour but check if property is writeable (e.g. getter only properties are skipped) */
973
+ export function assign(target: any, source: any): void;
1046
974
  }
1047
- declare module "engine/engine_physics" {
1048
- import * as CANNON from 'cannon-es';
975
+ declare module "engine/engine_input" {
1049
976
  import * as THREE from 'three';
1050
977
  import { Context } from "engine/engine_setup";
1051
- import { Rigidbody } from "engine-components/Rigidbody";
1052
- import { GameObject } from "engine-components/Component";
1053
- export interface ICollisionEventReceiver {
1054
- onCollision(data: CollisionData): any;
1055
- }
1056
- export class BodyOptions {
1057
- mass: number;
1058
- kinematic: boolean;
1059
- physicsEvents: boolean;
1060
- drag: number;
1061
- angularDrag: number;
1062
- sleepThreshold: number;
1063
- }
1064
- export class CollisionData {
1065
- obj: THREE.Object3D | null;
1066
- contact: CANNON.ContactEquation;
1067
- target: THREE.Object3D | null;
1068
- type: string;
1069
- constructor(contact: CANNON.ContactEquation, type: string);
1070
- }
1071
- export class RaycastOptions {
1072
- ray: THREE.Ray | undefined;
1073
- cam: THREE.Camera | undefined | null;
1074
- screenPoint: THREE.Vector2 | undefined;
1075
- raycaster: THREE.Raycaster | undefined;
1076
- results: Array<THREE.Intersection> | undefined;
1077
- targets: Array<THREE.Object3D> | undefined;
1078
- recursive: boolean | undefined;
1079
- minDistance: number | undefined;
1080
- maxDistance: number | undefined;
1081
- lineThreshold: number | undefined;
1082
- layerMask: THREE.Layers | number | undefined;
1083
- ignore: THREE.Object3D[] | undefined;
1084
- screenPointFromOffset(ox: number, oy: number): void;
1085
- setMask(mask: number): void;
1086
- static AllLayers: number;
978
+ export type PointerEventArgs = {
979
+ button: number;
980
+ clientX: number;
981
+ clientY: number;
982
+ pointerId?: number;
983
+ pointerType: string;
984
+ source?: Event;
985
+ };
986
+ export class KeyEventArgs {
987
+ key: string;
988
+ keyType: string;
989
+ source?: Event;
990
+ constructor(evt: KeyboardEvent);
1087
991
  }
1088
- export class SphereIntersection implements THREE.Intersection {
1089
- distance: number;
1090
- point: THREE.Vector3;
1091
- object: THREE.Object3D;
1092
- constructor(object: THREE.Object3D, distance: number, point: THREE.Vector3);
992
+ export enum InputEvents {
993
+ PointerDown = "pointerdown",
994
+ PointerUp = "pointerup",
995
+ PointerMove = "pointermove",
996
+ KeyDown = "keydown",
997
+ KeyUp = "keyup",
998
+ KeyPressed = "keypress"
1093
999
  }
1094
- export class Physics {
1095
- private readonly raycaster;
1096
- private readonly defaultRaycastOptions;
1097
- private readonly targetBuffer;
1098
- private readonly defaultThresholds;
1099
- private sphereResults;
1100
- private sphereMask;
1101
- sphereOverlap(spherePos: THREE.Vector3, radius: number): Array<THREE.Intersection>;
1102
- private tempBoundingBox;
1103
- private onSphereOverlap;
1104
- raycastFromRay(ray: THREE.Ray, options?: RaycastOptions | null): Array<THREE.Intersection>;
1105
- raycast(options?: RaycastOptions | null): Array<THREE.Intersection>;
1106
- get isUpdating(): boolean;
1107
- private _isUpdatingPhysicsWorld;
1000
+ export class Input extends EventTarget {
1001
+ _doubleClickTimeThreshold: number;
1002
+ _longPressTimeThreshold: number;
1003
+ get mousePosition(): THREE.Vector2;
1004
+ get mousePositionRC(): THREE.Vector2;
1005
+ get mouseDown(): boolean;
1006
+ get mouseUp(): boolean;
1007
+ get mouseClick(): boolean;
1008
+ get mouseDoubleClick(): boolean;
1009
+ get mousePressed(): boolean;
1010
+ get mouseWheelChanged(): boolean;
1011
+ private _specialCursorTrigger;
1012
+ setCursorPointer(): void;
1013
+ setCursorNormal(): void;
1014
+ getPointerPressedCount(): number;
1015
+ getPointerPosition(i: number): THREE.Vector2 | null;
1016
+ getPointerPositionLastFrame(i: number): THREE.Vector2 | null;
1017
+ getPointerPositionDelta(i: number): THREE.Vector2 | null;
1018
+ getPointerPositionRC(i: number): THREE.Vector2 | null;
1019
+ getPointerDown(i: number): boolean;
1020
+ getPointerUp(i: number): boolean;
1021
+ getPointerPressed(i: number): boolean;
1022
+ getPointerClicked(i: number): boolean;
1023
+ getPointerDoubleClicked(i: number): boolean;
1024
+ getPointerDownTime(i: number): number;
1025
+ getPointerUpTime(i: number): number;
1026
+ getPointerLongPress(i: number): boolean;
1027
+ getIsMouse(i: number): boolean;
1028
+ getIsTouch(i: number): boolean;
1029
+ getTouchesPressedCount(): number;
1030
+ getMouseWheelChanged(i?: number): boolean;
1031
+ getPointerEvent(i: number): Event | undefined;
1108
1032
  private context;
1109
- private world;
1110
- private objects;
1111
- private tempPosition;
1112
- private tempQuaternion;
1033
+ private _pointerDown;
1034
+ private _pointerUp;
1035
+ private _pointerClick;
1036
+ private _pointerDoubleClick;
1037
+ private _pointerPressed;
1038
+ private _pointerPositions;
1039
+ private _pointerPositionsLastFrame;
1040
+ private _pointerPositionsDelta;
1041
+ private _pointerPositionsRC;
1042
+ private _pointerPositionDown;
1043
+ private _pointerDownTime;
1044
+ private _pointerUpTime;
1045
+ private _pointerIds;
1046
+ private _pointerTypes;
1047
+ private _mouseWheelChanged;
1048
+ private _pointerEvent;
1049
+ getKeyDown(): string | null;
1050
+ getKeyPressed(): string | null;
1051
+ isKeyDown(keyCode: number): boolean;
1052
+ isKeyUp(keyCode: number): boolean;
1053
+ isKeyPressed(keyCode: number): boolean;
1054
+ createPointerDown(args: PointerEventArgs): void;
1055
+ createPointerMove(args: PointerEventArgs): void;
1056
+ createPointerUp(args: PointerEventArgs): void;
1113
1057
  constructor(context: Context);
1114
- addPreStepListener(listener: (evt: any) => void): void;
1115
- addPostStepListener(listener: (evt: any) => void): void;
1116
- addConstraint(constraint: CANNON.Constraint): void;
1117
- setGravity(vec: THREE.Vector3): void;
1118
- multiplyGravity(vec: THREE.Vector3): void;
1119
- addBody(go: GameObject, body: CANNON.Body): void;
1120
- removeBody(go: GameObject, body: CANNON.Body, removeCompletely?: boolean): void;
1121
- removeShape(obj: THREE.Object3D, shape: CANNON.Shape): void;
1122
- createBody(obj: THREE.Object3D, settings: BodyOptions): CANNON.Body;
1123
- addBoxCollider(obj: THREE.Object3D, trigger: boolean, center: THREE.Vector3, size: THREE.Vector3, rb: Rigidbody | null): CANNON.Shape;
1124
- addSphereCollider(obj: THREE.Object3D, center: THREE.Vector3, radius: number, rb: Rigidbody | null): CANNON.Shape;
1125
- addMeshCollider(_obj: THREE.Object3D): void;
1126
- private isAlreadyRegistered;
1127
- private addShape;
1128
- step(deltaTime: number): void;
1129
- private temp;
1130
- private tempQuat;
1131
- postStep(): void;
1132
- private internalCreateBody;
1133
- private registerCollisionEvents;
1134
- private unregisterCollisionEvents;
1135
- private raiseCollisionEvents;
1058
+ private onLostFocus;
1059
+ private onEndOfFrame;
1060
+ private keysPressed;
1061
+ private onKeyDown;
1062
+ private onKeyPressed;
1063
+ private onKeyUp;
1064
+ private onMouseWheel;
1065
+ private onTouchMove;
1066
+ private onTouchUp;
1067
+ private onPointerDown;
1068
+ private onPointerMove;
1069
+ private onPointerUp;
1070
+ private isInRect;
1071
+ private onDown;
1072
+ private onMove;
1073
+ private onUp;
1074
+ private updatePointerPosition;
1075
+ private getPointerIndex;
1076
+ private setPointerState;
1077
+ private setPointerStateT;
1078
+ private onDispatchEvent;
1079
+ }
1080
+ export enum KeyCode {
1081
+ BACKSPACE = 8,
1082
+ TAB = 9,
1083
+ ENTER = 13,
1084
+ SHIFT = 16,
1085
+ CTRL = 17,
1086
+ ALT = 18,
1087
+ PAUSE = 19,
1088
+ CAPS_LOCK = 20,
1089
+ ESCAPE = 27,
1090
+ SPACE = 32,
1091
+ PAGE_UP = 33,
1092
+ PAGE_DOWN = 34,
1093
+ END = 35,
1094
+ HOME = 36,
1095
+ LEFT_ARROW = 37,
1096
+ UP_ARROW = 38,
1097
+ RIGHT_ARROW = 39,
1098
+ DOWN_ARROW = 40,
1099
+ INSERT = 45,
1100
+ DELETE = 46,
1101
+ KEY_0 = 48,
1102
+ KEY_1 = 49,
1103
+ KEY_2 = 50,
1104
+ KEY_3 = 51,
1105
+ KEY_4 = 52,
1106
+ KEY_5 = 53,
1107
+ KEY_6 = 54,
1108
+ KEY_7 = 55,
1109
+ KEY_8 = 56,
1110
+ KEY_9 = 57,
1111
+ KEY_A = 65,
1112
+ KEY_B = 66,
1113
+ KEY_C = 67,
1114
+ KEY_D = 68,
1115
+ KEY_E = 69,
1116
+ KEY_F = 70,
1117
+ KEY_G = 71,
1118
+ KEY_H = 72,
1119
+ KEY_I = 73,
1120
+ KEY_J = 74,
1121
+ KEY_K = 75,
1122
+ KEY_L = 76,
1123
+ KEY_M = 77,
1124
+ KEY_N = 78,
1125
+ KEY_O = 79,
1126
+ KEY_P = 80,
1127
+ KEY_Q = 81,
1128
+ KEY_R = 82,
1129
+ KEY_S = 83,
1130
+ KEY_T = 84,
1131
+ KEY_U = 85,
1132
+ KEY_V = 86,
1133
+ KEY_W = 87,
1134
+ KEY_X = 88,
1135
+ KEY_Y = 89,
1136
+ KEY_Z = 90,
1137
+ LEFT_META = 91,
1138
+ RIGHT_META = 92,
1139
+ SELECT = 93,
1140
+ NUMPAD_0 = 96,
1141
+ NUMPAD_1 = 97,
1142
+ NUMPAD_2 = 98,
1143
+ NUMPAD_3 = 99,
1144
+ NUMPAD_4 = 100,
1145
+ NUMPAD_5 = 101,
1146
+ NUMPAD_6 = 102,
1147
+ NUMPAD_7 = 103,
1148
+ NUMPAD_8 = 104,
1149
+ NUMPAD_9 = 105,
1150
+ MULTIPLY = 106,
1151
+ ADD = 107,
1152
+ SUBTRACT = 109,
1153
+ DECIMAL = 110,
1154
+ DIVIDE = 111,
1155
+ F1 = 112,
1156
+ F2 = 113,
1157
+ F3 = 114,
1158
+ F4 = 115,
1159
+ F5 = 116,
1160
+ F6 = 117,
1161
+ F7 = 118,
1162
+ F8 = 119,
1163
+ F9 = 120,
1164
+ F10 = 121,
1165
+ F11 = 122,
1166
+ F12 = 123,
1167
+ NUM_LOCK = 144,
1168
+ SCROLL_LOCK = 145,
1169
+ SEMICOLON = 186,
1170
+ EQUALS = 187,
1171
+ COMMA = 188,
1172
+ DASH = 189,
1173
+ PERIOD = 190,
1174
+ FORWARD_SLASH = 191,
1175
+ GRAVE_ACCENT = 192,
1176
+ OPEN_BRACKET = 219,
1177
+ BACK_SLASH = 220,
1178
+ CLOSE_BRACKET = 221,
1179
+ SINGLE_QUOTE = 222
1136
1180
  }
1137
1181
  }
1138
1182
  declare module "engine/engine_time" {
@@ -1584,6 +1628,7 @@ declare module "engine/engine_serialization" {
1584
1628
  import { serializeObject, deserializeObject } from "engine/engine_serialization_core";
1585
1629
  import * as builtin from "engine/engine_serialization_builtin_serializer";
1586
1630
  export { serializeObject, deserializeObject, builtin };
1631
+ export { serializeable } from "engine/engine_serialization_decorator";
1587
1632
  }
1588
1633
  declare module "engine/extensions/NEEDLE_components" {
1589
1634
  import { GLTF, GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader";
@@ -2411,20 +2456,27 @@ declare module "engine-components/WebXRController" {
2411
2456
  declare module "engine-components/WebARSessionRoot" {
2412
2457
  import { Behaviour } from "engine-components/Component";
2413
2458
  import * as THREE from 'three';
2414
- import { XRPose } from "three";
2459
+ import { Matrix4, XRPose } from "three";
2415
2460
  import { WebAR } from "engine-components/WebXR";
2416
2461
  export class WebARSessionRoot extends Behaviour {
2417
2462
  webAR: WebAR | null;
2463
+ get rig(): THREE.Object3D | undefined;
2418
2464
  invertForward: boolean;
2419
2465
  get arScale(): number;
2420
2466
  set arScale(val: number);
2467
+ private readonly _initalMatrix;
2468
+ private readonly _selectStartFn;
2469
+ private readonly _selectEndFn;
2470
+ start(): void;
2421
2471
  private _arScale;
2422
2472
  private _rig;
2423
2473
  private _startPose;
2424
2474
  private _placementPose;
2425
2475
  private _isTouching;
2476
+ private _rigStartPose;
2426
2477
  onBegin(session: THREE.XRSession): void;
2427
- onUpdate(rig: THREE.Object3D | null, _session: THREE.XRSession, pose: XRPose | null | undefined): void;
2478
+ onUpdate(rig: THREE.Object3D | null, _session: THREE.XRSession, pose: XRPose | null | undefined): boolean;
2479
+ placeAt(rig: THREE.Object3D | null, mat: Matrix4): void;
2428
2480
  onEnd(rig: THREE.Object3D | null, _session: THREE.XRSession): void;
2429
2481
  private onSelectStart;
2430
2482
  private onSelectEnd;
@@ -2471,7 +2523,7 @@ declare module "engine-components/WebXR" {
2471
2523
  static createARButton(webXR: WebXR, opts?: CreateButtonOptions): HTMLButtonElement;
2472
2524
  static resetButtonStyles(button: any): void;
2473
2525
  endSession(): void;
2474
- get Rig(): THREE.Object3D | null;
2526
+ get Rig(): THREE.Object3D;
2475
2527
  private controllers;
2476
2528
  get Controllers(): WebXRController[];
2477
2529
  get LeftController(): WebXRController | null;
@@ -2511,7 +2563,8 @@ declare module "engine-components/WebXR" {
2511
2563
  private onEnterXR_HandleMirrorWindow;
2512
2564
  }
2513
2565
  export class WebAR {
2514
- private webxr;
2566
+ get webxr(): WebXR;
2567
+ private _webxr;
2515
2568
  private reticle;
2516
2569
  private hitTestSource;
2517
2570
  private reticleActive;
@@ -2524,9 +2577,11 @@ declare module "engine-components/WebXR" {
2524
2577
  constructor(webxr: WebXR);
2525
2578
  private arDomOverlay;
2526
2579
  private arOverlayElement;
2580
+ private noHitTestAvailable;
2581
+ private didPlaceARSessionRoot;
2527
2582
  getAROverlayContainer(): HTMLElement | null;
2528
2583
  setReticleActive(active: boolean): void;
2529
- onBegin(session: THREE.XRSession): void;
2584
+ onBegin(session: THREE.XRSession): Promise<void>;
2530
2585
  onEnd(_session: THREE.XRSession): void;
2531
2586
  onUpdate(session: THREE.XRSession, frame: THREE.XRFrame): void;
2532
2587
  }
@@ -2865,10 +2920,12 @@ declare module "engine-components/DragControls" {
2865
2920
  }
2866
2921
  declare module "engine-components/ui/Interfaces" {
2867
2922
  export interface ICanvasGroup {
2923
+ get isCanvasGroup(): boolean;
2868
2924
  blocksRaycasts: boolean;
2869
2925
  interactable: boolean;
2870
2926
  }
2871
2927
  export interface IGraphic {
2928
+ get isGraphic(): boolean;
2872
2929
  raycastTarget: boolean;
2873
2930
  }
2874
2931
  }
@@ -3073,6 +3130,10 @@ declare module "engine/engine_setup" {
3073
3130
  OnAfterRender = 4,
3074
3131
  PhysicsStep = 10
3075
3132
  }
3133
+ export enum XRSessionMode {
3134
+ ImmersiveVR = "immersive-vr",
3135
+ ImmersiveAR = "immersive-ar"
3136
+ }
3076
3137
  export type OnBeforeRenderCallback = (renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera, geometry: THREE.BufferGeometry, material: THREE.Material, group: THREE.Group) => void;
3077
3138
  export class Context {
3078
3139
  private static _current;
@@ -3091,6 +3152,7 @@ declare module "engine/engine_setup" {
3091
3152
  get domX(): number;
3092
3153
  get domY(): number;
3093
3154
  get isInXR(): boolean;
3155
+ xrSessionMode: XRSessionMode | undefined;
3094
3156
  get xrSession(): THREE.XRSession | null;
3095
3157
  get arOverlayElement(): HTMLElement;
3096
3158
  scene: THREE.Scene;
@@ -3325,29 +3387,6 @@ declare module "engine-components/BoxHelperComponent" {
3325
3387
  showHelper(col?: THREE.ColorRepresentation | null, force?: boolean): void;
3326
3388
  }
3327
3389
  }
3328
- declare module "engine-components/Collider" {
3329
- import { Behaviour } from "engine-components/Component";
3330
- import { Rigidbody } from "engine-components/Rigidbody";
3331
- import { Shape } from "cannon-es";
3332
- export class Collider extends Behaviour {
3333
- attachedRigidbody: Rigidbody | null;
3334
- isTrigger: boolean;
3335
- protected _shape: Shape | null;
3336
- awake(): void;
3337
- onEnable(): void;
3338
- onDisable(): void;
3339
- }
3340
- export class SphereCollider extends Collider {
3341
- radius: number;
3342
- center: THREE.Vector3;
3343
- onEnable(): void;
3344
- }
3345
- export class BoxCollider extends Collider {
3346
- size: THREE.Vector3;
3347
- center: THREE.Vector3;
3348
- onEnable(): void;
3349
- }
3350
- }
3351
3390
  declare module "engine-components/ComponentExtensions" {
3352
3391
  export class UnityObject {
3353
3392
  }
@@ -3745,6 +3784,7 @@ declare module "engine/engine_input_utils" {
3745
3784
  declare module "engine-components/VideoPlayer" {
3746
3785
  import { Behaviour } from "engine-components/Component";
3747
3786
  import * as THREE from "three";
3787
+ import { Object3D } from "three";
3748
3788
  export enum VideoSource {
3749
3789
  VideoClip = 0,
3750
3790
  Url = 1
@@ -3755,11 +3795,20 @@ declare module "engine-components/VideoPlayer" {
3755
3795
  Direct = 2,
3756
3796
  APIOnly = 3
3757
3797
  }
3798
+ export enum VideoRenderMode {
3799
+ CameraFarPlane = 0,
3800
+ CameraNearPlane = 1,
3801
+ RenderTexture = 2,
3802
+ MaterialOverride = 3
3803
+ }
3758
3804
  export class VideoPlayer extends Behaviour {
3759
3805
  renderer: THREE.Object3D | null;
3760
3806
  playOnAwake: boolean;
3761
3807
  playOnEnable?: boolean;
3762
- targetMaterialProperty?: string;
3808
+ private renderMode?;
3809
+ private targetMaterialProperty?;
3810
+ private targetMaterialRenderer?;
3811
+ private targetTexture?;
3763
3812
  private time;
3764
3813
  private _playbackSpeed;
3765
3814
  get playbackSpeed(): number;
@@ -3782,6 +3831,7 @@ declare module "engine-components/VideoPlayer" {
3782
3831
  private videoMaterial;
3783
3832
  private _isPlaying;
3784
3833
  private wasPlaying;
3834
+ setVideo(video: MediaStream): void;
3785
3835
  setClipURL(url: string): void;
3786
3836
  awake(): void;
3787
3837
  onEnable(): void;
@@ -3793,6 +3843,8 @@ declare module "engine-components/VideoPlayer" {
3793
3843
  stop(): void;
3794
3844
  pause(): void;
3795
3845
  create(playAutomatically: boolean): void;
3846
+ private _targetObjects;
3847
+ getTargetObjects(): Array<Object3D>;
3796
3848
  private createVideoElement;
3797
3849
  private handleBeginPlaying;
3798
3850
  private updateVideoElementSettings;
@@ -3801,13 +3853,43 @@ declare module "engine-components/VideoPlayer" {
3801
3853
  }
3802
3854
  declare module "engine-components/ScreenCapture" {
3803
3855
  import { Behaviour } from "engine-components/Component";
3804
- export class ScreenCapture extends Behaviour {
3805
- streamOnAwake: boolean;
3856
+ import { IPointerClickHandler } from "engine-components/ui/PointerEvents";
3857
+ export enum ScreenCaptureDevice {
3858
+ Screen = 0,
3859
+ Camera = 1
3860
+ }
3861
+ export enum ScreenCaptureMode {
3862
+ Idle = 0,
3863
+ Sending = 1,
3864
+ Receiving = 2
3865
+ }
3866
+ export enum AspectMode {
3867
+ None = 0,
3868
+ AdjustHeight = 1,
3869
+ AdjustWidth = 2
3870
+ }
3871
+ export class ScreenCapture extends Behaviour implements IPointerClickHandler {
3872
+ onPointerClick(): void;
3873
+ device: ScreenCaptureDevice;
3874
+ aspectMode: AspectMode;
3875
+ get isSending(): boolean | null;
3876
+ get isReceiving(): boolean | null;
3877
+ private _net?;
3878
+ private _video?;
3879
+ private _requestOpen;
3880
+ private _currentStream;
3881
+ private _currentMode;
3882
+ awake(): void;
3806
3883
  start(): void;
3807
- private requestOpen;
3808
- private captureStream;
3809
- open(force?: boolean): Promise<void>;
3884
+ share(): Promise<void>;
3810
3885
  close(): void;
3886
+ private setVideo;
3887
+ private onReceiveVideo;
3888
+ private tryShareUserCamera;
3889
+ private _targetObjects?;
3890
+ private updateAspect;
3891
+ private _updateAspectRoutineId;
3892
+ private updateAspectImpl;
3811
3893
  }
3812
3894
  }
3813
3895
  declare module "engine-components/ShadowCatcher" {
@@ -4140,10 +4222,14 @@ declare module "engine-components/Volume" {
4140
4222
  export class VolumeProfile {
4141
4223
  components?: VolumeComponent[];
4142
4224
  apply(context: Context): void;
4225
+ unapply(context: Context): void;
4226
+ private onUpdate;
4143
4227
  }
4144
4228
  export class Volume extends Behaviour {
4145
4229
  sharedProfile?: VolumeProfile;
4230
+ awake(): void;
4146
4231
  onEnable(): void;
4232
+ onDisable(): void;
4147
4233
  }
4148
4234
  }
4149
4235
  declare module "engine-components/WebXRGrabRendering" {
@@ -4575,6 +4661,7 @@ declare module "engine-components/ui/Graphic" {
4575
4661
  import { Texture } from 'three';
4576
4662
  import { RectTransform } from "engine-components/ui/RectTransform";
4577
4663
  export class Graphic extends BaseUIComponent implements IGraphic {
4664
+ get isGraphic(): boolean;
4578
4665
  get color(): RGBAColor;
4579
4666
  set color(col: RGBAColor);
4580
4667
  protected onColorChanged(): void;
@@ -4726,6 +4813,7 @@ declare module "engine-components/ui/CanvasGroup" {
4726
4813
  export class CanvasGroup extends Behaviour implements ICanvasGroup {
4727
4814
  get alpha(): number;
4728
4815
  set alpha(val: number);
4816
+ get isCanvasGroup(): boolean;
4729
4817
  private _alpha;
4730
4818
  interactable: boolean;
4731
4819
  blocksRaycasts: boolean;
@@ -5030,6 +5118,7 @@ declare module "needle-engine" {
5030
5118
  import "engine/engine_setup";
5031
5119
  export { GameObject, Behaviour } from "engine-components/Component";
5032
5120
  export { serializeable } from "engine/engine_serialization_decorator";
5121
+ export { Collision } from "engine/engine_physics";
5033
5122
  export * from "engine-components/codegen/exports";
5034
5123
  }
5035
5124
  declare module "engine/debug/error_overlay" {
@@ -5060,6 +5149,7 @@ declare module "engine/engine" {
5060
5149
  LoadingOptions: typeof engine_setup.LoadingOptions;
5061
5150
  ContextArgs: typeof engine_setup.ContextArgs;
5062
5151
  FrameEvent: typeof engine_setup.FrameEvent;
5152
+ XRSessionMode: typeof engine_setup.XRSessionMode;
5063
5153
  Context: typeof engine_setup.Context;
5064
5154
  };
5065
5155
  export { engine as engine };