aframe-extras
Version:
Add-ons and examples for A-Frame VR.
2 lines • 2.41 kB
JavaScript
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(self,(()=>{return e={109:e=>{e.exports=AFRAME.registerComponent("sphere-collider",{schema:{enabled:{default:!0},interval:{default:80},objects:{default:""},state:{default:"collided"},radius:{default:.05},watch:{default:!0}},init:function(){this.observer=null,this.els=[],this.collisions=[],this.prevCheckTime=void 0,this.eventDetail={},this.handleHit=this.handleHit.bind(this),this.handleHitEnd=this.handleHitEnd.bind(this)},play:function(){const e=this.el.sceneEl;this.data.watch&&(this.observer=new MutationObserver(this.update.bind(this,null)),this.observer.observe(e,{childList:!0,subtree:!0}))},pause:function(){this.observer&&(this.observer.disconnect(),this.observer=null)},update:function(){const e=this.data;let t;t=e.objects?this.el.sceneEl.querySelectorAll(e.objects):this.el.sceneEl.children,this.els=Array.prototype.slice.call(t)},tick:function(){const e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Vector3,s=new THREE.Vector3,n=new THREE.Box3,o=[],l=new Map;return function(r){if(!this.data.enabled)return;const h=this.prevCheckTime;if(h&&r-h<this.data.interval)return;this.prevCheckTime=r;const a=this.el,c=this.data;let d;var u;a.getObject3D("mesh")&&(o.length=0,l.clear(),a.object3D.getWorldPosition(e),a.object3D.getWorldScale(i),d=c.radius*(u=i,Math.max(u.x,u.y,u.z)),this.els.forEach((function(i){let r,h,a,c;i.isEntity&&(h=i.getObject3D("mesh"),h&&(n.setFromObject(h).getSize(s),c=Math.max(s.x,s.y,s.z)/2,r=Math.sqrt(2*c*c),n.getCenter(t),r&&(a=e.distanceTo(t),a<r+d&&(o.push(i),l.set(i,a)))))})),o.sort(((e,t)=>l.get(e)>l.get(t)?1:-1)).forEach(this.handleHit),this.collisions.filter((e=>!l.has(e))).forEach(this.handleHitEnd),function(e,t){e.length=0;for(let i=0;i<t.length;i++)e[i]=t[i]}(this.collisions,o))}}(),handleHit:function(e){e.emit("hit"),e.addState(this.data.state),this.eventDetail.el=e,this.el.emit("hit",this.eventDetail)},handleHitEnd:function(e){e.emit("hitend"),e.removeState(this.data.state),this.eventDetail.el=e,this.el.emit("hitend",this.eventDetail)}})}},t={},function i(s){var n=t[s];if(void 0!==n)return n.exports;var o=t[s]={exports:{}};return e[s](o,o.exports,i),o.exports}(109);var e,t}));
//# sourceMappingURL=sphere-collider.min.js.map