UNPKG

aframe-extras

Version:

Add-ons and examples for A-Frame VR.

2 lines 2.24 kB
!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,()=>(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,l=[],h=new Map;return function(o){if(!this.data.enabled)return;const a=this.prevCheckTime;if(a&&o-a<this.data.interval)return;this.prevCheckTime=o;const r=this.el,c=this.data;let d;var f;r.getObject3D("mesh")&&(l.length=0,h.clear(),r.object3D.getWorldPosition(e),r.object3D.getWorldScale(i),d=c.radius*(f=i,Math.max(f.x,f.y,f.z)),this.els.forEach(function(i){let o,a,r,c;i.isEntity&&(a=i.getObject3D("mesh"),a&&(n.setFromObject(a).getSize(s),c=Math.max(s.x,s.y,s.z)/2,o=Math.sqrt(2*c*c),n.getCenter(t),o&&(r=e.distanceTo(t),r<o+d&&(l.push(i),h.set(i,r)))))}),l.sort((e,t)=>h.get(e)>h.get(t)?1:-1).forEach(this.handleHit),this.collisions.filter(e=>!h.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,l))}}(),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)}}),{})); //# sourceMappingURL=sphere-collider.min.js.map