@needle-tools/engine 2.65.2-pre → 2.67.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.
- package/CHANGELOG.md +43 -0
- package/dist/needle-engine.js +34490 -26304
- package/dist/needle-engine.umd.cjs +748 -303
- package/lib/engine/api.d.ts +4 -0
- package/lib/engine/api.js +10 -0
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/codegen/register_types.js +23 -7
- package/lib/engine/codegen/register_types.js.map +1 -1
- package/lib/engine/debug/debug_overlay.js +11 -2
- package/lib/engine/debug/debug_overlay.js.map +1 -1
- package/lib/engine/engine_addressables.js +4 -4
- package/lib/engine/engine_addressables.js.map +1 -1
- package/lib/engine/engine_assetdatabase.d.ts +17 -51
- package/lib/engine/engine_assetdatabase.js +252 -126
- package/lib/engine/engine_assetdatabase.js.map +1 -1
- package/lib/engine/engine_components.js +13 -1
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_components_internal.d.ts +8 -0
- package/lib/engine/engine_components_internal.js +29 -0
- package/lib/engine/engine_components_internal.js.map +1 -0
- package/lib/engine/engine_constants.d.ts +1 -0
- package/lib/engine/engine_constants.js +1 -0
- package/lib/engine/engine_constants.js.map +1 -1
- package/lib/engine/engine_context_registry.d.ts +2 -0
- package/lib/engine/engine_context_registry.js +6 -0
- package/lib/engine/engine_context_registry.js.map +1 -1
- package/lib/engine/engine_editor-sync.d.ts +9 -0
- package/lib/engine/engine_editor-sync.js +8 -0
- package/lib/engine/engine_editor-sync.js.map +1 -0
- package/lib/engine/engine_element.d.ts +1 -0
- package/lib/engine/engine_element.js +4 -1
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_element_loading.d.ts +3 -2
- package/lib/engine/engine_element_loading.js +19 -15
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_gameobject.js +21 -23
- package/lib/engine/engine_gameobject.js.map +1 -1
- package/lib/engine/engine_gizmos.js +3 -1
- package/lib/engine/engine_gizmos.js.map +1 -1
- package/lib/engine/engine_gltf_builtin_components.d.ts +2 -3
- package/lib/engine/engine_gltf_builtin_components.js +23 -6
- package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
- package/lib/engine/engine_networking.d.ts +3 -1
- package/lib/engine/engine_networking.js +10 -8
- package/lib/engine/engine_networking.js.map +1 -1
- package/lib/engine/engine_networking_auto.d.ts +1 -0
- package/lib/engine/engine_networking_auto.js +42 -9
- package/lib/engine/engine_networking_auto.js.map +1 -1
- package/lib/engine/engine_patcher.d.ts +8 -0
- package/lib/engine/engine_patcher.js +98 -0
- package/lib/engine/engine_patcher.js.map +1 -0
- package/lib/engine/engine_physics.d.ts +34 -2
- package/lib/engine/engine_physics.js +110 -11
- package/lib/engine/engine_physics.js.map +1 -1
- package/lib/engine/engine_scenetools.js +0 -1
- package/lib/engine/engine_scenetools.js.map +1 -1
- package/lib/engine/engine_serialization_core.js +4 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_setup.d.ts +1 -1
- package/lib/engine/engine_setup.js +12 -5
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_texture.d.ts +6 -1
- package/lib/engine/engine_texture.js +39 -1
- package/lib/engine/engine_texture.js.map +1 -1
- package/lib/engine/engine_types.d.ts +4 -0
- package/lib/engine/engine_types.js.map +1 -1
- package/lib/engine/engine_utils.js +3 -2
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +0 -1
- package/lib/engine/extensions/NEEDLE_progressive.js +24 -26
- package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_render_objects.js +9 -0
- package/lib/engine/extensions/NEEDLE_render_objects.js.map +1 -1
- package/lib/engine/extensions/extensions.d.ts +4 -1
- package/lib/engine/extensions/extensions.js +16 -0
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine/extensions/usage_tracker.d.ts +12 -0
- package/lib/engine/extensions/usage_tracker.js +59 -0
- package/lib/engine/extensions/usage_tracker.js.map +1 -0
- package/lib/engine-components/Animator.js +0 -1
- package/lib/engine-components/Animator.js.map +1 -1
- package/lib/engine-components/AnimatorController.js +4 -0
- package/lib/engine-components/AnimatorController.js.map +1 -1
- package/lib/engine-components/AudioSource.js +2 -1
- package/lib/engine-components/AudioSource.js.map +1 -1
- package/lib/engine-components/Camera.d.ts +6 -0
- package/lib/engine-components/Camera.js +70 -31
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/CharacterController.d.ts +1 -0
- package/lib/engine-components/CharacterController.js +14 -9
- package/lib/engine-components/CharacterController.js.map +1 -1
- package/lib/engine-components/Collider.js +14 -1
- package/lib/engine-components/Collider.js.map +1 -1
- package/lib/engine-components/Component.d.ts +52 -0
- package/lib/engine-components/Component.js +55 -14
- package/lib/engine-components/Component.js.map +1 -1
- package/lib/engine-components/Networking.js +19 -0
- package/lib/engine-components/Networking.js.map +1 -1
- package/lib/engine-components/OrbitControls.d.ts +2 -0
- package/lib/engine-components/OrbitControls.js +9 -0
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/ParticleSystem.d.ts +5 -1
- package/lib/engine-components/ParticleSystem.js +52 -7
- package/lib/engine-components/ParticleSystem.js.map +1 -1
- package/lib/engine-components/ParticleSystemModules.d.ts +2 -0
- package/lib/engine-components/ParticleSystemModules.js +26 -0
- package/lib/engine-components/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/ParticleSystemSubEmitter.js +5 -2
- package/lib/engine-components/ParticleSystemSubEmitter.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.js +18 -6
- package/lib/engine-components/ReflectionProbe.js.map +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -1
- package/lib/engine-components/Renderer.js +33 -11
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/ScreenCapture.js +3 -3
- package/lib/engine-components/ScreenCapture.js.map +1 -1
- package/lib/engine-components/Skybox.js +2 -0
- package/lib/engine-components/Skybox.js.map +1 -1
- package/lib/engine-components/SmoothFollow.js +1 -2
- package/lib/engine-components/SmoothFollow.js.map +1 -1
- package/lib/engine-components/SpectatorCamera.js +3 -3
- package/lib/engine-components/SpectatorCamera.js.map +1 -1
- package/lib/engine-components/SyncedCamera.js +1 -1
- package/lib/engine-components/SyncedCamera.js.map +1 -1
- package/lib/engine-components/SyncedTransform.js +2 -2
- package/lib/engine-components/SyncedTransform.js.map +1 -1
- package/lib/engine-components/TestRunner.js +1 -1
- package/lib/engine-components/TestRunner.js.map +1 -1
- package/lib/engine-components/WebARCameraBackground.d.ts +19 -0
- package/lib/engine-components/WebARCameraBackground.js +185 -0
- package/lib/engine-components/WebARCameraBackground.js.map +1 -0
- package/lib/engine-components/WebARSessionRoot.js +3 -2
- package/lib/engine-components/WebARSessionRoot.js.map +1 -1
- package/lib/engine-components/WebXR.d.ts +4 -0
- package/lib/engine-components/WebXR.js +11 -8
- package/lib/engine-components/WebXR.js.map +1 -1
- package/lib/engine-components/WebXRAvatar.js +1 -0
- package/lib/engine-components/WebXRAvatar.js.map +1 -1
- package/lib/engine-components/WebXRGrabRendering.js +2 -2
- package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
- package/lib/engine-components/WebXRSync.js +2 -2
- package/lib/engine-components/WebXRSync.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +14 -6
- package/lib/engine-components/codegen/components.js +14 -6
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/js-extensions/Object3D.js +4 -1
- package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
- package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -0
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js +46 -0
- package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.js +76 -0
- package/lib/engine-components/postprocessing/Effects/Bloom.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -0
- package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +96 -0
- package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js +87 -0
- package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js +30 -0
- package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +11 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +70 -0
- package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js +52 -0
- package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js +57 -0
- package/lib/engine-components/postprocessing/Effects/Vignette.js.map +1 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +29 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.js +89 -0
- package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +13 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js +119 -0
- package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -0
- package/lib/engine-components/postprocessing/Volume.d.ts +23 -0
- package/lib/engine-components/postprocessing/Volume.js +176 -0
- package/lib/engine-components/postprocessing/Volume.js.map +1 -0
- package/lib/engine-components/postprocessing/VolumeParameter.d.ts +21 -0
- package/lib/engine-components/postprocessing/VolumeParameter.js +75 -0
- package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -0
- package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -0
- package/lib/engine-components/postprocessing/VolumeProfile.js +42 -0
- package/lib/engine-components/postprocessing/VolumeProfile.js.map +1 -0
- package/lib/engine-components/timeline/TimelineTracks.js +14 -15
- package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
- package/lib/engine-components/ui/Text.js +28 -170
- package/lib/engine-components/ui/Text.js.map +1 -1
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +18 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js +62 -8
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
- package/lib/include/three/ARButton.d.ts +1 -1
- package/lib/include/three/ARButton.js +11 -19
- package/lib/include/three/ARButton.js.map +1 -1
- package/lib/include/three/VRButton.js +1 -4
- package/lib/include/three/VRButton.js.map +1 -1
- package/package.json +3 -2
- package/plugins/vite/drop-client.js +77 -0
- package/plugins/vite/drop.js +81 -0
- package/plugins/vite/editor-connection.js +121 -0
- package/plugins/vite/index.js +9 -4
- package/plugins/vite/meta.js +3 -0
- package/plugins/vite/poster-client.js +6 -4
- package/src/engine/api.ts +30 -1
- package/src/engine/codegen/register_types.js +25 -9
- package/src/engine/debug/debug_overlay.ts +11 -2
- package/src/engine/engine_addressables.ts +4 -4
- package/src/engine/engine_assetdatabase.ts +291 -184
- package/src/engine/engine_components.ts +20 -1
- package/src/engine/engine_components_internal.ts +30 -0
- package/src/engine/engine_constants.ts +4 -1
- package/src/engine/engine_context_registry.ts +7 -0
- package/src/engine/engine_editor-sync.ts +21 -0
- package/src/engine/engine_element.ts +8 -1
- package/src/engine/engine_element_loading.ts +19 -15
- package/src/engine/engine_gameobject.ts +579 -583
- package/src/engine/engine_gizmos.ts +3 -2
- package/src/engine/engine_gltf_builtin_components.ts +30 -15
- package/src/engine/engine_networking.ts +10 -8
- package/src/engine/engine_networking_auto.ts +48 -11
- package/src/engine/engine_patcher.ts +113 -0
- package/src/engine/engine_physics.ts +128 -12
- package/src/engine/engine_scenetools.ts +0 -1
- package/src/engine/engine_serialization_core.ts +6 -0
- package/src/engine/engine_setup.ts +15 -5
- package/src/engine/engine_texture.ts +54 -5
- package/src/engine/engine_types.ts +6 -1
- package/src/engine/engine_utils.ts +6 -5
- package/src/engine/extensions/NEEDLE_progressive.ts +32 -32
- package/src/engine/extensions/NEEDLE_render_objects.ts +10 -1
- package/src/engine/extensions/extensions.ts +22 -1
- package/src/engine/extensions/usage_tracker.ts +91 -0
- package/src/engine-components/Animator.ts +0 -1
- package/src/engine-components/AnimatorController.ts +2 -0
- package/src/engine-components/AudioSource.ts +1 -1
- package/src/engine-components/Camera.ts +77 -37
- package/src/engine-components/CharacterController.ts +12 -9
- package/src/engine-components/Collider.ts +16 -2
- package/src/engine-components/Component.ts +74 -30
- package/src/engine-components/Networking.ts +9 -1
- package/src/engine-components/OrbitControls.ts +11 -2
- package/src/engine-components/ParticleSystem.ts +54 -10
- package/src/engine-components/ParticleSystemModules.ts +28 -1
- package/src/engine-components/ParticleSystemSubEmitter.ts +5 -3
- package/src/engine-components/ReflectionProbe.ts +17 -7
- package/src/engine-components/Renderer.ts +36 -16
- package/src/engine-components/ScreenCapture.ts +3 -3
- package/src/engine-components/Skybox.ts +2 -0
- package/src/engine-components/SmoothFollow.ts +4 -4
- package/src/engine-components/SpectatorCamera.ts +3 -3
- package/src/engine-components/SyncedCamera.ts +1 -1
- package/src/engine-components/SyncedTransform.ts +2 -2
- package/src/engine-components/TestRunner.ts +1 -1
- package/src/engine-components/WebARCameraBackground.ts +215 -0
- package/src/engine-components/WebARSessionRoot.ts +3 -2
- package/src/engine-components/WebXR.ts +12 -8
- package/src/engine-components/WebXRAvatar.ts +1 -1
- package/src/engine-components/WebXRGrabRendering.ts +2 -2
- package/src/engine-components/WebXRSync.ts +2 -2
- package/src/engine-components/codegen/components.ts +14 -6
- package/src/engine-components/js-extensions/Object3D.ts +6 -1
- package/src/engine-components/postprocessing/Effects/Antialiasing.ts +52 -0
- package/src/engine-components/postprocessing/Effects/Bloom.ts +75 -0
- package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +36 -0
- package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +114 -0
- package/src/engine-components/postprocessing/Effects/DepthOfField.ts +90 -0
- package/src/engine-components/postprocessing/Effects/Pixelation.ts +28 -0
- package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +71 -0
- package/src/engine-components/postprocessing/Effects/Tonemapping.ts +55 -0
- package/src/engine-components/postprocessing/Effects/Vignette.ts +55 -0
- package/src/engine-components/postprocessing/PostProcessingEffect.ts +112 -0
- package/src/engine-components/postprocessing/PostProcessingHandler.ts +148 -0
- package/src/engine-components/postprocessing/Volume.ts +194 -0
- package/src/engine-components/postprocessing/VolumeParameter.ts +85 -0
- package/src/engine-components/postprocessing/VolumeProfile.ts +40 -0
- package/src/engine-components/timeline/TimelineTracks.ts +16 -17
- package/src/engine-components/ui/Text.ts +37 -174
- package/src/engine-components-experimental/networking/PlayerSync.ts +69 -8
- package/src/include/three/ARButton.js +13 -24
- package/src/include/three/VRButton.js +1 -7
- package/lib/engine-components/Volume.d.ts +0 -34
- package/lib/engine-components/Volume.js +0 -140
- package/lib/engine-components/Volume.js.map +0 -1
- package/src/engine-components/Volume.ts +0 -141
|
@@ -167,6 +167,8 @@ export class Text extends Graphic {
|
|
|
167
167
|
// if (this.canvas) {
|
|
168
168
|
// fontSize /= this.canvas?.scaleFactor;
|
|
169
169
|
// }
|
|
170
|
+
|
|
171
|
+
// @TODO : THH check for changes. fontColor => color?
|
|
170
172
|
const textOpts = {
|
|
171
173
|
content: this.text,
|
|
172
174
|
fontColor: this.color,
|
|
@@ -203,8 +205,13 @@ export class Text extends Graphic {
|
|
|
203
205
|
private createBlock(rt: RectTransform, hideOverflow: boolean, content: THREE.Object3D | Array<THREE.Object3D> | null, isTextIntermediate: boolean = false): ThreeMeshUI.Block | null {
|
|
204
206
|
//@ts-ignore
|
|
205
207
|
const opts: ThreeMeshUI.BlockOptions = {};
|
|
208
|
+
|
|
209
|
+
// @TODO : THH would require update for 7.x
|
|
206
210
|
opts.hiddenOverflow = hideOverflow;
|
|
211
|
+
|
|
212
|
+
// @TODO : THH would require update for 7.x
|
|
207
213
|
opts.interLine = (this.lineSpacing - 1) * this.fontSize * 1.333;
|
|
214
|
+
|
|
208
215
|
this.getAlignment(opts, isTextIntermediate);
|
|
209
216
|
const block = rt.createNewBlock(opts);
|
|
210
217
|
if (content) {
|
|
@@ -219,9 +226,31 @@ export class Text extends Graphic {
|
|
|
219
226
|
|
|
220
227
|
|
|
221
228
|
private getAlignment(opts: ThreeMeshUI.BlockOptions | any, isTextIntermediate: boolean = false): ThreeMeshUI.BlockOptions {
|
|
222
|
-
if (!isTextIntermediate)
|
|
229
|
+
if (!isTextIntermediate) {
|
|
223
230
|
opts.contentDirection = "row";
|
|
231
|
+
|
|
232
|
+
switch (this.alignment) {
|
|
233
|
+
case TextAnchor.UpperLeft:
|
|
234
|
+
case TextAnchor.MiddleLeft:
|
|
235
|
+
case TextAnchor.LowerLeft:
|
|
236
|
+
opts.textAlign = "left";
|
|
237
|
+
break;
|
|
238
|
+
case TextAnchor.UpperCenter:
|
|
239
|
+
case TextAnchor.MiddleCenter:
|
|
240
|
+
case TextAnchor.LowerCenter:
|
|
241
|
+
opts.textAlign = "center";
|
|
242
|
+
|
|
243
|
+
break;
|
|
244
|
+
case TextAnchor.UpperRight:
|
|
245
|
+
case TextAnchor.MiddleRight:
|
|
246
|
+
case TextAnchor.LowerRight:
|
|
247
|
+
opts.textAlign = "right";
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
224
252
|
switch (this.alignment) {
|
|
253
|
+
// @info ThreeMeshUI remaining alignment : space-between|space-around|"stretch(experimental)"
|
|
225
254
|
default:
|
|
226
255
|
case TextAnchor.UpperLeft:
|
|
227
256
|
case TextAnchor.UpperCenter:
|
|
@@ -239,21 +268,24 @@ export class Text extends Graphic {
|
|
|
239
268
|
opts.justifyContent = "end";
|
|
240
269
|
break;
|
|
241
270
|
}
|
|
271
|
+
|
|
272
|
+
// @TODO : THH evaluate this is still useful. In case of texts, horizontal alignments are made with textAlign
|
|
242
273
|
switch (this.alignment) {
|
|
243
274
|
case TextAnchor.UpperLeft:
|
|
244
275
|
case TextAnchor.MiddleLeft:
|
|
245
276
|
case TextAnchor.LowerLeft:
|
|
246
|
-
opts.
|
|
277
|
+
opts.alignItems = "start";
|
|
247
278
|
break;
|
|
248
279
|
case TextAnchor.UpperCenter:
|
|
249
280
|
case TextAnchor.MiddleCenter:
|
|
250
281
|
case TextAnchor.LowerCenter:
|
|
251
|
-
opts.
|
|
282
|
+
opts.alignItems = "center";
|
|
283
|
+
|
|
252
284
|
break;
|
|
253
285
|
case TextAnchor.UpperRight:
|
|
254
286
|
case TextAnchor.MiddleRight:
|
|
255
287
|
case TextAnchor.LowerRight:
|
|
256
|
-
opts.
|
|
288
|
+
opts.alignItems = "end";
|
|
257
289
|
break;
|
|
258
290
|
}
|
|
259
291
|
return opts;
|
|
@@ -378,7 +410,7 @@ export class Text extends Graphic {
|
|
|
378
410
|
if (tag.type.length > 6) // color=
|
|
379
411
|
{
|
|
380
412
|
const col = tag.type.substring(6);
|
|
381
|
-
opts.fontColor =
|
|
413
|
+
opts.fontColor = new Color(col);
|
|
382
414
|
}
|
|
383
415
|
else {
|
|
384
416
|
// if it does not contain a color it is white
|
|
@@ -477,174 +509,5 @@ declare type TagInfo = {
|
|
|
477
509
|
isEndTag: boolean
|
|
478
510
|
}
|
|
479
511
|
|
|
480
|
-
|
|
481
|
-
function getColorFromString(str: string): Color {
|
|
482
|
-
if (str.startsWith("#")) {
|
|
483
|
-
const hex = str.substring(1);
|
|
484
|
-
var bigint = parseInt(hex, 16);
|
|
485
|
-
const r = (bigint >> 16) & 255;
|
|
486
|
-
const g = (bigint >> 8) & 255;
|
|
487
|
-
const b = bigint & 255;
|
|
488
|
-
return new Color(r / 255, g / 255, b / 255);
|
|
489
|
-
}
|
|
490
|
-
switch (str) {
|
|
491
|
-
// basic colors // https://www.rapidtables.com/web/color/RGB_Color.html
|
|
492
|
-
case "black": return new Color(0, 0, 0);
|
|
493
|
-
case "white": return new Color(1, 1, 1);
|
|
494
|
-
case "red": return new Color(1, 0, 0);
|
|
495
|
-
case "lime": return new Color(0, 1, 0);
|
|
496
|
-
case "blue": return new Color(0, 0, 1);
|
|
497
|
-
case "yellow": return new Color(1, 1, 0);
|
|
498
|
-
case "cyan": return new Color(0, 1, 1);
|
|
499
|
-
case "magenta": return new Color(1, 0, 1);
|
|
500
|
-
case "silver": return new Color(0.75, 0.75, 0.75);
|
|
501
|
-
case "gray": return new Color(0.5, 0.5, 0.5);
|
|
502
|
-
case "maroon": return new Color(0.5, 0, 0);
|
|
503
|
-
case "olive": return new Color(0.5, 0.5, 0);
|
|
504
|
-
case "green": return new Color(0, 0.5, 0);
|
|
505
|
-
case "purple": return new Color(0.5, 0, 0.5);
|
|
506
|
-
case "teal": return new Color(0, 0.5, 0.5);
|
|
507
|
-
case "navy": return new Color(0, 0, 0.5);
|
|
508
|
-
|
|
509
|
-
// case "maroon": return new Color(0.5, 0, 0);
|
|
510
|
-
case "darkred": return new Color(0.54, 0, 0);
|
|
511
|
-
case "brown": return new Color(0.55, 0.27, 0);
|
|
512
|
-
case "firebrick": return new Color(0.69, 0.13, 0.13);
|
|
513
|
-
case "crimson": return new Color(0.86, 0.08, 0.24);
|
|
514
|
-
// case "red": return new Color(1, 0, 0);
|
|
515
|
-
case "tomato": return new Color(1, 0.39, 0.28);
|
|
516
|
-
case "coral": return new Color(1, 0.49, 0.31);
|
|
517
|
-
case "indianred": return new Color(0.6, 0.31, 0.51);
|
|
518
|
-
case "lightcoral": return new Color(0.94, 0.5, 0.5);
|
|
519
|
-
case "darkorange": return new Color(1, 0.55, 0);
|
|
520
|
-
case "orange": return new Color(1, 0.65, 0);
|
|
521
|
-
case "gold": return new Color(1, 0.84, 0);
|
|
522
|
-
case "darkgoldenrod": return new Color(0.72, 0.53, 0.04);
|
|
523
|
-
case "goldenrod": return new Color(0.85, 0.65, 0.13);
|
|
524
|
-
case "palegoldenrod": return new Color(0.93, 0.87, 0.67);
|
|
525
|
-
case "darkkhaki": return new Color(0.74, 0.7, 0.42);
|
|
526
|
-
case "khaki": return new Color(0.94, 0.9, 0.55);
|
|
527
|
-
// case "olive": return new Color(0.5, 0.5, 0);
|
|
528
|
-
// case "yellow": return new Color(1, 1, 0);
|
|
529
|
-
case "yellowgreen": return new Color(0.6, 0.8, 0.19);
|
|
530
|
-
case "darkolivegreen": return new Color(0.33, 0.42, 0.18);
|
|
531
|
-
case "olivedrab": return new Color(0.42, 0.56, 0.14);
|
|
532
|
-
case "lawngreen": return new Color(0.49, 0.99, 0.0);
|
|
533
|
-
case "chartreuse": return new Color(0.5, 1, 0);
|
|
534
|
-
case "greenyellow": return new Color(0.68, 1, 0.18);
|
|
535
|
-
case "darkgreen": return new Color(0, 0.39, 0);
|
|
536
|
-
// case "green": return new Color(0, 1, 0);
|
|
537
|
-
case "forestgreen": return new Color(0.13, 0.55, 0.13);
|
|
538
|
-
// case "lime": return new Color(0, 1, 0);
|
|
539
|
-
case "limegreen": return new Color(0.19, 0.80, 0.19);
|
|
540
|
-
case "lightgreen": return new Color(0.56, 0.93, 0.56);
|
|
541
|
-
case "palegreen": return new Color(0.59, 0.98, 0.59);
|
|
542
|
-
case "darkseagreen": return new Color(0.56, 0.74, 0.56);
|
|
543
|
-
case "mediumspringgreen": return new Color(0, 0.98, 0.6);
|
|
544
|
-
case "springgreen": return new Color(0, 1, 0.5);
|
|
545
|
-
case "seagreen": return new Color(0.18, 0.31, 0.31);
|
|
546
|
-
case "mediumaquamarine": return new Color(0.4, 0.8, 0.66);
|
|
547
|
-
case "mediumseagreen": return new Color(0.24, 0.70, 0.44);
|
|
548
|
-
case "lightseagreen": return new Color(0.13, 0.70, 0.67);
|
|
549
|
-
case "darkslategray": return new Color(0.18, 0.31, 0.31);
|
|
550
|
-
// case "teal": return new Color(0, 0.5, 0.5);
|
|
551
|
-
case "darkcyan": return new Color(0, 0.55, 0.55);
|
|
552
|
-
case "aqua": return new Color(0, 1, 1);
|
|
553
|
-
// case "cyan": return new Color(0, 1, 1);
|
|
554
|
-
case "lightcyan": return new Color(0.8, 1, 1);
|
|
555
|
-
case "darkturquoise": return new Color(0, 0.81, 0.82);
|
|
556
|
-
case "turquoise": return new Color(0, 0.82, 0.82);
|
|
557
|
-
case "mediumturquoise": return new Color(0.28, 0.82, 0.8);
|
|
558
|
-
case "paleturquoise": return new Color(0.68, 1, 0.93);
|
|
559
|
-
case "aquamarine": return new Color(0.5, 1, 0.83);
|
|
560
|
-
case "powderblue": return new Color(0.69, 0.88, 0.9);
|
|
561
|
-
case "cadetblue": return new Color(0.37, 0.62, 0.63);
|
|
562
|
-
case "steelblue": return new Color(0.27, 0.51, 0.71);
|
|
563
|
-
case "cornflowerblue": return new Color(0.39, 0.58, 0.93);
|
|
564
|
-
case "deepskyblue": return new Color(0, 0.7, 1);
|
|
565
|
-
case "dodgerblue": return new Color(0.12, 0.56, 1);
|
|
566
|
-
case "lightblue": return new Color(0.68, 0.85, 0.9);
|
|
567
|
-
case "skyblue": return new Color(0.53, 0.81, 0.92);
|
|
568
|
-
case "lightskyblue": return new Color(0.53, 0.81, 0.98);
|
|
569
|
-
case "midnightblue": return new Color(0.18, 0.18, 0.31);
|
|
570
|
-
// case "navy": return new Color(0, 0, 0.5);
|
|
571
|
-
case "darkblue": return new Color(0, 0, 0.55);
|
|
572
|
-
case "mediumblue": return new Color(0, 0, 0.82);
|
|
573
|
-
// case "blue": return new Color(0, 0, 1);
|
|
574
|
-
case "royalblue": return new Color(0.25, 0.41, 0.88);
|
|
575
|
-
case "blueviolet": return new Color(0.54, 0.17, 0.89);
|
|
576
|
-
case "indigo": return new Color(0.29, 0, 0.51);
|
|
577
|
-
case "darkslateblue": return new Color(0.28, 0.24, 0.55);
|
|
578
|
-
case "slateblue": return new Color(0.42, 0.35, 0.80);
|
|
579
|
-
case "mediumslateblue": return new Color(0.48, 0.41, 0.9);
|
|
580
|
-
case "mediumpurple": return new Color(0.58, 0.44, 0.86);
|
|
581
|
-
case "darkmagenta": return new Color(0.55, 0, 0.55);
|
|
582
|
-
case "darkviolet": return new Color(0.58, 0, 0.83);
|
|
583
|
-
case "darkorchid": return new Color(0.6, 0.2, 0.8);
|
|
584
|
-
case "mediumorchid": return new Color(0.73, 0.33, 0.83);
|
|
585
|
-
// case "purple": return new Color(0.5, 0, 0.5);
|
|
586
|
-
case "thistle": return new Color(0.84, 0.75, 0.85);
|
|
587
|
-
case "plum": return new Color(0.87, 0.63, 0.87);
|
|
588
|
-
case "violet": return new Color(0.93, 0.51, 0.93);
|
|
589
|
-
// case "magenta": return new Color(1, 0, 1);
|
|
590
|
-
case "fuchsia": return new Color(1, 0, 1);
|
|
591
|
-
case "orchid": return new Color(0.85, 0.44, 0.84);
|
|
592
|
-
case "mediumvioletred": return new Color(0.78, 0.08, 0.52);
|
|
593
|
-
case "palevioletred": return new Color(0.86, 0.44, 0.58);
|
|
594
|
-
case "hotpink": return new Color(1, 0.4, 0.71);
|
|
595
|
-
case "deeppink": return new Color(1, 0.08, 0.58);
|
|
596
|
-
case "lightpink": return new Color(1, 0.71, 0.76);
|
|
597
|
-
case "pink": return new Color(1, 0.75, 0.78);
|
|
598
|
-
case "antiquewhite": return new Color(0.98, 0.92, 0.84);
|
|
599
|
-
case "beige": return new Color(0.96, 0.96, 0.86);
|
|
600
|
-
case "bisque": return new Color(1, 0.89, 0.77);
|
|
601
|
-
case "blanchedalmond": return new Color(1, 0.92, 0.82);
|
|
602
|
-
case "wheat": return new Color(0.96, 0.87, 0.87);
|
|
603
|
-
case "cornsilk": return new Color(1, 0.97, 0.86);
|
|
604
|
-
case "lemonchiffon": return new Color(1, 0.98, 0.8);
|
|
605
|
-
case "lightgoldenrodyellow": return new Color(0.98, 0.98, 0.82);
|
|
606
|
-
case "lightyellow": return new Color(1, 1, 0.8);
|
|
607
|
-
case "saddlebrown": return new Color(0.55, 0.27, 0.07);
|
|
608
|
-
case "sienna": return new Color(0.63, 0.32, 0.18);
|
|
609
|
-
case "chocolate": return new Color(0.82, 0.41, 0.12);
|
|
610
|
-
case "peru": return new Color(0.82, 0.52, 0.25);
|
|
611
|
-
case "sandybrown": return new Color(0.96, 0.64, 0.38);
|
|
612
|
-
case "burlywood": return new Color(0.87, 0.72, 0.53);
|
|
613
|
-
case "tan": return new Color(0.82, 0.71, 0.55);
|
|
614
|
-
case "rosybrown": return new Color(0.74, 0.56, 0.56);
|
|
615
|
-
case "moccasin": return new Color(1, 0.89, 0.71);
|
|
616
|
-
case "navajowhite": return new Color(1, 0.87, 0.68);
|
|
617
|
-
case "peachpuff": return new Color(1, 0.85, 0.73);
|
|
618
|
-
case "mistyrose": return new Color(1, 0.89, 0.88);
|
|
619
|
-
case "lavenderblush": return new Color(1, 0.94, 0.93);
|
|
620
|
-
case "linen": return new Color(0.98, 0.94, 0.9);
|
|
621
|
-
case "oldlace": return new Color(0.99, 0.96, 0.9);
|
|
622
|
-
case "papayawhip": return new Color(1, 0.94, 0.84);
|
|
623
|
-
case "seashell": return new Color(1, 0.96, 0.93);
|
|
624
|
-
case "mintcream": return new Color(0.98, 1, 0.98);
|
|
625
|
-
case "slategray": return new Color(0.44, 0.5, 0.56);
|
|
626
|
-
case "lightslategray": return new Color(0.47, 0.53, 0.6);
|
|
627
|
-
case "lightsteelblue": return new Color(0.69, 0.77, 0.87);
|
|
628
|
-
case "lavender": return new Color(0.9, 0.9, 0.98);
|
|
629
|
-
case "floralwhite": return new Color(1, 0.98, 0.98);
|
|
630
|
-
case "aliceblue": return new Color(0.94, 0.97, 1);
|
|
631
|
-
case "ghostwhite": return new Color(0.97, 0.97, 1);
|
|
632
|
-
case "honeydew": return new Color(0.94, 1, 0.94);
|
|
633
|
-
case "ivory": return new Color(1, 1, 0.94);
|
|
634
|
-
case "azure": return new Color(0.94, 1, 1);
|
|
635
|
-
case "snow": return new Color(1, 0.98, 0.98);
|
|
636
|
-
// case "black": return new Color(0, 0, 0);
|
|
637
|
-
case "dimgray": return new Color(0.4, 0.4, 0.4);
|
|
638
|
-
// case "gray": return new Color(0.5, 0.5, 0.5);
|
|
639
|
-
case "darkgray": return new Color(0.66, 0.66, 0.66);
|
|
640
|
-
// case "silver": return new Color(0.75, 0.75, 0.75);
|
|
641
|
-
case "lightgray": return new Color(0.83, 0.83, 0.83);
|
|
642
|
-
case "gainsboro": return new Color(0.86, 0.86, 0.86);
|
|
643
|
-
case "whitesmoke": return new Color(0.96, 0.96, 0.96);
|
|
644
|
-
|
|
645
|
-
}
|
|
646
|
-
return new Color(1, 1, 1);
|
|
647
|
-
}
|
|
648
|
-
|
|
649
512
|
// const anyTag = new RegExp('<.+?>', 'g');
|
|
650
513
|
// const regex = new RegExp('<(?<type>.+?)>(?<text>.+?)<\/.+?>', 'g');
|
|
@@ -24,11 +24,11 @@ export class PlayerSync extends Behaviour {
|
|
|
24
24
|
this.context.connection.beginListen(RoomEvents.JoinedRoom, this.joinedRoomFunction!)
|
|
25
25
|
}
|
|
26
26
|
onDisable(): void {
|
|
27
|
-
this.context.connection.
|
|
27
|
+
this.context.connection.stopListen(RoomEvents.JoinedRoom, this.joinedRoomFunction!)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
private async onUserJoined(_model) {
|
|
31
|
-
const instance = await this.asset?.instantiateSynced({parent:this.gameObject}, true);
|
|
31
|
+
const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
|
|
32
32
|
if (instance) {
|
|
33
33
|
let pl = GameObject.getComponent(instance as Object3D, PlayerState);
|
|
34
34
|
if (pl) {
|
|
@@ -60,6 +60,17 @@ export class PlayerSync extends Behaviour {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
export enum PlayerStateEvent {
|
|
64
|
+
OwnerChanged = "ownerChanged",
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export declare interface PlayerStateOwnerChangedArgs {
|
|
68
|
+
playerState: PlayerState;
|
|
69
|
+
oldValue: string;
|
|
70
|
+
newValue: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export declare type PlayerStateEventCallback = (args: CustomEvent<PlayerStateOwnerChangedArgs>) => void;
|
|
63
74
|
|
|
64
75
|
export class PlayerState extends Behaviour {
|
|
65
76
|
|
|
@@ -78,24 +89,70 @@ export class PlayerState extends Behaviour {
|
|
|
78
89
|
//** use to check if a component or gameobject is part of a instance owned by the local player */
|
|
79
90
|
static isLocalPlayer(obj: THREE.Object3D | Component): boolean {
|
|
80
91
|
if (obj instanceof Object3D) {
|
|
81
|
-
|
|
92
|
+
const state = GameObject.getComponentInParent(obj, PlayerState);
|
|
93
|
+
return state?.isLocalPlayer ?? false;
|
|
82
94
|
}
|
|
83
95
|
else if (obj instanceof Component) {
|
|
84
|
-
|
|
96
|
+
const state = GameObject.getComponentInParent(obj.gameObject, PlayerState);
|
|
97
|
+
return state?.isLocalPlayer ?? false;
|
|
85
98
|
}
|
|
86
99
|
return false;
|
|
87
100
|
}
|
|
88
101
|
|
|
89
|
-
|
|
90
|
-
|
|
102
|
+
// static Callback
|
|
103
|
+
private static _callbacks: { [key: string]: PlayerStateEventCallback[] } = {};
|
|
104
|
+
/**
|
|
105
|
+
* Add a callback for a PlayerStateEvent
|
|
106
|
+
*/
|
|
107
|
+
static addEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
108
|
+
if (!this._callbacks[event]) this._callbacks[event] = [];
|
|
109
|
+
this._callbacks[event].push(cb);
|
|
110
|
+
return cb;
|
|
111
|
+
}
|
|
112
|
+
static removeEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
|
|
113
|
+
if (!this._callbacks[event]) return;
|
|
114
|
+
const index = this._callbacks[event].indexOf(cb);
|
|
115
|
+
if (index >= 0) this._callbacks[event].splice(index, 1);
|
|
116
|
+
}
|
|
117
|
+
private static dispatchEvent(event: PlayerStateEvent, args: CustomEvent<PlayerStateOwnerChangedArgs>) {
|
|
118
|
+
if (!this._callbacks[event]) return;
|
|
119
|
+
for (const cb of this._callbacks[event]) {
|
|
120
|
+
cb(args);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@syncField("onOwnerChange")
|
|
91
125
|
owner?: string;
|
|
92
126
|
|
|
93
127
|
get isLocalPlayer(): boolean {
|
|
94
128
|
return this.owner === this.context.connection.connectionId;
|
|
95
129
|
}
|
|
96
130
|
|
|
131
|
+
private onOwnerChange(newOwner: string, oldOwner: string) {
|
|
132
|
+
// Remove from local owner array if it was local before
|
|
133
|
+
const index = PlayerState._local.indexOf(this);
|
|
134
|
+
if (index >= 0) PlayerState._local.splice(index, 1);
|
|
135
|
+
|
|
136
|
+
// Args to use for dispatching events
|
|
137
|
+
const detail: PlayerStateOwnerChangedArgs = {
|
|
138
|
+
playerState: this,
|
|
139
|
+
oldValue: oldOwner,
|
|
140
|
+
newValue: newOwner
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (this.owner === this.context.connection.connectionId) {
|
|
144
|
+
PlayerState._local.push(this);
|
|
145
|
+
// console.warn(this.gameObject.guid, this.guid, this.owner, this.isLocalPlayer, PlayerState.isLocalPlayer(this));
|
|
146
|
+
const evt = new CustomEvent("local-owner-changed", { detail: detail });
|
|
147
|
+
this.dispatchEvent(evt);
|
|
148
|
+
PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
|
|
149
|
+
}
|
|
150
|
+
const evt = new CustomEvent("owner-changed", { detail: detail });
|
|
151
|
+
this.dispatchEvent(evt);
|
|
152
|
+
PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
|
|
153
|
+
}
|
|
154
|
+
|
|
97
155
|
awake(): void {
|
|
98
|
-
if (this.isLocalPlayer) PlayerState.local.push(this);
|
|
99
156
|
PlayerState.all.push(this);
|
|
100
157
|
|
|
101
158
|
this.context.connection.beginListen(RoomEvents.UserLeftRoom, (model: { userId: string }) => {
|
|
@@ -109,12 +166,16 @@ export class PlayerState extends Behaviour {
|
|
|
109
166
|
}
|
|
110
167
|
|
|
111
168
|
start() {
|
|
112
|
-
|
|
169
|
+
// If a player is spawned but not in the room anymore we want to destroy it
|
|
170
|
+
// this might happen in a case where all users get disconnected at once and the server
|
|
171
|
+
// still has the syncInstantiate messages that are sent to all clients
|
|
172
|
+
if (this.owner && !this.context.connection.userIsInRoom(this.owner)) {
|
|
113
173
|
this.doDestroy();
|
|
114
174
|
return;
|
|
115
175
|
}
|
|
116
176
|
}
|
|
117
177
|
|
|
178
|
+
/** this tells the server that this client has been destroyed and the networking message for the instantiate will be removed */
|
|
118
179
|
doDestroy() {
|
|
119
180
|
syncDestroy(this.gameObject, this.context.connection);
|
|
120
181
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
class ARButton {
|
|
2
2
|
|
|
3
|
-
static createButton( renderer,
|
|
3
|
+
static createButton( renderer, options = {} ) {
|
|
4
4
|
|
|
5
5
|
const button = document.createElement( 'button' );
|
|
6
6
|
let ARButtonControlsDomOverlay = false;
|
|
7
7
|
|
|
8
|
-
function showStartAR( /*device*/ ) {
|
|
8
|
+
function showStartAR( /*device*/ ) {
|
|
9
|
+
|
|
10
|
+
options.optionalFeatures = options.optionalFeatures || [];
|
|
9
11
|
|
|
10
|
-
if (
|
|
12
|
+
if ( options.domOverlay === undefined) {
|
|
11
13
|
|
|
12
14
|
var overlay = document.createElement( 'div' );
|
|
13
15
|
overlay.style.display = 'none';
|
|
@@ -32,25 +34,12 @@ class ARButton {
|
|
|
32
34
|
path.setAttribute( 'stroke-width', 2 );
|
|
33
35
|
svg.appendChild( path );
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
sessionInit.optionalFeatures = [];
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
sessionInit.optionalFeatures.push( 'dom-overlay' );
|
|
42
|
-
sessionInit.domOverlay = { root: overlay };
|
|
37
|
+
options.optionalFeatures.push( 'dom-overlay' );
|
|
38
|
+
options.domOverlay = { root: overlay };
|
|
43
39
|
ARButtonControlsDomOverlay = true;
|
|
44
40
|
|
|
45
41
|
}
|
|
46
42
|
|
|
47
|
-
if ( sessionInit.optionalFeatures === undefined ) sessionInit.optionalFeatures = [];
|
|
48
|
-
|
|
49
|
-
// added for Hololens support
|
|
50
|
-
sessionInit.optionalFeatures.push( 'local-floor' );
|
|
51
|
-
sessionInit.optionalFeatures.push( 'hand-tracking' );
|
|
52
|
-
sessionInit.optionalFeatures.push( 'layers' );
|
|
53
|
-
|
|
54
43
|
//
|
|
55
44
|
|
|
56
45
|
let currentSession = null;
|
|
@@ -62,8 +51,8 @@ class ARButton {
|
|
|
62
51
|
// HTMLElements that are inside the Canvas element are not visible in the DOM Overlay.
|
|
63
52
|
const isWebXRViewer = /WebXRViewer\//i.test( navigator.userAgent );
|
|
64
53
|
if (isWebXRViewer) {
|
|
65
|
-
if(
|
|
66
|
-
const overlayElement =
|
|
54
|
+
if(options.domOverlay?.root) {
|
|
55
|
+
const overlayElement = options.domOverlay.root;
|
|
67
56
|
originalDomOverlayParent = overlayElement.parentElement;
|
|
68
57
|
if (originalDomOverlayParent) {
|
|
69
58
|
console.log("Reparent DOM Overlay to body", overlayElement, overlayElement.style.display);
|
|
@@ -89,7 +78,7 @@ class ARButton {
|
|
|
89
78
|
button.textContent = 'STOP AR';
|
|
90
79
|
|
|
91
80
|
if (ARButtonControlsDomOverlay)
|
|
92
|
-
|
|
81
|
+
options.domOverlay.root.style.display = '';
|
|
93
82
|
|
|
94
83
|
currentSession = session;
|
|
95
84
|
|
|
@@ -103,10 +92,10 @@ class ARButton {
|
|
|
103
92
|
|
|
104
93
|
// if we reparented the DOM overlay, we're reverting it here
|
|
105
94
|
if (originalDomOverlayParent)
|
|
106
|
-
originalDomOverlayParent.appendChild(
|
|
95
|
+
originalDomOverlayParent.appendChild(options.domOverlay.root);
|
|
107
96
|
|
|
108
97
|
if (ARButtonControlsDomOverlay)
|
|
109
|
-
|
|
98
|
+
options.domOverlay.root.style.display = 'none';
|
|
110
99
|
|
|
111
100
|
currentSession = null;
|
|
112
101
|
|
|
@@ -138,7 +127,7 @@ class ARButton {
|
|
|
138
127
|
|
|
139
128
|
if ( currentSession === null ) {
|
|
140
129
|
|
|
141
|
-
navigator.xr.requestSession( 'immersive-ar',
|
|
130
|
+
navigator.xr.requestSession( 'immersive-ar', options ).then( onSessionStarted );
|
|
142
131
|
|
|
143
132
|
} else {
|
|
144
133
|
|
|
@@ -2,12 +2,6 @@ class VRButton {
|
|
|
2
2
|
|
|
3
3
|
static createButton( renderer, options ) {
|
|
4
4
|
|
|
5
|
-
if ( options ) {
|
|
6
|
-
|
|
7
|
-
console.error( 'THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
5
|
const button = document.createElement( 'button' );
|
|
12
6
|
|
|
13
7
|
function showEnterVR( /*device*/ ) {
|
|
@@ -70,7 +64,7 @@ class VRButton {
|
|
|
70
64
|
// ('local' is always available for immersive sessions and doesn't need to
|
|
71
65
|
// be requested separately.)
|
|
72
66
|
|
|
73
|
-
const sessionInit = { optionalFeatures:
|
|
67
|
+
const sessionInit = { optionalFeatures: options.optionalFeatures };
|
|
74
68
|
navigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );
|
|
75
69
|
|
|
76
70
|
} else {
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Behaviour } from "./Component";
|
|
2
|
-
import { Context } from "../engine/engine_setup";
|
|
3
|
-
export declare enum TonemappingMode {
|
|
4
|
-
None = 0,
|
|
5
|
-
Neutral = 1,
|
|
6
|
-
ACES = 2
|
|
7
|
-
}
|
|
8
|
-
export declare class VolumeParameter {
|
|
9
|
-
overrideState: boolean;
|
|
10
|
-
value: number;
|
|
11
|
-
}
|
|
12
|
-
export declare class VolumeComponent {
|
|
13
|
-
active: boolean;
|
|
14
|
-
parameters?: VolumeParameter[];
|
|
15
|
-
}
|
|
16
|
-
export declare class ToneMapping extends VolumeComponent {
|
|
17
|
-
mode?: VolumeParameter;
|
|
18
|
-
get isToneMapping(): boolean;
|
|
19
|
-
}
|
|
20
|
-
export declare class ColorAdjustments extends VolumeComponent {
|
|
21
|
-
postExposure?: VolumeParameter;
|
|
22
|
-
}
|
|
23
|
-
export declare class VolumeProfile {
|
|
24
|
-
components?: VolumeComponent[];
|
|
25
|
-
apply(context: Context): void;
|
|
26
|
-
unapply(context: Context): void;
|
|
27
|
-
private onUpdate;
|
|
28
|
-
}
|
|
29
|
-
export declare class Volume extends Behaviour {
|
|
30
|
-
sharedProfile?: VolumeProfile;
|
|
31
|
-
awake(): void;
|
|
32
|
-
onEnable(): void;
|
|
33
|
-
onDisable(): void;
|
|
34
|
-
}
|
|
@@ -1,140 +0,0 @@
|
|
|
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 { Behaviour } from "./Component";
|
|
8
|
-
import { LinearToneMapping, ACESFilmicToneMapping, ReinhardToneMapping } from "three";
|
|
9
|
-
import { serializable } from "../engine/engine_serialization_decorator";
|
|
10
|
-
import { getParam } from "../engine/engine_utils";
|
|
11
|
-
const debug = getParam("debugvolume");
|
|
12
|
-
export var TonemappingMode;
|
|
13
|
-
(function (TonemappingMode) {
|
|
14
|
-
TonemappingMode[TonemappingMode["None"] = 0] = "None";
|
|
15
|
-
TonemappingMode[TonemappingMode["Neutral"] = 1] = "Neutral";
|
|
16
|
-
TonemappingMode[TonemappingMode["ACES"] = 2] = "ACES";
|
|
17
|
-
})(TonemappingMode || (TonemappingMode = {}));
|
|
18
|
-
export class VolumeParameter {
|
|
19
|
-
overrideState = false;
|
|
20
|
-
value = 0;
|
|
21
|
-
}
|
|
22
|
-
export class VolumeComponent {
|
|
23
|
-
active = false;
|
|
24
|
-
parameters;
|
|
25
|
-
}
|
|
26
|
-
export class ToneMapping extends VolumeComponent {
|
|
27
|
-
mode;
|
|
28
|
-
get isToneMapping() { return true; }
|
|
29
|
-
}
|
|
30
|
-
export class ColorAdjustments extends VolumeComponent {
|
|
31
|
-
postExposure;
|
|
32
|
-
}
|
|
33
|
-
// resolve the types:
|
|
34
|
-
function resolveComponentType(data) {
|
|
35
|
-
if ("mode" in data)
|
|
36
|
-
return ToneMapping;
|
|
37
|
-
if ("postExposure" in data)
|
|
38
|
-
return ColorAdjustments;
|
|
39
|
-
return VolumeComponent;
|
|
40
|
-
}
|
|
41
|
-
const volumeKey = Symbol("volumeprofile");
|
|
42
|
-
export class VolumeProfile {
|
|
43
|
-
components;
|
|
44
|
-
apply(context) {
|
|
45
|
-
this.onUpdate(context, false);
|
|
46
|
-
}
|
|
47
|
-
unapply(context) {
|
|
48
|
-
this.onUpdate(context, true);
|
|
49
|
-
}
|
|
50
|
-
onUpdate(context, remove) {
|
|
51
|
-
if (!this.components)
|
|
52
|
-
return;
|
|
53
|
-
const renderer = context.renderer;
|
|
54
|
-
const currentProfile = renderer[volumeKey];
|
|
55
|
-
const isActive = currentProfile !== undefined;
|
|
56
|
-
if (remove) {
|
|
57
|
-
// can not remove volume profile that is not active
|
|
58
|
-
if (!isActive)
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
renderer[volumeKey] = this;
|
|
63
|
-
}
|
|
64
|
-
for (const component of this.components) {
|
|
65
|
-
if (component instanceof ToneMapping) {
|
|
66
|
-
const tonemapping = component;
|
|
67
|
-
if (!component.active || remove) {
|
|
68
|
-
context.renderer.toneMapping = LinearToneMapping;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (debug)
|
|
72
|
-
console.log("VOLUME:", TonemappingMode[tonemapping.mode?.value ?? 0]);
|
|
73
|
-
const mode = tonemapping.mode;
|
|
74
|
-
const value = mode?.overrideState ? mode?.value : 0;
|
|
75
|
-
switch (value ?? 0) {
|
|
76
|
-
case TonemappingMode.None:
|
|
77
|
-
context.renderer.toneMapping = LinearToneMapping;
|
|
78
|
-
break;
|
|
79
|
-
case TonemappingMode.Neutral:
|
|
80
|
-
context.renderer.toneMapping = ReinhardToneMapping;
|
|
81
|
-
break;
|
|
82
|
-
case TonemappingMode.ACES:
|
|
83
|
-
context.renderer.toneMapping = ACESFilmicToneMapping;
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else if (component instanceof ColorAdjustments) {
|
|
88
|
-
if (!component.active)
|
|
89
|
-
continue;
|
|
90
|
-
const colorAdjustments = component;
|
|
91
|
-
// unity range goes from -15..15
|
|
92
|
-
// three.js range goes from 0..inf
|
|
93
|
-
if (debug)
|
|
94
|
-
console.log(colorAdjustments.postExposure);
|
|
95
|
-
let exposure = 1;
|
|
96
|
-
// convert to linear
|
|
97
|
-
if (colorAdjustments.postExposure)
|
|
98
|
-
exposure = Math.pow(2, colorAdjustments.postExposure.value);
|
|
99
|
-
// ACES applies a factor of roughly 1.666 ( /= .6 )
|
|
100
|
-
if (context.renderer.toneMapping === ACESFilmicToneMapping) {
|
|
101
|
-
// exposure /= Math.PI / 2;
|
|
102
|
-
}
|
|
103
|
-
const useExposure = colorAdjustments.postExposure?.overrideState && !remove;
|
|
104
|
-
context.renderer.toneMappingExposure = useExposure ? exposure : 1;
|
|
105
|
-
if (!context.renderer.toneMapping)
|
|
106
|
-
context.renderer.toneMapping = LinearToneMapping;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
__decorate([
|
|
112
|
-
serializable([d => resolveComponentType(d), VolumeComponent])
|
|
113
|
-
], VolumeProfile.prototype, "components", void 0);
|
|
114
|
-
export class Volume extends Behaviour {
|
|
115
|
-
sharedProfile;
|
|
116
|
-
awake() {
|
|
117
|
-
if (debug) {
|
|
118
|
-
console.log(this);
|
|
119
|
-
console.log("Press P to toggle post processing");
|
|
120
|
-
window.addEventListener("keydown", (e) => {
|
|
121
|
-
if (e.key === "p") {
|
|
122
|
-
console.log("Toggle volume: " + this.name, !this.enabled);
|
|
123
|
-
this.enabled = !this.enabled;
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
onEnable() {
|
|
129
|
-
if (debug)
|
|
130
|
-
console.log("APPLY VOLUME", this);
|
|
131
|
-
this.sharedProfile?.apply(this.context);
|
|
132
|
-
}
|
|
133
|
-
onDisable() {
|
|
134
|
-
this.sharedProfile?.unapply(this.context);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
__decorate([
|
|
138
|
-
serializable(VolumeProfile)
|
|
139
|
-
], Volume.prototype, "sharedProfile", void 0);
|
|
140
|
-
//# sourceMappingURL=Volume.js.map
|