janusweb 1.5.46 → 1.5.47

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.
@@ -102,7 +102,7 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
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
- this.updateUsers();
105
+ //this.updateUsers();
106
106
  this.updateRoom(room);
107
107
  }, 100);
108
108
  }
@@ -117,8 +117,10 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
117
117
  }
118
118
  updateRoom(room) {
119
119
  this.room = room;
120
- this.innerHTML = '';
121
- this.elements = elation.elements.fromTemplate('janus.comms.userlist', this);
120
+ //this.innerHTML = '';
121
+ if (!this.elements) {
122
+ this.elements = elation.elements.fromTemplate('janus.comms.userlist', this);
123
+ }
122
124
  this.userlist_room = this.userlist_room;
123
125
  this.userlist_online = this.userlist_online;
124
126
  this.userlist_friends = this.userlist_friends;
@@ -135,11 +137,12 @@ elation.elements.define('janus-comms-userlist', class extends elation.elements.u
135
137
  if (!janus.network) return;
136
138
  var remoteplayers = janus.network.remoteplayers;
137
139
  var users = Object.keys(remoteplayers);
138
- users.unshift(player.userid);
140
+ //users.unshift(player.userid);
139
141
 
140
142
  if (this.elements.roomusers) {
141
143
  this.elements.roomusers.value = users.length;
142
144
  }
145
+ this.userlist_room = this.querySelector('ui-list[name="userlist_room"]');
143
146
  if (this.userlist_room) {
144
147
  this.userlist_room.setItems(users);
145
148
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "janusweb",
3
3
  "description": "Web client for JanusVR worlds",
4
- "version": "1.5.46",
4
+ "version": "1.5.47",
5
5
  "main": "scripts/janusweb.js",
6
6
  "author": "James Baicoianu",
7
7
  "license": "MIT",
@@ -393,7 +393,6 @@ elation.require(['janusweb.janusbase', 'engine.things.leapmotion'], function() {
393
393
  sourcecontainer.traverse(n => { /*console.log(' - ', n); */ if (n instanceof THREE.SkinnedMesh && n.skeleton) sourcemesh = n; });
394
394
  }
395
395
  this.objects['3d'].traverse(n => { if (n instanceof THREE.SkinnedMesh && n.skeleton) destmesh = n; });
396
- //console.log('RETARGET ANI*MATION', clip, sourcemesh, destmesh, sourcecontainer);
397
396
  let remove = [];
398
397
  if (this.body && this.body.modelasset && this.body.modelasset.vrm) {
399
398
  let vrm = this.body.modelasset.vrm;
@@ -432,7 +431,6 @@ elation.require(['janusweb.janusbase', 'engine.things.leapmotion'], function() {
432
431
  let [name, property] = track.name.split('.');
433
432
  let srcbone = sourcemesh.skeleton.getBoneByName(name);
434
433
  let dstbone = destmesh.skeleton.getBoneByName(name);
435
- //console.log(' - fix track', name, property, track, srcbone, dstbone);
436
434
  if (dstbone) {
437
435
  let scale = srcbone.position.length() / dstbone.position.length();
438
436
  if (property == 'position') {
@@ -447,6 +445,41 @@ elation.require(['janusweb.janusbase', 'engine.things.leapmotion'], function() {
447
445
  remove.push(track);
448
446
  }
449
447
  });
448
+ } else {
449
+ let armature = sourcecontainer.getObjectByName('Armature');
450
+ newclip.tracks.forEach(track => {
451
+ track.name = track.name.replace('mixamorig', '');
452
+ let p = track.name.split('.');
453
+ if (p[1] == 'position') {
454
+ for (let i = 0; i < track.values.length / 3; i++) {
455
+ track.values[i * 3] *= armature.scale.x;
456
+ track.values[i * 3 + 1] *= armature.scale.y;
457
+ track.values[i * 3 + 2] *= armature.scale.z;
458
+ }
459
+ }
460
+ if (p[0] == 'Hips') {
461
+ if (p[1] == 'position') {
462
+ let v = new THREE.Vector3();
463
+ for (let i = 0; i < track.values.length / 3; i++) {
464
+ v.set(track.values[i * 3], track.values[i * 3 + 1], track.values[i * 3 + 2]).applyQuaternion(armature.quaternion);
465
+ //console.log('position rotation', v, [track.values[i * 3], track.values[i * 3 + 1], track.values[i * 3 + 2]], track);
466
+ track.values[i * 3] = v.x;
467
+ track.values[i * 3 + 1] = v.y;
468
+ track.values[i * 3 + 2] = v.z;
469
+ }
470
+ } else if (p[1] == 'quaternion') {
471
+ //console.log('apply rotation', track);
472
+ let q = new THREE.Quaternion();
473
+ for (let i = 0; i < track.values.length / 4; i++) {
474
+ q.set(track.values[i * 4], track.values[i * 4 + 1], track.values[i * 4 + 2], track.values[i * 4 + 3]).premultiply(armature.quaternion);
475
+ track.values[i * 4] = q.x;
476
+ track.values[i * 4 + 1] = q.y;
477
+ track.values[i * 4 + 2] = q.z;
478
+ track.values[i * 4 + 3] = q.w;
479
+ }
480
+ }
481
+ }
482
+ });
450
483
  }
451
484
  remove.forEach(track => {
452
485
  let idx = newclip.tracks.indexOf(track);
@@ -141,7 +141,7 @@ elation.component.add('engine.things.remoteplayer', function() {
141
141
  this.setVolume = async function(volume) {
142
142
  if (this.mouth) {
143
143
  if (!this.mouth.audio) {
144
- await this.mout.createAudio(null, listener);
144
+ await this.mouth.createAudio(null, listener);
145
145
  }
146
146
  this.mouth.audio.gain.gain.value = volume;
147
147
  }
package/scripts/room.js CHANGED
@@ -93,6 +93,7 @@ elation.require([
93
93
  'onload': { type: 'string' },
94
94
  'sync': { type: 'boolean', default: false },
95
95
  'pointerlock': { type: 'boolean', default: true, set: this.updatePointerLock },
96
+ 'players': { type: 'object', get: this.getRoomPlayers }
96
97
  });
97
98
 
98
99
  if (!roomTranslators) {
@@ -317,16 +318,26 @@ elation.require([
317
318
  var assets = [];
318
319
  if (this.skybox_equi) {
319
320
  let equi = this.getAsset('image', this.skybox_equi);
320
- elation.events.add(equi, 'asset_load', ev => {
321
- this.skyboxtexture = ev.target._texture;
321
+ if (equi.loaded) {
322
+ this.skyboxtexture = equi.getInstance();
322
323
  this.skyboxtexture.mapping = THREE.EquirectangularReflectionMapping;
323
324
  this.skyboxtexture.encoding = THREE.sRGBEncoding;
324
325
  if (this.janus.currentroom === this) {
325
326
  this.skyboxobj.setTexture(this.skyboxtexture);
326
327
  }
327
328
  elation.events.fire({element: this, type: 'skybox_update'});
328
- });
329
- equi.getInstance();
329
+ } else {
330
+ elation.events.add(equi, 'asset_load', ev => {
331
+ this.skyboxtexture = ev.target._texture;
332
+ this.skyboxtexture.mapping = THREE.EquirectangularReflectionMapping;
333
+ this.skyboxtexture.encoding = THREE.sRGBEncoding;
334
+ if (this.janus.currentroom === this) {
335
+ this.skyboxobj.setTexture(this.skyboxtexture);
336
+ }
337
+ elation.events.fire({element: this, type: 'skybox_update'});
338
+ });
339
+ equi.getInstance();
340
+ }
330
341
  } else if (hasSkybox) {
331
342
  assets = [
332
343
  this.getAsset('image', this.skybox_right_id || 'black'),
@@ -2049,7 +2060,7 @@ elation.require([
2049
2060
  var hashargs = elation.url();
2050
2061
  var host = elation.utils.any(this.server, hashargs['janus.server'], elation.config.get('janusweb.network.host')),
2051
2062
  port = elation.utils.any(this.port, hashargs['janus.port'], elation.config.get('janusweb.network.port'), 5567);
2052
- this._server = this.janusweb.getConnection(host, port, this.url);
2063
+ this._server = this.janus.network.getServerForRoom(this);
2053
2064
  }
2054
2065
  return this._server;
2055
2066
  }
@@ -2117,6 +2128,7 @@ elation.require([
2117
2128
  voipid: ['property', 'voipid'],
2118
2129
  voiprange: ['property', 'voiprange'],
2119
2130
  voipserver: ['property', 'voipserver'],
2131
+ players: ['property', 'players'],
2120
2132
 
2121
2133
  localToWorld: ['function', 'localToWorld'],
2122
2134
  worldToLocal: ['function', 'worldToLocal'],
@@ -2797,6 +2809,7 @@ console.log('dispatch to parent', event, this, event.target);
2797
2809
  child.die();
2798
2810
  }
2799
2811
  }
2812
+ elation.events.fire({type: 'janus_room_unload', element: this});
2800
2813
  }
2801
2814
  this.getAudioNodes = function() {
2802
2815
  return new Promise(async (resolve, reject) => {
@@ -2980,6 +2993,15 @@ console.log('unknown material', mat);
2980
2993
  }
2981
2994
  }
2982
2995
  }
2996
+ this.getRoomPlayers = function() {
2997
+ let players = {};
2998
+ for (let k in janus.network.remoteplayers) {
2999
+ if (this.janus.network.remoteplayers[k].room === this) {
3000
+ players[k] = this.janus.network.remoteplayers[k];
3001
+ }
3002
+ }
3003
+ return players;
3004
+ }
2983
3005
  }, elation.engine.things.generic);
2984
3006
  });
2985
3007