UNPKG

pixi-dragonbones-runtime

Version:
3 lines (2 loc) 6.48 kB
"use strict";var a=require("../core/BaseObject.cjs");require("../core/DragonBones.cjs");var e=require("../model/AnimationData.cjs");require("../model/ArmatureData.cjs");var t=require("../model/DisplayData.cjs");require("../geom/Transform.cjs");var r=require("./DataParser.cjs"),i=require("./ObjectDataParser.cjs");class n extends i.ObjectDataParser{_inRange(a,e,t){return e<=a&&a<=t}_decodeUTF8(a){let e,t=0,r="",i=0,n=0,s=0,o=0;for(;a.length>t;){let f=a[t++];if(-1===f)e=0!==n?65533:-1;else if(0===n)this._inRange(f,0,127)?e=f:(this._inRange(f,194,223)?(n=1,o=128,i=f-192):this._inRange(f,224,239)?(n=2,o=2048,i=f-224):this._inRange(f,240,244)&&(n=3,o=65536,i=f-240),i*=Math.pow(64,n),e=null);else if(this._inRange(f,128,191))if(s+=1,i+=(f-128)*Math.pow(64,n-s),s!==n)e=null;else{let a=i,t=o;i=0,n=0,s=0,o=0,e=this._inRange(a,t,1114111)&&!this._inRange(a,55296,57343)?a:f}else i=0,n=0,s=0,o=0,t--,e=f;null!==e&&-1!==e&&(e<=65535?e>0&&(r+=String.fromCharCode(e)):(e-=65536,r+=String.fromCharCode(55296+(e>>10&1023)),r+=String.fromCharCode(56320+(1023&e))))}return r}_parseBinaryTimeline(t,r,i=null){const n=null!==i?i:a.BaseObject.borrowObject(e.TimelineData);n.type=t,n.offset=r,this._timeline=n;const s=this._timelineArrayBuffer[n.offset+2];if(1===s)n.frameIndicesOffset=-1;else{let a=0;const e=this._animation.frameCount+1,t=this._data.frameIndices;a=t.length,t.length+=e,n.frameIndicesOffset=a;for(let r=0,i=0,o=0,f=0;r<e;++r)o+f<=r&&i<s&&(o=this._frameArrayBuffer[this._animation.frameOffset+this._timelineArrayBuffer[n.offset+5+i]],f=i===s-1?this._animation.frameCount-o:this._frameArrayBuffer[this._animation.frameOffset+this._timelineArrayBuffer[n.offset+5+i+1]]-o,i++),t[a+r]=i-1}return this._timeline=null,n}_parseAnimation(t){const n=a.BaseObject.borrowObject(e.AnimationData);n.blendType=r.DataParser._getAnimationBlendType(i.ObjectDataParser._getString(t,r.DataParser.BLEND_TYPE,"")),n.frameCount=i.ObjectDataParser._getNumber(t,r.DataParser.DURATION,0),n.playTimes=i.ObjectDataParser._getNumber(t,r.DataParser.PLAY_TIMES,1),n.duration=n.frameCount/this._armature.frameRate,n.fadeInTime=i.ObjectDataParser._getNumber(t,r.DataParser.FADE_IN_TIME,0),n.scale=i.ObjectDataParser._getNumber(t,r.DataParser.SCALE,1),n.name=i.ObjectDataParser._getString(t,r.DataParser.NAME,r.DataParser.DEFAULT_NAME),0===n.name.length&&(n.name=r.DataParser.DEFAULT_NAME);const s=t[r.DataParser.OFFSET];if(n.frameIntOffset=s[0],n.frameFloatOffset=s[1],n.frameOffset=s[2],this._animation=n,r.DataParser.ACTION in t&&(n.actionTimeline=this._parseBinaryTimeline(0,t[r.DataParser.ACTION])),r.DataParser.Z_ORDER in t&&(n.zOrderTimeline=this._parseBinaryTimeline(1,t[r.DataParser.Z_ORDER])),r.DataParser.BONE in t){const a=t[r.DataParser.BONE];for(let e in a){const t=a[e],r=this._armature.getBone(e);if(null!==r)for(let a=0,e=t.length;a<e;a+=2){const e=t[a],i=t[a+1],n=this._parseBinaryTimeline(e,i);this._animation.addBoneTimeline(r.name,n)}}}if(r.DataParser.SLOT in t){const a=t[r.DataParser.SLOT];for(let e in a){const t=a[e],r=this._armature.getSlot(e);if(null!==r)for(let a=0,e=t.length;a<e;a+=2){const e=t[a],i=t[a+1],n=this._parseBinaryTimeline(e,i);this._animation.addSlotTimeline(r.name,n)}}}if(r.DataParser.CONSTRAINT in t){const a=t[r.DataParser.CONSTRAINT];for(let e in a){const t=a[e],r=this._armature.getConstraint(e);if(null!==r)for(let a=0,e=t.length;a<e;a+=2){const e=t[a],i=t[a+1],n=this._parseBinaryTimeline(e,i);this._animation.addConstraintTimeline(r.name,n)}}}if(r.DataParser.TIMELINE in t){const s=t[r.DataParser.TIMELINE];for(const t of s){const s=i.ObjectDataParser._getNumber(t,r.DataParser.OFFSET,0);if(s>=0){const o=i.ObjectDataParser._getNumber(t,r.DataParser.TYPE,0),f=i.ObjectDataParser._getString(t,r.DataParser.NAME,"");let _=null;if(40===o&&0!==n.blendType){_=a.BaseObject.borrowObject(e.AnimationTimelineData);const n=_;n.x=i.ObjectDataParser._getNumber(t,r.DataParser.X,0),n.y=i.ObjectDataParser._getNumber(t,r.DataParser.Y,0)}switch(_=this._parseBinaryTimeline(o,s,_),o){case 0:case 1:break;case 11:case 12:case 13:case 50:case 60:this._animation.addBoneTimeline(f,_);break;case 20:case 21:case 22:case 23:case 24:this._animation.addSlotTimeline(f,_);break;case 30:this._animation.addConstraintTimeline(f,_);break;case 40:case 41:case 42:this._animation.addAnimationTimeline(f,_)}}}}return this._animation=null,n}_parseGeometry(e,i){i.offset=e[r.DataParser.OFFSET],i.data=this._data;let n=this._intArrayBuffer[i.offset+3];if(n<-1&&(n+=65536),n>=0){const e=a.BaseObject.borrowObject(t.WeightData),r=this._intArrayBuffer[i.offset+0],s=this._intArrayBuffer[n+0];e.offset=n;for(let a=0;a<s;++a){const t=this._intArrayBuffer[n+2+a];e.addBone(this._rawBones[t])}let o=n+2+s,f=0;for(let a=0,e=r;a<e;++a){const a=this._intArrayBuffer[o++];f+=a,o+=a}e.count=f,i.weight=e}}_parseArray(a){const e=a[r.DataParser.OFFSET],t=e[1],i=e[3],n=e[5],s=e[7],o=e[9],f=e[11],_=e.length>12?e[13]:0,l=new Int16Array(this._binary,this._binaryOffset+e[0],t/Int16Array.BYTES_PER_ELEMENT),c=new Float32Array(this._binary,this._binaryOffset+e[2],i/Float32Array.BYTES_PER_ELEMENT),h=new Int16Array(this._binary,this._binaryOffset+e[4],n/Int16Array.BYTES_PER_ELEMENT),m=new Float32Array(this._binary,this._binaryOffset+e[6],s/Float32Array.BYTES_PER_ELEMENT),y=new Int16Array(this._binary,this._binaryOffset+e[8],o/Int16Array.BYTES_PER_ELEMENT),D=new Uint16Array(this._binary,this._binaryOffset+e[10],f/Uint16Array.BYTES_PER_ELEMENT),u=_>0?new Int16Array(this._binary,this._binaryOffset+e[12],_/Uint16Array.BYTES_PER_ELEMENT):l;this._data.binary=this._binary,this._data.intArray=this._intArrayBuffer=l,this._data.floatArray=c,this._data.frameIntArray=h,this._data.frameFloatArray=m,this._data.frameArray=this._frameArrayBuffer=y,this._data.timelineArray=this._timelineArrayBuffer=D,this._data.colorArray=u}parseDragonBonesData(a,e=1){console.assert(null!=a&&a instanceof ArrayBuffer,"Data error.");const t=new Uint8Array(a,0,8);if(t[0]!=="D".charCodeAt(0)||t[1]!=="B".charCodeAt(0)||t[2]!=="D".charCodeAt(0)||t[3]!=="T".charCodeAt(0))return console.assert(!1,"Nonsupport data."),null;const r=new Uint32Array(a,8,1)[0],i=new Uint8Array(a,12,r),n=this._decodeUTF8(i),s=JSON.parse(n);return this._binaryOffset=12+r,this._binary=a,super.parseDragonBonesData(s,e)}static getInstance(){return null===n._binaryDataParserInstance&&(n._binaryDataParserInstance=new n),n._binaryDataParserInstance}}n._binaryDataParserInstance=null,exports.BinaryDataParser=n; //# sourceMappingURL=BinaryDataParser.cjs.map