// 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.log = "" let enabled = () AFRAME.utils.device.isMobile() let setVisible = (state) => { if( enabled() ) this.setGazer(state) } setVisible(false); document.querySelector("a-scene").addEventListener('exit-vr', () => setVisible(false) ) document.querySelector("a-scene").addEventListener('enter-vr', () => setVisible(true) ) document.querySelector("a-scene").addEventListener('exit-ar', () => setVisible(false) ) document.querySelector("a-scene").addEventListener('enter-ar', () => setVisible(true) ) 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 ) ) } });