UNPKG

pixi-dragonbones-runtime

Version:
3 lines (2 loc) 7.44 kB
"use strict";var t=require("./Bone.cjs");class s extends t.Bone{constructor(){super(...arguments),this._vertices=[],this._deformVertices=[],this._hullCache=[],this._matrixCahce=[]}static toString(){return"[class dragonBones.Surface]"}_onClear(){super._onClear(),this._dX=0,this._dY=0,this._k=0,this._kX=0,this._kY=0,this._vertices.length=0,this._deformVertices.length=0,this._matrixCahce.length=0,this._hullCache.length=0,this._bone=null}_getAffineTransform(t,s,e,r,i,h,a,n,l,_,o,c,f){const m=a-i,u=n-h,d=l-i,g=_-h;o.rotation=Math.atan2(u,m),o.skew=Math.atan2(g,d)-.5*Math.PI-o.rotation,f&&(o.rotation+=Math.PI),o.scaleX=Math.sqrt(m*m+u*u)/e,o.scaleY=Math.sqrt(d*d+g*g)/r,o.toMatrix(c),o.x=c.tx=i-(c.a*t+c.c*s),o.y=c.ty=h-(c.b*t+c.d*s)}_updateVertices(){const t=this._armature.armatureData.parent,s=this._boneData.geometry,e=t.intArray,r=t.floatArray,i=e[s.offset+0],h=e[s.offset+2],a=this._vertices,n=this._deformVertices;if(null!==this._parent)if(1===this._parent._boneData.type)for(let t=0,s=i;t<s;++t){const s=2*t,e=r[h+s]+n[s],i=r[h+s+1]+n[s+1],l=this._parent._getGlobalTransformMatrix(e,i);a[s]=l.a*e+l.c*i+l.tx,a[s+1]=l.b*e+l.d*i+l.ty}else{const t=this._parent.globalTransformMatrix;for(let s=0,e=i;s<e;++s){const e=2*s,i=r[h+e]+n[e],l=r[h+e+1]+n[e+1];a[e]=t.a*i+t.c*l+t.tx,a[e+1]=t.b*i+t.d*l+t.ty}}else for(let t=0,s=i;t<s;++t){const s=2*t;a[s]=r[h+s]+n[s],a[s+1]=r[h+s+1]+n[s+1]}}_updateGlobalTransformMatrix(t){const s=2*this._boneData.segmentX,e=this._vertices.length-2,r=this._vertices[0],i=this._vertices[1],h=this._vertices[s],a=this._vertices[s+1],n=this._vertices[e],l=this._vertices[e+1],_=this._vertices[e-s],o=this._vertices[e-s+1],c=r+.5*(n-r),f=i+.5*(l-i),m=c+.5*(h+.5*(_-h)-c),u=f+.5*(a+.5*(o-a)-f),d=h+.5*(n-h),g=a+.5*(l-a),x=_+.5*(n-_),y=o+.5*(l-o);this._getAffineTransform(0,0,200,200,m,u,d,g,x,y,this.global,this.globalTransformMatrix,!1),this._globalDirty=!1}_getGlobalTransformMatrix(t,e){const r=200,i=1e3;if(t<-1e3||i<t||e<-1e3||i<e)return this.globalTransformMatrix;let h=!1;const a=this._boneData,n=a.segmentX,l=a.segmentY,_=2*a.segmentX,o=this._dX,c=this._dY,f=Math.floor((t+r)/o),m=Math.floor((e+r)/c);let u=0,d=f*o-r,g=m*c-r;const x=this._matrixCahce,y=s._helpMatrix;if(t<-200){if(e<-200||e>=r)return this.globalTransformMatrix;if(h=e>this._kX*(t+r)+g,u=7*(2*(n*l+n+l+l+m)+(h?1:0)),x[u]>0)y.copyFromArray(x,u+1);else{const t=m*(_+2),e=this._hullCache[4],r=this._hullCache[5],i=this._hullCache[2]-(l-m)*e,a=this._hullCache[3]-(l-m)*r,n=this._vertices;h?this._getAffineTransform(-200,g+c,800,c,n[t+_+2],n[t+_+3],i+e,a+r,n[t],n[t+1],s._helpTransform,y,!0):this._getAffineTransform(-1e3,g,800,c,i,a,n[t],n[t+1],i+e,a+r,s._helpTransform,y,!1),x[u]=1,x[u+1]=y.a,x[u+2]=y.b,x[u+3]=y.c,x[u+4]=y.d,x[u+5]=y.tx,x[u+6]=y.ty}}else if(t>=r){if(e<-200||e>=r)return this.globalTransformMatrix;if(h=e>this._kX*(t-i)+g,u=7*(2*(n*l+n+m)+(h?1:0)),x[u]>0)y.copyFromArray(x,u+1);else{const t=(m+1)*(_+2)-2,e=this._hullCache[4],a=this._hullCache[5],n=this._hullCache[0]+m*e,l=this._hullCache[1]+m*a,o=this._vertices;h?this._getAffineTransform(i,g+c,800,c,n+e,l+a,o[t+_+2],o[t+_+3],n,l,s._helpTransform,y,!0):this._getAffineTransform(r,g,800,c,o[t],o[t+1],n,l,o[t+_+2],o[t+_+3],s._helpTransform,y,!1),x[u]=1,x[u+1]=y.a,x[u+2]=y.b,x[u+3]=y.c,x[u+4]=y.d,x[u+5]=y.tx,x[u+6]=y.ty}}else if(e<-200){if(t<-200||t>=r)return this.globalTransformMatrix;if(h=e>this._kY*(t-d-o)-i,u=7*(2*(n*l+f)+(h?1:0)),x[u]>0)y.copyFromArray(x,u+1);else{const t=2*f,e=this._hullCache[10],r=this._hullCache[11],i=this._hullCache[8]+f*e,a=this._hullCache[9]+f*r,n=this._vertices;h?this._getAffineTransform(d+o,-200,o,800,n[t+2],n[t+3],n[t],n[t+1],i+e,a+r,s._helpTransform,y,!0):this._getAffineTransform(d,-1e3,o,800,i,a,i+e,a+r,n[t],n[t+1],s._helpTransform,y,!1),x[u]=1,x[u+1]=y.a,x[u+2]=y.b,x[u+3]=y.c,x[u+4]=y.d,x[u+5]=y.tx,x[u+6]=y.ty}}else if(e>=r){if(t<-200||t>=r)return this.globalTransformMatrix;if(h=e>this._kY*(t-d-o)+r,u=7*(2*(n*l+n+l+f)+(h?1:0)),x[u]>0)y.copyFromArray(x,u+1);else{const t=l*(_+2)+2*f,e=this._hullCache[10],a=this._hullCache[11],c=this._hullCache[6]-(n-f)*e,m=this._hullCache[7]-(n-f)*a,g=this._vertices;h?this._getAffineTransform(d+o,i,o,800,c+e,m+a,c,m,g[t+2],g[t+3],s._helpTransform,y,!0):this._getAffineTransform(d,r,o,800,g[t],g[t+1],g[t+2],g[t+3],c,m,s._helpTransform,y,!1),x[u]=1,x[u+1]=y.a,x[u+2]=y.b,x[u+3]=y.c,x[u+4]=y.d,x[u+5]=y.tx,x[u+6]=y.ty}}else if(h=e>this._k*(t-d-o)+g,u=7*(2*(n*m+f)+(h?1:0)),x[u]>0)y.copyFromArray(x,u+1);else{const t=2*f+m*(_+2),e=this._vertices;h?this._getAffineTransform(d+o,g+c,o,c,e[t+_+4],e[t+_+5],e[t+_+2],e[t+_+3],e[t+2],e[t+3],s._helpTransform,y,!0):this._getAffineTransform(d,g,o,c,e[t],e[t+1],e[t+2],e[t+3],e[t+_+2],e[t+_+3],s._helpTransform,y,!1),x[u]=1,x[u+1]=y.a,x[u+2]=y.b,x[u+3]=y.c,x[u+4]=y.d,x[u+5]=y.tx,x[u+6]=y.ty}return y}init(t,s){if(null!==this._boneData)return;super.init(t,s);const e=t.segmentX,r=t.segmentY,i=this._armature.armatureData.parent.intArray[t.geometry.offset+0];this._dX=400/e,this._dY=400/r,this._k=-this._dY/this._dX,this._kX=-this._dY/800,this._kY=-800/this._dX,this._vertices.length=2*i,this._deformVertices.length=2*i,this._matrixCahce.length=2*(e*r+2*e+2*r)*7,this._hullCache.length=10;for(let t=0;t<2*i;++t)this._deformVertices[t]=0;null!==this._parent&&(0===this._parent.boneData.type?this._bone=this._parent:this._bone=this._parent._bone)}update(t){if(t>=0&&null!==this._cachedFrameIndices){const s=this._cachedFrameIndices[t];if(s>=0&&this._cachedFrameIndex===s)this._transformDirty=!1;else if(s>=0)this._transformDirty=!0,this._cachedFrameIndex=s;else{if(this._hasConstraint)for(const t of this._armature._constraints)t._root===this&&t.update();this._transformDirty||null!==this._parent&&this._parent._childrenTransformDirty?(this._transformDirty=!0,this._cachedFrameIndex=-1):this._cachedFrameIndex>=0?(this._transformDirty=!1,this._cachedFrameIndices[t]=this._cachedFrameIndex):(this._transformDirty=!0,this._cachedFrameIndex=-1)}}else{if(this._hasConstraint)for(const t of this._armature._constraints)t._root===this&&t.update();(this._transformDirty||null!==this._parent&&this._parent._childrenTransformDirty)&&(t=-1,this._transformDirty=!0,this._cachedFrameIndex=-1)}if(this._transformDirty){this._transformDirty=!1,this._childrenTransformDirty=!0;for(let t=0,s=this._matrixCahce.length;t<s;t+=7)this._matrixCahce[t]=-1;if(this._updateVertices(),this._cachedFrameIndex<0){const s=t>=0;this._localDirty&&this._updateGlobalTransformMatrix(s),s&&null!==this._cachedFrameIndices&&(this._cachedFrameIndex=this._cachedFrameIndices[t]=this._armature._armatureData.setCacheFrame(this.globalTransformMatrix,this.global))}else this._armature._armatureData.getCacheFrame(this.globalTransformMatrix,this.global,this._cachedFrameIndex);const e=1e3,r=200,i=2*this.global.x,h=2*this.global.y,a=s._helpPoint;this.globalTransformMatrix.transformPoint(e,-200,a),this._hullCache[0]=a.x,this._hullCache[1]=a.y,this._hullCache[2]=i-a.x,this._hullCache[3]=h-a.y,this.globalTransformMatrix.transformPoint(0,this._dY,a,!0),this._hullCache[4]=a.x,this._hullCache[5]=a.y,this.globalTransformMatrix.transformPoint(r,e,a),this._hullCache[6]=a.x,this._hullCache[7]=a.y,this._hullCache[8]=i-a.x,this._hullCache[9]=h-a.y,this.globalTransformMatrix.transformPoint(this._dX,0,a,!0),this._hullCache[10]=a.x,this._hullCache[11]=a.y}else this._childrenTransformDirty&&(this._childrenTransformDirty=!1);this._localDirty=!0}}exports.Surface=s; //# sourceMappingURL=Surface.cjs.map