UNPKG

pixi-dragonbones-runtime

Version:
3 lines (2 loc) 4.51 kB
import{BaseObject as t}from"../core/BaseObject.mjs";import"../core/DragonBones.mjs";class n extends t{_onClear(){this.color=0,this.width=0,this.height=0}}class e extends n{static toString(){return"[class dragonBones.RectangleBoundingBoxData]"}static _computeOutCode(t,n,e,l,s,i){let r=0;return t<e?r|=1:t>s&&(r|=2),n<l?r|=4:n>i&&(r|=8),r}static rectangleIntersectsSegment(t,n,l,s,i,r,u,a,h=null,o=null,c=null){const x=t>i&&t<u&&n>r&&n<a,y=l>i&&l<u&&s>r&&s<a;if(x&&y)return-1;let g=0,M=e._computeOutCode(t,n,i,r,u,a),d=e._computeOutCode(l,s,i,r,u,a);for(;;){if(!(M|d)){g=2;break}if(M&d)break;let h=0,o=0,x=0;const y=0!==M?M:d;4&y?(h=t+(l-t)*(r-n)/(s-n),o=r,null!==c&&(x=.5*-Math.PI)):8&y?(h=t+(l-t)*(a-n)/(s-n),o=a,null!==c&&(x=.5*Math.PI)):2&y?(o=n+(s-n)*(u-t)/(l-t),h=u,null!==c&&(x=0)):1&y&&(o=n+(s-n)*(i-t)/(l-t),h=i,null!==c&&(x=Math.PI)),y===M?(t=h,n=o,M=e._computeOutCode(t,n,i,r,u,a),null!==c&&(c.x=x)):(l=h,s=o,d=e._computeOutCode(l,s,i,r,u,a),null!==c&&(c.y=x))}return g&&(x?(g=2,null!==h&&(h.x=l,h.y=s),null!==o&&(o.x=l,o.y=l),null!==c&&(c.x=c.y+Math.PI)):y?(g=1,null!==h&&(h.x=t,h.y=n),null!==o&&(o.x=t,o.y=n),null!==c&&(c.y=c.x+Math.PI)):(g=3,null!==h&&(h.x=t,h.y=n),null!==o&&(o.x=l,o.y=s))),g}_onClear(){super._onClear(),this.type=0}containsPoint(t,n){const e=.5*this.width;if(t>=-e&&t<=e){const t=.5*this.height;if(n>=-t&&n<=t)return!0}return!1}intersectsSegment(t,n,l,s,i=null,r=null,u=null){const a=.5*this.width,h=.5*this.height;return e.rectangleIntersectsSegment(t,n,l,s,-a,-h,a,h,i,r,u)}}class l extends n{static toString(){return"[class dragonBones.EllipseData]"}static ellipseIntersectsSegment(t,n,e,l,s,i,r,u,a=null,h=null,o=null){const c=r/u,x=c*c,y=e-t,g=(l*=c)-(n*=c),M=Math.sqrt(y*y+g*g),d=y/M,m=g/M,p=(s-t)*d+(i-n)*m,I=r*r,f=I-(t*t+n*n)+p*p;let P=0;if(f>=0){const s=Math.sqrt(f),i=p-s,r=p+s,u=i<0?-1:i<=M?0:1,y=r<0?-1:r<=M?0:1,g=u*y;if(g<0)return-1;0===g&&(-1===u?(P=2,e=t+r*d,l=(n+r*m)/c,null!==a&&(a.x=e,a.y=l),null!==h&&(h.x=e,h.y=l),null!==o&&(o.x=Math.atan2(l/I*x,e/I),o.y=o.x+Math.PI)):1===y?(P=1,t+=i*d,n=(n+i*m)/c,null!==a&&(a.x=t,a.y=n),null!==h&&(h.x=t,h.y=n),null!==o&&(o.x=Math.atan2(n/I*x,t/I),o.y=o.x+Math.PI)):(P=3,null!==a&&(a.x=t+i*d,a.y=(n+i*m)/c,null!==o&&(o.x=Math.atan2(a.y/I*x,a.x/I))),null!==h&&(h.x=t+r*d,h.y=(n+r*m)/c,null!==o&&(o.y=Math.atan2(h.y/I*x,h.x/I)))))}return P}_onClear(){super._onClear(),this.type=1}containsPoint(t,n){const e=.5*this.width;if(t>=-e&&t<=e){const l=.5*this.height;if(n>=-l&&n<=l)return n*=e/l,Math.sqrt(t*t+n*n)<=e}return!1}intersectsSegment(t,n,e,s,i=null,r=null,u=null){return l.ellipseIntersectsSegment(t,n,e,s,0,0,.5*this.width,.5*this.height,i,r,u)}}class s extends n{constructor(){super(...arguments),this.vertices=[]}static toString(){return"[class dragonBones.PolygonBoundingBoxData]"}static polygonIntersectsSegment(t,n,e,l,s,i=null,r=null,u=null){t===e&&(t=e+1e-6),n===l&&(n=l+1e-6);const a=s.length,h=t-e,o=n-l,c=t*l-n*e;let x=0,y=s[a-2],g=s[a-1],M=0,d=0,m=0,p=0,I=0,f=0;for(let i=0;i<a;i+=2){const a=s[i],P=s[i+1];y===a&&(y=a+1e-4),g===P&&(g=P+1e-4);const S=y-a,C=g-P,_=y*P-g*a,B=h*C-o*S,v=(c*S-h*_)/B;if((v>=y&&v<=a||v>=a&&v<=y)&&(0===h||v>=t&&v<=e||v>=e&&v<=t)){const e=(c*C-o*_)/B;if((e>=g&&e<=P||e>=P&&e<=g)&&(0===o||e>=n&&e<=l||e>=l&&e<=n)){if(null===r){m=v,p=e,I=v,f=e,x++,null!==u&&(u.x=Math.atan2(P-g,a-y)-.5*Math.PI,u.y=u.x);break}{let n=v-t;n<0&&(n=-n),0===x?(M=n,d=n,m=v,p=e,I=v,f=e,null!==u&&(u.x=Math.atan2(P-g,a-y)-.5*Math.PI,u.y=u.x)):(n<M&&(M=n,m=v,p=e,null!==u&&(u.x=Math.atan2(P-g,a-y)-.5*Math.PI)),n>d&&(d=n,I=v,f=e,null!==u&&(u.y=Math.atan2(P-g,a-y)-.5*Math.PI))),x++}}}y=a,g=P}return 1===x?(null!==i&&(i.x=m,i.y=p),null!==r&&(r.x=m,r.y=p),null!==u&&(u.y=u.x+Math.PI)):x>1&&(x++,null!==i&&(i.x=m,i.y=p),null!==r&&(r.x=I,r.y=f)),x}_onClear(){super._onClear(),this.type=2,this.x=0,this.y=0,this.vertices.length=0}containsPoint(t,n){let e=!1;if(t>=this.x&&t<=this.width&&n>=this.y&&n<=this.height)for(let l=0,s=this.vertices.length,i=s-2;l<s;l+=2){const s=this.vertices[i+1],r=this.vertices[l+1];if(r<n&&s>=n||s<n&&r>=n){const u=this.vertices[i],a=this.vertices[l];(n-r)*(u-a)/(s-r)+a<t&&(e=!e)}i=l}return e}intersectsSegment(t,n,l,i,r=null,u=null,a=null){let h=0;return 0!==e.rectangleIntersectsSegment(t,n,l,i,this.x,this.y,this.x+this.width,this.y+this.height,null,null,null)&&(h=s.polygonIntersectsSegment(t,n,l,i,this.vertices,r,u,a)),h}}export{n as BoundingBoxData,l as EllipseBoundingBoxData,s as PolygonBoundingBoxData,e as RectangleBoundingBoxData}; //# sourceMappingURL=BoundingBoxData.mjs.map