@needle-tools/engine 5.0.0 → 5.1.0-experimental.0
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/components.needle.json +1 -1
- package/dist/generateMeshBVH.worker-DT9A2Hrc.js +1 -0
- package/dist/gltf-progressive-3BwW4ETO.min.js +10 -0
- package/dist/gltf-progressive-ByD1UX0A.umd.cjs +10 -0
- package/dist/{gltf-progressive-Cl167Vjx.js → gltf-progressive-DwWaVr0o.js} +412 -394
- package/dist/gltf-progressive.worker-DpfUjn1n.js +3 -0
- package/dist/{materialx-qPScBWhj.min.js → materialx-9KHBidZa.min.js} +1 -1
- package/dist/{materialx-4ApD6Vz5.js → materialx-BBDu8W5P.js} +1 -1
- package/dist/{materialx-D0XUnhBY.umd.cjs → materialx-hLP3E8AA.umd.cjs} +2 -2
- package/dist/{needle-engine.bundle-BAYLGumK.umd.cjs → needle-engine.bundle-BOAJ6UPK.umd.cjs} +123 -123
- package/dist/{needle-engine.bundle-CoEvMwYM.min.js → needle-engine.bundle-CVsBkUR2.min.js} +110 -110
- package/dist/{needle-engine.bundle-BDIyvCV6.js → needle-engine.bundle-TgPY0fGG.js} +2143 -2088
- package/dist/needle-engine.d.ts +80 -22
- package/dist/needle-engine.js +480 -476
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/dist/{postprocessing-B_9sKVU7.min.js → postprocessing-BZfyAdCY.min.js} +1 -1
- package/dist/{postprocessing-WDc9WwI3.js → postprocessing-CXlA3QA6.js} +1 -1
- package/dist/{postprocessing-B2wb6pzI.umd.cjs → postprocessing-Dwy7Hz_T.umd.cjs} +38 -38
- package/dist/three-examples.js +4760 -3641
- package/dist/three-examples.min.js +17 -35
- package/dist/three-examples.umd.cjs +16 -34
- package/dist/three.js +48533 -28562
- package/dist/three.min.js +716 -502
- package/dist/three.umd.cjs +720 -506
- package/dist/{vendor-CntUvmJu.umd.cjs → vendor-BI4TX0aC.umd.cjs} +9 -9
- package/dist/{vendor-DPbfJJ4d.min.js → vendor-BgzAK9of.min.js} +1 -1
- package/dist/{vendor-vHLk8sXu.js → vendor-CwL-uvVy.js} +1 -1
- package/lib/engine/engine_animation.js +1 -1
- package/lib/engine/engine_animation.js.map +1 -1
- package/lib/engine/engine_audio.js.map +1 -1
- package/lib/engine/engine_context.js +3 -6
- package/lib/engine/engine_context.js.map +1 -1
- package/lib/engine/engine_create_objects.js +0 -1
- package/lib/engine/engine_create_objects.js.map +1 -1
- package/lib/engine/engine_element.d.ts +113 -0
- package/lib/engine/engine_element.js +833 -0
- package/lib/engine/engine_element.js.map +1 -0
- package/lib/engine/engine_element_attributes.d.ts +72 -0
- package/lib/engine/engine_element_attributes.js +2 -0
- package/lib/engine/engine_element_attributes.js.map +1 -0
- package/lib/engine/engine_element_extras.d.ts +6 -0
- package/lib/engine/engine_element_extras.js +14 -0
- package/lib/engine/engine_element_extras.js.map +1 -0
- package/lib/engine/engine_element_loading.d.ts +44 -0
- package/lib/engine/engine_element_loading.js +350 -0
- package/lib/engine/engine_element_loading.js.map +1 -0
- package/lib/engine/engine_element_overlay.d.ts +21 -0
- package/lib/engine/engine_element_overlay.js +167 -0
- package/lib/engine/engine_element_overlay.js.map +1 -0
- package/lib/engine/engine_license.js.map +1 -1
- package/lib/engine/engine_pmrem.js +2 -2
- package/lib/engine/engine_pmrem.js.map +1 -1
- package/lib/engine/engine_scenetools.d.ts +62 -0
- package/lib/engine/engine_scenetools.js +337 -0
- package/lib/engine/engine_scenetools.js.map +1 -0
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +1 -1
- package/lib/engine/engine_test_utils.d.ts +39 -0
- package/lib/engine/engine_test_utils.js +84 -0
- package/lib/engine/engine_test_utils.js.map +1 -0
- package/lib/engine/engine_three_utils.js.map +1 -1
- package/lib/engine/engine_time.js +4 -3
- package/lib/engine/engine_time.js.map +1 -1
- package/lib/engine/engine_ui.d.ts +25 -0
- package/lib/engine/engine_ui.dummy_canvas.d.ts +2 -0
- package/lib/engine/engine_ui.dummy_canvas.js +55 -0
- package/lib/engine/engine_ui.dummy_canvas.js.map +1 -0
- package/lib/engine/engine_ui.js +168 -0
- package/lib/engine/engine_ui.js.map +1 -0
- package/lib/engine/extensions/NEEDLE_lightmaps.js +2 -2
- package/lib/engine/extensions/NEEDLE_lightmaps.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_pmrem.d.ts +1 -1
- package/lib/engine/webcomponents/icons.js +3 -2
- package/lib/engine/webcomponents/icons.js.map +1 -1
- package/lib/engine/webcomponents/needle-engine.attributes.d.ts +69 -0
- package/lib/engine/webcomponents/needle-engine.attributes.js +2 -0
- package/lib/engine/webcomponents/needle-engine.attributes.js.map +1 -0
- package/lib/engine-components/AudioSource.js +1 -1
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/Light.d.ts +3 -0
- package/lib/engine-components/Light.js +39 -31
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +2 -1
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.d.ts +1 -1
- package/lib/engine-components/VideoPlayer.d.ts +1 -1
- package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/Animation.js +1 -0
- package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.d.ts +1 -1
- package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
- package/lib/engine-components/particlesystem/ParticleSystem.d.ts +1 -1
- package/lib/engine-components/postprocessing/Effects/Tonemapping.utils.d.ts +1 -1
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/ui/BaseUIComponent_Uikit.d.ts +54 -0
- package/lib/engine-components/ui/BaseUIComponent_Uikit.js +114 -0
- package/lib/engine-components/ui/BaseUIComponent_Uikit.js.map +1 -0
- package/lib/engine-components/ui/BaseUikitComponent.d.ts +54 -0
- package/lib/engine-components/ui/BaseUikitComponent.js +114 -0
- package/lib/engine-components/ui/BaseUikitComponent.js.map +1 -0
- package/lib/engine-components/ui/Button.legacy.d.ts +68 -0
- package/lib/engine-components/ui/Button.legacy.js +320 -0
- package/lib/engine-components/ui/Button.legacy.js.map +1 -0
- package/lib/engine-components/ui/ButtonUikit.d.ts +51 -0
- package/lib/engine-components/ui/ButtonUikit.js +187 -0
- package/lib/engine-components/ui/ButtonUikit.js.map +1 -0
- package/lib/engine-components/ui/Canvas.js +2 -2
- package/lib/engine-components/ui/Canvas.js.map +1 -1
- package/lib/engine-components/ui/Canvas.legacy.d.ts +76 -0
- package/lib/engine-components/ui/Canvas.legacy.js +409 -0
- package/lib/engine-components/ui/Canvas.legacy.js.map +1 -0
- package/lib/engine-components/ui/CanvasUikit.d.ts +68 -0
- package/lib/engine-components/ui/CanvasUikit.js +289 -0
- package/lib/engine-components/ui/CanvasUikit.js.map +1 -0
- package/lib/engine-components/ui/Graphic.d.ts +3 -3
- package/lib/engine-components/ui/Graphic.js +6 -2
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/Graphic.legacy.d.ts +55 -0
- package/lib/engine-components/ui/Graphic.legacy.js +268 -0
- package/lib/engine-components/ui/Graphic.legacy.js.map +1 -0
- package/lib/engine-components/ui/GraphicUikit.d.ts +21 -0
- package/lib/engine-components/ui/GraphicUikit.js +65 -0
- package/lib/engine-components/ui/GraphicUikit.js.map +1 -0
- package/lib/engine-components/ui/Image.js.map +1 -1
- package/lib/engine-components/ui/Image.legacy.d.ts +39 -0
- package/lib/engine-components/ui/Image.legacy.js +121 -0
- package/lib/engine-components/ui/Image.legacy.js.map +1 -0
- package/lib/engine-components/ui/ImageUikit.d.ts +22 -0
- package/lib/engine-components/ui/ImageUikit.js +97 -0
- package/lib/engine-components/ui/ImageUikit.js.map +1 -0
- package/lib/engine-components/ui/RenderMode.d.ts +14 -0
- package/lib/engine-components/ui/RenderMode.js +16 -0
- package/lib/engine-components/ui/RenderMode.js.map +1 -0
- package/lib/engine-components/ui/Text.d.ts +64 -11
- package/lib/engine-components/ui/Text.js +154 -45
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components/ui/Text.legacy.d.ts +81 -0
- package/lib/engine-components/ui/Text.legacy.js +548 -0
- package/lib/engine-components/ui/Text.legacy.js.map +1 -0
- package/lib/engine-components/ui/TextUikit.d.ts +42 -0
- package/lib/engine-components/ui/TextUikit.js +164 -0
- package/lib/engine-components/ui/TextUikit.js.map +1 -0
- package/lib/engine-components/ui/index.d.ts +1 -0
- package/lib/engine-components/ui/index.js +1 -0
- package/lib/engine-components/ui/index.js.map +1 -1
- package/lib/engine-components/webxr/WebARCameraBackground.d.ts +1 -1
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.d.ts +6 -0
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js +46 -0
- package/lib/include/three/EXT_mesh_gpu_instancing_exporter.js.map +1 -0
- package/package.json +4 -4
- package/plugins/common/buildinfo.d.ts +6 -0
- package/plugins/vite/ai.d.ts +7 -8
- package/plugins/vite/ai.js +95 -20
- package/plugins/vite/alias.js +6 -0
- package/plugins/vite/dependencies.js +7 -0
- package/src/engine/engine_animation.ts +1 -1
- package/src/engine/engine_audio.ts +1 -1
- package/src/engine/engine_context.ts +3 -6
- package/src/engine/engine_create_objects.ts +0 -1
- package/src/engine/engine_license.ts +0 -2
- package/src/engine/engine_pmrem.ts +3 -3
- package/src/engine/engine_three_utils.ts +2 -2
- package/src/engine/engine_time.ts +4 -3
- package/src/engine/extensions/NEEDLE_lightmaps.ts +3 -3
- package/src/engine/webcomponents/icons.ts +3 -2
- package/src/engine-components/AudioSource.ts +1 -1
- package/src/engine-components/Light.ts +39 -31
- package/src/engine-components/OrbitControls.ts +2 -2
- package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +2 -2
- package/src/engine-components/export/usdz/extensions/Animation.ts +6 -5
- package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +1 -1
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +3 -3
- package/src/engine-components/timeline/TimelineTracks.ts +2 -2
- package/src/engine-components/ui/Canvas.ts +2 -2
- package/src/engine-components/ui/Graphic.ts +7 -3
- package/src/engine-components/ui/Image.ts +1 -1
- package/src/engine-components/ui/Text.ts +170 -52
- package/src/engine-components/ui/index.ts +2 -1
- package/dist/generateMeshBVH.worker-DiCnZlf3.js +0 -21
- package/dist/gltf-progressive-BryRjllq.min.js +0 -10
- package/dist/gltf-progressive-DJBMx-zB.umd.cjs +0 -10
- package/dist/gltf-progressive.worker-BqODMeeW.js +0 -23
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Matrix4 } from "three";
|
|
8
|
+
import * as ThreeMeshUI from 'three-mesh-ui';
|
|
9
|
+
import { Mathf } from "../../engine/engine_math.js";
|
|
10
|
+
import { serializable } from "../../engine/engine_serialization_decorator.js";
|
|
11
|
+
import { FrameEvent } from "../../engine/engine_setup.js";
|
|
12
|
+
import { delayForFrames, getParam } from "../../engine/engine_utils.js";
|
|
13
|
+
import { Camera } from "../Camera.js";
|
|
14
|
+
import { GameObject } from "../Component.js";
|
|
15
|
+
import { BaseUIComponent, UIRootComponent } from "./BaseUIComponent.js";
|
|
16
|
+
import { EventSystem } from "./EventSystem.js";
|
|
17
|
+
import { LayoutGroup } from "./Layout.js";
|
|
18
|
+
import { RectTransform } from "./RectTransform.js";
|
|
19
|
+
import { updateRenderSettings as updateRenderSettingsRecursive } from "./Utils.js";
|
|
20
|
+
import { RenderMode } from "./RenderMode.js";
|
|
21
|
+
const debugLayout = getParam("debuguilayout");
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use CanvasUikit instead. This Canvas implementation uses three-mesh-ui which is being replaced by pmndrs/uikit.
|
|
24
|
+
*
|
|
25
|
+
* Canvas is the root component for all UI elements in a scene.
|
|
26
|
+
* It defines the area where UI elements are rendered and manages their layout and rendering settings.
|
|
27
|
+
* Canvases can be set to render in world space or screen space (overlay or camera).
|
|
28
|
+
* Multiple canvases can exist in a scene, each with its own settings and hierarchy of UI elements.
|
|
29
|
+
* @summary Root component for UI elements, managing layout and rendering settings (DEPRECATED - use CanvasUikit)
|
|
30
|
+
* @category User Interface
|
|
31
|
+
* @group Components
|
|
32
|
+
*/
|
|
33
|
+
export class Canvas extends UIRootComponent {
|
|
34
|
+
get isCanvas() {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
get screenspace() {
|
|
38
|
+
return this.renderMode !== RenderMode.WorldSpace;
|
|
39
|
+
}
|
|
40
|
+
set renderOnTop(val) {
|
|
41
|
+
if (val === this._renderOnTop) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this._renderOnTop = val;
|
|
45
|
+
this.onRenderSettingsChanged();
|
|
46
|
+
}
|
|
47
|
+
get renderOnTop() {
|
|
48
|
+
if (this._renderOnTop !== undefined)
|
|
49
|
+
return this._renderOnTop;
|
|
50
|
+
if (this.screenspace) {
|
|
51
|
+
// Render ScreenSpaceOverlay always on top
|
|
52
|
+
if (this._renderMode === RenderMode.ScreenSpaceOverlay)
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
_renderOnTop;
|
|
58
|
+
set depthWrite(val) {
|
|
59
|
+
if (this._depthWrite === val)
|
|
60
|
+
return;
|
|
61
|
+
this._depthWrite = val;
|
|
62
|
+
this.onRenderSettingsChanged();
|
|
63
|
+
}
|
|
64
|
+
get depthWrite() { return this._depthWrite; }
|
|
65
|
+
_depthWrite = false;
|
|
66
|
+
set doubleSided(val) {
|
|
67
|
+
if (this._doubleSided === val)
|
|
68
|
+
return;
|
|
69
|
+
this._doubleSided = val;
|
|
70
|
+
this.onRenderSettingsChanged();
|
|
71
|
+
}
|
|
72
|
+
get doubleSided() { return this._doubleSided; }
|
|
73
|
+
_doubleSided = true;
|
|
74
|
+
set castShadows(val) {
|
|
75
|
+
if (this._castShadows === val)
|
|
76
|
+
return;
|
|
77
|
+
this._castShadows = val;
|
|
78
|
+
this.onRenderSettingsChanged();
|
|
79
|
+
}
|
|
80
|
+
get castShadows() { return this._castShadows; }
|
|
81
|
+
_castShadows = false;
|
|
82
|
+
set receiveShadows(val) {
|
|
83
|
+
if (this._receiveShadows === val)
|
|
84
|
+
return;
|
|
85
|
+
this._receiveShadows = val;
|
|
86
|
+
this.onRenderSettingsChanged();
|
|
87
|
+
}
|
|
88
|
+
get receiveShadows() { return this._receiveShadows; }
|
|
89
|
+
_receiveShadows = false;
|
|
90
|
+
get renderMode() {
|
|
91
|
+
return this._renderMode;
|
|
92
|
+
}
|
|
93
|
+
set renderMode(val) {
|
|
94
|
+
if (this._renderMode === val)
|
|
95
|
+
return;
|
|
96
|
+
this._renderMode = val;
|
|
97
|
+
this.onRenderSettingsChanged();
|
|
98
|
+
}
|
|
99
|
+
_renderMode = RenderMode.Undefined;
|
|
100
|
+
_rootCanvas;
|
|
101
|
+
set rootCanvas(val) {
|
|
102
|
+
if (this._rootCanvas instanceof Canvas)
|
|
103
|
+
return;
|
|
104
|
+
this._rootCanvas = val;
|
|
105
|
+
}
|
|
106
|
+
get rootCanvas() {
|
|
107
|
+
return this._rootCanvas;
|
|
108
|
+
}
|
|
109
|
+
_scaleFactor = 1;
|
|
110
|
+
get scaleFactor() {
|
|
111
|
+
return this._scaleFactor;
|
|
112
|
+
}
|
|
113
|
+
set scaleFactor(val) {
|
|
114
|
+
this._scaleFactor = val;
|
|
115
|
+
}
|
|
116
|
+
worldCamera;
|
|
117
|
+
planeDistance = -1;
|
|
118
|
+
awake() {
|
|
119
|
+
//@ts-ignore
|
|
120
|
+
this.shadowComponent = this.gameObject;
|
|
121
|
+
this.previousParent = this.gameObject.parent;
|
|
122
|
+
if (debugLayout)
|
|
123
|
+
console.log("Canvas.Awake()", this.previousParent?.name + "/" + this.gameObject.name);
|
|
124
|
+
super.awake();
|
|
125
|
+
}
|
|
126
|
+
start() {
|
|
127
|
+
this.applyRenderSettings();
|
|
128
|
+
}
|
|
129
|
+
onEnable() {
|
|
130
|
+
super.onEnable();
|
|
131
|
+
this._updateRenderSettingsRoutine = undefined;
|
|
132
|
+
this._lastMatrixWorld = new Matrix4();
|
|
133
|
+
this.applyRenderSettings();
|
|
134
|
+
document.addEventListener("resize", this._boundRenderSettingsChanged);
|
|
135
|
+
// We want to run AFTER all regular onBeforeRender callbacks
|
|
136
|
+
this.context.pre_render_callbacks.push(this.onBeforeRenderRoutine);
|
|
137
|
+
this.context.post_render_callbacks.push(this.onAfterRenderRoutine);
|
|
138
|
+
}
|
|
139
|
+
onDisable() {
|
|
140
|
+
super.onDisable();
|
|
141
|
+
document.removeEventListener("resize", this._boundRenderSettingsChanged);
|
|
142
|
+
// Remove callbacks
|
|
143
|
+
const preRenderIndex = this.context.pre_render_callbacks.indexOf(this.onBeforeRenderRoutine);
|
|
144
|
+
if (preRenderIndex !== -1) {
|
|
145
|
+
this.context.pre_render_callbacks.splice(preRenderIndex, 1);
|
|
146
|
+
}
|
|
147
|
+
const postRenderIndex = this.context.post_render_callbacks.indexOf(this.onAfterRenderRoutine);
|
|
148
|
+
if (postRenderIndex !== -1) {
|
|
149
|
+
this.context.post_render_callbacks.splice(postRenderIndex, 1);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
_boundRenderSettingsChanged = this.onRenderSettingsChanged.bind(this);
|
|
153
|
+
previousParent = null;
|
|
154
|
+
_lastMatrixWorld = null;
|
|
155
|
+
_rectTransforms = [];
|
|
156
|
+
registerTransform(rt) {
|
|
157
|
+
this._rectTransforms.push(rt);
|
|
158
|
+
}
|
|
159
|
+
unregisterTransform(rt) {
|
|
160
|
+
const index = this._rectTransforms.indexOf(rt);
|
|
161
|
+
if (index !== -1) {
|
|
162
|
+
this._rectTransforms.splice(index, 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
_layoutGroups = new Map();
|
|
166
|
+
registerLayoutGroup(group) {
|
|
167
|
+
const obj = group.gameObject;
|
|
168
|
+
this._layoutGroups.set(obj, group);
|
|
169
|
+
}
|
|
170
|
+
unregisterLayoutGroup(group) {
|
|
171
|
+
const obj = group.gameObject;
|
|
172
|
+
this._layoutGroups.delete(obj);
|
|
173
|
+
}
|
|
174
|
+
_receivers = [];
|
|
175
|
+
registerEventReceiver(receiver) {
|
|
176
|
+
this._receivers.push(receiver);
|
|
177
|
+
}
|
|
178
|
+
unregisterEventReceiver(receiver) {
|
|
179
|
+
const index = this._receivers.indexOf(receiver);
|
|
180
|
+
if (index !== -1) {
|
|
181
|
+
this._receivers.splice(index, 1);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async onEnterXR(args) {
|
|
185
|
+
// workaround for https://linear.app/needle/issue/NE-4114
|
|
186
|
+
if (this.screenspace) {
|
|
187
|
+
if (args.xr.isVR || args.xr.isPassThrough) {
|
|
188
|
+
this.gameObject.visible = false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.gameObject.visible = false;
|
|
193
|
+
await delayForFrames(1).then(() => {
|
|
194
|
+
this.gameObject.visible = true;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
onLeaveXR(args) {
|
|
199
|
+
if (this.screenspace) {
|
|
200
|
+
if (args.xr.isVR || args.xr.isPassThrough) {
|
|
201
|
+
this.gameObject.visible = true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
onBeforeRenderRoutine = () => {
|
|
206
|
+
this.previousParent = this.gameObject.parent;
|
|
207
|
+
if ((this.context.xr?.isVR || this.context.xr?.isPassThrough) && this.screenspace) {
|
|
208
|
+
// see https://linear.app/needle/issue/NE-4114
|
|
209
|
+
this.gameObject.visible = false;
|
|
210
|
+
this.gameObject.removeFromParent();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// console.log(this.previousParent?.name + "/" + this.gameObject.name);
|
|
214
|
+
if (this.renderOnTop || this.screenspace) {
|
|
215
|
+
// TODO: Ideally all screenspace canvases should be combined in one render pass
|
|
216
|
+
this.gameObject.removeFromParent();
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.onUpdateRenderMode();
|
|
220
|
+
this.handleLayoutUpdates();
|
|
221
|
+
// TODO: we might need to optimize this. This is here to make sure the TMUI text clipping matrices are correct. Ideally the text does use onBeforeRender and apply the clipping matrix there so we dont have to force update all the matrices here
|
|
222
|
+
this.shadowComponent?.updateMatrixWorld(true);
|
|
223
|
+
this.shadowComponent?.updateWorldMatrix(true, true);
|
|
224
|
+
this.invokeBeforeRenderEvents();
|
|
225
|
+
EventSystem.ensureUpdateMeshUI(ThreeMeshUI, this.context);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
onAfterRenderRoutine = () => {
|
|
229
|
+
if ((this.context.xr?.isVR || this.context.xr?.isPassThrough) && this.screenspace) {
|
|
230
|
+
this.previousParent?.add(this.gameObject);
|
|
231
|
+
// this is currently causing an error during XR (https://linear.app/needle/issue/NE-4114)
|
|
232
|
+
// this.gameObject.visible = true;
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if ((this.screenspace || this.renderOnTop) && this.previousParent && this.context.mainCamera) {
|
|
236
|
+
if (this.screenspace) {
|
|
237
|
+
const camObj = this.context.mainCamera;
|
|
238
|
+
camObj?.add(this.gameObject);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.previousParent.add(this.gameObject);
|
|
242
|
+
}
|
|
243
|
+
const prevAutoClearDepth = this.context.renderer.autoClear;
|
|
244
|
+
const prevAutoClearColor = this.context.renderer.autoClearColor;
|
|
245
|
+
this.context.renderer.autoClear = false;
|
|
246
|
+
this.context.renderer.autoClearColor = false;
|
|
247
|
+
this.context.renderer.clearDepth();
|
|
248
|
+
this.onUpdateRenderMode(true);
|
|
249
|
+
this.handleLayoutUpdates();
|
|
250
|
+
this.shadowComponent?.updateMatrixWorld(true);
|
|
251
|
+
// this.handleLayoutUpdates();
|
|
252
|
+
this.invokeBeforeRenderEvents();
|
|
253
|
+
EventSystem.ensureUpdateMeshUI(ThreeMeshUI, this.context, true);
|
|
254
|
+
this.context.renderer.render(this.gameObject, this.context.mainCamera);
|
|
255
|
+
this.context.renderer.autoClear = prevAutoClearDepth;
|
|
256
|
+
this.context.renderer.autoClearColor = prevAutoClearColor;
|
|
257
|
+
this.previousParent.add(this.gameObject);
|
|
258
|
+
}
|
|
259
|
+
this._lastMatrixWorld?.copy(this.gameObject.matrixWorld);
|
|
260
|
+
};
|
|
261
|
+
invokeBeforeRenderEvents() {
|
|
262
|
+
for (const receiver of this._receivers) {
|
|
263
|
+
receiver.onBeforeCanvasRender?.(this);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
handleLayoutUpdates() {
|
|
267
|
+
if (this._lastMatrixWorld === null) {
|
|
268
|
+
this._lastMatrixWorld = new Matrix4();
|
|
269
|
+
}
|
|
270
|
+
const matrixWorldChanged = !this._lastMatrixWorld.equals(this.gameObject.matrixWorld);
|
|
271
|
+
if (debugLayout && matrixWorldChanged)
|
|
272
|
+
console.log("Canvas Layout changed", this.context.time.frameCount, this.name);
|
|
273
|
+
// TODO: optimize this, we should only need to update a subhierarchy of the parts where layout has changed
|
|
274
|
+
const didLog = false;
|
|
275
|
+
for (const ch of this._rectTransforms) {
|
|
276
|
+
if (matrixWorldChanged)
|
|
277
|
+
ch.markDirty();
|
|
278
|
+
let layout = this._layoutGroups.get(ch.gameObject);
|
|
279
|
+
if (ch.isDirty && !layout) {
|
|
280
|
+
layout = ch.gameObject.getComponentInParent(LayoutGroup);
|
|
281
|
+
}
|
|
282
|
+
if (ch.isDirty || layout?.isDirty) {
|
|
283
|
+
if (debugLayout && !didLog) {
|
|
284
|
+
console.log("CANVAS UPDATE ### " + ch.name + " ##################################### " + this.context.time.frame);
|
|
285
|
+
// didLog = true;
|
|
286
|
+
}
|
|
287
|
+
layout?.updateLayout();
|
|
288
|
+
ch.updateTransform();
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
applyRenderSettings() {
|
|
293
|
+
this.onRenderSettingsChanged();
|
|
294
|
+
}
|
|
295
|
+
_updateRenderSettingsRoutine;
|
|
296
|
+
onRenderSettingsChanged() {
|
|
297
|
+
if (this._updateRenderSettingsRoutine)
|
|
298
|
+
return;
|
|
299
|
+
this._updateRenderSettingsRoutine = this.startCoroutine(this._updateRenderSettingsDelayed(), FrameEvent.OnBeforeRender);
|
|
300
|
+
}
|
|
301
|
+
*_updateRenderSettingsDelayed() {
|
|
302
|
+
yield;
|
|
303
|
+
this._updateRenderSettingsRoutine = undefined;
|
|
304
|
+
if (this.shadowComponent) {
|
|
305
|
+
this.onUpdateRenderMode();
|
|
306
|
+
// this.onWillUpdateRenderSettings();
|
|
307
|
+
updateRenderSettingsRecursive(this.shadowComponent, this);
|
|
308
|
+
for (const ch of GameObject.getComponentsInChildren(this.gameObject, BaseUIComponent)) {
|
|
309
|
+
updateRenderSettingsRecursive(ch.shadowComponent, this);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
_activeRenderMode = -1;
|
|
314
|
+
_lastWidth = -1;
|
|
315
|
+
_lastHeight = -1;
|
|
316
|
+
onUpdateRenderMode(force = false) {
|
|
317
|
+
if (!force) {
|
|
318
|
+
if (this._renderMode === this._activeRenderMode && this._lastWidth === this.context.domWidth && this._lastHeight === this.context.domHeight) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
this._activeRenderMode = this._renderMode;
|
|
323
|
+
let camera = this.context.mainCameraComponent;
|
|
324
|
+
let planeDistance = 10;
|
|
325
|
+
if (camera && camera.nearClipPlane > 0 && camera.farClipPlane > 0) {
|
|
326
|
+
// TODO: this is a hack/workaround for event system currently only passing events to the nearest object so we move the canvas close to the nearplane
|
|
327
|
+
planeDistance = Mathf.lerp(camera.nearClipPlane, camera.farClipPlane, .01);
|
|
328
|
+
}
|
|
329
|
+
if (this._renderMode === RenderMode.ScreenSpaceCamera) {
|
|
330
|
+
if (this.worldCamera)
|
|
331
|
+
camera = this.worldCamera;
|
|
332
|
+
if (this.planeDistance > 0)
|
|
333
|
+
planeDistance = this.planeDistance;
|
|
334
|
+
}
|
|
335
|
+
switch (this._renderMode) {
|
|
336
|
+
case RenderMode.ScreenSpaceOverlay:
|
|
337
|
+
case RenderMode.ScreenSpaceCamera:
|
|
338
|
+
this._lastWidth = this.context.domWidth;
|
|
339
|
+
this._lastHeight = this.context.domHeight;
|
|
340
|
+
// showBalloonWarning("Screenspace Canvas is not supported yet. Please use worldspace");
|
|
341
|
+
if (!camera)
|
|
342
|
+
return;
|
|
343
|
+
// we move the plane SLIGHTLY closer to be sure not to cull the canvas
|
|
344
|
+
const plane = planeDistance + .01;
|
|
345
|
+
this.gameObject.position.x = 0;
|
|
346
|
+
this.gameObject.position.y = 0;
|
|
347
|
+
this.gameObject.position.z = -plane;
|
|
348
|
+
this.gameObject.quaternion.identity();
|
|
349
|
+
const rect = this.gameObject.getComponent(RectTransform);
|
|
350
|
+
let hasChanged = false;
|
|
351
|
+
if (rect.sizeDelta.x !== this.context.domWidth) {
|
|
352
|
+
hasChanged = true;
|
|
353
|
+
}
|
|
354
|
+
if (rect.sizeDelta.y !== this.context.domHeight) {
|
|
355
|
+
hasChanged = true;
|
|
356
|
+
}
|
|
357
|
+
const vFOV = camera.fieldOfView * Math.PI / 180;
|
|
358
|
+
const h = 2 * Math.tan(vFOV / 2) * Math.abs(plane);
|
|
359
|
+
this.gameObject.scale.x = h / this.context.domHeight;
|
|
360
|
+
this.gameObject.scale.y = h / this.context.domHeight;
|
|
361
|
+
// Set scale.z, otherwise small offsets in screenspace mode have different visual results based on export scale and other settings
|
|
362
|
+
this.gameObject.scale.z = .01;
|
|
363
|
+
if (hasChanged) {
|
|
364
|
+
rect.sizeDelta.x = this.context.domWidth;
|
|
365
|
+
rect.sizeDelta.y = this.context.domHeight;
|
|
366
|
+
rect?.markDirty();
|
|
367
|
+
}
|
|
368
|
+
// this.context.scene.add(this.gameObject)
|
|
369
|
+
// this.gameObject.scale.multiplyScalar(.01);
|
|
370
|
+
// this.gameObject.position.set(0,0,0);
|
|
371
|
+
break;
|
|
372
|
+
case RenderMode.WorldSpace:
|
|
373
|
+
this._lastWidth = -1;
|
|
374
|
+
this._lastHeight = -1;
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
__decorate([
|
|
380
|
+
serializable()
|
|
381
|
+
], Canvas.prototype, "renderOnTop", null);
|
|
382
|
+
__decorate([
|
|
383
|
+
serializable()
|
|
384
|
+
], Canvas.prototype, "depthWrite", null);
|
|
385
|
+
__decorate([
|
|
386
|
+
serializable()
|
|
387
|
+
], Canvas.prototype, "doubleSided", null);
|
|
388
|
+
__decorate([
|
|
389
|
+
serializable()
|
|
390
|
+
], Canvas.prototype, "castShadows", null);
|
|
391
|
+
__decorate([
|
|
392
|
+
serializable()
|
|
393
|
+
], Canvas.prototype, "receiveShadows", null);
|
|
394
|
+
__decorate([
|
|
395
|
+
serializable()
|
|
396
|
+
], Canvas.prototype, "renderMode", null);
|
|
397
|
+
__decorate([
|
|
398
|
+
serializable(Canvas)
|
|
399
|
+
], Canvas.prototype, "rootCanvas", null);
|
|
400
|
+
__decorate([
|
|
401
|
+
serializable()
|
|
402
|
+
], Canvas.prototype, "scaleFactor", null);
|
|
403
|
+
__decorate([
|
|
404
|
+
serializable(Camera)
|
|
405
|
+
], Canvas.prototype, "worldCamera", void 0);
|
|
406
|
+
__decorate([
|
|
407
|
+
serializable()
|
|
408
|
+
], Canvas.prototype, "planeDistance", void 0);
|
|
409
|
+
//# sourceMappingURL=Canvas.legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Canvas.legacy.js","sourceRoot":"","sources":["../../../src/engine-components/ui/Canvas.legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Container, Fullscreen } from "@pmndrs/uikit";
|
|
2
|
+
import { type NeedleXREventArgs } from "../../engine/xr/api.js";
|
|
3
|
+
import { Camera } from "../Camera.js";
|
|
4
|
+
import { Behaviour } from "../Component.js";
|
|
5
|
+
import type { ICanvas, ICanvasEventReceiver } from "./Interfaces.js";
|
|
6
|
+
import { RenderMode } from "./Canvas.js";
|
|
7
|
+
/**
|
|
8
|
+
* Modern Canvas implementation using pmndrs/uikit.
|
|
9
|
+
* This is the new default Canvas component that replaces the three-mesh-ui based implementation.
|
|
10
|
+
*
|
|
11
|
+
* @summary Root component for UI elements using pmndrs/uikit
|
|
12
|
+
* @category User Interface
|
|
13
|
+
* @group Components
|
|
14
|
+
*/
|
|
15
|
+
export declare class CanvasUikit extends Behaviour implements ICanvas {
|
|
16
|
+
private _uikitRoot;
|
|
17
|
+
private _previousParent;
|
|
18
|
+
private _lastMatrixWorld;
|
|
19
|
+
get isCanvas(): boolean;
|
|
20
|
+
get screenspace(): boolean;
|
|
21
|
+
set renderOnTop(val: boolean);
|
|
22
|
+
get renderOnTop(): boolean;
|
|
23
|
+
private _renderOnTop;
|
|
24
|
+
set depthWrite(val: boolean);
|
|
25
|
+
get depthWrite(): boolean;
|
|
26
|
+
private _depthWrite;
|
|
27
|
+
set doubleSided(val: boolean);
|
|
28
|
+
get doubleSided(): boolean;
|
|
29
|
+
private _doubleSided;
|
|
30
|
+
set castShadows(val: boolean);
|
|
31
|
+
get castShadows(): boolean;
|
|
32
|
+
private _castShadows;
|
|
33
|
+
set receiveShadows(val: boolean);
|
|
34
|
+
get receiveShadows(): boolean;
|
|
35
|
+
private _receiveShadows;
|
|
36
|
+
get renderMode(): RenderMode;
|
|
37
|
+
set renderMode(val: RenderMode);
|
|
38
|
+
private _renderMode;
|
|
39
|
+
get scaleFactor(): number;
|
|
40
|
+
set scaleFactor(val: number);
|
|
41
|
+
private _scaleFactor;
|
|
42
|
+
worldCamera?: Camera;
|
|
43
|
+
planeDistance: number;
|
|
44
|
+
pixelSize: number;
|
|
45
|
+
private _receivers;
|
|
46
|
+
private _updateUnsubscribe?;
|
|
47
|
+
registerEventReceiver(receiver: ICanvasEventReceiver): void;
|
|
48
|
+
unregisterEventReceiver(receiver: ICanvasEventReceiver): void;
|
|
49
|
+
awake(): void;
|
|
50
|
+
start(): void;
|
|
51
|
+
onEnable(): void;
|
|
52
|
+
onDisable(): void;
|
|
53
|
+
onEnterXR(args: NeedleXREventArgs): Promise<void>;
|
|
54
|
+
onLeaveXR(args: NeedleXREventArgs): void;
|
|
55
|
+
private _boundOnRenderSettingsChanged;
|
|
56
|
+
private createUikitRoot;
|
|
57
|
+
private updateUikit;
|
|
58
|
+
private onRenderSettingsChanged;
|
|
59
|
+
/**
|
|
60
|
+
* Get the uikit root container.
|
|
61
|
+
* Use this to add uikit UI elements to the canvas.
|
|
62
|
+
*/
|
|
63
|
+
get uikitRoot(): Container | Fullscreen | null;
|
|
64
|
+
registerTransform(_rt: any): void;
|
|
65
|
+
unregisterTransform(_rt: any): void;
|
|
66
|
+
registerLayoutGroup(_group: any): void;
|
|
67
|
+
unregisterLayoutGroup(_group: any): void;
|
|
68
|
+
}
|