From 969251eb7d2a68e4032adc5fa2691f102fd93b1c Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Fri, 17 Nov 2023 18:15:22 +0100 Subject: [PATCH] cleanup (pending bug: duplicate non-euclidian different scales --- example/assets/index.glb | Bin 1770628 -> 1770548 bytes src/3rd/js/aframe/index.js | 6 ++---- src/3rd/js/three/navigator.js | 1 - src/3rd/js/three/xrf/dynamic/filter.js | 18 +++++++++++++++--- src/3rd/js/three/xrf/src.js | 3 +-- src/3rd/js/three/xrf/src/audio.js | 1 - src/3rd/js/three/xrf/t.js | 1 - 7 files changed, 18 insertions(+), 12 deletions(-) diff --git a/example/assets/index.glb b/example/assets/index.glb index e4e8ce47e0ef1b6480a2e066701213b61223552c..0201256376b0df5f7f6415176f0c7e41121f17b5 100644 GIT binary patch delta 9356 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 { p.resolve() setTimeout( () => AFRAME.fade.out(), 1000 ) // allow one second to load textures e.g. }, AFRAME.fade.data.fadetime ) - } + }else p.resolve() } }) @@ -81,7 +80,6 @@ window.AFRAME.registerComponent('xrf', { // cleanup xrf-get objects when resetting scene xrf.addEventListener('reset', (opts) => { - console.log("aframe reset") let els = [...document.querySelectorAll('[xrf-get]')] els.map( (el) => document.querySelector('a-scene').removeChild(el) ) }) diff --git a/src/3rd/js/three/navigator.js b/src/3rd/js/three/navigator.js index 33ccbc3..9514bd6 100644 --- a/src/3rd/js/three/navigator.js +++ b/src/3rd/js/three/navigator.js @@ -40,7 +40,6 @@ xrf.navigator.to = (url,flags,loader,data) => { setTimeout( () => { // give external objects some slack let frag = hashbus.pub( url, model) // and eval URI XR fragments hashbus.pub.XRWG({model,scene:model.scene,frag}) - console.dir(frag) },2000) xrf.add( model.scene ) xrf.navigator.updateHash(hash) diff --git a/src/3rd/js/three/xrf/dynamic/filter.js b/src/3rd/js/three/xrf/dynamic/filter.js index 4feafda..7eea46f 100644 --- a/src/3rd/js/three/xrf/dynamic/filter.js +++ b/src/3rd/js/three/xrf/dynamic/filter.js @@ -1,6 +1,17 @@ /* * TODO: refactor/fix this (queries are being refactored to filters) */ + + +xrf.addEventListener('dynamicKey', (opts) => { + let {scene,id,match,v} = opts + if( v.filter ){ + let frags = {} + frags[ v.fragment ] = v + xrf.filter.scene({frag:frags,scene}) + } +}) + // spec: https://xrfragment.org/#filters xrf.filter = function(query, cb){ let result = [] @@ -14,8 +25,8 @@ xrf.filter.scene = function(opts){ let {scene,frag} = opts xrf.filter - .sort(frag) // get (sorted) filters from XR Fragments - .process(frag,scene) // show/hide things + .sort(frag) // get (sorted) filters from XR Fragments + .process(frag,scene,opts) // show/hide things scene.visible = true // always enable scene @@ -41,11 +52,12 @@ xrf.filter.process = function(frag,scene,opts){ // spec 2: https://xrfragment.org/doc/RFC_XR_Macros.html#embedding-xr-content-using-src // reparent scene based on objectname in case it matches a (non-negating) selector - if( !firstFilter.value && firstFilter.show === true ){ + if( opts.reparent && !firstFilter.value && firstFilter.show === true ){ let obj scene.traverse( (n) => hasName(n, firstFilter.key,firstFilter) && (obj = n) ) if(obj){ while( scene.children.length > 0 ) scene.children[0].removeFromParent() + obj.position.set(0,0,0) scene.add( obj ) } } diff --git a/src/3rd/js/three/xrf/src.js b/src/3rd/js/three/xrf/src.js index a2b1625..09b36d3 100644 --- a/src/3rd/js/three/xrf/src.js +++ b/src/3rd/js/three/xrf/src.js @@ -108,8 +108,7 @@ xrf.frag.src.scale = function(scene, opts, url){ xrf.frag.src.filterScene = (scene,opts) => { let { mesh, model, camera, renderer, THREE, hashbus, frag} = opts - xrf.filter.scene({scene,frag}) - if( scene.children.length == 1 ) scene.children[0].position.set(0,0,0) + xrf.filter.scene({scene,frag,reparent:true}) scene.traverse( (m) => { if( m.userData && (m.userData.src || m.userData.href) ) return ; // prevent infinite recursion diff --git a/src/3rd/js/three/xrf/src/audio.js b/src/3rd/js/three/xrf/src/audio.js index e4ce492..7ee11b4 100644 --- a/src/3rd/js/three/xrf/src/audio.js +++ b/src/3rd/js/three/xrf/src/audio.js @@ -54,7 +54,6 @@ let loadAudio = (mimetype) => function(url,opts){ if( t.z > 0 ) sound.setLoopEnd( loopEnd ) if( t.y != undefined ){ - console.dir({loopStart,t}) sound.setLoopStart( loopStart ) sound.offset = loopStart } diff --git a/src/3rd/js/three/xrf/t.js b/src/3rd/js/three/xrf/t.js index 5716ff2..63668b5 100644 --- a/src/3rd/js/three/xrf/t.js +++ b/src/3rd/js/three/xrf/t.js @@ -151,7 +151,6 @@ xrf.addEventListener('render', (opts) => { xrf.addEventListener('dynamicKey', (opts) => { // select active camera if any let {id,match,v} = opts - console.dir(opts) match.map( (w) => { w.nodes.map( (node) => { if( node.isCamera ){