@needle-tools/engine 2.34.0-pre → 2.35.1-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.
- package/CHANGELOG.md +16 -0
- package/dist/needle-engine.d.ts +3128 -2942
- package/dist/needle-engine.js +455 -455
- package/dist/needle-engine.js.map +4 -4
- package/dist/needle-engine.min.js +54 -54
- package/dist/needle-engine.min.js.map +4 -4
- package/lib/engine/api.d.ts +3 -0
- package/lib/engine/api.js +4 -0
- package/lib/engine/api.js.map +1 -0
- package/lib/engine/engine.d.ts +4 -3
- package/lib/engine/engine_addressables.d.ts +5 -4
- package/lib/engine/engine_addressables.js +8 -7
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_components.d.ts +17 -0
- package/lib/engine/engine_components.js +240 -0
- package/lib/engine/engine_components.js.map +1 -0
- package/lib/engine/engine_element.js +4 -3
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_element_loading.js +4 -1
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_gameobject.d.ts +33 -0
- package/lib/engine/engine_gameobject.js +449 -0
- package/lib/engine/engine_gameobject.js.map +1 -0
- package/lib/engine/engine_gltf.d.ts +13 -2
- package/lib/engine/engine_gltf.js +7 -1
- package/lib/engine/engine_gltf.js.map +1 -1
- package/lib/engine/engine_gltf_builtin_components.d.ts +3 -3
- package/lib/engine/engine_gltf_builtin_components.js +2 -3
- package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
- package/lib/engine/engine_lightdata.d.ts +1 -1
- package/lib/engine/engine_lightdata.js.map +1 -1
- package/lib/engine/engine_mainloop_utils.d.ts +2 -2
- package/lib/engine/engine_mainloop_utils.js +7 -6
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine/engine_networking.d.ts +6 -10
- package/lib/engine/engine_networking.js +7 -11
- package/lib/engine/engine_networking.js.map +1 -1
- package/lib/engine/engine_networking_files.d.ts +1 -1
- package/lib/engine/engine_networking_files.js +8 -7
- package/lib/engine/engine_networking_files.js.map +1 -1
- package/lib/engine/engine_networking_files_default_components.d.ts +2 -2
- package/lib/engine/engine_networking_files_default_components.js +38 -43
- package/lib/engine/engine_networking_files_default_components.js.map +1 -1
- package/lib/engine/engine_networking_instantiate.d.ts +8 -6
- package/lib/engine/engine_networking_instantiate.js +12 -9
- package/lib/engine/engine_networking_instantiate.js.map +1 -1
- package/lib/engine/engine_networking_types.d.ts +14 -0
- package/lib/engine/engine_networking_types.js +8 -0
- package/lib/engine/engine_networking_types.js.map +1 -0
- package/lib/engine/engine_physics.d.ts +5 -24
- package/lib/engine/engine_physics.js +27 -61
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_rendererdata.d.ts +1 -1
- package/lib/engine/engine_rendererdata.js.map +1 -1
- package/lib/engine/engine_scenetools.d.ts +2 -2
- package/lib/engine/engine_scenetools.js +22 -5
- package/lib/engine/engine_scenetools.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +1 -1
- package/lib/engine/engine_serialization_core.d.ts +1 -1
- package/lib/engine/engine_serialization_decorator.d.ts +1 -1
- package/lib/engine/engine_setup.d.ts +14 -15
- package/lib/engine/engine_setup.js +34 -23
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_three_utils.js +0 -6
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine/engine_types.d.ts +108 -0
- package/lib/engine/engine_types.js +50 -0
- package/lib/engine/engine_types.js.map +1 -0
- package/lib/engine/engine_utils.d.ts +1 -1
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_components.js +2 -2
- package/lib/engine/extensions/NEEDLE_components.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_lighting_settings.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_lightmaps.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.d.ts +2 -2
- package/lib/engine/extensions/NEEDLE_techniques_webgl.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js +3 -2
- package/lib/engine/extensions/NEEDLE_techniques_webgl.js.map +1 -1
- package/lib/engine/extensions/extensions.d.ts +1 -1
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AvatarLoader.js +6 -5
- package/lib/engine-components/AvatarLoader.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +2 -2
- package/lib/engine-components/Camera.js +6 -12
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CameraUtils.d.ts +3 -0
- package/lib/engine-components/CameraUtils.js +15 -0
- package/lib/engine-components/CameraUtils.js.map +1 -0
- package/lib/engine-components/Collider.d.ts +3 -1
- package/lib/engine-components/Collider.js +11 -0
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +21 -55
- package/lib/engine-components/Component.js +67 -466
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/Duplicatable.js +2 -1
- package/lib/engine-components/Duplicatable.js.map +1 -1
- package/lib/engine-components/LODGroup.js.map +1 -1
- package/lib/engine-components/Light.d.ts +2 -1
- package/lib/engine-components/Light.js +2 -2
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/NestedGltf.js +2 -1
- package/lib/engine-components/NestedGltf.js.map +1 -1
- package/lib/engine-components/Networking.d.ts +3 -1
- package/lib/engine-components/Networking.js +3 -0
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +4 -2
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +3 -2
- package/lib/engine-components/Renderer.js +2 -0
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/{Rigidbody.d.ts → RigidBody.d.ts} +2 -1
- package/lib/engine-components/{Rigidbody.js → RigidBody.js} +1 -1
- package/lib/engine-components/{Rigidbody.js.map → RigidBody.js.map} +1 -1
- package/lib/engine-components/ScreenCapture.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SyncedCamera.js +2 -1
- package/lib/engine-components/SyncedCamera.js.map +1 -1
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TestRunner.js.map +1 -1
- package/lib/engine-components/Voip.js +2 -1
- package/lib/engine-components/Voip.js.map +1 -1
- package/lib/engine-components/WebXR.js.map +1 -1
- package/lib/engine-components/WebXRController.js +28 -8
- package/lib/engine-components/WebXRController.js.map +1 -1
- package/lib/engine-components/WebXRGrabRendering.d.ts +1 -1
- package/lib/engine-components/WebXRGrabRendering.js +1 -1
- package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
- package/lib/engine-components/WebXRSync.js +1 -1
- package/lib/engine-components/WebXRSync.js.map +1 -1
- package/lib/engine-components/avatar/Avatar_Brain_LookAt.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +1 -1
- package/lib/engine-components/codegen/components.js +1 -1
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/js-extensions/ExtensionUtils.d.ts +4 -0
- package/lib/engine-components/js-extensions/ExtensionUtils.js +56 -0
- package/lib/engine-components/js-extensions/ExtensionUtils.js.map +1 -0
- package/lib/engine-components/js-extensions/Object3D.js +27 -50
- package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
- package/lib/engine-components/js-extensions/Vector.d.ts +2 -0
- package/lib/engine-components/js-extensions/Vector.js +16 -0
- package/lib/engine-components/js-extensions/Vector.js.map +1 -0
- package/lib/engine-components/timeline/PlayableDirector.d.ts +2 -1
- package/lib/engine-components/timeline/PlayableDirector.js.map +1 -1
- package/lib/engine-components/ui/BaseUIComponent.d.ts +1 -0
- package/lib/engine-components/ui/BaseUIComponent.js +11 -5
- package/lib/engine-components/ui/BaseUIComponent.js.map +1 -1
- package/lib/engine-components/ui/Canvas.d.ts +3 -0
- package/lib/engine-components/ui/Canvas.js +12 -1
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
- package/lib/engine-components/ui/CanvasScaler.js +17 -0
- package/lib/engine-components/ui/CanvasScaler.js.map +1 -0
- package/lib/engine-components/ui/EventSystem.d.ts +1 -1
- package/lib/engine-components/ui/EventSystem.js +11 -31
- package/lib/engine-components/ui/EventSystem.js.map +1 -1
- package/lib/engine-components/ui/Graphic.js +2 -1
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/Keyboard.js +2 -1
- package/lib/engine-components/ui/Keyboard.js.map +1 -1
- package/lib/engine-components/ui/RaycastUtils.d.ts +11 -0
- package/lib/engine-components/ui/RaycastUtils.js +62 -0
- package/lib/engine-components/ui/RaycastUtils.js.map +1 -0
- package/lib/engine-components/ui/Raycaster.js.map +1 -1
- package/lib/engine-components/ui/Text.js +8 -3
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/ui/Utils.js +3 -2
- package/lib/engine-components/ui/Utils.js.map +1 -1
- package/lib/needle-engine.d.ts +3 -1
- package/lib/needle-engine.js +4 -2
- package/lib/needle-engine.js.map +1 -1
- package/package.json +12 -1
- package/src/engine/api.ts +3 -0
- package/src/engine/codegen/register_types.js +2 -2
- package/src/engine/engine_addressables.ts +12 -10
- package/src/engine/{engine_components.js → engine_components.ts} +66 -61
- package/src/engine/engine_element.ts +4 -3
- package/src/engine/engine_element_loading.ts +5 -1
- package/src/engine/engine_gameobject.ts +506 -0
- package/src/engine/engine_gltf.ts +21 -2
- package/src/engine/engine_gltf_builtin_components.ts +8 -7
- package/src/engine/engine_lightdata.ts +1 -1
- package/src/engine/engine_mainloop_utils.ts +13 -11
- package/src/engine/engine_networking.ts +14 -17
- package/src/engine/engine_networking_files.ts +14 -11
- package/src/engine/engine_networking_files_default_components.ts +53 -52
- package/src/engine/engine_networking_instantiate.ts +24 -14
- package/src/engine/engine_networking_types.ts +19 -0
- package/src/engine/engine_physics.ts +45 -77
- package/src/engine/engine_rendererdata.ts +1 -1
- package/src/engine/engine_scenetools.ts +30 -6
- package/src/engine/engine_serialization_core.ts +1 -1
- package/src/engine/engine_serialization_decorator.ts +1 -1
- package/src/engine/engine_setup.ts +51 -37
- package/src/engine/engine_three_utils.ts +0 -8
- package/src/engine/engine_types.ts +188 -0
- package/src/engine/engine_utils.ts +1 -3
- package/src/engine/extensions/NEEDLE_components.ts +2 -2
- package/src/engine/extensions/NEEDLE_deferred_texture.ts +1 -1
- package/src/engine/extensions/NEEDLE_lighting_settings.ts +1 -1
- package/src/engine/extensions/NEEDLE_lightmaps.ts +1 -1
- package/src/engine/extensions/NEEDLE_render_objects.ts +4 -4
- package/src/engine/extensions/NEEDLE_techniques_webgl.ts +5 -4
- package/src/engine/extensions/extensions.ts +1 -1
- package/src/engine-components/Animator.ts +3 -3
- package/src/engine-components/AvatarLoader.ts +6 -5
- package/src/engine-components/Camera.ts +10 -13
- package/src/engine-components/CameraUtils.ts +15 -0
- package/src/engine-components/Collider.ts +17 -2
- package/src/engine-components/Component.ts +87 -541
- package/src/engine-components/Duplicatable.ts +4 -3
- package/src/engine-components/LODGroup.ts +1 -1
- package/src/engine-components/Light.ts +3 -2
- package/src/engine-components/NestedGltf.ts +2 -1
- package/src/engine-components/Networking.ts +6 -1
- package/src/engine-components/OrbitControls.ts +5 -5
- package/src/engine-components/Renderer.ts +5 -1
- package/src/engine-components/RigidBody.ts +2 -1
- package/src/engine-components/ScreenCapture.ts +1 -1
- package/src/engine-components/SpectatorCamera.ts +7 -5
- package/src/engine-components/SyncedCamera.ts +2 -1
- package/src/engine-components/SyncedTransform.ts +1 -1
- package/src/engine-components/TestRunner.ts +1 -2
- package/src/engine-components/Voip.ts +2 -1
- package/src/engine-components/WebXR.ts +2 -2
- package/src/engine-components/WebXRController.ts +30 -10
- package/src/engine-components/WebXRGrabRendering.ts +1 -1
- package/src/engine-components/WebXRSync.ts +1 -1
- package/src/engine-components/avatar/Avatar_Brain_LookAt.ts +2 -1
- package/src/engine-components/codegen/components.ts +1 -1
- package/src/engine-components/js-extensions/ExtensionUtils.ts +66 -0
- package/src/engine-components/js-extensions/Object3D.ts +37 -61
- package/src/engine-components/js-extensions/Vector.ts +17 -0
- package/src/engine-components/timeline/PlayableDirector.ts +2 -1
- package/src/engine-components/ui/BaseUIComponent.ts +17 -6
- package/src/engine-components/ui/Canvas.ts +14 -2
- package/src/engine-components/ui/CanvasScaler.ts +21 -0
- package/src/engine-components/ui/EventSystem.ts +11 -25
- package/src/engine-components/ui/Graphic.ts +2 -1
- package/src/engine-components/ui/Keyboard.ts +2 -1
- package/src/engine-components/ui/RaycastUtils.ts +64 -0
- package/src/engine-components/ui/Raycaster.ts +2 -0
- package/src/engine-components/ui/Text.ts +8 -4
- package/src/engine-components/ui/Utils.ts +3 -2
- package/src/needle-engine.ts +7 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Behaviour, GameObject
|
|
1
|
+
import { Behaviour, GameObject } from "./Component";
|
|
2
2
|
import { WebXRController, ControllerEvents } from "./WebXRController";
|
|
3
3
|
import { DragControls, DragEvents } from "./DragControls";
|
|
4
4
|
import { Interactable } from "./Interactable";
|
|
5
5
|
import { Animation } from "./Animation";
|
|
6
6
|
import { Vector3, Quaternion, Object3D } from "three";
|
|
7
7
|
import { serializeable } from "../engine/engine_serialization_decorator";
|
|
8
|
+
import { InstantiateOptions } from "../engine/engine_gameobject";
|
|
8
9
|
|
|
9
10
|
export class Duplicatable extends Interactable {
|
|
10
11
|
|
|
@@ -35,7 +36,7 @@ export class Duplicatable extends Interactable {
|
|
|
35
36
|
// }
|
|
36
37
|
// console.log(this, this.object);
|
|
37
38
|
if (this.object) {
|
|
38
|
-
if (this.object === this.gameObject) {
|
|
39
|
+
if (this.object as any === this.gameObject) {
|
|
39
40
|
console.error("Can not duplicate self");
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
@@ -90,7 +91,7 @@ export class Duplicatable extends Interactable {
|
|
|
90
91
|
if (!this.object) return null;
|
|
91
92
|
if (selected === this.gameObject || this.handleMultiObject(selected)) {
|
|
92
93
|
|
|
93
|
-
if (this.object === this.gameObject) return null;
|
|
94
|
+
if (this.object as any === this.gameObject) return null;
|
|
94
95
|
this.object.visible = true;
|
|
95
96
|
|
|
96
97
|
if (this._startPosition)
|
|
@@ -31,7 +31,7 @@ class LOD {
|
|
|
31
31
|
this.model = model;
|
|
32
32
|
this.renderers = [];
|
|
33
33
|
for (const guid of model.renderers) {
|
|
34
|
-
const rend = this.findRenderer(guid, group.gameObject);// GameObject.findByGuid(guid, group.gameObject) as Renderer;
|
|
34
|
+
const rend = this.findRenderer(guid, group.gameObject as GameObject);// GameObject.findByGuid(guid, group.gameObject) as Renderer;
|
|
35
35
|
if (rend && rend.gameObject) {
|
|
36
36
|
this.renderers.push(rend);
|
|
37
37
|
}
|
|
@@ -7,6 +7,7 @@ import { serializeable } from "../engine/engine_serialization_decorator";
|
|
|
7
7
|
import { Color, DirectionalLight, OrthographicCamera } from "three";
|
|
8
8
|
import { WebXR, WebXREvent } from "./WebXR";
|
|
9
9
|
import { WebARSessionRoot } from "./WebARSessionRoot";
|
|
10
|
+
import { ILight } from "../engine/engine_types";
|
|
10
11
|
|
|
11
12
|
// https://threejs.org/examples/webgl_shadowmap_csm.html
|
|
12
13
|
|
|
@@ -82,7 +83,7 @@ enum LightShadows {
|
|
|
82
83
|
Soft = 2,
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
export class Light extends Behaviour {
|
|
86
|
+
export class Light extends Behaviour implements ILight {
|
|
86
87
|
|
|
87
88
|
@serializeable()
|
|
88
89
|
private type: LightType = 0;
|
|
@@ -263,7 +264,7 @@ export class Light extends Behaviour {
|
|
|
263
264
|
private _webARRoot?: WebARSessionRoot;
|
|
264
265
|
|
|
265
266
|
private onWebXRStarted() {
|
|
266
|
-
this._webARRoot = this.gameObject
|
|
267
|
+
this._webARRoot = GameObject.getComponentInParent(this.gameObject, WebARSessionRoot) ?? undefined;
|
|
267
268
|
this.startCoroutine(this._updateLightIntensityInARRoutine());
|
|
268
269
|
}
|
|
269
270
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { getParam } from "../engine/engine_utils";
|
|
2
|
-
import { Behaviour
|
|
2
|
+
import { Behaviour } from "../engine-components/Component";
|
|
3
3
|
import { AssetReference, ProgressCallback } from "../engine/engine_addressables";
|
|
4
4
|
import { serializeable } from "../engine/engine_serialization_decorator";
|
|
5
5
|
import { InstantiateIdProvider } from "../engine/engine_networking_instantiate";
|
|
6
|
+
import { InstantiateOptions } from "../engine/engine_gameobject";
|
|
6
7
|
|
|
7
8
|
const debug = getParam("debugnestedgltf");
|
|
8
9
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { INetworkingWebsocketUrlProvider } from "../engine/engine_networking";
|
|
1
2
|
import { isLocalNetwork } from "../engine/engine_networking_utils";
|
|
2
3
|
import { getParam } from "../engine/engine_utils";
|
|
3
4
|
import { Behaviour } from "./Component";
|
|
4
5
|
|
|
5
|
-
export class Networking extends Behaviour {
|
|
6
|
+
export class Networking extends Behaviour implements INetworkingWebsocketUrlProvider {
|
|
6
7
|
|
|
7
8
|
url: string | null = null;
|
|
8
9
|
urlParameterName: string | null = null;
|
|
@@ -10,6 +11,10 @@ export class Networking extends Behaviour {
|
|
|
10
11
|
// used when local host is detected
|
|
11
12
|
localhost: string | null = null;
|
|
12
13
|
|
|
14
|
+
awake(){
|
|
15
|
+
this.context.connection.registerProvider(this);
|
|
16
|
+
}
|
|
17
|
+
|
|
13
18
|
getWebsocketUrl(): string | null {
|
|
14
19
|
|
|
15
20
|
let socketurl = this.url ? Networking.GetUrl(this.url, this.localhost) : null;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Behaviour, GameObject } from "./Component";
|
|
2
|
-
import { Camera } from "./Camera";
|
|
2
|
+
// import { Camera } from "./Camera";
|
|
3
3
|
import { OrbitControls as ThreeOrbitControls } from "three/examples/jsm/controls/OrbitControls";
|
|
4
4
|
import { LookAtConstraint } from "./LookAtConstraint";
|
|
5
5
|
import * as THREE from "three";
|
|
6
6
|
import { getWorldPosition } from "../engine/engine_three_utils";
|
|
7
|
-
import {
|
|
7
|
+
import { RaycastOptions } from "../engine/engine_physics";
|
|
8
8
|
import { serializeable } from "../engine/engine_serialization_decorator";
|
|
9
|
-
import {
|
|
9
|
+
import { Camera } from "./Camera";
|
|
10
10
|
|
|
11
11
|
export class OrbitControls extends Behaviour {
|
|
12
12
|
public get controls() {
|
|
@@ -30,7 +30,7 @@ export class OrbitControls extends Behaviour {
|
|
|
30
30
|
minZoom: number = 0;
|
|
31
31
|
maxZoom: number = Infinity;
|
|
32
32
|
enablePan: boolean = true;
|
|
33
|
-
@serializeable()
|
|
33
|
+
@serializeable(LookAtConstraint)
|
|
34
34
|
lookAtConstraint: LookAtConstraint | null = null;
|
|
35
35
|
lookAtConstraint01: number = 1;
|
|
36
36
|
middleClickToFocus: boolean = true;
|
|
@@ -61,10 +61,10 @@ export class OrbitControls extends Behaviour {
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
onEnable() {
|
|
64
|
+
|
|
64
65
|
this._enableTime = this.context.time.time;
|
|
65
66
|
const camGo = GameObject.getComponent(this.gameObject, Camera);
|
|
66
67
|
const cam = camGo?.cam;
|
|
67
|
-
|
|
68
68
|
if (!this._controls) {
|
|
69
69
|
console.assert(cam !== null && cam !== undefined, "Missing camera", this);
|
|
70
70
|
if (cam)
|
|
@@ -9,6 +9,10 @@ import { Material, Texture, Vector4 } from "three";
|
|
|
9
9
|
import { NEEDLE_render_objects } from "../engine/extensions/NEEDLE_render_objects";
|
|
10
10
|
import { NEEDLE_deferred_texture } from "../engine/extensions/NEEDLE_deferred_texture";
|
|
11
11
|
import { NEED_UPDATE_INSTANCE_KEY } from "../engine/engine_instancing";
|
|
12
|
+
import { IRenderer } from "../engine/engine_types";
|
|
13
|
+
|
|
14
|
+
// for staying compatible with old code
|
|
15
|
+
export { InstancingUtil } from "../engine/engine_instancing";
|
|
12
16
|
|
|
13
17
|
const suppressInstancing = getParam("noInstancing");
|
|
14
18
|
const debugLightmap = getParam("debuglightmaps") ? true : false;
|
|
@@ -99,7 +103,7 @@ class SharedMaterialArray {
|
|
|
99
103
|
|
|
100
104
|
}
|
|
101
105
|
|
|
102
|
-
export class Renderer extends Behaviour {
|
|
106
|
+
export class Renderer extends Behaviour implements IRenderer {
|
|
103
107
|
|
|
104
108
|
@serializeable()
|
|
105
109
|
receiveShadows: boolean = false;
|
|
@@ -6,8 +6,9 @@ import { getWorldPosition } from "../engine/engine_three_utils";
|
|
|
6
6
|
import { serializeable } from "../engine/engine_serialization_decorator";
|
|
7
7
|
import { Watch } from "../engine/engine_utils";
|
|
8
8
|
import { Vector3 } from "three";
|
|
9
|
+
import { IRigidbody } from "../engine/engine_types";
|
|
9
10
|
|
|
10
|
-
export class Rigidbody extends Behaviour {
|
|
11
|
+
export class Rigidbody extends Behaviour implements IRigidbody {
|
|
11
12
|
|
|
12
13
|
@serializeable()
|
|
13
14
|
mass: number = 1;
|
|
@@ -5,11 +5,11 @@ import { Context } from "../engine/engine_setup";
|
|
|
5
5
|
import { RoomEvents } from "../engine/engine_networking";
|
|
6
6
|
import { UserJoinedOrLeftRoomModel } from "../engine/engine_networking";
|
|
7
7
|
import { serializeable } from "../engine/engine_serialization";
|
|
8
|
-
import { IModel } from "../engine/engine_networking";
|
|
9
8
|
import { IPointerClickHandler } from "./ui/PointerEvents";
|
|
10
9
|
import { EventDispatcher } from "three";
|
|
11
10
|
import { AudioSource } from "./AudioSource";
|
|
12
11
|
import { getParam } from "../engine/engine_utils";
|
|
12
|
+
import { IModel } from "../engine/engine_networking_types";
|
|
13
13
|
|
|
14
14
|
const debug = getParam("debugscreenshare");
|
|
15
15
|
|
|
@@ -12,7 +12,9 @@ import { Context } from "../engine/engine_setup";
|
|
|
12
12
|
import { getParam } from "../engine/engine_utils";
|
|
13
13
|
import { PlayerView, ViewDevice } from "../engine/engine_playerview";
|
|
14
14
|
import { RaycastOptions } from "../engine/engine_physics";
|
|
15
|
-
import {
|
|
15
|
+
import { RoomEvents } from "../engine/engine_networking";
|
|
16
|
+
import { ICamera } from "../engine/engine_types";
|
|
17
|
+
import { IModel } from "../engine/engine_networking_types";
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
export enum SpectatorMode {
|
|
@@ -177,7 +179,7 @@ export class SpectatorCamera extends Behaviour {
|
|
|
177
179
|
}
|
|
178
180
|
|
|
179
181
|
private onXRSessionEnded(_evt) {
|
|
180
|
-
this.context.removeCamera(this.cam);
|
|
182
|
+
this.context.removeCamera(this.cam as ICamera);
|
|
181
183
|
GameObject.setActive(this.gameObject, false);
|
|
182
184
|
if (this.orbit) this.orbit.enabled = true;
|
|
183
185
|
this._handler?.set(undefined);
|
|
@@ -355,16 +357,16 @@ class SpectatorHandler implements ISpectatorHandler {
|
|
|
355
357
|
// this.context.setCurrentCamera(this.cam);
|
|
356
358
|
if (debug) console.log("FOLLOW", followObject);
|
|
357
359
|
if (!this.context.isInXR) {
|
|
358
|
-
this.context.setCurrentCamera(this.cam);
|
|
360
|
+
this.context.setCurrentCamera(this.cam as ICamera);
|
|
359
361
|
}
|
|
360
|
-
else this.context.removeCamera(this.cam);
|
|
362
|
+
else this.context.removeCamera(this.cam as ICamera);
|
|
361
363
|
}
|
|
362
364
|
|
|
363
365
|
disable() {
|
|
364
366
|
if (debug) console.log("STOP FOLLOW", this.currentObject);
|
|
365
367
|
this.view = undefined;
|
|
366
368
|
this.currentObject = undefined;
|
|
367
|
-
this.context.removeCamera(this.cam);
|
|
369
|
+
this.context.removeCamera(this.cam as ICamera);
|
|
368
370
|
if (this.follow)
|
|
369
371
|
this.follow.enabled = false;
|
|
370
372
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NetworkConnection } from "../engine/engine_networking";
|
|
2
|
-
import { Behaviour, GameObject
|
|
2
|
+
import { Behaviour, GameObject } from "./Component";
|
|
3
3
|
import { Camera } from "./Camera";
|
|
4
4
|
import * as utils from "../engine/engine_three_utils"
|
|
5
5
|
import { WebXR } from "./WebXR";
|
|
@@ -13,6 +13,7 @@ import { Object3D } from "three";
|
|
|
13
13
|
import { AvatarMarker } from "./WebXRAvatar";
|
|
14
14
|
import { AssetReference } from "../engine/engine_addressables";
|
|
15
15
|
import { ViewDevice } from "../engine/engine_playerview";
|
|
16
|
+
import { InstantiateOptions } from "../engine/engine_gameobject";
|
|
16
17
|
|
|
17
18
|
const SyncedCameraModelIdentifier = "SCAM";
|
|
18
19
|
registerType(SyncedCameraModelIdentifier, SyncedCameraModel.getRootAsSyncedCameraModel);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as THREE from 'three'
|
|
2
|
-
import {
|
|
2
|
+
import { OwnershipModel, RoomEvents } from "../engine/engine_networking"
|
|
3
3
|
import { Behaviour, GameObject } from "./Component";
|
|
4
4
|
import { Rigidbody } from "./RigidBody";
|
|
5
5
|
import * as utils from "../engine/engine_utils"
|
|
@@ -3,10 +3,9 @@ import * as tests from "../engine/tests/test_utils";
|
|
|
3
3
|
import { createTransformModel, SyncedTransform, SyncedTransformIdentifier } from "./SyncedTransform";
|
|
4
4
|
import * as flatbuffers from 'flatbuffers';
|
|
5
5
|
import { SyncedTransformModel } from "../engine-schemes/synced-transform-model";
|
|
6
|
-
import * as schemes from "../engine-schemes/schemes";
|
|
7
|
-
import { IModel, NetworkConnection } from "../engine/engine_networking";
|
|
8
6
|
import { Rigidbody } from "./Rigidbody";
|
|
9
7
|
import { Vector3 } from "three";
|
|
8
|
+
import { IModel } from "../engine/engine_networking_types";
|
|
10
9
|
|
|
11
10
|
export class TestRunner extends Behaviour {
|
|
12
11
|
awake(): void {
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
import { Behaviour } from "./Component";
|
|
3
3
|
import * as THREE from "three";
|
|
4
|
-
import { RoomEvents
|
|
4
|
+
import { RoomEvents } from "../engine/engine_networking"
|
|
5
5
|
import Peer, { MediaConnection } from "peerjs"
|
|
6
6
|
import { AudioSource } from "./AudioSource";
|
|
7
7
|
import * as utils from "../engine/engine_utils"
|
|
8
8
|
import { AudioAnalyser } from "three";
|
|
9
|
+
import { SendQueue } from "../engine/engine_networking_types";
|
|
9
10
|
|
|
10
11
|
export const noVoip = "noVoip";
|
|
11
12
|
const debug = utils.getParam("debugvoip");
|
|
@@ -285,7 +285,7 @@ export class WebXR extends Behaviour {
|
|
|
285
285
|
// build controllers before session begins - this seems to fix issue with controller models not appearing/not getting connection event
|
|
286
286
|
this.ensureRig();
|
|
287
287
|
for (let i = 0; i < 2; i++) {
|
|
288
|
-
WebXRController.Create(this, i, this.gameObject, ControllerType.PhysicalDevice);
|
|
288
|
+
WebXRController.Create(this, i, this.gameObject as GameObject, ControllerType.PhysicalDevice);
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
WebXR.events.dispatchEvent({ type: WebXREvent.RequestVRSession });
|
|
@@ -499,7 +499,7 @@ export class WebAR {
|
|
|
499
499
|
|
|
500
500
|
const deviceType = navigator.userAgent?.includes("OculusBrowser") ? ControllerType.PhysicalDevice : ControllerType.Touch;
|
|
501
501
|
for (let i = 0; i < 4; i++) {
|
|
502
|
-
WebXRController.Create(this.webxr, i, this.webxr.gameObject, deviceType)
|
|
502
|
+
WebXRController.Create(this.webxr, i, this.webxr.gameObject as GameObject, deviceType)
|
|
503
503
|
}
|
|
504
504
|
|
|
505
505
|
if (!this.sessionRoot || this.sessionRoot.destroyed || !this.sessionRoot.activeAndEnabled)
|
|
@@ -13,7 +13,9 @@ import * as utils from "../engine/engine_three_utils"
|
|
|
13
13
|
import { Interactable, UsageMarker } from "./Interactable";
|
|
14
14
|
import { InstancingUtil } from "../engine/engine_instancing";
|
|
15
15
|
import { Rigidbody } from "./RigidBody";
|
|
16
|
-
import { getParam } from "../engine/engine_utils";
|
|
16
|
+
import { delay, getParam } from "../engine/engine_utils";
|
|
17
|
+
import { UIRaycastUtils } from "./ui/RaycastUtils";
|
|
18
|
+
import { RaycastResult } from "cannon-es";
|
|
17
19
|
|
|
18
20
|
const debug = getParam("debugwebxrcontroller");
|
|
19
21
|
|
|
@@ -128,7 +130,7 @@ export class WebXRController extends Behaviour {
|
|
|
128
130
|
|
|
129
131
|
// TODO: replace with component events
|
|
130
132
|
public static removeEventListener(evt: ControllerEvents, callback: (controller: WebXRController, args: any) => void) {
|
|
131
|
-
if(!callback) return;
|
|
133
|
+
if (!callback) return;
|
|
132
134
|
const list = this.eventSubs[evt] ?? [];
|
|
133
135
|
const idx = list.indexOf(callback);
|
|
134
136
|
if (idx >= 0) list.splice(idx, 1);
|
|
@@ -568,6 +570,7 @@ export class WebXRController extends Behaviour {
|
|
|
568
570
|
if (this.webXR.Rig) {
|
|
569
571
|
factor /= this.webXR.Rig.scale.x;
|
|
570
572
|
}
|
|
573
|
+
// if (!hit) factor = 0;
|
|
571
574
|
|
|
572
575
|
if (this.raycastLine) {
|
|
573
576
|
this.raycastLine.scale.z = factor * (this.lastHit?.distance ?? 9999);
|
|
@@ -625,11 +628,11 @@ export class WebXRController extends Behaviour {
|
|
|
625
628
|
if (intersections && intersections.length > 0) {
|
|
626
629
|
for (const intersection of intersections) {
|
|
627
630
|
const object = intersection.object;
|
|
628
|
-
if (!this.testIsVisible(object)) {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
}
|
|
631
|
+
// if (!this.testIsVisible(object)) {
|
|
632
|
+
// if (debug)
|
|
633
|
+
// console.log("not visible");
|
|
634
|
+
// continue;
|
|
635
|
+
// }
|
|
633
636
|
this.lastSelectStartObject = object;
|
|
634
637
|
const args = { selected: object, grab: object };
|
|
635
638
|
const subs = WebXRController.eventSubs[ControllerEvents.SelectStart];
|
|
@@ -687,8 +690,12 @@ export class WebXRController extends Behaviour {
|
|
|
687
690
|
}
|
|
688
691
|
|
|
689
692
|
private testIsVisible(obj: THREE.Object3D | null): boolean {
|
|
690
|
-
if (!obj) return
|
|
691
|
-
|
|
693
|
+
if (!obj) return false;
|
|
694
|
+
if (GameObject.isActiveInHierarchy(obj) === false) return false;
|
|
695
|
+
if (UIRaycastUtils.isInteractable(obj) === false) {
|
|
696
|
+
return false;
|
|
697
|
+
}
|
|
698
|
+
return true;
|
|
692
699
|
// if (!obj.visible) return false;
|
|
693
700
|
// return this.testIsVisible(obj.parent);
|
|
694
701
|
}
|
|
@@ -729,7 +736,20 @@ export class WebXRController extends Behaviour {
|
|
|
729
736
|
opts.layerMask = new THREE.Layers();
|
|
730
737
|
opts.layerMask.set(0);
|
|
731
738
|
opts.ray = this.getRay();
|
|
732
|
-
|
|
739
|
+
const hits = this.context.physics.raycast(opts);
|
|
740
|
+
for (let i = 0; i < hits.length; i++) {
|
|
741
|
+
const hit = hits[i];
|
|
742
|
+
const obj = hit.object;
|
|
743
|
+
if (!this.testIsVisible(obj)) {
|
|
744
|
+
hits.splice(i, 1);
|
|
745
|
+
i--;
|
|
746
|
+
continue;
|
|
747
|
+
}
|
|
748
|
+
hit.object = UIRaycastUtils.getObject(obj);
|
|
749
|
+
break;
|
|
750
|
+
}
|
|
751
|
+
// console.log(...hits);
|
|
752
|
+
return hits;
|
|
733
753
|
}
|
|
734
754
|
}
|
|
735
755
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { IModel, SendQueue } from "../engine/engine_networking";
|
|
2
1
|
import { getWorldPosition, setWorldPosition, setWorldPositionXYZ } from "../engine/engine_three_utils";
|
|
3
2
|
import { Behaviour, GameObject } from "./Component";
|
|
4
3
|
import { AttachedObject, AttachedObjectEvents } from "./WebXRController";
|
|
5
4
|
import * as THREE from "three";
|
|
6
5
|
import { PlayerColor } from "./PlayerColor";
|
|
7
6
|
import { Context } from "../engine/engine_setup";
|
|
7
|
+
import { IModel, SendQueue } from "../engine/engine_networking_types";
|
|
8
8
|
|
|
9
9
|
enum XRGrabEvent {
|
|
10
10
|
StartOrUpdate = "xr-grab-visual-start-or-update",
|
|
@@ -182,7 +182,7 @@ export class WebXRSync extends Behaviour {
|
|
|
182
182
|
|
|
183
183
|
async awake() {
|
|
184
184
|
|
|
185
|
-
if(!this.webXR) this.webXR = this.gameObject
|
|
185
|
+
if(!this.webXR) this.webXR = GameObject.getComponent(this.gameObject, WebXR);
|
|
186
186
|
if(!this.webXR) this.webXR = GameObject.findObjectOfType(WebXR, this.context);
|
|
187
187
|
|
|
188
188
|
if(!this.webXR)
|
|
@@ -3,9 +3,10 @@ import { TypeStore } from "../../engine/engine_typestore";
|
|
|
3
3
|
import { Behaviour, GameObject } from "../Component";
|
|
4
4
|
import { AvatarMarker } from "../WebXRAvatar";
|
|
5
5
|
import * as utils from "../../engine/engine_three_utils";
|
|
6
|
-
import {
|
|
6
|
+
import { OwnershipModel } from "../../engine/engine_networking";
|
|
7
7
|
import { Int8BufferAttribute } from "three";
|
|
8
8
|
import { Context } from "../../engine/engine_setup";
|
|
9
|
+
import { IModel } from "../../engine/engine_networking_types";
|
|
9
10
|
|
|
10
11
|
export class Avatar_POI {
|
|
11
12
|
|
|
@@ -16,7 +16,6 @@ export { Camera } from "../Camera";
|
|
|
16
16
|
export { Collider } from "../Collider";
|
|
17
17
|
export { SphereCollider } from "../Collider";
|
|
18
18
|
export { BoxCollider } from "../Collider";
|
|
19
|
-
export { InstantiateOptions } from "../Component";
|
|
20
19
|
export { DeleteBox } from "../DeleteBox";
|
|
21
20
|
export { Deletable } from "../DeleteBox";
|
|
22
21
|
export { DeviceFlag } from "../DeviceFlag";
|
|
@@ -132,6 +131,7 @@ export { PointerEventData } from "../ui/PointerEvents";
|
|
|
132
131
|
export { Raycaster } from "../ui/Raycaster";
|
|
133
132
|
export { ObjectRaycaster } from "../ui/Raycaster";
|
|
134
133
|
export { GraphicRaycaster } from "../ui/Raycaster";
|
|
134
|
+
export { UIRaycastUtils } from "../ui/RaycastUtils";
|
|
135
135
|
export { Size } from "../ui/RectTransform";
|
|
136
136
|
export { Rect } from "../ui/RectTransform";
|
|
137
137
|
export { RectTransform } from "../ui/RectTransform";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
const handlers : Map<any, ApplyPrototypeExtension> = new Map();
|
|
3
|
+
|
|
4
|
+
export function applyPrototypeExtensions(obj : any){
|
|
5
|
+
if(!obj) return;
|
|
6
|
+
const prototype = obj.prototype;
|
|
7
|
+
if(!prototype) return;
|
|
8
|
+
let handler = handlers.get(prototype);
|
|
9
|
+
if(!handler){
|
|
10
|
+
handler = createPrototypeExtensionHandler(prototype);
|
|
11
|
+
handlers.set(prototype, handler);
|
|
12
|
+
}
|
|
13
|
+
handler.apply(obj);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function createPrototypeExtensionHandler(prototype: any) {
|
|
17
|
+
return new ApplyPrototypeExtension(prototype);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface IApplyPrototypeExtension {
|
|
21
|
+
apply(object: object): void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class ApplyPrototypeExtension implements IApplyPrototypeExtension {
|
|
25
|
+
|
|
26
|
+
private readonly $symbol: symbol;
|
|
27
|
+
private readonly extensions: string[];
|
|
28
|
+
private readonly descriptors: Array<PropertyDescriptor | undefined>;
|
|
29
|
+
|
|
30
|
+
constructor(prototype: object) {
|
|
31
|
+
this.$symbol = Symbol("prototype-extension");
|
|
32
|
+
// used to decorate cloned object3D objects with the same added components defined above
|
|
33
|
+
this.extensions = Object.keys(prototype);
|
|
34
|
+
this.descriptors = new Array<PropertyDescriptor | undefined>();
|
|
35
|
+
for (let i = 0; i < this.extensions.length; i++) {
|
|
36
|
+
const key = this.extensions[i];
|
|
37
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, key);
|
|
38
|
+
if (descriptor) {
|
|
39
|
+
this.descriptors.push(descriptor);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
apply(object: object): void {
|
|
45
|
+
|
|
46
|
+
if (object[this.$symbol]) return;
|
|
47
|
+
object[this.$symbol] = true;
|
|
48
|
+
|
|
49
|
+
// const prototype = object.constructor.prototype;
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < this.extensions.length; i++) {
|
|
52
|
+
const key = this.extensions[i];
|
|
53
|
+
const desc = this.descriptors[i];
|
|
54
|
+
if (desc) {
|
|
55
|
+
// if (prototype) {
|
|
56
|
+
// const exists = Object.getOwnPropertyDescriptor(prototype, key);
|
|
57
|
+
// if (exists) {
|
|
58
|
+
// continue;
|
|
59
|
+
// }
|
|
60
|
+
// }
|
|
61
|
+
// console.trace("DEFINE", object.name, key);
|
|
62
|
+
Object.defineProperty(object, key, desc);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -1,18 +1,28 @@
|
|
|
1
|
+
import { applyPrototypeExtensions } from "./ExtensionUtils";
|
|
1
2
|
import { Object3D } from "three";
|
|
2
|
-
import {
|
|
3
|
+
import { Constructor, ConstructorConcrete, IComponent } from "../../engine/engine_types"
|
|
4
|
+
import { IComponent as Component } from "../../engine/engine_types";
|
|
5
|
+
import { addNewComponentInstance, getComponent, getComponentInChildren, getComponentInParent, getComponents, getComponentsInChildren, getComponentsInParent, getOrAddComponent, removeComponent } from "../../engine/engine_components";
|
|
6
|
+
|
|
7
|
+
// used to decorate cloned object3D objects with the same added components defined above
|
|
8
|
+
export function apply(object: Object3D) {
|
|
9
|
+
if (object && object.isObject3D === true)
|
|
10
|
+
applyPrototypeExtensions(object);
|
|
11
|
+
}
|
|
3
12
|
|
|
4
|
-
const decorated = Symbol("GameObject.decorated");
|
|
5
13
|
|
|
6
14
|
// this is a fix to allow gameObject active animation be applied to a three object
|
|
7
|
-
Object.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
15
|
+
if (!Object.getOwnPropertyDescriptor(Object3D.prototype, "activeSelf")) {
|
|
16
|
+
Object.defineProperty(Object3D.prototype, "activeSelf", {
|
|
17
|
+
get: function () {
|
|
18
|
+
return this.visible;
|
|
19
|
+
},
|
|
20
|
+
set: function (val: boolean | number) {
|
|
21
|
+
const state = typeof val === "number" ? val > 0.5 : val;
|
|
22
|
+
this.visible = state;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
16
26
|
|
|
17
27
|
|
|
18
28
|
// do we still need this?
|
|
@@ -20,72 +30,38 @@ Object3D.prototype["SetActive"] = function (active: boolean) {
|
|
|
20
30
|
this.visible = active;
|
|
21
31
|
}
|
|
22
32
|
|
|
23
|
-
Object3D.prototype["addNewComponent"] = function <T extends
|
|
24
|
-
return
|
|
33
|
+
Object3D.prototype["addNewComponent"] = function <T extends Component>(type: ConstructorConcrete<T>) {
|
|
34
|
+
return addNewComponentInstance(this, new type());
|
|
25
35
|
}
|
|
26
36
|
|
|
27
37
|
Object3D.prototype["removeComponent"] = function (inst: Component) {
|
|
28
|
-
return
|
|
38
|
+
return removeComponent(this, inst);
|
|
29
39
|
}
|
|
30
40
|
|
|
31
|
-
Object3D.prototype["getOrAddComponent"] = function <T>(typeName:
|
|
32
|
-
return
|
|
41
|
+
Object3D.prototype["getOrAddComponent"] = function <T extends IComponent>(typeName: ConstructorConcrete<T>): T {
|
|
42
|
+
return getOrAddComponent<T>(this, typeName);
|
|
33
43
|
}
|
|
34
44
|
|
|
35
|
-
Object3D.prototype["getComponent"] = function <T>(type: Constructor<T>) {
|
|
36
|
-
return
|
|
45
|
+
Object3D.prototype["getComponent"] = function <T extends IComponent>(type: Constructor<T>) {
|
|
46
|
+
return getComponent(this, type);
|
|
37
47
|
}
|
|
38
48
|
|
|
39
|
-
Object3D.prototype["getComponents"] = function <T>(type: Constructor<T>, arr?: []) {
|
|
40
|
-
return
|
|
49
|
+
Object3D.prototype["getComponents"] = function <T extends IComponent>(type: Constructor<T>, arr?: []) {
|
|
50
|
+
return getComponents(this, type, arr);
|
|
41
51
|
}
|
|
42
52
|
|
|
43
|
-
Object3D.prototype["getComponentInChildren"] = function <T>(type: Constructor<T>) {
|
|
44
|
-
return
|
|
53
|
+
Object3D.prototype["getComponentInChildren"] = function <T extends IComponent>(type: Constructor<T>) {
|
|
54
|
+
return getComponentInChildren(this, type);
|
|
45
55
|
}
|
|
46
56
|
|
|
47
|
-
Object3D.prototype["getComponentsInChildren"] = function <T>(type: Constructor<T>, arr?: []) {
|
|
48
|
-
return
|
|
57
|
+
Object3D.prototype["getComponentsInChildren"] = function <T extends IComponent>(type: Constructor<T>, arr?: []) {
|
|
58
|
+
return getComponentsInChildren(this, type, arr);
|
|
49
59
|
}
|
|
50
60
|
|
|
51
|
-
Object3D.prototype["getComponentInParent"] = function <T>(type: Constructor<T>) {
|
|
52
|
-
return
|
|
61
|
+
Object3D.prototype["getComponentInParent"] = function <T extends IComponent>(type: Constructor<T>) {
|
|
62
|
+
return getComponentInParent(this, type);
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
Object3D.prototype["getComponentsInParent"] = function <T>(type: Constructor<T>, arr?: []) {
|
|
56
|
-
return
|
|
66
|
+
return getComponentsInParent(this, type, arr);
|
|
57
67
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// used to decorate cloned object3D objects with the same added components defined above
|
|
61
|
-
const extensions = Object.keys(Object3D.prototype);
|
|
62
|
-
const descriptors = new Array<PropertyDescriptor | undefined>();
|
|
63
|
-
for (let i = 0; i < extensions.length; i++) {
|
|
64
|
-
const key = extensions[i];
|
|
65
|
-
const descriptor = Object.getOwnPropertyDescriptor(Object3D.prototype, key);
|
|
66
|
-
if (descriptor) {
|
|
67
|
-
descriptors.push(descriptor);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export function apply(object: Object3D) {
|
|
72
|
-
if (object[decorated]) return;
|
|
73
|
-
object[decorated] = true;
|
|
74
|
-
|
|
75
|
-
// const prototype = object.constructor.prototype;
|
|
76
|
-
|
|
77
|
-
for (let i = 0; i < extensions.length; i++) {
|
|
78
|
-
const key = extensions[i];
|
|
79
|
-
const desc = descriptors[i];
|
|
80
|
-
if (desc) {
|
|
81
|
-
// if (prototype) {
|
|
82
|
-
// const exists = Object.getOwnPropertyDescriptor(prototype, key);
|
|
83
|
-
// if (exists) {
|
|
84
|
-
// continue;
|
|
85
|
-
// }
|
|
86
|
-
// }
|
|
87
|
-
// console.trace("DEFINE", object.name, key);
|
|
88
|
-
Object.defineProperty(object, key, desc);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { applyPrototypeExtensions } from "./ExtensionUtils";
|
|
2
|
+
import { Mathf } from "../../engine/engine_math";
|
|
3
|
+
import { Vector3 } from "three";
|
|
4
|
+
|
|
5
|
+
export function apply(object: Vector3) {
|
|
6
|
+
if (object && object.isVector3 === true) {
|
|
7
|
+
console.log(object);
|
|
8
|
+
applyPrototypeExtensions(object);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
Vector3.prototype["slerp"] = function (end: Vector3, t: number) {
|
|
13
|
+
const len1 = this.length();
|
|
14
|
+
const len2 = end.length();
|
|
15
|
+
const targetLen = Mathf.lerp(len1, len2, t);
|
|
16
|
+
return this.lerp(end, t).normalize().multiplyScalar(targetLen);
|
|
17
|
+
}
|