-
-
Notifications
You must be signed in to change notification settings - Fork 97
/
pointer.js
1 lines (1 loc) · 1.81 KB
/
pointer.js
1
!function(){let t,n=[],e=[],o={},a=[],r={},i={0:"left",1:"middle",2:"right"};function c(n){let e=n.x,o=n.y;n.anchor&&(e-=n.width*n.anchor.x,o-=n.height*n.anchor.y);let a=t.x-Math.max(e,Math.min(t.x,e+n.width)),r=t.y-Math.max(o,Math.min(t.y,o+n.height));return a*a+r*r<t.radius*t.radius}function u(){let o,a,r=e.length?e:n;for(let n=r.length-1;n>=0;n--)if(a=(o=r[n]).collidesWithPointer?o.collidesWithPointer(t):c(o))return o}function s(t){let n=void 0!==t.button?i[t.button]:"left";r[n]=!0,v(t,"onDown")}function h(t){let n=void 0!==t.button?i[t.button]:"left";r[n]=!1,v(t,"onUp")}function d(t){v(t,"onOver")}function l(t){r={}}function v(n,e){if(!kontra.canvas)return;let a,r;-1!==["touchstart","touchmove","touchend"].indexOf(n.type)?(a=(n.touches[0]||n.changedTouches[0]).clientX,r=(n.touches[0]||n.changedTouches[0]).clientY):(a=n.clientX,r=n.clientY);let i,c=kontra.canvas.height/kontra.canvas.offsetHeight,s=kontra.canvas.getBoundingClientRect(),h=(a-s.left)*c,d=(r-s.top)*c;t.x=h,t.y=d,n.target===kontra.canvas&&(n.preventDefault(),(i=u())&&i[e]&&i[e](n)),o[e]&&o[e](n,i)}t=kontra.pointer={x:0,y:0,radius:5,track(t){[].concat(t).map(function(t){t._r||(t._r=t.render,t.render=function(){n.push(this),this._r()},a.push(t))})},untrack(t,n){[].concat(t).map(function(t){t.render=t._r,t._r=n;let e=a.indexOf(t);-1!==e&&a.splice(e,1)})},over:t=>-1!==a.indexOf(t)&&u()===t,onDown(t){o.onDown=t},onUp(t){o.onUp=t},pressed:t=>!!r[t]},kontra.on("tick",()=>{e.length=0,n.map(function(t){e.push(t)}),n.length=0}),kontra.on("init",()=>{kontra.canvas.addEventListener("mousedown",s),kontra.canvas.addEventListener("touchstart",s),kontra.canvas.addEventListener("mouseup",h),kontra.canvas.addEventListener("touchend",h),kontra.canvas.addEventListener("blur",l),kontra.canvas.addEventListener("mousemove",d),kontra.canvas.addEventListener("touchmove",d)})}();