janusweb 1.5.40 → 1.5.41
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/css/janusweb.css +3 -0
- package/media/assets/webui/apps/avatar/avatar.js +18 -3
- package/media/assets/webui/apps/buttons/buttons.json +0 -1
- package/media/assets/webui/apps/comms/comms.html +1 -1
- package/media/assets/webui/apps/comms/comms.js +21 -6
- package/media/assets/webui/apps/comms/userlist.html +8 -5
- package/media/assets/webui/apps/virtualgamepad/virtualgamepad.js +1 -1
- package/package.json +1 -1
- package/scripts/external/JanusFireboxParser.js +1 -0
- package/scripts/room.js +1 -0
package/css/janusweb.css
CHANGED
|
@@ -67,7 +67,7 @@ elation.elements.define('janus-avatar-picker', class extends elation.elements.ba
|
|
|
67
67
|
<ui-list name="avatar" selectable="1" collection="avatarlist" itemcomponent="janus-avatar-picker-item"></ui-list>
|
|
68
68
|
</ui-tab>
|
|
69
69
|
<ui-tab label="Ready Player Me">
|
|
70
|
-
<iframe src="https://demo.readyplayer.me/avatar" allow="camera"></iframe>
|
|
70
|
+
<iframe data-src="https://demo.readyplayer.me/avatar" allow="camera"></iframe>
|
|
71
71
|
</ui-tab>
|
|
72
72
|
</ui-tabs>
|
|
73
73
|
`;
|
|
@@ -92,7 +92,7 @@ elation.elements.define('janus-avatar-picker', class extends elation.elements.ba
|
|
|
92
92
|
|
|
93
93
|
// Observer watches for visibility events and hides the 3d avatar preview when the 2d ui disappears
|
|
94
94
|
let threshold = [];
|
|
95
|
-
for (let i = 0; i < 100; i
|
|
95
|
+
for (let i = 0; i < 100; i += 10) threshold.push(i / 100);
|
|
96
96
|
let observer = new IntersectionObserver(ev => this.handleIntersectionChange(ev), { root: document, rootMargin: '0px', threshold: threshold });
|
|
97
97
|
observer.observe(this);
|
|
98
98
|
document.addEventListener('scroll', ev => this.handleScroll(ev));
|
|
@@ -106,7 +106,7 @@ elation.elements.define('janus-avatar-picker', class extends elation.elements.ba
|
|
|
106
106
|
<ui-list name="avatar" selectable="1" collection="avatarlist" itemcomponent="janus-avatar-picker-item"></ui-list>
|
|
107
107
|
`;
|
|
108
108
|
} else if (source.type == 'iframe') {
|
|
109
|
-
tpl = `<iframe src="${source.src}" allow="camera"></iframe>`;
|
|
109
|
+
tpl = `<iframe data-src="${source.src}" allow="camera"></iframe>`;
|
|
110
110
|
}
|
|
111
111
|
return tpl;
|
|
112
112
|
}
|
|
@@ -205,6 +205,21 @@ this.appendChild(this.previewwindow);
|
|
|
205
205
|
} else if (!this.avatarpreview && intersections[0].isIntersecting) {
|
|
206
206
|
this.showPreview();
|
|
207
207
|
}
|
|
208
|
+
// If our iframe hasn't been loaded yet, set a timer to load it. Clear the time out if the element becomes hidden before it fires.
|
|
209
|
+
if (intersections[0].intersectionRatio > 0) {
|
|
210
|
+
if (this.iframevistimer) {
|
|
211
|
+
clearTimeout(this.iframevistimer);
|
|
212
|
+
}
|
|
213
|
+
this.iframevistimer = setTimeout(() => {
|
|
214
|
+
let iframe = this.querySelector('iframe[data-src]');
|
|
215
|
+
if (iframe && iframe.src != iframe.dataset.src) {
|
|
216
|
+
iframe.src = iframe.dataset.src;
|
|
217
|
+
delete iframe.dataset.src;
|
|
218
|
+
}
|
|
219
|
+
}, 50);
|
|
220
|
+
} else if (this.iframevistimer) {
|
|
221
|
+
clearTimeout(this.iframevistimer);
|
|
222
|
+
}
|
|
208
223
|
}
|
|
209
224
|
handleScroll(ev) {
|
|
210
225
|
this.updatePreviewPosition();
|
|
@@ -93,16 +93,17 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
|
|
|
93
93
|
this.elements = elation.elements.fromTemplate('janus.comms.userlist', this);
|
|
94
94
|
this.client = this.getClient();
|
|
95
95
|
this.janusweb = this.client.janusweb;
|
|
96
|
+
|
|
96
97
|
this.userlist_room = this.elements.userlist_room;
|
|
97
98
|
this.userlist_online = this.elements.userlist_online;
|
|
98
99
|
this.userlist_friends = this.elements.userlist_friends;
|
|
99
|
-
|
|
100
100
|
this.usermarkers = {};
|
|
101
101
|
|
|
102
102
|
elation.events.add(this.janusweb, 'room_load_start', (ev) => { this.updateRoom(ev.data); });
|
|
103
103
|
elation.events.add(this.janusweb.network, 'janusweb_user_joined,janusweb_user_left,janusweb_user_disconnected', (ev) => this.updateUsers());
|
|
104
104
|
setTimeout(() => {
|
|
105
105
|
this.updateUsers();
|
|
106
|
+
this.updateRoom(room);
|
|
106
107
|
}, 100);
|
|
107
108
|
}
|
|
108
109
|
getClient() {
|
|
@@ -121,6 +122,13 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
|
|
|
121
122
|
this.userlist_room = this.userlist_room;
|
|
122
123
|
this.userlist_online = this.userlist_online;
|
|
123
124
|
this.userlist_friends = this.userlist_friends;
|
|
125
|
+
if (room.private) {
|
|
126
|
+
this.parentNode.elements.chat.open = false;
|
|
127
|
+
this.elements.userlist_details.open = false;
|
|
128
|
+
} else {
|
|
129
|
+
this.parentNode.elements.chat.open = true;
|
|
130
|
+
this.elements.userlist_details.open = true;
|
|
131
|
+
}
|
|
124
132
|
this.updateUsers();
|
|
125
133
|
}
|
|
126
134
|
updateUsers() {
|
|
@@ -129,10 +137,12 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
|
|
|
129
137
|
var users = Object.keys(remoteplayers);
|
|
130
138
|
users.unshift(player.userid);
|
|
131
139
|
|
|
132
|
-
this.elements.roomusers
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
140
|
+
if (this.elements.roomusers) {
|
|
141
|
+
this.elements.roomusers.value = users.length;
|
|
142
|
+
}
|
|
143
|
+
if (this.userlist_room) {
|
|
144
|
+
this.userlist_room.setItems(users);
|
|
145
|
+
}
|
|
136
146
|
for (let k in remoteplayers) {
|
|
137
147
|
let p = remoteplayers[k];
|
|
138
148
|
if (this.usermarkers[k] && this.usermarkers[k].parent !== p.getProxyObject()) {
|
|
@@ -147,7 +157,6 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
|
|
|
147
157
|
});
|
|
148
158
|
this.usermarkers[k].start();
|
|
149
159
|
}
|
|
150
|
-
|
|
151
160
|
}
|
|
152
161
|
}
|
|
153
162
|
setFont(fontname) {
|
|
@@ -207,6 +216,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
207
216
|
}
|
|
208
217
|
handleUserJoined(ev) {
|
|
209
218
|
var data = ev.data;
|
|
219
|
+
if (!this.elements.chatmessages) return;
|
|
210
220
|
this.elements.chatmessages.add({
|
|
211
221
|
timestamp: new Date().getTime(),
|
|
212
222
|
type: 'join',
|
|
@@ -217,6 +227,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
217
227
|
}
|
|
218
228
|
handleUserLeft(ev) {
|
|
219
229
|
var data = ev.data;
|
|
230
|
+
if (!this.elements.chatmessages) return;
|
|
220
231
|
this.elements.chatmessages.add({
|
|
221
232
|
timestamp: new Date().getTime(),
|
|
222
233
|
type: 'part',
|
|
@@ -227,6 +238,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
227
238
|
}
|
|
228
239
|
handleUserDisconnected(ev) {
|
|
229
240
|
var data = ev.data;
|
|
241
|
+
if (!this.elements.chatmessages) return;
|
|
230
242
|
this.elements.chatmessages.add({
|
|
231
243
|
timestamp: new Date().getTime(),
|
|
232
244
|
type: 'disconnect',
|
|
@@ -237,6 +249,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
237
249
|
}
|
|
238
250
|
handleUserChat(ev) {
|
|
239
251
|
var data = ev.data;
|
|
252
|
+
if (!this.elements.chatmessages) return;
|
|
240
253
|
this.elements.chatmessages.add({
|
|
241
254
|
timestamp: new Date().getTime(),
|
|
242
255
|
type: 'chat',
|
|
@@ -249,6 +262,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
249
262
|
sendMessage(msg) {
|
|
250
263
|
if (msg && msg.length > 0) {
|
|
251
264
|
janus.network.send({'method': 'chat', data: msg});
|
|
265
|
+
if (!this.elements.chatmessages) return;
|
|
252
266
|
this.elements.chatmessages.add({
|
|
253
267
|
timestamp: new Date().getTime(),
|
|
254
268
|
type: 'selfchat',
|
|
@@ -260,6 +274,7 @@ elation.elements.define('janus-comms-chat', class extends elation.elements.base
|
|
|
260
274
|
}
|
|
261
275
|
}
|
|
262
276
|
handleClientPrint(msg) {
|
|
277
|
+
if (!this.elements.chatmessages) return;
|
|
263
278
|
this.elements.chatmessages.add({
|
|
264
279
|
timestamp: new Date().getTime(),
|
|
265
280
|
type: 'print',
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
<h3>Private Room</h3>
|
|
1
|
+
{?room.private}
|
|
2
|
+
<details name="userlist_details">
|
|
3
|
+
<summary>No online users</summary>
|
|
5
4
|
<p>This room is marked as private. You are not broadcasting your location while here - others can't see you, and you can't see them.</p>
|
|
6
|
-
|
|
5
|
+
</details>
|
|
6
|
+
{:else}
|
|
7
|
+
<details open name="userlist_details">
|
|
8
|
+
<summary>Online Users (<ui-indicator name="roomusers" value="0"></ui-indicator>)</summary>
|
|
7
9
|
<ui-list name="userlist_room" emptycontent="No other users in this room"></ui-list>
|
|
8
10
|
<!-- ui-tabs showcounts="true">
|
|
9
11
|
<ui-tab name="roomusers" label="Room">
|
|
@@ -17,3 +19,4 @@
|
|
|
17
19
|
</ui-tab>
|
|
18
20
|
</ui-tabs -->
|
|
19
21
|
</details>
|
|
22
|
+
{/room.private}
|
|
@@ -96,7 +96,7 @@ this.debug.style.zIndex = '1000';
|
|
|
96
96
|
this.style.top = (this.position[1] * 100) + '%';
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
let janus =
|
|
99
|
+
let janus = this.queryParentSelector('janusweb-client');
|
|
100
100
|
if (janus) {
|
|
101
101
|
janus.engine.systems.controls.addVirtualGamepad(this);
|
|
102
102
|
this.hide();
|
package/package.json
CHANGED
package/scripts/room.js
CHANGED
|
@@ -306,6 +306,7 @@ elation.require([
|
|
|
306
306
|
let equi = this.getAsset('image', this.skybox_equi);
|
|
307
307
|
elation.events.add(equi, 'asset_load', ev => {
|
|
308
308
|
this.skyboxtexture = ev.target._texture;
|
|
309
|
+
this.skyboxtexture.mapping = THREE.EquirectangularReflectionMapping;
|
|
309
310
|
if (this.janus.currentroom === this) {
|
|
310
311
|
this.skyboxobj.setTexture(this.skyboxtexture);
|
|
311
312
|
}
|