From 8cc69a87a5ad0aecc991b95c36531daa66153094 Mon Sep 17 00:00:00 2001 From: Adam Clarke Date: Thu, 10 Feb 2022 15:46:09 -0500 Subject: [PATCH 01/10] vrms are made into avatars, set default quality --- type_templates/scn.js | 44 +++++++++++++++----- type_templates/vrm.js | 93 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 111 insertions(+), 26 deletions(-) diff --git a/type_templates/scn.js b/type_templates/scn.js index 21cc1c5..fc61bef 100644 --- a/type_templates/scn.js +++ b/type_templates/scn.js @@ -1,11 +1,11 @@ import * as THREE from 'three'; import metaversefile from 'metaversefile'; -const {useApp, addTrackedApp, removeTrackedApp, useCleanup} = metaversefile; +const {useApp, addTrackedApp, removeTrackedApp, useCleanup, useLocalPlayer, createAvatar, useWorld, useAvatarSpriter, useNpcPlayerInternal} = metaversefile; function getObjectUrl(object) { let {start_url, type, content} = object; - + let u; if (start_url) { // make path relative to the .scn file @@ -24,9 +24,9 @@ function getObjectUrl(object) { export default e => { const app = useApp(); app.appType = 'scn'; - + const srcUrl = '${this.srcUrl}'; - + let live = true; e.waitUntil((async () => { const res = await fetch(srcUrl); @@ -47,7 +47,7 @@ export default e => { const sKeys = Object.keys(buckets).sort((a, b)=>{ return a - b; }); - + for (let i=0; i{ @@ -56,17 +56,43 @@ export default e => { position = new THREE.Vector3().fromArray(position); quaternion = new THREE.Quaternion().fromArray(quaternion); scale = new THREE.Vector3().fromArray(scale); - + const u2 = getObjectUrl(object); - await addTrackedApp(u2, position, quaternion, scale, components); + const load = !object.is_player; + + if (object.is_player){ + console.log("object is a player", useLocalPlayer()); + if (useLocalPlayer().avatar){ + console.log("ALREADY HAVE AVATAR"); + return; //don't add another local player avatar if you've set one in the application. + } + const trackedApp = await useLocalPlayer().appManager.addTrackedApp(u2, position, quaternion, scale, components, load ); + // if (trackedApp.appType == "vrm") console.log("TRACKED APP IS NOW", trackedApp, load); + trackedApp.activate(); + } else { + console.log("object is not a player"); + const trackedApp = await addTrackedApp(u2, position, quaternion, scale, components ); + + if (trackedApp && trackedApp.appType == "vrm") { + const NPC = useNpcPlayerInternal(); + const npc = new NPC(); + await npc.setAvatarAppAsync(trackedApp); + + // npc['app'] = trackedApp; + // trackedApp['avatar'] = avatar; + + } + } + } })); } + })()); - + useCleanup(() => { live = false; }); return true; -}; \ No newline at end of file +}; diff --git a/type_templates/vrm.js b/type_templates/vrm.js index d4efe34..00b119c 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import metaversefile from 'metaversefile'; import { VRMMaterialImporter } from '@pixiv/three-vrm/lib/three-vrm.module'; -const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer} = metaversefile; +const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer, useAvatarSpriter} = metaversefile; const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); @@ -50,8 +50,15 @@ const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { return result; }; */ const _toonShaderify = async o => { + // console.log("USING TOON SHADER", o); await new VRMMaterialImporter().convertGLTFMaterials(o); }; +const _spritify = o => { + + // console.log("USING sprites", o); + o.spriteMegaAvatarMesh = useAvatarSpriter().createSpriteMegaMesh(o); + +}; const mapTypes = [ 'alphaMap', 'aoMap', @@ -112,20 +119,45 @@ const _unskin = o => { // process avatar to elide expensive bone updates } */ }; +const _setQuality = async (quality, vrm)=> { + switch (quality) { + case 1: { + _spritify(vrm); + break; + } + case 2: { + console.log('not implemented'); // XXX + break; + } + case 3: { + console.log('not implemented'); // XXX + break; + } + case 4: { + await _toonShaderify(vrm); + break; + } + default: { + throw new Error('unknown avatar quality: ' + quality); + } + } +} + export default e => { const physics = usePhysics(); - + const app = useApp(); app.appType = 'vrm'; - + app.skinnedVrm = null; app.unskinnedVrm = null; - + const srcUrl = '${this.srcUrl}'; const components = ( ${this.components} ); for (const {key, value} of components) { + console.log("COMPONANTS", key, value); app.setComponent(key, value); } @@ -143,14 +175,20 @@ export default e => { const unskinnedVrm = await _cloneVrm(); if (unskinnedVrm) { - await _toonShaderify(unskinnedVrm); + const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; + + console.log("UNSKINNED", app); + _setQuality(quality, unskinnedVrm) + app.unskinnedVrm = unskinnedVrm; app.add(unskinnedVrm.scene); + unskinnedVrm.spriteMegaAvatarMesh && app.add(unskinnedVrm.spriteMegaAvatarMesh); unskinnedVrm.scene.updateMatrixWorld(); - + _addAnisotropy(unskinnedVrm.scene, 16); _unskin(unskinnedVrm.scene); + unskinnedVrm.spriteMegaAvatarMesh && _unskin(unskinnedVrm.spriteMegaAvatarMesh); const _addPhysics = () => { const fakeHeight = 1.5; @@ -173,18 +211,30 @@ export default e => { if (app.getComponent('physics')) { _addPhysics(); } - + activateCb = async () => { const localPlayer = useLocalPlayer(); localPlayer.setAvatarApp(app); + // console.log(localPlayer.avatar); + // + // const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; + // localPlayer.avatar.setQuality(quality).then(()=>{ + // // + // const am = localPlayer.appManager; + // const trackedApp = am.getTrackedApp(localPlayer.avatar.app.instanceId); + // trackedApp.set('load', true); + // // console.log("VRM PLAYER AVATAR", trackedApp.get('load'), localPlayer.avatar); + // // + // console.log("VRM ACTIVATED"); + }; } })()); - + useActivate(() => { activateCb && activateCb(); }); - + app.lookAt = (lookAt => function(p) { lookAt.apply(this, arguments); this.quaternion.premultiply(q180); @@ -194,8 +244,11 @@ export default e => { app.setSkinning = async skinning => { if (skinning && !skinned) { if (!app.skinnedVrm) { + console.log("SKINNING", app); app.skinnedVrm = await _cloneVrm(); - await _toonShaderify(app.skinnedVrm); + // await _toonShaderify(app.skinnedVrm); + const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; + _setQuality(quality, app.skinnedVrm); } for (const physicsId of physicsIds) { @@ -204,25 +257,31 @@ export default e => { } app.unskinnedVrm.scene.parent.remove(app.unskinnedVrm.scene); - + app.unskinnedVrm.spriteMegaAvatarMesh && + app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh); + app.position.set(0, 0, 0); app.quaternion.identity(); app.scale.set(1, 1, 1); app.updateMatrixWorld(); - + app.add(app.skinnedVrm.scene); - + app.skinnedVrm.spriteMegaAvatarMesh && app.add(app.skinnedVrm.spriteMegaAvatarMesh); + skinned = true; } else if (!skinning && skinned) { app.skinnedVrm.scene.parent.remove(app.skinnedVrm.scene); - + app.unskinnedVrm.spriteMegaAvatarMesh && + app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh); + for (const physicsId of physicsIds) { physics.enableGeometry(physicsId); physics.enableGeometryQueries(physicsId); } - + app.add(app.unskinnedVrm.scene); - + app.unskinnedVrm.spriteMegaAvatarMesh && app.add(app.unskinnedVrm.spriteMegaAvatarMesh); + skinned = false; } } @@ -235,4 +294,4 @@ export default e => { }); return app; -}; \ No newline at end of file +}; From d638a31efdcb4baf967c56cf06cc483abcdbcb8e Mon Sep 17 00:00:00 2001 From: Adam Clarke Date: Fri, 11 Feb 2022 19:08:32 -0500 Subject: [PATCH 02/10] read quality from metaverse file, provide access to _toonShaderify --- type_templates/vrm.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 00b119c..ddd9794 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import metaversefile from 'metaversefile'; import { VRMMaterialImporter } from '@pixiv/three-vrm/lib/three-vrm.module'; -const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer, useAvatarSpriter} = metaversefile; +const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer, useAvatarSpriter, getQualitySetting} = metaversefile; const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); @@ -50,14 +50,10 @@ const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { return result; }; */ const _toonShaderify = async o => { - // console.log("USING TOON SHADER", o); await new VRMMaterialImporter().convertGLTFMaterials(o); }; const _spritify = o => { - - // console.log("USING sprites", o); o.spriteMegaAvatarMesh = useAvatarSpriter().createSpriteMegaMesh(o); - }; const mapTypes = [ 'alphaMap', @@ -165,6 +161,7 @@ export default e => { const _cloneVrm = async () => { const vrm = await parseVrm(arrayBuffer, srcUrl); vrm.cloneVrm = _cloneVrm; + vrm.toonShaderify = _toonShaderify; return vrm; }; @@ -175,9 +172,8 @@ export default e => { const unskinnedVrm = await _cloneVrm(); if (unskinnedVrm) { - const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; + const quality = getQualitySetting(); - console.log("UNSKINNED", app); _setQuality(quality, unskinnedVrm) app.unskinnedVrm = unskinnedVrm; @@ -188,7 +184,7 @@ export default e => { _addAnisotropy(unskinnedVrm.scene, 16); _unskin(unskinnedVrm.scene); - unskinnedVrm.spriteMegaAvatarMesh && _unskin(unskinnedVrm.spriteMegaAvatarMesh); + unskinnedVrm.spriteMegaAvatarMesh && _unskin(unskinnedVrm.spriteMegaAvatarMesh); const _addPhysics = () => { const fakeHeight = 1.5; @@ -247,8 +243,8 @@ export default e => { console.log("SKINNING", app); app.skinnedVrm = await _cloneVrm(); // await _toonShaderify(app.skinnedVrm); - const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; - _setQuality(quality, app.skinnedVrm); + const quality = getQualitySetting(); + _setQuality(quality, app.skinnedVrm) } for (const physicsId of physicsIds) { From 2292a5e4962e1868bf74968f09e31950f9dabd69 Mon Sep 17 00:00:00 2001 From: Adam Clarke Date: Mon, 14 Feb 2022 11:59:58 -0500 Subject: [PATCH 03/10] trying to use less memory when loading vrms --- type_templates/vrm.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/type_templates/vrm.js b/type_templates/vrm.js index ddd9794..9b60533 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -80,6 +80,7 @@ const _addAnisotropy = (o, anisotropyLevel) => { }); }; const _unskin = o => { // process avatar to elide expensive bone updates + console.log("unskinning", o.constructor.name, o); const skinnedMeshes = []; o.traverse(o => { if (o.isSkinnedMesh) { @@ -122,11 +123,11 @@ const _setQuality = async (quality, vrm)=> { break; } case 2: { - console.log('not implemented'); // XXX + console.log('crunched not yet implemented'); // XXX break; } case 3: { - console.log('not implemented'); // XXX + console.log('standard quality, already good to go!'); // XXX break; } case 4: { @@ -177,9 +178,10 @@ export default e => { _setQuality(quality, unskinnedVrm) app.unskinnedVrm = unskinnedVrm; + console.log("app is", app); - app.add(unskinnedVrm.scene); - unskinnedVrm.spriteMegaAvatarMesh && app.add(unskinnedVrm.spriteMegaAvatarMesh); + app.add(quality == 1 ? unskinnedVrm.spriteMegaAvatarMesh : unskinnedVrm.scene); + // unskinnedVrm.spriteMegaAvatarMesh && app.add(unskinnedVrm.spriteMegaAvatarMesh); unskinnedVrm.scene.updateMatrixWorld(); _addAnisotropy(unskinnedVrm.scene, 16); @@ -205,6 +207,7 @@ export default e => { physicsIds.push(physicsId); }; if (app.getComponent('physics')) { + console.log("adding physics!"); _addPhysics(); } @@ -239,11 +242,12 @@ export default e => { let skinned = false; app.setSkinning = async skinning => { if (skinning && !skinned) { + const quality = getQualitySetting(); if (!app.skinnedVrm) { - console.log("SKINNING", app); + // console.log("SKINNING", app); app.skinnedVrm = await _cloneVrm(); + console.log("skinning", app.skinnedVrm.scene.constructor.name, app.skinnedVrm.scene); // await _toonShaderify(app.skinnedVrm); - const quality = getQualitySetting(); _setQuality(quality, app.skinnedVrm) } @@ -251,18 +255,18 @@ export default e => { physics.disableGeometry(physicsId); physics.disableGeometryQueries(physicsId); } - - app.unskinnedVrm.scene.parent.remove(app.unskinnedVrm.scene); - app.unskinnedVrm.spriteMegaAvatarMesh && - app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh); + quality == 1 ? app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh) : + app.unskinnedVrm.scene.parent.remove(app.unskinnedVrm.scene); + // app.unskinnedVrm.spriteMegaAvatarMesh && + app.position.set(0, 0, 0); app.quaternion.identity(); app.scale.set(1, 1, 1); app.updateMatrixWorld(); - app.add(app.skinnedVrm.scene); - app.skinnedVrm.spriteMegaAvatarMesh && app.add(app.skinnedVrm.spriteMegaAvatarMesh); + quality == 1 ? app.add(app.skinnedVrm.spriteMegaAvatarMesh) : app.add(app.skinnedVrm.scene); + skinned = true; } else if (!skinning && skinned) { From b6d825f5ef382fa86ed786bff3f7395a9aa84d67 Mon Sep 17 00:00:00 2001 From: Adam Clarke Date: Wed, 16 Feb 2022 17:13:41 -0500 Subject: [PATCH 04/10] avatar cruncher and remove unskinned(tmp) --- type_templates/scn.js | 4 +- type_templates/vrm.js | 182 ++++++++++++++++++++---------------------- 2 files changed, 87 insertions(+), 99 deletions(-) diff --git a/type_templates/scn.js b/type_templates/scn.js index fc61bef..6a303ab 100644 --- a/type_templates/scn.js +++ b/type_templates/scn.js @@ -73,14 +73,12 @@ export default e => { console.log("object is not a player"); const trackedApp = await addTrackedApp(u2, position, quaternion, scale, components ); - if (trackedApp && trackedApp.appType == "vrm") { + if (object.is_npc && trackedApp && trackedApp.appType == "vrm") { const NPC = useNpcPlayerInternal(); const npc = new NPC(); await npc.setAvatarAppAsync(trackedApp); - // npc['app'] = trackedApp; // trackedApp['avatar'] = avatar; - } } diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 9b60533..6ca3240 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -1,7 +1,7 @@ import * as THREE from 'three'; import metaversefile from 'metaversefile'; import { VRMMaterialImporter } from '@pixiv/three-vrm/lib/three-vrm.module'; -const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer, useAvatarSpriter, getQualitySetting} = metaversefile; +const {useApp, useLoaders, usePhysics, useCleanup, useActivate, useLocalPlayer, useAvatarSpriter, getQualitySetting, useAvatarCruncher} = metaversefile; const localVector = new THREE.Vector3(); const localVector2 = new THREE.Vector3(); @@ -49,12 +49,16 @@ const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { }); return result; }; */ +const _spritify = o => { + return useAvatarSpriter().createSpriteMegaMesh(o); + // o.spriteMegaAvatarMesh = useAvatarSpriter().createSpriteMegaMesh(await o.cloneVrm()); +}; +const _crunch = o => { + return useAvatarCruncher().crunchAvatarModel(o); +}; const _toonShaderify = async o => { await new VRMMaterialImporter().convertGLTFMaterials(o); }; -const _spritify = o => { - o.spriteMegaAvatarMesh = useAvatarSpriter().createSpriteMegaMesh(o); -}; const mapTypes = [ 'alphaMap', 'aoMap', @@ -79,51 +83,27 @@ const _addAnisotropy = (o, anisotropyLevel) => { } }); }; -const _unskin = o => { // process avatar to elide expensive bone updates - console.log("unskinning", o.constructor.name, o); - const skinnedMeshes = []; - o.traverse(o => { - if (o.isSkinnedMesh) { - skinnedMeshes.push(o); - } - }); - - for (const skinnedMesh of skinnedMeshes) { - const {geometry, material, position, quaternion, scale, matrix, matrixWorld, visible, parent} = skinnedMesh; - const mesh = new THREE.Mesh(geometry, material); - mesh.castShadow = true; - mesh.receiveShadow = true; - mesh.position.copy(position); - mesh.quaternion.copy(quaternion); - mesh.scale.copy(scale); - mesh.matrix.copy(matrix); - mesh.matrixWorld.copy(matrixWorld); - mesh.visible = visible; - mesh.parent = parent; - const index = parent ? parent.children.indexOf(skinnedMesh) : -1; - if (index !== -1) { - parent.children.splice(index, 1, mesh); - } - } - /* for (const skinnedMesh of skinnedMeshes) { - const skeleton = skinnedMesh.skeleton; - for (const bone of skeleton.bones) { - if (bone.parent && !bone.parent.isBone) { - bone.oldParent = bone.parent; - bone.parent.remove(bone); - } - } - } */ -}; -const _setQuality = async (quality, vrm)=> { +const _setQuality = async (quality, skinnedVrms)=> { + const baseVrm = skinnedVrms.base; switch (quality) { case 1: { - _spritify(vrm); + + const skinnedVrmSprite = await baseVrm.cloneVrm(); + _spritify(skinnedVrmSprite); + + skinnedVrms['sprite'] = skinnedVrmSprite; + skinnedVrms['active'] = skinnedVrmSprite; + break; } case 2: { - console.log('crunched not yet implemented'); // XXX + const skinnedVrmCrunched = await baseVrm.cloneVrm(); + _crunch(skinnedVrmCrunched); + + skinnedVrms['crunch'] = skinnedVrmCrunched; + skinnedVrms['active'] = skinnedVrmCrunched; + break; } case 3: { @@ -131,7 +111,7 @@ const _setQuality = async (quality, vrm)=> { break; } case 4: { - await _toonShaderify(vrm); + await _toonShaderify(baseVrm); break; } default: { @@ -140,14 +120,14 @@ const _setQuality = async (quality, vrm)=> { } } + export default e => { const physics = usePhysics(); const app = useApp(); app.appType = 'vrm'; - - app.skinnedVrm = null; - app.unskinnedVrm = null; + + app.skinnedVrms = {}; const srcUrl = '${this.srcUrl}'; const components = ( @@ -165,69 +145,76 @@ export default e => { vrm.toonShaderify = _toonShaderify; return vrm; }; + + const _prepVrm = (type, vrm) => { + + vrm.scene.visible = false; + app.add(vrm.scene); + vrm.scene.updateMatrixWorld(); + _addAnisotropy(vrm.scene, 16); + } let physicsIds = []; let activateCb = null; e.waitUntil((async () => { arrayBuffer = await _fetchArrayBuffer(srcUrl); - const unskinnedVrm = await _cloneVrm(); - if (unskinnedVrm) { - const quality = getQualitySetting(); - - _setQuality(quality, unskinnedVrm) - - app.unskinnedVrm = unskinnedVrm; - console.log("app is", app); + const skinnedVrmBase = await _cloneVrm(); + app.skinnedVrms['base'] = skinnedVrmBase; + app.skinnedVrms['active'] = skinnedVrmBase; - app.add(quality == 1 ? unskinnedVrm.spriteMegaAvatarMesh : unskinnedVrm.scene); - // unskinnedVrm.spriteMegaAvatarMesh && app.add(unskinnedVrm.spriteMegaAvatarMesh); - unskinnedVrm.scene.updateMatrixWorld(); - _addAnisotropy(unskinnedVrm.scene, 16); - _unskin(unskinnedVrm.scene); - unskinnedVrm.spriteMegaAvatarMesh && _unskin(unskinnedVrm.spriteMegaAvatarMesh); + const quality = getQualitySetting(); + await _setQuality(quality, app.skinnedVrms) - const _addPhysics = () => { - const fakeHeight = 1.5; - localMatrix.compose( - localVector.set(0, fakeHeight/2, 0), - localQuaternion.identity(), - localVector2.set(0.3, fakeHeight/2, 0.3) - ) - .premultiply(app.matrixWorld) - .decompose(localVector, localQuaternion, localVector2); + console.log("app is", app); - const physicsId = physics.addBoxGeometry( - localVector, - localQuaternion, - localVector2, - false - ); - physicsIds.push(physicsId); - }; - if (app.getComponent('physics')) { - console.log("adding physics!"); - _addPhysics(); + for (const type in app.skinnedVrms) { + if (type !== 'active' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { + const vrm = app.skinnedVrms[type]; + _prepVrm(type, vrm); } + } - activateCb = async () => { - const localPlayer = useLocalPlayer(); - localPlayer.setAvatarApp(app); - // console.log(localPlayer.avatar); - // - // const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; - // localPlayer.avatar.setQuality(quality).then(()=>{ - // // - // const am = localPlayer.appManager; - // const trackedApp = am.getTrackedApp(localPlayer.avatar.app.instanceId); - // trackedApp.set('load', true); - // // console.log("VRM PLAYER AVATAR", trackedApp.get('load'), localPlayer.avatar); - // // - // console.log("VRM ACTIVATED"); + const _addPhysics = () => { + const fakeHeight = 1.5; + localMatrix.compose( + localVector.set(0, fakeHeight/2, 0), + localQuaternion.identity(), + localVector2.set(0.3, fakeHeight/2, 0.3) + ) + .premultiply(app.matrixWorld) + .decompose(localVector, localQuaternion, localVector2); - }; + const physicsId = physics.addBoxGeometry( + localVector, + localQuaternion, + localVector2, + false + ); + physicsIds.push(physicsId); + }; + if (app.getComponent('physics')) { + console.log("adding physics!"); + _addPhysics(); } + + activateCb = async () => { + const localPlayer = useLocalPlayer(); + localPlayer.setAvatarApp(app); + // console.log(localPlayer.avatar); + // + // const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; + // localPlayer.avatar.setQuality(quality).then(()=>{ + // // + // const am = localPlayer.appManager; + // const trackedApp = am.getTrackedApp(localPlayer.avatar.app.instanceId); + // trackedApp.set('load', true); + // // console.log("VRM PLAYER AVATAR", trackedApp.get('load'), localPlayer.avatar); + // // + // console.log("VRM ACTIVATED"); + + }; })()); useActivate(() => { @@ -239,6 +226,7 @@ export default e => { this.quaternion.premultiply(q180); })(app.lookAt); +<<<<<<< HEAD let skinned = false; app.setSkinning = async skinning => { if (skinning && !skinned) { @@ -286,6 +274,8 @@ export default e => { } } +======= +>>>>>>> avatar cruncher and remove unskinned(tmp) useCleanup(() => { for (const physicsId of physicsIds) { physics.removeGeometry(physicsId); From 412a8244b1d33b74dc930b4c35a4422e220535d4 Mon Sep 17 00:00:00 2001 From: Adam Clarke Date: Wed, 16 Feb 2022 17:18:19 -0500 Subject: [PATCH 05/10] del package.json and npm_modules(npm workspace) --- package-lock.json | 1163 --------------------------------------------- 1 file changed, 1163 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4e2367a..0000000 --- a/package-lock.json +++ /dev/null @@ -1,1163 +0,0 @@ -{ - "name": "metaversefile", - "version": "0.0.32", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "metaversefile", - "version": "0.0.32", - "license": "ISC", - "dependencies": { - "@babel/core": "^7.15.0", - "@babel/preset-react": "^7.14.5", - "mime-types": "^2.1.32", - "node-fetch": "^2.6.1", - "pako": "^2.0.4" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", - "dependencies": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", - "dependencies": { - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "dependencies": { - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", - "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", - "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", - "dependencies": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.822", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.822.tgz", - "integrity": "sha512-k7jG5oYYHxF4jx6PcqwHX3JVME/OjzolqOZiIogi9xtsfsmTjTdie4x88OakYFPEa8euciTgCCzvVNwvmjHb1Q==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dependencies": { - "mime-db": "1.49.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==" - }, - "node_modules/pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" - }, - "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", - "requires": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", - "requires": { - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - }, - "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "requires": { - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" - }, - "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" - }, - "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", - "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", - "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", - "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.9" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", - "requires": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - } - }, - "caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "electron-to-chromium": { - "version": "1.3.822", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.822.tgz", - "integrity": "sha512-k7jG5oYYHxF4jx6PcqwHX3JVME/OjzolqOZiIogi9xtsfsmTjTdie4x88OakYFPEa8euciTgCCzvVNwvmjHb1Q==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "requires": { - "mime-db": "1.49.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - }, - "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==" - }, - "pako": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", - "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - } - } -} From f327ce3f24a8efda0b47610e68b435a22395ddf1 Mon Sep 17 00:00:00 2001 From: 0reo Date: Wed, 16 Feb 2022 22:49:35 -0500 Subject: [PATCH 06/10] better setup for vrms --- type_templates/scn.js | 2 ++ type_templates/vrm.js | 27 ++++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/type_templates/scn.js b/type_templates/scn.js index 6a303ab..5b1118b 100644 --- a/type_templates/scn.js +++ b/type_templates/scn.js @@ -79,6 +79,8 @@ export default e => { await npc.setAvatarAppAsync(trackedApp); // npc['app'] = trackedApp; // trackedApp['avatar'] = avatar; + } else { + trackedApp.children && trackedApp.children.length && (trackedApp.children[0].visible = true); } } diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 6ca3240..7d973d8 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -90,8 +90,9 @@ const _setQuality = async (quality, skinnedVrms)=> { case 1: { const skinnedVrmSprite = await baseVrm.cloneVrm(); - _spritify(skinnedVrmSprite); - + skinnedVrmSprite.scenes[0] = _spritify(skinnedVrmSprite); + skinnedVrmSprite.scene = skinnedVrmSprite.scenes[0]; + skinnedVrms['sprite'] = skinnedVrmSprite; skinnedVrms['active'] = skinnedVrmSprite; @@ -99,7 +100,7 @@ const _setQuality = async (quality, skinnedVrms)=> { } case 2: { const skinnedVrmCrunched = await baseVrm.cloneVrm(); - _crunch(skinnedVrmCrunched); + _crunch(skinnedVrmCrunched.scene); skinnedVrms['crunch'] = skinnedVrmCrunched; skinnedVrms['active'] = skinnedVrmCrunched; @@ -111,7 +112,15 @@ const _setQuality = async (quality, skinnedVrms)=> { break; } case 4: { - await _toonShaderify(baseVrm); + let skinnedVrmToon = await baseVrm.cloneVrm(); + await _toonShaderify(skinnedVrmToon); + // await _toonShaderify(baseVrm); + + skinnedVrms['toon'] = skinnedVrmToon; + skinnedVrms['active'] = skinnedVrmToon; + // skinnedVrms['toon'] = baseVrm; + + break; } default: { @@ -148,10 +157,10 @@ export default e => { const _prepVrm = (type, vrm) => { - vrm.scene.visible = false; - app.add(vrm.scene); - vrm.scene.updateMatrixWorld(); - _addAnisotropy(vrm.scene, 16); + vrm.visible = false; + app.add(vrm); + vrm.updateMatrixWorld(); + _addAnisotropy(vrm, 16); } let physicsIds = []; @@ -172,7 +181,7 @@ export default e => { for (const type in app.skinnedVrms) { if (type !== 'active' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { const vrm = app.skinnedVrms[type]; - _prepVrm(type, vrm); + _prepVrm(type, vrm.isMesh ? vrm : vrm.scene); } } From 783c1e480e8af2a0d889b918291be71f7aaa7ff2 Mon Sep 17 00:00:00 2001 From: 0reo Date: Sat, 19 Feb 2022 17:16:51 -0500 Subject: [PATCH 07/10] change to get crunched avatar despite set quality --- type_templates/vrm.js | 114 +++++++++++------------------------------- 1 file changed, 28 insertions(+), 86 deletions(-) diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 7d973d8..0802369 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -51,9 +51,8 @@ const parseVrm = (arrayBuffer, srcUrl) => new Promise((accept, reject) => { }; */ const _spritify = o => { return useAvatarSpriter().createSpriteMegaMesh(o); - // o.spriteMegaAvatarMesh = useAvatarSpriter().createSpriteMegaMesh(await o.cloneVrm()); }; -const _crunch = o => { +const _crunch = async o => { return useAvatarCruncher().crunchAvatarModel(o); }; const _toonShaderify = async o => { @@ -88,7 +87,6 @@ const _setQuality = async (quality, skinnedVrms)=> { const baseVrm = skinnedVrms.base; switch (quality) { case 1: { - const skinnedVrmSprite = await baseVrm.cloneVrm(); skinnedVrmSprite.scenes[0] = _spritify(skinnedVrmSprite); skinnedVrmSprite.scene = skinnedVrmSprite.scenes[0]; @@ -99,27 +97,21 @@ const _setQuality = async (quality, skinnedVrms)=> { break; } case 2: { - const skinnedVrmCrunched = await baseVrm.cloneVrm(); - _crunch(skinnedVrmCrunched.scene); - - skinnedVrms['crunch'] = skinnedVrmCrunched; - skinnedVrms['active'] = skinnedVrmCrunched; + skinnedVrms['active'] = skinnedVrms['crunch']; break; } case 3: { - console.log('standard quality, already good to go!'); // XXX + skinnedVrms['active'] = skinnedVrms['base']; + break; } case 4: { - let skinnedVrmToon = await baseVrm.cloneVrm(); + const skinnedVrmToon = await baseVrm.cloneVrm(); await _toonShaderify(skinnedVrmToon); - // await _toonShaderify(baseVrm); skinnedVrms['toon'] = skinnedVrmToon; skinnedVrms['active'] = skinnedVrmToon; - // skinnedVrms['toon'] = baseVrm; - break; } @@ -143,7 +135,6 @@ export default e => { ${this.components} ); for (const {key, value} of components) { - console.log("COMPONANTS", key, value); app.setComponent(key, value); } @@ -155,7 +146,7 @@ export default e => { return vrm; }; - const _prepVrm = (type, vrm) => { + const _prepVrm = (vrm) => { vrm.visible = false; app.add(vrm); @@ -167,21 +158,25 @@ export default e => { let activateCb = null; e.waitUntil((async () => { arrayBuffer = await _fetchArrayBuffer(srcUrl); - const skinnedVrmBase = await _cloneVrm(); app.skinnedVrms['base'] = skinnedVrmBase; - app.skinnedVrms['active'] = skinnedVrmBase; + _prepVrm(skinnedVrmBase.scene); + app.skinnedVrms['crunch'] = app.skinnedVrms['base']; + const qualityMap = { + "ULTRA": 4, + "HIGH": 3, + "MEDIUM": 2, + "LOW": 1 + } const quality = getQualitySetting(); - await _setQuality(quality, app.skinnedVrms) - - console.log("app is", app); - + await _setQuality(qualityMap[quality], app.skinnedVrms) + for (const type in app.skinnedVrms) { - if (type !== 'active' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { + if (type !== 'active' && type !== 'base' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { const vrm = app.skinnedVrms[type]; - _prepVrm(type, vrm.isMesh ? vrm : vrm.scene); + vrm && _prepVrm(vrm.isMesh ? vrm : vrm.scene); } } @@ -204,26 +199,23 @@ export default e => { physicsIds.push(physicsId); }; if (app.getComponent('physics')) { - console.log("adding physics!"); _addPhysics(); } activateCb = async () => { const localPlayer = useLocalPlayer(); localPlayer.setAvatarApp(app); - // console.log(localPlayer.avatar); - // - // const quality = parseInt(localStorage.getItem('avatarStyle')) || 4; - // localPlayer.avatar.setQuality(quality).then(()=>{ - // // - // const am = localPlayer.appManager; - // const trackedApp = am.getTrackedApp(localPlayer.avatar.app.instanceId); - // trackedApp.set('load', true); - // // console.log("VRM PLAYER AVATAR", trackedApp.get('load'), localPlayer.avatar); - // // - // console.log("VRM ACTIVATED"); - }; + + app.skinnedVrms['crunch'].makeCrunched = async (src) => { + //we always need the crunched avatar + + const skinnedVrmCrunched = await _crunch(src.scene); + app.skinnedVrms['crunch'].scene = skinnedVrmCrunched; + _prepVrm(app.skinnedVrms['crunch'].scene) + return app.skinnedVrms['crunch']; + } + })()); useActivate(() => { @@ -235,56 +227,6 @@ export default e => { this.quaternion.premultiply(q180); })(app.lookAt); -<<<<<<< HEAD - let skinned = false; - app.setSkinning = async skinning => { - if (skinning && !skinned) { - const quality = getQualitySetting(); - if (!app.skinnedVrm) { - // console.log("SKINNING", app); - app.skinnedVrm = await _cloneVrm(); - console.log("skinning", app.skinnedVrm.scene.constructor.name, app.skinnedVrm.scene); - // await _toonShaderify(app.skinnedVrm); - _setQuality(quality, app.skinnedVrm) - } - - for (const physicsId of physicsIds) { - physics.disableGeometry(physicsId); - physics.disableGeometryQueries(physicsId); - } - quality == 1 ? app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh) : - app.unskinnedVrm.scene.parent.remove(app.unskinnedVrm.scene); - // app.unskinnedVrm.spriteMegaAvatarMesh && - - - app.position.set(0, 0, 0); - app.quaternion.identity(); - app.scale.set(1, 1, 1); - app.updateMatrixWorld(); - - quality == 1 ? app.add(app.skinnedVrm.spriteMegaAvatarMesh) : app.add(app.skinnedVrm.scene); - - - skinned = true; - } else if (!skinning && skinned) { - app.skinnedVrm.scene.parent.remove(app.skinnedVrm.scene); - app.unskinnedVrm.spriteMegaAvatarMesh && - app.unskinnedVrm.spriteMegaAvatarMesh.parent.remove(app.unskinnedVrm.spriteMegaAvatarMesh); - - for (const physicsId of physicsIds) { - physics.enableGeometry(physicsId); - physics.enableGeometryQueries(physicsId); - } - - app.add(app.unskinnedVrm.scene); - app.unskinnedVrm.spriteMegaAvatarMesh && app.add(app.unskinnedVrm.spriteMegaAvatarMesh); - - skinned = false; - } - } - -======= ->>>>>>> avatar cruncher and remove unskinned(tmp) useCleanup(() => { for (const physicsId of physicsIds) { physics.removeGeometry(physicsId); From 30e430a67d7c9ebc0671c3be8c4d4c4a2ce9a5c5 Mon Sep 17 00:00:00 2001 From: 0reo Date: Sun, 20 Feb 2022 20:20:01 -0500 Subject: [PATCH 08/10] imrpove handling of active vs other vrms --- type_templates/vrm.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/type_templates/vrm.js b/type_templates/vrm.js index 0802369..bff8ce4 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -83,7 +83,8 @@ const _addAnisotropy = (o, anisotropyLevel) => { }); }; -const _setQuality = async (quality, skinnedVrms)=> { +const _setQuality = async (quality, app)=> { + const skinnedVrms = app.skinnedVrms; const baseVrm = skinnedVrms.base; switch (quality) { case 1: { @@ -92,17 +93,16 @@ const _setQuality = async (quality, skinnedVrms)=> { skinnedVrmSprite.scene = skinnedVrmSprite.scenes[0]; skinnedVrms['sprite'] = skinnedVrmSprite; - skinnedVrms['active'] = skinnedVrmSprite; + app.active = 'sprite'; break; } case 2: { - skinnedVrms['active'] = skinnedVrms['crunch']; - + app.active = 'crunch'; break; } case 3: { - skinnedVrms['active'] = skinnedVrms['base']; + app.active = 'base'; break; } @@ -111,7 +111,7 @@ const _setQuality = async (quality, skinnedVrms)=> { await _toonShaderify(skinnedVrmToon); skinnedVrms['toon'] = skinnedVrmToon; - skinnedVrms['active'] = skinnedVrmToon; + app.active = 'toon'; break; } @@ -127,6 +127,7 @@ export default e => { const app = useApp(); app.appType = 'vrm'; + app.active = ''; app.skinnedVrms = {}; @@ -147,13 +148,20 @@ export default e => { }; const _prepVrm = (vrm) => { - vrm.visible = false; + if (app.active){ + app.skinnedVrms.base.scene.visible = false; + app.getActive().scene.visible = true; + } app.add(vrm); vrm.updateMatrixWorld(); _addAnisotropy(vrm, 16); } + app.getActive = () => { + return app.skinnedVrms[app.active]; + } + let physicsIds = []; let activateCb = null; e.waitUntil((async () => { @@ -171,10 +179,10 @@ export default e => { "LOW": 1 } const quality = getQualitySetting(); - await _setQuality(qualityMap[quality], app.skinnedVrms) + await _setQuality(qualityMap[quality], app) for (const type in app.skinnedVrms) { - if (type !== 'active' && type !== 'base' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { + if (type !== 'base' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { const vrm = app.skinnedVrms[type]; vrm && _prepVrm(vrm.isMesh ? vrm : vrm.scene); } @@ -208,12 +216,12 @@ export default e => { }; app.skinnedVrms['crunch'].makeCrunched = async (src) => { - //we always need the crunched avatar - + //we always need the crunched avatar const skinnedVrmCrunched = await _crunch(src.scene); - app.skinnedVrms['crunch'].scene = skinnedVrmCrunched; - _prepVrm(app.skinnedVrms['crunch'].scene) - return app.skinnedVrms['crunch']; + skinnedVrmCrunched.name = 'crunched'; + _prepVrm(skinnedVrmCrunched) + app.skinnedVrms['crunch'] = src; + return skinnedVrmCrunched; } })()); From 254ddbebf1a317fea76a19db1756272dd93497cd Mon Sep 17 00:00:00 2001 From: 0reo Date: Tue, 22 Feb 2022 20:07:59 -0500 Subject: [PATCH 09/10] remove npc code --- type_templates/scn.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/type_templates/scn.js b/type_templates/scn.js index 5b1118b..1207305 100644 --- a/type_templates/scn.js +++ b/type_templates/scn.js @@ -67,21 +67,11 @@ export default e => { return; //don't add another local player avatar if you've set one in the application. } const trackedApp = await useLocalPlayer().appManager.addTrackedApp(u2, position, quaternion, scale, components, load ); - // if (trackedApp.appType == "vrm") console.log("TRACKED APP IS NOW", trackedApp, load); trackedApp.activate(); } else { - console.log("object is not a player"); + // console.log("object is not a player"); const trackedApp = await addTrackedApp(u2, position, quaternion, scale, components ); - - if (object.is_npc && trackedApp && trackedApp.appType == "vrm") { - const NPC = useNpcPlayerInternal(); - const npc = new NPC(); - await npc.setAvatarAppAsync(trackedApp); - // npc['app'] = trackedApp; - // trackedApp['avatar'] = avatar; - } else { - trackedApp.children && trackedApp.children.length && (trackedApp.children[0].visible = true); - } + trackedApp.children && trackedApp.children.length && (trackedApp.children[0].visible = true); } } From 2bebf2e8bc13ba1786b687370c01d40434b5a614 Mon Sep 17 00:00:00 2001 From: 0reo Date: Tue, 22 Feb 2022 20:08:51 -0500 Subject: [PATCH 10/10] quality logic fully implimented in vrm rather than avatar class --- type_templates/vrm.js | 238 ++++++++++++++++++++++++++++++------------ 1 file changed, 170 insertions(+), 68 deletions(-) diff --git a/type_templates/vrm.js b/type_templates/vrm.js index bff8ce4..438d9ab 100644 --- a/type_templates/vrm.js +++ b/type_templates/vrm.js @@ -86,59 +86,135 @@ const _addAnisotropy = (o, anisotropyLevel) => { const _setQuality = async (quality, app)=> { const skinnedVrms = app.skinnedVrms; const baseVrm = skinnedVrms.base; + + const _swapMaterials = async (type) => { + + //actually swap + switch (type) { + case "toon": { + const target = skinnedVrms.toon ?? skinnedVrms.base; + + let update = Object.keys(app.materials.toon).length > 0; + + skinnedVrms.base.scene.traverse((object) => { + if (object.material && app.isBasic(object.material)) { + const name = object.material.name; + app.setMaterial(name, 'base', object.material); + update && (object.material = [app.materials.toon[name]]); + } + + }); + break; + + } + default: { + let update = false; + const target = skinnedVrms.base; + target.scene.traverse((object) => { + if (!update && object.material && app.isToon(object.material)) { + update = true; + } + }); + + target.scene.traverse((object) => { + if (object.material && app.isToon(object.material)) { + const name = object.material[0].name; + update && app.setMaterial(name, 'toon', object.material[0]); + + object.material = app.materials.base[name]; + } + }); + } + } + } + switch (quality) { case 1: { - const skinnedVrmSprite = await baseVrm.cloneVrm(); - skinnedVrmSprite.scenes[0] = _spritify(skinnedVrmSprite); - skinnedVrmSprite.scene = skinnedVrmSprite.scenes[0]; - - skinnedVrms['sprite'] = skinnedVrmSprite; - app.active = 'sprite'; + + if (skinnedVrms.sprite) { + // + } else { + const skinnedVrmSprite = await baseVrm.cloneVrm(); + skinnedVrmSprite.scenes[0] = _spritify(skinnedVrmSprite); + skinnedVrmSprite.scene = skinnedVrmSprite.scenes[0]; + + skinnedVrms['sprite'] = skinnedVrmSprite; + skinnedVrms.sprite.scene.name = 'sprite'; + + } + app.setActive('sprite'); break; } case 2: { - app.active = 'crunch'; - break; + if (skinnedVrms.crunched) { + if (skinnedVrms.crunched.scene.name !== "crunched"){ + await skinnedVrms.crunched.makeCrunched(skinnedVrms.base); + } + } else { + throw new Error('something went wrong, missing crunched avatar'); + } + app.setActive('crunched'); + + break; } case 3: { - app.active = 'base'; - + await _swapMaterials(); + baseVrm.scene.name = "base mesh" + app.setActive('base'); break; } case 4: { - const skinnedVrmToon = await baseVrm.cloneVrm(); - await _toonShaderify(skinnedVrmToon); + if (skinnedVrms.toon){ + + } else { + if (!skinnedVrms.toon) { - skinnedVrms['toon'] = skinnedVrmToon; - app.active = 'toon'; + await _toonShaderify(baseVrm); + skinnedVrms['toon'] = baseVrm; + skinnedVrms.toon.scene.name = 'base-tooned'; + } + } + await _swapMaterials("toon"); + app.setActive('toon'); break; } default: { throw new Error('unknown avatar quality: ' + quality); } } + return app.getActive(); } - - + + export default e => { const physics = usePhysics(); - + const app = useApp(); app.appType = 'vrm'; - app.active = ''; + app.active = 'base'; + + //make sure we have materials to work with + app.materials = { + toon: {}, + base: {} + }; + app.isToon = material => material[0] && material[0].isMToonMaterial; + app.isBasic = material => material.type == "MeshBasicMaterial" && material.name; //we're only changing named materials + app.setMaterial = (name, type, material) => app.materials[type][name] = material; app.skinnedVrms = {}; const srcUrl = '${this.srcUrl}'; + app.name = srcUrl; const components = ( ${this.components} ); for (const {key, value} of components) { app.setComponent(key, value); } - + let arrayBuffer = null; const _cloneVrm = async () => { const vrm = await parseVrm(arrayBuffer, srcUrl); @@ -146,22 +222,31 @@ export default e => { vrm.toonShaderify = _toonShaderify; return vrm; }; - + const _prepVrm = (vrm) => { vrm.visible = false; - if (app.active){ - app.skinnedVrms.base.scene.visible = false; - app.getActive().scene.visible = true; - } app.add(vrm); vrm.updateMatrixWorld(); _addAnisotropy(vrm, 16); } - - app.getActive = () => { - return app.skinnedVrms[app.active]; + + app.getActive = (_app = false) => { + //return scene if we have an active arm and we're not requesting the scene. else return the(possibly) active vrm + return app.skinnedVrms[app.active] && !_app ? app.skinnedVrms[app.active].scene : app.skinnedVrms[app.active]; } - + + app.setActive = (target) => { + for (const key in app.skinnedVrms) { + if (Object.hasOwnProperty.call(app.skinnedVrms, key)) { + app.skinnedVrms[key].scene.visible = false + } + } + + app.active = target; + !app.getActive().parent && _prepVrm(app.getActive()); + app.getActive().visible = true; + } + let physicsIds = []; let activateCb = null; e.waitUntil((async () => { @@ -169,78 +254,95 @@ export default e => { const skinnedVrmBase = await _cloneVrm(); app.skinnedVrms['base'] = skinnedVrmBase; _prepVrm(skinnedVrmBase.scene); - - app.skinnedVrms['crunch'] = app.skinnedVrms['base']; - - const qualityMap = { - "ULTRA": 4, - "HIGH": 3, - "MEDIUM": 2, - "LOW": 1 - } - const quality = getQualitySetting(); - await _setQuality(qualityMap[quality], app) - - for (const type in app.skinnedVrms) { - if (type !== 'base' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { - const vrm = app.skinnedVrms[type]; - vrm && _prepVrm(vrm.isMesh ? vrm : vrm.scene); + app.skinnedVrms.base.scene.name = 'base mesh'; + app.skinnedVrms.base.scene.traverse((o) => { + if (o.material && app.isBasic(o.material)) { + const name = o.material.name; + app.setMaterial(name, 'base', o.material); } + }); + + app.skinnedVrms['base'].makeCrunched = async (src) => { + if (src.scene.name == "crunched") return src.scene; + //we always need the crunched avatar + const skinnedVrmCrunched = await _crunch(src.scene); + skinnedVrmCrunched.name = 'crunched'; + _prepVrm(skinnedVrmCrunched) + let tmpVrms = {...app.skinnedVrms}; + delete tmpVrms.crunched; + tmpVrms.crunched = {...src}; + tmpVrms.crunched.scene = skinnedVrmCrunched; + app.skinnedVrms = tmpVrms; + return skinnedVrmCrunched; } - + + app.skinnedVrms['crunched'] = app.skinnedVrms['base']; + const _addPhysics = () => { const fakeHeight = 1.5; localMatrix.compose( localVector.set(0, fakeHeight/2, 0), localQuaternion.identity(), localVector2.set(0.3, fakeHeight/2, 0.3) - ) - .premultiply(app.matrixWorld) - .decompose(localVector, localQuaternion, localVector2); - - const physicsId = physics.addBoxGeometry( - localVector, + ) + .premultiply(app.matrixWorld) + .decompose(localVector, localQuaternion, localVector2); + + const physicsId = physics.addBoxGeometry( + localVector, localQuaternion, localVector2, false - ); - physicsIds.push(physicsId); - }; + ); + physicsIds.push(physicsId); + }; if (app.getComponent('physics')) { _addPhysics(); } - + activateCb = async () => { const localPlayer = useLocalPlayer(); localPlayer.setAvatarApp(app); }; - - app.skinnedVrms['crunch'].makeCrunched = async (src) => { - //we always need the crunched avatar - const skinnedVrmCrunched = await _crunch(src.scene); - skinnedVrmCrunched.name = 'crunched'; - _prepVrm(skinnedVrmCrunched) - app.skinnedVrms['crunch'] = src; - return skinnedVrmCrunched; + + const qualityMap = { + "ULTRA": 4, + "HIGH": 3, + "MEDIUM": 2, + "LOW": 1 + } + const quality = getQualitySetting(); + await _setQuality(qualityMap[quality], app) + + app.updateQuality = async () => { + const quality = getQualitySetting(); + return await _setQuality(qualityMap[quality], app) + } + + for (const type in app.skinnedVrms) { + if (type !== 'base' && Object.hasOwnProperty.call(app.skinnedVrms, type)) { + const vrm = app.skinnedVrms[type]; + vrm && _prepVrm(vrm.isMesh ? vrm : vrm.scene); + } } - })()); - + useActivate(() => { activateCb && activateCb(); }); - + app.lookAt = (lookAt => function(p) { lookAt.apply(this, arguments); this.quaternion.premultiply(q180); })(app.lookAt); - + useCleanup(() => { for (const physicsId of physicsIds) { physics.removeGeometry(physicsId); } physicsIds.length = 0; }); - + return app; }; + \ No newline at end of file