// gaze click on mobile VR AFRAME.registerComponent('xrf-gaze',{ schema:{ spawn:{type:'boolean',default:false}, }, setGazer: function(state){ let cam = document.querySelector("[camera]") if( state ){ if( cam.innerHTML.match(/cursor/) ) return; // avoid duplicate calls cam.innerHTML = ` ` }else{ //if( document.querySelector('[cursor]') ) // document.querySelector('[cursor]').setAttribute("visible",false) } }, init:function(data){ this.immersive = false; let enabled = () => AFRAME.utils.device.isMobile() let setVisible = () => { let cursor = document.querySelector('[cursor]') if( cursor ) cursor.setAttribute('visible', enabled() ) } this.setGazer(enabled()) setVisible(); document.querySelector("a-scene").addEventListener('exit-vr', () => { this.immersive = false; setVisible() }) document.querySelector("a-scene").addEventListener('enter-vr', () => { this.immersive = true; setVisible() if( !document.querySelector("#cursor") ) return }) let highlightMesh = (state) => (e) => { if( !e.target.object3D ) return let obj = e.target.object3D.children[0] if( obj && obj.userData && obj.userData.XRF && obj.userData.XRF.href ) obj.userData.XRF.href.selected( state )() } this.el.addEventListener("mouseenter", highlightMesh(true) ) this.el.addEventListener("mouseleave", highlightMesh(false ) ) } });