@needle-tools/engine 2.52.0-pre → 2.54.2-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 +36 -0
- package/dist/needle-engine.d.ts +3018 -2680
- package/dist/needle-engine.js +439 -439
- package/dist/needle-engine.js.map +4 -4
- package/dist/needle-engine.min.js +41 -41
- package/dist/needle-engine.min.js.map +4 -4
- package/dist/needle-engine.tsbuildinfo +1 -0
- package/lib/engine/codegen/register_types.d.ts +1 -0
- package/lib/engine/codegen/register_types.js +346 -0
- package/lib/engine/codegen/register_types.js.map +1 -0
- package/lib/engine/debug/debug.d.ts +1 -0
- package/lib/engine/debug/debug.js +4 -0
- package/lib/engine/debug/debug.js.map +1 -1
- package/lib/engine/debug/debug_console.js +2 -1
- package/lib/engine/debug/debug_console.js.map +1 -1
- package/lib/engine/debug/debug_overlay.js +3 -1
- package/lib/engine/debug/debug_overlay.js.map +1 -1
- package/lib/engine/engine_components.js +2 -2
- package/lib/engine/engine_components.js.map +1 -1
- package/lib/engine/engine_default_parameters.d.ts +2 -2
- package/lib/engine/engine_element.js +4 -2
- package/lib/engine/engine_element.js.map +1 -1
- package/lib/engine/engine_element_loading.d.ts +1 -0
- package/lib/engine/engine_element_loading.js +17 -6
- package/lib/engine/engine_element_loading.js.map +1 -1
- package/lib/engine/engine_element_overlay.js +4 -2
- package/lib/engine/engine_element_overlay.js.map +1 -1
- package/lib/engine/engine_fileloader.d.ts +3 -0
- package/lib/engine/engine_fileloader.js +8 -0
- package/lib/engine/engine_fileloader.js.map +1 -0
- package/lib/engine/engine_generic_utils.d.ts +1 -0
- package/lib/engine/engine_generic_utils.js +14 -0
- package/lib/engine/engine_generic_utils.js.map +1 -0
- package/lib/engine/engine_input.js +4 -0
- package/lib/engine/engine_input.js.map +1 -1
- package/lib/engine/engine_networking_instantiate.d.ts +1 -1
- package/lib/engine/engine_networking_instantiate.js +3 -0
- package/lib/engine/engine_networking_instantiate.js.map +1 -1
- package/lib/engine/engine_networking_websocket.d.ts +1 -0
- package/lib/engine/engine_networking_websocket.js +1 -1
- package/lib/engine/engine_networking_websocket.js.map +1 -1
- package/lib/engine/engine_serialization_builtin_serializer.d.ts +6 -0
- package/lib/engine/engine_serialization_builtin_serializer.js +35 -7
- package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
- package/lib/engine/engine_serialization_core.d.ts +1 -0
- package/lib/engine/engine_serialization_core.js +6 -0
- package/lib/engine/engine_serialization_core.js.map +1 -1
- package/lib/engine/engine_setup.js +2 -2
- package/lib/engine/engine_setup.js.map +1 -1
- package/lib/engine/engine_texture.d.ts +3 -0
- package/lib/engine/engine_texture.js +4 -0
- package/lib/engine/engine_texture.js.map +1 -0
- package/lib/engine/engine_utils.d.ts +1 -1
- package/lib/engine/engine_utils.js +3 -0
- package/lib/engine/engine_utils.js.map +1 -1
- package/lib/engine/extensions/NEEDLE_components.d.ts +1 -1
- package/lib/engine/extensions/NEEDLE_progressive.d.ts +40 -0
- package/lib/engine/extensions/NEEDLE_progressive.js +322 -0
- package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -0
- package/lib/engine/extensions/extensions.js +2 -2
- package/lib/engine/extensions/extensions.js.map +1 -1
- package/lib/engine-components/Camera.js +17 -2
- package/lib/engine-components/Camera.js.map +1 -1
- package/lib/engine-components/GroundProjection.d.ts +2 -1
- package/lib/engine-components/GroundProjection.js +19 -12
- package/lib/engine-components/GroundProjection.js.map +1 -1
- package/lib/engine-components/Light.js +1 -0
- package/lib/engine-components/Light.js.map +1 -1
- package/lib/engine-components/OrbitControls.js +6 -2
- package/lib/engine-components/OrbitControls.js.map +1 -1
- package/lib/engine-components/ParticleSystemModules.d.ts +1 -1
- package/lib/engine-components/ParticleSystemModules.js +48 -44
- package/lib/engine-components/ParticleSystemModules.js.map +1 -1
- package/lib/engine-components/ReflectionProbe.d.ts +1 -1
- package/lib/engine-components/Renderer.d.ts +1 -1
- package/lib/engine-components/Renderer.js +4 -9
- package/lib/engine-components/Renderer.js.map +1 -1
- package/lib/engine-components/Voip.js +13 -4
- package/lib/engine-components/Voip.js.map +1 -1
- package/lib/engine-components/Volume.js +8 -1
- package/lib/engine-components/Volume.js.map +1 -1
- package/lib/engine-components/WebXR.d.ts +2 -2
- package/lib/engine-components/WebXRAvatar.d.ts +1 -1
- package/lib/engine-components/codegen/components.d.ts +99 -95
- package/lib/engine-components/codegen/components.js +99 -95
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/lib/engine-components/export/{GltfExport.d.ts → gltf/GltfExport.d.ts} +2 -2
- package/lib/engine-components/export/{GltfExport.js → gltf/GltfExport.js} +7 -7
- package/lib/engine-components/export/gltf/GltfExport.js.map +1 -0
- package/lib/engine-components/export/usdz/Extension.d.ts +9 -0
- package/lib/engine-components/export/usdz/Extension.js +2 -0
- package/lib/engine-components/export/usdz/Extension.js.map +1 -0
- package/lib/engine-components/export/usdz/USDZExporter.d.ts +26 -0
- package/lib/engine-components/export/usdz/USDZExporter.js +209 -0
- package/lib/engine-components/export/usdz/USDZExporter.js.map +1 -0
- package/lib/engine-components/export/usdz/extensions/Animation.d.ts +44 -0
- package/lib/engine-components/export/usdz/extensions/Animation.js +264 -0
- package/lib/engine-components/export/usdz/extensions/Animation.js.map +1 -0
- package/lib/engine-components/export/usdz/types.d.ts +34 -0
- package/lib/engine-components/export/usdz/types.js +2 -0
- package/lib/engine-components/export/usdz/types.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/animationutils.d.ts +3 -0
- package/lib/engine-components/export/usdz/utils/animationutils.js +46 -0
- package/lib/engine-components/export/usdz/utils/animationutils.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/quicklook.d.ts +2 -0
- package/lib/engine-components/export/usdz/utils/quicklook.js +36 -0
- package/lib/engine-components/export/usdz/utils/quicklook.js.map +1 -0
- package/lib/engine-components/export/usdz/utils/timeutils.d.ts +1 -0
- package/lib/engine-components/export/usdz/utils/timeutils.js +15 -0
- package/lib/engine-components/export/usdz/utils/timeutils.js.map +1 -0
- package/lib/engine-components/ui/Button.js +30 -0
- package/lib/engine-components/ui/Button.js.map +1 -1
- package/lib/engine-components/ui/Graphic.d.ts +2 -0
- package/lib/engine-components/ui/Graphic.js +15 -0
- package/lib/engine-components/ui/Graphic.js.map +1 -1
- package/lib/engine-components/ui/InputField.d.ts +2 -0
- package/lib/engine-components/ui/InputField.js +23 -1
- package/lib/engine-components/ui/InputField.js.map +1 -1
- package/lib/engine-components/ui/Utils.d.ts +4 -1
- package/lib/engine-components/ui/Utils.js +15 -12
- package/lib/engine-components/ui/Utils.js.map +1 -1
- package/lib/engine-components-experimental/Presentation.d.ts +6 -0
- package/lib/engine-components-experimental/Presentation.js +11 -0
- package/lib/engine-components-experimental/Presentation.js.map +1 -0
- package/lib/engine-components-experimental/annotation/LineDrawer.d.ts +18 -0
- package/lib/engine-components-experimental/annotation/LineDrawer.js +175 -0
- package/lib/engine-components-experimental/annotation/LineDrawer.js.map +1 -0
- package/lib/engine-components-experimental/annotation/LinesManager.d.ts +54 -0
- package/lib/engine-components-experimental/annotation/LinesManager.js +155 -0
- package/lib/engine-components-experimental/annotation/LinesManager.js.map +1 -0
- package/lib/engine-components-experimental/networking/PlayerSync.d.ts +26 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js +121 -0
- package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -0
- package/lib/engine-schemes/vec2.d.ts +10 -0
- package/lib/engine-schemes/vec2.js +26 -0
- package/lib/engine-schemes/vec2.js.map +1 -0
- package/lib/include/three/ARButton.d.ts +3 -0
- package/lib/include/three/ARButton.js +158 -0
- package/lib/include/three/ARButton.js.map +1 -0
- 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/lib/include/three/VRButton.d.ts +5 -0
- package/lib/include/three/VRButton.js +122 -0
- package/lib/include/three/VRButton.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +2 -2
- package/src/engine/codegen/register_types.js +212 -204
- package/src/engine/debug/debug.ts +5 -0
- package/src/engine/debug/debug_console.ts +3 -2
- package/src/engine/debug/debug_overlay.ts +3 -1
- package/src/engine/engine_components.ts +2 -2
- package/src/engine/engine_element.ts +4 -2
- package/src/engine/engine_element_loading.ts +13 -6
- package/src/engine/engine_element_overlay.ts +4 -2
- package/src/engine/engine_input.ts +4 -0
- package/src/engine/engine_networking_instantiate.ts +4 -1
- package/src/engine/engine_networking_websocket.ts +3 -1
- package/src/engine/engine_serialization_builtin_serializer.ts +39 -8
- package/src/engine/engine_serialization_core.ts +7 -1
- package/src/engine/engine_setup.ts +2 -2
- package/src/engine/engine_texture.ts +6 -0
- package/src/engine/engine_utils.ts +3 -1
- package/src/engine/extensions/NEEDLE_progressive.ts +357 -0
- package/src/engine/extensions/extensions.ts +2 -2
- package/src/engine-components/Camera.ts +17 -3
- package/src/engine-components/GroundProjection.ts +18 -12
- package/src/engine-components/Light.ts +3 -1
- package/src/engine-components/OrbitControls.ts +7 -3
- package/src/engine-components/ParticleSystemModules.ts +50 -47
- package/src/engine-components/Renderer.ts +6 -10
- package/src/engine-components/Voip.ts +14 -4
- package/src/engine-components/Volume.ts +8 -1
- package/src/engine-components/WebXR.ts +2 -2
- package/src/engine-components/codegen/components.ts +99 -95
- package/src/engine-components/export/{GltfExport.ts → gltf/GltfExport.ts} +7 -7
- package/src/engine-components/export/usdz/Extension.ts +12 -0
- package/src/engine-components/export/usdz/USDZExporter.ts +233 -0
- package/src/engine-components/export/usdz/extensions/Animation.ts +306 -0
- package/src/engine-components/export/usdz/types.ts +39 -0
- package/src/engine-components/export/usdz/utils/animationutils.ts +60 -0
- package/src/engine-components/export/usdz/utils/quicklook.ts +43 -0
- package/src/engine-components/export/usdz/utils/timeutils.ts +20 -0
- package/src/engine-components/ui/Button.ts +8 -8
- package/src/engine-components/ui/Graphic.ts +15 -1
- package/src/engine-components/ui/InputField.ts +25 -2
- package/src/engine-components/ui/Utils.ts +17 -14
- package/src/engine-components-experimental/annotation/LineDrawer.ts +10 -7
- package/src/engine-components-experimental/annotation/LinesManager.ts +6 -6
- package/src/engine-components-experimental/networking/PlayerSync.ts +1 -1
- package/lib/engine/engine_caching.d.ts +0 -0
- package/lib/engine/engine_caching.js +0 -2
- package/lib/engine/engine_caching.js.map +0 -1
- package/lib/engine/extensions/NEEDLE_deferred_texture.d.ts +0 -18
- package/lib/engine/extensions/NEEDLE_deferred_texture.js +0 -194
- package/lib/engine/extensions/NEEDLE_deferred_texture.js.map +0 -1
- package/lib/engine/tests/simulate_avatars.d.ts +0 -0
- package/lib/engine/tests/simulate_avatars.js +0 -3
- package/lib/engine/tests/simulate_avatars.js.map +0 -1
- package/lib/engine-components/NavMesh.d.ts +0 -0
- package/lib/engine-components/NavMesh.js +0 -101
- package/lib/engine-components/NavMesh.js.map +0 -1
- package/lib/engine-components/ParticleSystemBehaviours.d.ts +0 -0
- package/lib/engine-components/ParticleSystemBehaviours.js +0 -2
- package/lib/engine-components/ParticleSystemBehaviours.js.map +0 -1
- package/lib/engine-components/SpringJoint.d.ts +0 -0
- package/lib/engine-components/SpringJoint.js +0 -43
- package/lib/engine-components/SpringJoint.js.map +0 -1
- package/lib/engine-components/export/GltfExport.js.map +0 -1
- package/lib/engine-components/ui/CanvasScaler.d.ts +0 -0
- package/lib/engine-components/ui/CanvasScaler.js +0 -17
- package/lib/engine-components/ui/CanvasScaler.js.map +0 -1
- package/src/engine/dist/engine_three_utils.js +0 -279
- package/src/engine/engine_caching.ts +0 -0
- package/src/engine/extensions/NEEDLE_deferred_texture.ts +0 -217
- package/src/engine/tests/simulate_avatars.ts +0 -2
- package/src/engine-components/NavMesh.ts +0 -117
- package/src/engine-components/ParticleSystemBehaviours.ts +0 -0
- package/src/engine-components/SpringJoint.ts +0 -45
- package/src/engine-components/ui/CanvasScaler.ts +0 -21
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Behaviour, Component } from "../../engine-components/Component";
|
|
2
|
+
import { AssetReference } from "../../engine/engine_addressables";
|
|
3
|
+
export declare class PlayerSync extends Behaviour {
|
|
4
|
+
asset?: AssetReference;
|
|
5
|
+
private joinedRoomFunction?;
|
|
6
|
+
awake(): void;
|
|
7
|
+
onEnable(): void;
|
|
8
|
+
onDisable(): void;
|
|
9
|
+
private onUserJoined;
|
|
10
|
+
private watchTabVisible;
|
|
11
|
+
}
|
|
12
|
+
export declare class PlayerState extends Behaviour {
|
|
13
|
+
private static _all;
|
|
14
|
+
/** all instances for all players */
|
|
15
|
+
static get all(): PlayerState[];
|
|
16
|
+
private static _local;
|
|
17
|
+
/** all instances for the local player */
|
|
18
|
+
static get local(): PlayerState[];
|
|
19
|
+
static isLocalPlayer(obj: THREE.Object3D | Component): boolean;
|
|
20
|
+
owner?: string;
|
|
21
|
+
get isLocalPlayer(): boolean;
|
|
22
|
+
awake(): void;
|
|
23
|
+
start(): void;
|
|
24
|
+
doDestroy(): void;
|
|
25
|
+
onDestroy(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
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, Component, GameObject } from "../../engine-components/Component";
|
|
8
|
+
import { AssetReference } from "../../engine/engine_addressables";
|
|
9
|
+
import { serializable } from "../../engine/engine_serialization_decorator";
|
|
10
|
+
import { syncField } from "../../engine/engine_networking_auto";
|
|
11
|
+
import { RoomEvents } from "../../engine/engine_networking";
|
|
12
|
+
import { Object3D } from "three";
|
|
13
|
+
import { syncDestroy } from "../../engine/engine_networking_instantiate";
|
|
14
|
+
export class PlayerSync extends Behaviour {
|
|
15
|
+
asset;
|
|
16
|
+
joinedRoomFunction;
|
|
17
|
+
awake() {
|
|
18
|
+
this.watchTabVisible();
|
|
19
|
+
this.joinedRoomFunction = this.onUserJoined.bind(this);
|
|
20
|
+
}
|
|
21
|
+
onEnable() {
|
|
22
|
+
this.context.connection.beginListen(RoomEvents.JoinedRoom, this.joinedRoomFunction);
|
|
23
|
+
}
|
|
24
|
+
onDisable() {
|
|
25
|
+
this.context.connection.stopListening(RoomEvents.JoinedRoom, this.joinedRoomFunction);
|
|
26
|
+
}
|
|
27
|
+
async onUserJoined(_model) {
|
|
28
|
+
const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
|
|
29
|
+
if (instance) {
|
|
30
|
+
let pl = GameObject.getComponent(instance, PlayerState);
|
|
31
|
+
if (pl) {
|
|
32
|
+
pl.owner = this.context.connection.connectionId;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// TODO: previously created instances are not re-created when re-joining room
|
|
36
|
+
// const inRoom = this.context.connection.usersInRoom();
|
|
37
|
+
// console.log(inRoom);
|
|
38
|
+
// for (const user of inRoom) {
|
|
39
|
+
// if(user !== this.context.connection.connectionId) {
|
|
40
|
+
// console.log(this.context.connection.tryGetState(this.asset.uri))
|
|
41
|
+
// }
|
|
42
|
+
// }
|
|
43
|
+
}
|
|
44
|
+
watchTabVisible() {
|
|
45
|
+
window.addEventListener("visibilitychange", _ => {
|
|
46
|
+
if (document.visibilityState === "visible") {
|
|
47
|
+
for (let i = PlayerState.all.length - 1; i >= 0; i--) {
|
|
48
|
+
const pl = PlayerState.all[i];
|
|
49
|
+
if (!pl.owner || !this.context.connection.userIsInRoom(pl.owner)) {
|
|
50
|
+
pl.doDestroy();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
__decorate([
|
|
58
|
+
serializable(AssetReference)
|
|
59
|
+
], PlayerSync.prototype, "asset", void 0);
|
|
60
|
+
export class PlayerState extends Behaviour {
|
|
61
|
+
static _all = [];
|
|
62
|
+
/** all instances for all players */
|
|
63
|
+
static get all() {
|
|
64
|
+
return PlayerState._all;
|
|
65
|
+
}
|
|
66
|
+
;
|
|
67
|
+
static _local = [];
|
|
68
|
+
/** all instances for the local player */
|
|
69
|
+
static get local() {
|
|
70
|
+
return PlayerState._local;
|
|
71
|
+
}
|
|
72
|
+
//** use to check if a component or gameobject is part of a instance owned by the local player */
|
|
73
|
+
static isLocalPlayer(obj) {
|
|
74
|
+
if (obj instanceof Object3D) {
|
|
75
|
+
return GameObject.getComponentInParent(obj, PlayerState)?.isLocalPlayer ?? false;
|
|
76
|
+
}
|
|
77
|
+
else if (obj instanceof Component) {
|
|
78
|
+
return GameObject.getComponentInParent(obj.gameObject, PlayerState)?.isLocalPlayer ?? false;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
owner;
|
|
83
|
+
get isLocalPlayer() {
|
|
84
|
+
return this.owner === this.context.connection.connectionId;
|
|
85
|
+
}
|
|
86
|
+
awake() {
|
|
87
|
+
if (this.isLocalPlayer)
|
|
88
|
+
PlayerState.local.push(this);
|
|
89
|
+
PlayerState.all.push(this);
|
|
90
|
+
this.context.connection.beginListen(RoomEvents.UserLeftRoom, (model) => {
|
|
91
|
+
// console.log("USER LEFT", model.userId)
|
|
92
|
+
if (model.userId === this.owner) {
|
|
93
|
+
// console.log("LEFT", this.owner)
|
|
94
|
+
this.doDestroy();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
start() {
|
|
100
|
+
if (!this.owner || !this.context.connection.userIsInRoom(this.owner)) {
|
|
101
|
+
this.doDestroy();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
doDestroy() {
|
|
106
|
+
syncDestroy(this.gameObject, this.context.connection);
|
|
107
|
+
}
|
|
108
|
+
onDestroy() {
|
|
109
|
+
PlayerState.all.splice(PlayerState.all.indexOf(this), 1);
|
|
110
|
+
if (this.isLocalPlayer) {
|
|
111
|
+
const index = PlayerState._local.indexOf(this);
|
|
112
|
+
if (index >= 0)
|
|
113
|
+
PlayerState._local.splice(index, 1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
__decorate([
|
|
118
|
+
syncField(),
|
|
119
|
+
serializable()
|
|
120
|
+
], PlayerState.prototype, "owner", void 0);
|
|
121
|
+
//# sourceMappingURL=PlayerSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerSync.js","sourceRoot":"","sources":["../../../../engine-components-experimental/networking/PlayerSync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as flatbuffers from 'flatbuffers';
|
|
2
|
+
export declare class Vec2 {
|
|
3
|
+
bb: flatbuffers.ByteBuffer | null;
|
|
4
|
+
bb_pos: number;
|
|
5
|
+
__init(i: number, bb: flatbuffers.ByteBuffer): Vec2;
|
|
6
|
+
x(): number;
|
|
7
|
+
y(): number;
|
|
8
|
+
static sizeOf(): number;
|
|
9
|
+
static createVec2(builder: flatbuffers.Builder, x: number, y: number): flatbuffers.Offset;
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// automatically generated by the FlatBuffers compiler, do not modify
|
|
2
|
+
export class Vec2 {
|
|
3
|
+
bb = null;
|
|
4
|
+
bb_pos = 0;
|
|
5
|
+
__init(i, bb) {
|
|
6
|
+
this.bb_pos = i;
|
|
7
|
+
this.bb = bb;
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
x() {
|
|
11
|
+
return this.bb.readFloat32(this.bb_pos);
|
|
12
|
+
}
|
|
13
|
+
y() {
|
|
14
|
+
return this.bb.readFloat32(this.bb_pos + 4);
|
|
15
|
+
}
|
|
16
|
+
static sizeOf() {
|
|
17
|
+
return 8;
|
|
18
|
+
}
|
|
19
|
+
static createVec2(builder, x, y) {
|
|
20
|
+
builder.prep(4, 8);
|
|
21
|
+
builder.writeFloat32(y);
|
|
22
|
+
builder.writeFloat32(x);
|
|
23
|
+
return builder.offset();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=vec2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vec2.js","sourceRoot":"","sources":["../../../engine-schemes/vec2.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAIrE,MAAM,OAAO,IAAI;IACf,EAAE,GAAgC,IAAI,CAAC;IACvC,MAAM,GAAG,CAAC,CAAC;IACb,MAAM,CAAC,CAAQ,EAAE,EAAyB;QACxC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC;QACC,OAAO,IAAI,CAAC,EAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,CAAC;QACC,OAAO,IAAI,CAAC,EAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,OAA2B,EAAE,CAAS,EAAE,CAAS;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;CAEA"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
class ARButton {
|
|
2
|
+
static createButton(renderer, sessionInit = {}) {
|
|
3
|
+
const button = document.createElement('button');
|
|
4
|
+
let ARButtonControlsDomOverlay = false;
|
|
5
|
+
function showStartAR( /*device*/) {
|
|
6
|
+
if (sessionInit.domOverlay === undefined) {
|
|
7
|
+
var overlay = document.createElement('div');
|
|
8
|
+
overlay.style.display = 'none';
|
|
9
|
+
document.body.appendChild(overlay);
|
|
10
|
+
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
11
|
+
svg.setAttribute('width', 38);
|
|
12
|
+
svg.setAttribute('height', 38);
|
|
13
|
+
svg.style.position = 'absolute';
|
|
14
|
+
svg.style.right = '20px';
|
|
15
|
+
svg.style.top = '20px';
|
|
16
|
+
svg.addEventListener('click', function () {
|
|
17
|
+
currentSession.end();
|
|
18
|
+
});
|
|
19
|
+
overlay.appendChild(svg);
|
|
20
|
+
var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
|
21
|
+
path.setAttribute('d', 'M 12,12 L 28,28 M 28,12 12,28');
|
|
22
|
+
path.setAttribute('stroke', '#fff');
|
|
23
|
+
path.setAttribute('stroke-width', 2);
|
|
24
|
+
svg.appendChild(path);
|
|
25
|
+
if (sessionInit.optionalFeatures === undefined) {
|
|
26
|
+
sessionInit.optionalFeatures = [];
|
|
27
|
+
}
|
|
28
|
+
sessionInit.optionalFeatures.push('dom-overlay');
|
|
29
|
+
sessionInit.domOverlay = { root: overlay };
|
|
30
|
+
ARButtonControlsDomOverlay = true;
|
|
31
|
+
}
|
|
32
|
+
if (sessionInit.optionalFeatures === undefined)
|
|
33
|
+
sessionInit.optionalFeatures = [];
|
|
34
|
+
// added for Hololens support
|
|
35
|
+
sessionInit.optionalFeatures.push('local-floor');
|
|
36
|
+
sessionInit.optionalFeatures.push('hand-tracking');
|
|
37
|
+
sessionInit.optionalFeatures.push('layers');
|
|
38
|
+
//
|
|
39
|
+
let currentSession = null;
|
|
40
|
+
let originalDomOverlayParent = null;
|
|
41
|
+
async function onSessionStarted(session) {
|
|
42
|
+
// Workaround: seems WebXR Viewer has a non-standard behaviour when it comes to DOM Overlay and Canvas;
|
|
43
|
+
// HTMLElements that are inside the Canvas element are not visible in the DOM Overlay.
|
|
44
|
+
const isWebXRViewer = /WebXRViewer\//i.test(navigator.userAgent);
|
|
45
|
+
if (isWebXRViewer) {
|
|
46
|
+
if (sessionInit.domOverlay?.root) {
|
|
47
|
+
const overlayElement = sessionInit.domOverlay.root;
|
|
48
|
+
originalDomOverlayParent = overlayElement.parentElement;
|
|
49
|
+
if (originalDomOverlayParent) {
|
|
50
|
+
console.log("Reparent DOM Overlay to body", overlayElement, overlayElement.style.display);
|
|
51
|
+
// mozilla webxr does hide elements on session start
|
|
52
|
+
// this is only necessary if we generated the overlay element
|
|
53
|
+
overlayElement.style.display = "";
|
|
54
|
+
overlayElement.style.visibility = "";
|
|
55
|
+
document.body.appendChild(overlayElement);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.warn("WebXRViewer: No DOM Overlay found");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
session.addEventListener('end', onSessionEnded);
|
|
63
|
+
// 'local' is head-relative, 'local-floor' is what the device thinks the floor is (e.g. Hololens knows pretty well)
|
|
64
|
+
// renderer.xr.setReferenceSpaceType( 'local' );
|
|
65
|
+
await renderer.xr.setSession(session);
|
|
66
|
+
button.textContent = 'STOP AR';
|
|
67
|
+
if (ARButtonControlsDomOverlay)
|
|
68
|
+
sessionInit.domOverlay.root.style.display = '';
|
|
69
|
+
currentSession = session;
|
|
70
|
+
}
|
|
71
|
+
function onSessionEnded( /*event*/) {
|
|
72
|
+
currentSession.removeEventListener('end', onSessionEnded);
|
|
73
|
+
button.textContent = 'START AR';
|
|
74
|
+
// if we reparented the DOM overlay, we're reverting it here
|
|
75
|
+
if (originalDomOverlayParent)
|
|
76
|
+
originalDomOverlayParent.appendChild(sessionInit.domOverlay.root);
|
|
77
|
+
if (ARButtonControlsDomOverlay)
|
|
78
|
+
sessionInit.domOverlay.root.style.display = 'none';
|
|
79
|
+
currentSession = null;
|
|
80
|
+
}
|
|
81
|
+
//
|
|
82
|
+
button.style.display = '';
|
|
83
|
+
button.style.cursor = 'pointer';
|
|
84
|
+
button.style.left = 'calc(50% - 50px)';
|
|
85
|
+
button.style.width = '100px';
|
|
86
|
+
button.textContent = 'START AR';
|
|
87
|
+
button.onmouseenter = function () {
|
|
88
|
+
button.style.opacity = '1.0';
|
|
89
|
+
};
|
|
90
|
+
button.onmouseleave = function () {
|
|
91
|
+
button.style.opacity = '0.5';
|
|
92
|
+
};
|
|
93
|
+
button.onclick = function () {
|
|
94
|
+
if (currentSession === null) {
|
|
95
|
+
navigator.xr.requestSession('immersive-ar', sessionInit).then(onSessionStarted);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
currentSession.end();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function disableButton() {
|
|
103
|
+
button.disabled = true;
|
|
104
|
+
button.style.display = '';
|
|
105
|
+
button.style.cursor = 'auto';
|
|
106
|
+
button.style.left = 'calc(50% - 75px)';
|
|
107
|
+
button.style.width = '150px';
|
|
108
|
+
button.onmouseenter = null;
|
|
109
|
+
button.onmouseleave = null;
|
|
110
|
+
button.onclick = null;
|
|
111
|
+
}
|
|
112
|
+
function showARNotSupported() {
|
|
113
|
+
disableButton();
|
|
114
|
+
button.textContent = 'AR NOT SUPPORTED';
|
|
115
|
+
}
|
|
116
|
+
function stylizeElement(element) {
|
|
117
|
+
element.style.position = 'absolute';
|
|
118
|
+
element.style.bottom = '20px';
|
|
119
|
+
element.style.padding = '12px 6px';
|
|
120
|
+
element.style.border = '1px solid #fff';
|
|
121
|
+
element.style.borderRadius = '4px';
|
|
122
|
+
element.style.background = 'rgba(0,0,0,0.1)';
|
|
123
|
+
element.style.color = '#fff';
|
|
124
|
+
element.style.font = 'normal 13px sans-serif';
|
|
125
|
+
element.style.textAlign = 'center';
|
|
126
|
+
element.style.opacity = '0.5';
|
|
127
|
+
element.style.outline = 'none';
|
|
128
|
+
element.style.zIndex = '999';
|
|
129
|
+
}
|
|
130
|
+
if ('xr' in navigator) {
|
|
131
|
+
button.id = 'ARButton';
|
|
132
|
+
button.style.display = 'none';
|
|
133
|
+
stylizeElement(button);
|
|
134
|
+
navigator.xr.isSessionSupported('immersive-ar').then(function (supported) {
|
|
135
|
+
supported ? showStartAR() : showARNotSupported();
|
|
136
|
+
}).catch(showARNotSupported);
|
|
137
|
+
return button;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const message = document.createElement('a');
|
|
141
|
+
if (window.isSecureContext === false) {
|
|
142
|
+
message.href = document.location.href.replace(/^http:/, 'https:');
|
|
143
|
+
message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
message.href = 'https://immersiveweb.dev/';
|
|
147
|
+
message.innerHTML = 'WEBXR NOT AVAILABLE';
|
|
148
|
+
}
|
|
149
|
+
message.style.left = 'calc(50% - 90px)';
|
|
150
|
+
message.style.width = '180px';
|
|
151
|
+
message.style.textDecoration = 'none';
|
|
152
|
+
stylizeElement(message);
|
|
153
|
+
return message;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export { ARButton };
|
|
158
|
+
//# sourceMappingURL=ARButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ARButton.js","sourceRoot":"","sources":["../../../../include/three/ARButton.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mesh GPU Instancing extension
|
|
3
|
+
*
|
|
4
|
+
* Specification: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Vendor/EXT_mesh_gpu_instancing
|
|
5
|
+
*/
|
|
6
|
+
import { BufferAttribute, Matrix4, Vector3, Quaternion, } from 'three';
|
|
7
|
+
export default class GLTFMeshGPUInstancingExtension {
|
|
8
|
+
constructor(writer) {
|
|
9
|
+
this.writer = writer;
|
|
10
|
+
this.name = 'EXT_mesh_gpu_instancing';
|
|
11
|
+
}
|
|
12
|
+
writeNode(node, nodeDef) {
|
|
13
|
+
if (node.constructor.name !== "InstancedMesh")
|
|
14
|
+
return;
|
|
15
|
+
const writer = this.writer;
|
|
16
|
+
const extensionsUsed = writer.extensionsUsed;
|
|
17
|
+
const extensionDef = {};
|
|
18
|
+
nodeDef.extensions = nodeDef.extensions || {};
|
|
19
|
+
nodeDef.extensions[this.name] = extensionDef;
|
|
20
|
+
let mat = new Matrix4();
|
|
21
|
+
const pos0 = new Array();
|
|
22
|
+
const rot0 = new Array();
|
|
23
|
+
const scl0 = new Array();
|
|
24
|
+
for (let i = 0; i < node.count; i++) {
|
|
25
|
+
node.getMatrixAt(i, mat);
|
|
26
|
+
let p = new Vector3();
|
|
27
|
+
let r = new Quaternion();
|
|
28
|
+
let s = new Vector3();
|
|
29
|
+
mat.decompose(p, r, s);
|
|
30
|
+
pos0.push(p.x, p.y, p.z);
|
|
31
|
+
rot0.push(r.x, r.y, r.z, r.w);
|
|
32
|
+
scl0.push(s.x, s.y, s.z);
|
|
33
|
+
}
|
|
34
|
+
;
|
|
35
|
+
const pos = new Float32Array(pos0);
|
|
36
|
+
const rot = new Float32Array(rot0);
|
|
37
|
+
const scl = new Float32Array(scl0);
|
|
38
|
+
extensionDef.attributes = {
|
|
39
|
+
"TRANSLATION": writer.processAccessor(new BufferAttribute(pos, 3)),
|
|
40
|
+
"ROTATION": writer.processAccessor(new BufferAttribute(rot, 4)),
|
|
41
|
+
"SCALE": writer.processAccessor(new BufferAttribute(scl, 3)),
|
|
42
|
+
};
|
|
43
|
+
extensionsUsed[this.name] = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=EXT_mesh_gpu_instancing_exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EXT_mesh_gpu_instancing_exporter.js","sourceRoot":"","sources":["../../../../include/three/EXT_mesh_gpu_instancing_exporter.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEF,OAAO,EACP,eAAe,EACf,OAAO,EACP,OAAO,EACP,UAAU,GACV,MAAM,OAAO,CAAC;AAEf,MAAM,CAAC,OAAO,OAAO,8BAA8B;IAElD,YAAa,MAAM;QAElB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAEvC,CAAC;IAED,SAAS,CAAE,IAAI,EAAE,OAAO;QAEvB,IAAG,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe;YAAE,OAAO;QAErD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC9C,OAAO,CAAC,UAAU,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,YAAY,CAAC;QAE/C,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAEzB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAClC;YACC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAEzB,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;YAEtB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;QAAA,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAEnC,YAAY,CAAC,UAAU,GAAG;YACzB,aAAa,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;YACvE,UAAU,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;YACpE,OAAO,EAAG,MAAM,CAAC,eAAe,CAAE,IAAI,eAAe,CAAE,GAAG,EAAE,CAAC,CAAE,CAAE;SACjE,CAAC;QAEF,cAAc,CAAE,IAAI,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC;IAEpC,CAAC;CACD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
class VRButton {
|
|
2
|
+
static createButton(renderer, options) {
|
|
3
|
+
if (options) {
|
|
4
|
+
console.error('THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.');
|
|
5
|
+
}
|
|
6
|
+
const button = document.createElement('button');
|
|
7
|
+
function showEnterVR( /*device*/) {
|
|
8
|
+
let currentSession = null;
|
|
9
|
+
async function onSessionStarted(session) {
|
|
10
|
+
session.addEventListener('end', onSessionEnded);
|
|
11
|
+
// console.log("Session started, features: ",session)
|
|
12
|
+
await renderer.xr.setSession(session);
|
|
13
|
+
button.textContent = 'EXIT VR';
|
|
14
|
+
currentSession = session;
|
|
15
|
+
}
|
|
16
|
+
function onSessionEnded( /*event*/) {
|
|
17
|
+
currentSession.removeEventListener('end', onSessionEnded);
|
|
18
|
+
button.textContent = 'ENTER VR';
|
|
19
|
+
currentSession = null;
|
|
20
|
+
}
|
|
21
|
+
//
|
|
22
|
+
button.style.display = '';
|
|
23
|
+
button.style.cursor = 'pointer';
|
|
24
|
+
button.style.left = 'calc(50% - 50px)';
|
|
25
|
+
button.style.width = '100px';
|
|
26
|
+
button.textContent = 'ENTER VR';
|
|
27
|
+
button.onmouseenter = function () {
|
|
28
|
+
button.style.opacity = '1.0';
|
|
29
|
+
};
|
|
30
|
+
button.onmouseleave = function () {
|
|
31
|
+
button.style.opacity = '0.5';
|
|
32
|
+
};
|
|
33
|
+
button.onclick = function () {
|
|
34
|
+
if (currentSession === null) {
|
|
35
|
+
// WebXR's requestReferenceSpace only works if the corresponding feature
|
|
36
|
+
// was requested at session creation time. For simplicity, just ask for
|
|
37
|
+
// the interesting ones as optional features, but be aware that the
|
|
38
|
+
// requestReferenceSpace call will fail if it turns out to be unavailable.
|
|
39
|
+
// ('local' is always available for immersive sessions and doesn't need to
|
|
40
|
+
// be requested separately.)
|
|
41
|
+
const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking', 'high-fixed-foveation-level', 'layers'] };
|
|
42
|
+
navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
currentSession.end();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function disableButton() {
|
|
50
|
+
button.disabled = true;
|
|
51
|
+
button.style.display = '';
|
|
52
|
+
button.style.cursor = 'auto';
|
|
53
|
+
button.style.left = 'calc(50% - 75px)';
|
|
54
|
+
button.style.width = '150px';
|
|
55
|
+
button.onmouseenter = null;
|
|
56
|
+
button.onmouseleave = null;
|
|
57
|
+
button.onclick = null;
|
|
58
|
+
}
|
|
59
|
+
function showWebXRNotFound() {
|
|
60
|
+
disableButton();
|
|
61
|
+
button.textContent = 'VR NOT SUPPORTED';
|
|
62
|
+
}
|
|
63
|
+
function stylizeElement(element) {
|
|
64
|
+
element.style.position = 'absolute';
|
|
65
|
+
element.style.bottom = '20px';
|
|
66
|
+
element.style.padding = '12px 6px';
|
|
67
|
+
element.style.border = '1px solid #fff';
|
|
68
|
+
element.style.borderRadius = '4px';
|
|
69
|
+
element.style.background = 'rgba(0,0,0,0.1)';
|
|
70
|
+
element.style.color = '#fff';
|
|
71
|
+
element.style.font = 'normal 13px sans-serif';
|
|
72
|
+
element.style.textAlign = 'center';
|
|
73
|
+
element.style.opacity = '0.5';
|
|
74
|
+
element.style.outline = 'none';
|
|
75
|
+
element.style.zIndex = '999';
|
|
76
|
+
}
|
|
77
|
+
if ('xr' in navigator) {
|
|
78
|
+
button.id = 'VRButton';
|
|
79
|
+
button.style.display = 'none';
|
|
80
|
+
stylizeElement(button);
|
|
81
|
+
navigator.xr.isSessionSupported('immersive-vr').then(function (supported) {
|
|
82
|
+
supported ? showEnterVR() : showWebXRNotFound();
|
|
83
|
+
if (VRButton.xrSessionIsGranted) {
|
|
84
|
+
console.log("XR session is granted - will enter immersive web now");
|
|
85
|
+
button.click();
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return button;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const message = document.createElement('a');
|
|
92
|
+
if (window.isSecureContext === false) {
|
|
93
|
+
message.href = document.location.href.replace(/^http:/, 'https:');
|
|
94
|
+
message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
message.href = 'https://immersiveweb.dev/';
|
|
98
|
+
message.innerHTML = 'WEBXR NOT AVAILABLE';
|
|
99
|
+
}
|
|
100
|
+
message.style.left = 'calc(50% - 90px)';
|
|
101
|
+
message.style.width = '180px';
|
|
102
|
+
message.style.textDecoration = 'none';
|
|
103
|
+
stylizeElement(message);
|
|
104
|
+
return message;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static xrSessionIsGranted = false;
|
|
108
|
+
static registerSessionGrantedListener() {
|
|
109
|
+
if ('xr' in navigator) {
|
|
110
|
+
// WebXRViewer (based on Firefox) has a bug where addEventListener
|
|
111
|
+
// throws a silent exception and aborts execution entirely.
|
|
112
|
+
if (/WebXRViewer\//i.test(navigator.userAgent))
|
|
113
|
+
return;
|
|
114
|
+
navigator.xr.addEventListener('sessiongranted', () => {
|
|
115
|
+
VRButton.xrSessionIsGranted = true;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
VRButton.registerSessionGrantedListener();
|
|
121
|
+
export { VRButton };
|
|
122
|
+
//# sourceMappingURL=VRButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VRButton.js","sourceRoot":"","sources":["../../../../include/three/VRButton.js"],"names":[],"mappings":"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"}
|