pixi-dragonbones-runtime
Version:
DragonBones Runtime for Pixi.js
3 lines (2 loc) • 42.3 kB
JavaScript
"use strict";var a=require("../core/BaseObject.cjs");require("../core/DragonBones.cjs");var t=require("../geom/ColorTransform.cjs"),r=require("../geom/Matrix.cjs"),e=require("../geom/Point.cjs"),s=require("../geom/Transform.cjs"),i=require("../model/AnimationData.cjs"),n=require("../model/ArmatureData.cjs"),o=require("../model/BoundingBoxData.cjs"),l=require("../model/CanvasData.cjs"),h=require("../model/ConstraintData.cjs"),_=require("../model/DisplayData.cjs"),m=require("../model/DragonBonesData.cjs"),f=require("../model/SkinData.cjs"),A=require("../model/TextureAtlasData.cjs"),c=require("../model/UserData.cjs"),D=require("./DataParser.cjs");class g extends D.DataParser{constructor(){super(...arguments),this._rawTextureAtlasIndex=0,this._rawBones=[],this._data=null,this._armature=null,this._bone=null,this._geometry=null,this._slot=null,this._skin=null,this._mesh=null,this._animation=null,this._timeline=null,this._rawTextureAtlases=null,this._frameValueType=0,this._defaultColorOffset=-1,this._prevClockwise=0,this._prevRotation=0,this._frameDefaultValue=0,this._frameValueScale=1,this._helpMatrixA=new r.Matrix,this._helpMatrixB=new r.Matrix,this._helpTransform=new s.Transform,this._helpColorTransform=new t.ColorTransform,this._helpPoint=new e.Point,this._helpArray=[],this._intArray=[],this._floatArray=[],this._frameIntArray=[],this._frameFloatArray=[],this._frameArray=[],this._timelineArray=[],this._colorArray=[],this._cacheRawMeshes=[],this._cacheMeshes=[],this._actionFrames=[],this._weightSlotPose={},this._weightBonePoses={},this._cacheBones={},this._slotChildActions={}}static _getBoolean(a,t,r){if(t in a){const r=a[t],e=typeof r;if("boolean"===e)return r;if("string"!==e)return!!r;switch(r){case"0":case"NaN":case"":case"false":case"null":case"undefined":return!1;default:return!0}}return r}static _getNumber(a,t,r){if(t in a){const e=a[t];return null===e||"NaN"===e?r:+e||0}return r}static _getString(a,t,r){if(t in a){const r=a[t];return"string"===typeof r?r:r.toString()}return r}_getCurvePoint(a,t,r,e,s,i,n,o,l,h){const _=1-l,m=_*_,f=l*l,A=_*m,c=3*l*m,D=3*_*f,g=l*f;h.x=A*a+c*r+D*s+g*n,h.y=A*t+c*e+D*i+g*o}_samplingEasingCurve(a,t){const r=a.length;if(r%3==1){let e=-2;for(let s=0,i=t.length;s<i;++s){let n=(s+1)/(i+1);for(;(e+6<r?a[e+6]:1)<n;)e+=6;const o=e>=0&&e+6<r,l=o?a[e]:0,h=o?a[e+1]:0,_=a[e+2],m=a[e+3],f=a[e+4],A=a[e+5],c=o?a[e+6]:1,D=o?a[e+7]:1;let g=0,u=1;for(;u-g>1e-4;){const a=.5*(u+g);this._getCurvePoint(l,h,_,m,f,A,c,D,a,this._helpPoint),n-this._helpPoint.x>0?g=a:u=a}t[s]=this._helpPoint.y}return!0}{let r=0;for(let e=0,s=t.length;e<s;++e){let i=(e+1)/(s+1);for(;a[r+6]<i;)r+=6;const n=a[r],o=a[r+1],l=a[r+2],h=a[r+3],_=a[r+4],m=a[r+5],f=a[r+6],A=a[r+7];let c=0,D=1;for(;D-c>1e-4;){const a=.5*(D+c);this._getCurvePoint(n,o,l,h,_,m,f,A,a,this._helpPoint),i-this._helpPoint.x>0?c=a:D=a}t[e]=this._helpPoint.y}return!1}}_parseActionDataInFrame(a,t,r,e){D.DataParser.EVENT in a&&this._mergeActionFrame(a[D.DataParser.EVENT],t,10,r,e),D.DataParser.SOUND in a&&this._mergeActionFrame(a[D.DataParser.SOUND],t,11,r,e),D.DataParser.ACTION in a&&this._mergeActionFrame(a[D.DataParser.ACTION],t,0,r,e),D.DataParser.EVENTS in a&&this._mergeActionFrame(a[D.DataParser.EVENTS],t,10,r,e),D.DataParser.ACTIONS in a&&this._mergeActionFrame(a[D.DataParser.ACTIONS],t,0,r,e)}_mergeActionFrame(a,t,r,e,s){const i=this._armature.actions.length,n=this._parseActionData(a,r,e,s);let o=0,l=null;for(const a of n)this._armature.addAction(a,!1);0===this._actionFrames.length&&(l=new u,l.frameStart=0,this._actionFrames.push(l),l=null);for(const a of this._actionFrames){if(a.frameStart===t){l=a;break}if(a.frameStart>t)break;o++}null===l&&(l=new u,l.frameStart=t,this._actionFrames.splice(o,0,l));for(let a=0;a<n.length;++a)l.actions.push(i+a)}_parseArmature(t,r){const e=a.BaseObject.borrowObject(n.ArmatureData);if(e.name=g._getString(t,D.DataParser.NAME,""),e.frameRate=g._getNumber(t,D.DataParser.FRAME_RATE,this._data.frameRate),e.scale=r,D.DataParser.TYPE in t&&"string"==typeof t[D.DataParser.TYPE]?e.type=D.DataParser._getArmatureType(t[D.DataParser.TYPE]):e.type=g._getNumber(t,D.DataParser.TYPE,0),0===e.frameRate&&(e.frameRate=24),this._armature=e,D.DataParser.CANVAS in t){const r=t[D.DataParser.CANVAS],s=a.BaseObject.borrowObject(l.CanvasData);D.DataParser.COLOR in r?s.hasBackground=!0:s.hasBackground=!1,s.color=g._getNumber(r,D.DataParser.COLOR,0),s.x=g._getNumber(r,D.DataParser.X,0)*e.scale,s.y=g._getNumber(r,D.DataParser.Y,0)*e.scale,s.width=g._getNumber(r,D.DataParser.WIDTH,0)*e.scale,s.height=g._getNumber(r,D.DataParser.HEIGHT,0)*e.scale,e.canvas=s}if(D.DataParser.AABB in t){const a=t[D.DataParser.AABB];e.aabb.x=g._getNumber(a,D.DataParser.X,0)*e.scale,e.aabb.y=g._getNumber(a,D.DataParser.Y,0)*e.scale,e.aabb.width=g._getNumber(a,D.DataParser.WIDTH,0)*e.scale,e.aabb.height=g._getNumber(a,D.DataParser.HEIGHT,0)*e.scale}if(D.DataParser.BONE in t){const a=t[D.DataParser.BONE];for(const t of a){const a=g._getString(t,D.DataParser.PARENT,""),r=this._parseBone(t);if(a.length>0){const t=e.getBone(a);null!==t?r.parent=t:(a in this._cacheBones||(this._cacheBones[a]=[]),this._cacheBones[a].push(r))}if(r.name in this._cacheBones){for(const a of this._cacheBones[r.name])a.parent=r;delete this._cacheBones[r.name]}e.addBone(r),this._rawBones.push(r)}}if(D.DataParser.IK in t){const a=t[D.DataParser.IK];for(const t of a){const a=this._parseIKConstraint(t);a&&e.addConstraint(a)}}if(e.sortBones(),D.DataParser.SLOT in t){let a=0;const r=t[D.DataParser.SLOT];for(const t of r)e.addSlot(this._parseSlot(t,a++))}if(D.DataParser.SKIN in t){const a=t[D.DataParser.SKIN];for(const t of a)e.addSkin(this._parseSkin(t))}if(D.DataParser.PATH_CONSTRAINT in t){const a=t[D.DataParser.PATH_CONSTRAINT];for(const t of a){const a=this._parsePathConstraint(t);a&&e.addConstraint(a)}}for(let a=0,t=this._cacheRawMeshes.length;a<t;++a){const t=this._cacheRawMeshes[a],r=g._getString(t,D.DataParser.SHARE,"");if(0===r.length)continue;let s=g._getString(t,D.DataParser.SKIN,D.DataParser.DEFAULT_NAME);0===s.length&&(s=D.DataParser.DEFAULT_NAME);const i=e.getMesh(s,"",r);if(null===i)continue;this._cacheMeshes[a].geometry.shareFrom(i.geometry)}if(D.DataParser.ANIMATION in t){const a=t[D.DataParser.ANIMATION];for(const t of a){const a=this._parseAnimation(t);e.addAnimation(a)}}if(D.DataParser.DEFAULT_ACTIONS in t){const a=this._parseActionData(t[D.DataParser.DEFAULT_ACTIONS],0,null,null);for(const t of a)if(e.addAction(t,!0),0===t.type){const a=e.getAnimation(t.name);null!==a&&(e.defaultAnimation=a)}}if(D.DataParser.ACTIONS in t){const a=this._parseActionData(t[D.DataParser.ACTIONS],0,null,null);for(const t of a)e.addAction(t,!1)}this._rawBones.length=0,this._cacheRawMeshes.length=0,this._cacheMeshes.length=0,this._armature=null;for(let a in this._weightSlotPose)delete this._weightSlotPose[a];for(let a in this._weightBonePoses)delete this._weightBonePoses[a];for(let a in this._cacheBones)delete this._cacheBones[a];for(let a in this._slotChildActions)delete this._slotChildActions[a];return e}_parseBone(t){let r=0;if(r=D.DataParser.TYPE in t&&"string"==typeof t[D.DataParser.TYPE]?D.DataParser._getBoneType(t[D.DataParser.TYPE]):g._getNumber(t,D.DataParser.TYPE,0),0===r){const r=this._armature.scale,e=a.BaseObject.borrowObject(n.BoneData);return e.inheritTranslation=g._getBoolean(t,D.DataParser.INHERIT_TRANSLATION,!0),e.inheritRotation=g._getBoolean(t,D.DataParser.INHERIT_ROTATION,!0),e.inheritScale=g._getBoolean(t,D.DataParser.INHERIT_SCALE,!0),e.inheritReflection=g._getBoolean(t,D.DataParser.INHERIT_REFLECTION,!0),e.length=g._getNumber(t,D.DataParser.LENGTH,0)*r,e.alpha=g._getNumber(t,D.DataParser.ALPHA,1),e.name=g._getString(t,D.DataParser.NAME,""),D.DataParser.TRANSFORM in t&&this._parseTransform(t[D.DataParser.TRANSFORM],e.transform,r),e}const e=a.BaseObject.borrowObject(n.SurfaceData);return e.alpha=g._getNumber(t,D.DataParser.ALPHA,1),e.name=g._getString(t,D.DataParser.NAME,""),e.segmentX=g._getNumber(t,D.DataParser.SEGMENT_X,0),e.segmentY=g._getNumber(t,D.DataParser.SEGMENT_Y,0),this._parseGeometry(t,e.geometry),e}_parseIKConstraint(t){const r=this._armature.getBone(g._getString(t,D.DataParser.BONE,""));if(null===r)return null;const e=this._armature.getBone(g._getString(t,D.DataParser.TARGET,""));if(null===e)return null;const s=g._getNumber(t,D.DataParser.CHAIN,0),i=a.BaseObject.borrowObject(h.IKConstraintData);return i.scaleEnabled=g._getBoolean(t,D.DataParser.SCALE,!1),i.bendPositive=g._getBoolean(t,D.DataParser.BEND_POSITIVE,!0),i.weight=g._getNumber(t,D.DataParser.WEIGHT,1),i.name=g._getString(t,D.DataParser.NAME,""),i.type=0,i.target=e,s>0&&null!==r.parent?(i.root=r.parent,i.bone=r):(i.root=r,i.bone=null),i}_parsePathConstraint(t){const r=this._armature.getSlot(g._getString(t,D.DataParser.TARGET,""));if(null===r)return null;const e=this._armature.defaultSkin;if(null===e)return null;const s=e.getDisplay(r.name,g._getString(t,D.DataParser.TARGET_DISPLAY,r.name));if(null===s||!(s instanceof _.PathDisplayData))return null;const i=t[D.DataParser.BONES];if(null===i||0===i.length)return null;const n=a.BaseObject.borrowObject(h.PathConstraintData);for(var o of(n.name=g._getString(t,D.DataParser.NAME,""),n.type=1,n.pathSlot=r,n.pathDisplayData=s,n.target=r.parent,n.positionMode=D.DataParser._getPositionMode(g._getString(t,D.DataParser.POSITION_MODE,"")),n.spacingMode=D.DataParser._getSpacingMode(g._getString(t,D.DataParser.SPACING_MODE,"")),n.rotateMode=D.DataParser._getRotateMode(g._getString(t,D.DataParser.ROTATE_MODE,"")),n.position=g._getNumber(t,D.DataParser.POSITION,0),n.spacing=g._getNumber(t,D.DataParser.SPACING,0),n.rotateOffset=g._getNumber(t,D.DataParser.ROTATE_OFFSET,0),n.rotateMix=g._getNumber(t,D.DataParser.ROTATE_MIX,1),n.translateMix=g._getNumber(t,D.DataParser.TRANSLATE_MIX,1),i)){const a=this._armature.getBone(o);null!==a&&(n.AddBone(a),null===n.root&&(n.root=a))}return n}_parseSlot(t,r){const e=a.BaseObject.borrowObject(n.SlotData);return e.displayIndex=g._getNumber(t,D.DataParser.DISPLAY_INDEX,0),e.zOrder=r,e.zIndex=g._getNumber(t,D.DataParser.Z_INDEX,0),e.alpha=g._getNumber(t,D.DataParser.ALPHA,1),e.name=g._getString(t,D.DataParser.NAME,""),e.parent=this._armature.getBone(g._getString(t,D.DataParser.PARENT,"")),D.DataParser.BLEND_MODE in t&&"string"==typeof t[D.DataParser.BLEND_MODE]?e.blendMode=D.DataParser._getBlendMode(t[D.DataParser.BLEND_MODE]):e.blendMode=g._getNumber(t,D.DataParser.BLEND_MODE,0),D.DataParser.COLOR in t?(e.color=n.SlotData.createColor(),this._parseColorTransform(t[D.DataParser.COLOR],e.color)):e.color=n.SlotData.DEFAULT_COLOR,D.DataParser.ACTIONS in t&&(this._slotChildActions[e.name]=this._parseActionData(t[D.DataParser.ACTIONS],0,null,null)),e}_parseSkin(t){const r=a.BaseObject.borrowObject(f.SkinData);if(r.name=g._getString(t,D.DataParser.NAME,D.DataParser.DEFAULT_NAME),0===r.name.length&&(r.name=D.DataParser.DEFAULT_NAME),D.DataParser.SLOT in t){const a=t[D.DataParser.SLOT];this._skin=r;for(const t of a){const a=g._getString(t,D.DataParser.NAME,""),e=this._armature.getSlot(a);if(null!==e){if(this._slot=e,D.DataParser.DISPLAY in t){const e=t[D.DataParser.DISPLAY];for(const t of e)t?r.addDisplay(a,this._parseDisplay(t)):r.addDisplay(a,null)}this._slot=null}}this._skin=null}return r}_parseDisplay(t){const r=g._getString(t,D.DataParser.NAME,""),e=g._getString(t,D.DataParser.PATH,"");let s=0,i=null;switch(s=D.DataParser.TYPE in t&&"string"==typeof t[D.DataParser.TYPE]?D.DataParser._getDisplayType(t[D.DataParser.TYPE]):g._getNumber(t,D.DataParser.TYPE,s),s){case 0:{const s=i=a.BaseObject.borrowObject(_.ImageDisplayData);s.name=r,s.path=e.length>0?e:r,this._parsePivot(t,s);break}case 1:{const s=i=a.BaseObject.borrowObject(_.ArmatureDisplayData);if(s.name=r,s.path=e.length>0?e:r,s.inheritAnimation=!0,D.DataParser.ACTIONS in t){const a=this._parseActionData(t[D.DataParser.ACTIONS],0,null,null);for(const t of a)s.addAction(t)}else if(this._slot.name in this._slotChildActions){const a=this._skin.getDisplays(this._slot.name);if(null===a?0===this._slot.displayIndex:this._slot.displayIndex===a.length){for(const a of this._slotChildActions[this._slot.name])s.addAction(a);delete this._slotChildActions[this._slot.name]}}break}case 2:{const s=i=a.BaseObject.borrowObject(_.MeshDisplayData);s.geometry.inheritDeform=g._getBoolean(t,D.DataParser.INHERIT_DEFORM,!0),s.name=r,s.path=e.length>0?e:r,D.DataParser.SHARE in t?(s.geometry.data=this._data,this._cacheRawMeshes.push(t),this._cacheMeshes.push(s)):this._parseMesh(t,s);break}case 3:{const s=this._parseBoundingBox(t);if(null!==s){const t=i=a.BaseObject.borrowObject(_.BoundingBoxDisplayData);t.name=r,t.path=e.length>0?e:r,t.boundingBox=s}break}case 4:{const s=t[D.DataParser.LENGTHS],n=i=a.BaseObject.borrowObject(_.PathDisplayData);n.closed=g._getBoolean(t,D.DataParser.CLOSED,!1),n.constantSpeed=g._getBoolean(t,D.DataParser.CONSTANT_SPEED,!1),n.name=r,n.path=e.length>0?e:r,n.curveLengths.length=s.length;for(let a=0,t=s.length;a<t;++a)n.curveLengths[a]=s[a];this._parsePath(t,n);break}}return null!==i&&D.DataParser.TRANSFORM in t&&this._parseTransform(t[D.DataParser.TRANSFORM],i.transform,this._armature.scale),i}_parsePath(a,t){this._parseGeometry(a,t.geometry)}_parsePivot(a,t){if(D.DataParser.PIVOT in a){const r=a[D.DataParser.PIVOT];t.pivot.x=g._getNumber(r,D.DataParser.X,0),t.pivot.y=g._getNumber(r,D.DataParser.Y,0)}else t.pivot.x=.5,t.pivot.y=.5}_parseMesh(a,t){if(this._parseGeometry(a,t.geometry),D.DataParser.WEIGHTS in a){const r=a[D.DataParser.SLOT_POSE],e=a[D.DataParser.BONE_POSE],s=this._skin.name+"_"+this._slot.name+"_"+t.name;this._weightSlotPose[s]=r,this._weightBonePoses[s]=e}}_parseBoundingBox(t){let r=null,e=0;switch(e=D.DataParser.SUB_TYPE in t&&"string"==typeof t[D.DataParser.SUB_TYPE]?D.DataParser._getBoundingBoxType(t[D.DataParser.SUB_TYPE]):g._getNumber(t,D.DataParser.SUB_TYPE,e),e){case 0:r=a.BaseObject.borrowObject(o.RectangleBoundingBoxData);break;case 1:r=a.BaseObject.borrowObject(o.EllipseBoundingBoxData);break;case 2:r=this._parsePolygonBoundingBox(t)}return null!==r&&(r.color=g._getNumber(t,D.DataParser.COLOR,0),0!==r.type&&1!==r.type||(r.width=g._getNumber(t,D.DataParser.WIDTH,0),r.height=g._getNumber(t,D.DataParser.HEIGHT,0))),r}_parsePolygonBoundingBox(t){const r=a.BaseObject.borrowObject(o.PolygonBoundingBoxData);if(D.DataParser.VERTICES in t){const a=this._armature.scale,e=t[D.DataParser.VERTICES],s=r.vertices;s.length=e.length;for(let t=0,i=e.length;t<i;t+=2){const i=e[t]*a,n=e[t+1]*a;s[t]=i,s[t+1]=n,0===t?(r.x=i,r.y=n,r.width=i,r.height=n):(i<r.x?r.x=i:i>r.width&&(r.width=i),n<r.y?r.y=n:n>r.height&&(r.height=n))}r.width-=r.x,r.height-=r.y}else console.warn("Data error.\n Please reexport DragonBones Data to fixed the bug.");return r}_parseAnimation(t){const r=a.BaseObject.borrowObject(i.AnimationData);if(r.blendType=D.DataParser._getAnimationBlendType(g._getString(t,D.DataParser.BLEND_TYPE,"")),r.frameCount=g._getNumber(t,D.DataParser.DURATION,0),r.playTimes=g._getNumber(t,D.DataParser.PLAY_TIMES,1),r.duration=r.frameCount/this._armature.frameRate,r.fadeInTime=g._getNumber(t,D.DataParser.FADE_IN_TIME,0),r.scale=g._getNumber(t,D.DataParser.SCALE,1),r.name=g._getString(t,D.DataParser.NAME,D.DataParser.DEFAULT_NAME),0===r.name.length&&(r.name=D.DataParser.DEFAULT_NAME),r.frameIntOffset=this._frameIntArray.length,r.frameFloatOffset=this._frameFloatArray.length,r.frameOffset=this._frameArray.length,this._animation=r,D.DataParser.FRAME in t){const a=t[D.DataParser.FRAME],r=a.length;if(r>0)for(let t=0,e=0;t<r;++t){const r=a[t];this._parseActionDataInFrame(r,e,null,null),e+=g._getNumber(r,D.DataParser.DURATION,1)}}if(D.DataParser.Z_ORDER in t&&(this._animation.zOrderTimeline=this._parseTimeline(t[D.DataParser.Z_ORDER],null,D.DataParser.FRAME,1,0,0,this._parseZOrderFrame)),D.DataParser.BONE in t){const a=t[D.DataParser.BONE];for(const t of a)this._parseBoneTimeline(t)}if(D.DataParser.SLOT in t){const a=t[D.DataParser.SLOT];for(const t of a)this._parseSlotTimeline(t)}if(D.DataParser.FFD in t){const a=t[D.DataParser.FFD];for(const t of a){let a=g._getString(t,D.DataParser.SKIN,D.DataParser.DEFAULT_NAME);const r=g._getString(t,D.DataParser.SLOT,""),e=g._getString(t,D.DataParser.NAME,"");if(0===a.length&&(a=D.DataParser.DEFAULT_NAME),this._slot=this._armature.getSlot(r),this._mesh=this._armature.getMesh(a,r,e),null===this._slot||null===this._mesh)continue;const s=this._parseTimeline(t,null,D.DataParser.FRAME,22,2,0,this._parseSlotDeformFrame);null!==s&&this._animation.addSlotTimeline(r,s),this._slot=null,this._mesh=null}}if(D.DataParser.IK in t){const a=t[D.DataParser.IK];for(const t of a){const a=g._getString(t,D.DataParser.NAME,"");if(null===this._armature.getConstraint(a))continue;const r=this._parseTimeline(t,null,D.DataParser.FRAME,30,1,2,this._parseIKConstraintFrame);null!==r&&this._animation.addConstraintTimeline(a,r)}}if(this._actionFrames.length>0&&(this._animation.actionTimeline=this._parseTimeline(null,this._actionFrames,"",0,0,0,this._parseActionFrame),this._actionFrames.length=0),D.DataParser.TIMELINE in t){const e=t[D.DataParser.TIMELINE];for(const t of e){const e=g._getNumber(t,D.DataParser.TYPE,0),n=g._getString(t,D.DataParser.NAME,"");let o=null;switch(e){case 0:case 1:break;case 20:case 23:case 60:case 24:case 40:case 41:if(20===e?(this._frameValueType=0,this._frameValueScale=1):(this._frameValueType=1,this._frameValueScale=23===e?1:40===e||41===e?1e4:100),this._frameDefaultValue=60===e||24===e||41===e?1:0,40===e&&0!==r.blendType){o=a.BaseObject.borrowObject(i.AnimationTimelineData);const r=o;r.x=g._getNumber(t,D.DataParser.X,0),r.y=g._getNumber(t,D.DataParser.Y,0)}o=this._parseTimeline(t,null,D.DataParser.FRAME,e,this._frameValueType,1,this._parseSingleValueFrame,o);break;case 11:case 12:case 13:case 30:case 42:30===e||42===e?(this._frameValueType=1,this._frameValueScale=42===e?1e4:100):(this._frameValueScale=12===e?s.Transform.DEG_RAD:1,this._frameValueType=2),this._frameDefaultValue=13===e||30===e?1:0,o=this._parseTimeline(t,null,D.DataParser.FRAME,e,this._frameValueType,2,this._parseDoubleValueFrame);break;case 50:{const a=this._armature.getBone(n);if(null===a)continue;this._geometry=a.geometry,o=this._parseTimeline(t,null,D.DataParser.FRAME,e,2,0,this._parseDeformFrame),this._geometry=null;break}case 22:this._geometry=null;for(const a in this._armature.skins){const t=this._armature.skins[a];for(const a in t.displays){const r=t.displays[a];for(const a of r)if(null!==a&&a.name===n){this._geometry=a.geometry;break}}}if(null===this._geometry)continue;o=this._parseTimeline(t,null,D.DataParser.FRAME,e,2,0,this._parseDeformFrame),this._geometry=null;break;case 21:o=this._parseTimeline(t,null,D.DataParser.FRAME,e,1,1,this._parseSlotColorFrame)}if(null!==o)switch(e){case 0:case 1:break;case 11:case 12:case 13:case 50:case 60:this._animation.addBoneTimeline(n,o);break;case 20:case 21:case 22:case 23:case 24:this._animation.addSlotTimeline(n,o);break;case 30:this._animation.addConstraintTimeline(n,o);break;case 40:case 41:case 42:this._animation.addAnimationTimeline(n,o)}}}return this._animation=null,r}_parseTimeline(t,r,e,s,n,o,l,h=null){if(null!==t&&e.length>0&&e in t&&(r=t[e]),null===r)return null;const _=r.length;if(0===_)return null;const m=this._frameIntArray.length,f=this._frameFloatArray.length,A=this._timelineArray.length;switch(null===h&&(h=a.BaseObject.borrowObject(i.TimelineData)),h.type=s,h.offset=A,this._frameValueType=n,this._timeline=h,this._timelineArray.length+=5+_,null!==t?(this._timelineArray[A+0]=Math.round(100*g._getNumber(t,D.DataParser.SCALE,1)),this._timelineArray[A+1]=Math.round(100*g._getNumber(t,D.DataParser.OFFSET,0))):(this._timelineArray[A+0]=100,this._timelineArray[A+1]=0),this._timelineArray[A+2]=_,this._timelineArray[A+3]=o,this._frameValueType){case 0:this._timelineArray[A+4]=0;break;case 1:this._timelineArray[A+4]=m-this._animation.frameIntOffset;break;case 2:this._timelineArray[A+4]=f-this._animation.frameFloatOffset}if(1===_)h.frameIndicesOffset=-1,this._timelineArray[A+5+0]=l.call(this,r[0],0,0)-this._animation.frameOffset;else{const a=this._animation.frameCount+1,t=this._data.frameIndices,e=t.length;t.length+=a,h.frameIndicesOffset=e;for(let s=0,i=0,n=0,o=0;s<a;++s){if(n+o<=s&&i<_){const a=r[i];n=s,o=i===_-1?this._animation.frameCount-n:a instanceof u?this._actionFrames[i+1].frameStart-n:g._getNumber(a,D.DataParser.DURATION,1),this._timelineArray[A+5+i]=l.call(this,a,n,o)-this._animation.frameOffset,i++}t[e+s]=i-1}}return this._timeline=null,h}_parseBoneTimeline(a){const t=this._armature.getBone(g._getString(a,D.DataParser.NAME,""));if(null!==t){if(this._bone=t,this._slot=this._armature.getSlot(this._bone.name),D.DataParser.TRANSLATE_FRAME in a){this._frameDefaultValue=0,this._frameValueScale=1;const r=this._parseTimeline(a,null,D.DataParser.TRANSLATE_FRAME,11,2,2,this._parseDoubleValueFrame);null!==r&&this._animation.addBoneTimeline(t.name,r)}if(D.DataParser.ROTATE_FRAME in a){this._frameDefaultValue=0,this._frameValueScale=1;const r=this._parseTimeline(a,null,D.DataParser.ROTATE_FRAME,12,2,2,this._parseBoneRotateFrame);null!==r&&this._animation.addBoneTimeline(t.name,r)}if(D.DataParser.SCALE_FRAME in a){this._frameDefaultValue=1,this._frameValueScale=1;const r=this._parseTimeline(a,null,D.DataParser.SCALE_FRAME,13,2,2,this._parseBoneScaleFrame);null!==r&&this._animation.addBoneTimeline(t.name,r)}if(D.DataParser.FRAME in a){const r=this._parseTimeline(a,null,D.DataParser.FRAME,10,2,6,this._parseBoneAllFrame);null!==r&&this._animation.addBoneTimeline(t.name,r)}this._bone=null,this._slot=null}}_parseSlotTimeline(a){const t=this._armature.getSlot(g._getString(a,D.DataParser.NAME,""));if(null===t)return;let r=null,e=null;this._slot=t,r=D.DataParser.DISPLAY_FRAME in a?this._parseTimeline(a,null,D.DataParser.DISPLAY_FRAME,20,0,0,this._parseSlotDisplayFrame):this._parseTimeline(a,null,D.DataParser.FRAME,20,0,0,this._parseSlotDisplayFrame),e=D.DataParser.COLOR_FRAME in a?this._parseTimeline(a,null,D.DataParser.COLOR_FRAME,21,1,1,this._parseSlotColorFrame):this._parseTimeline(a,null,D.DataParser.FRAME,21,1,1,this._parseSlotColorFrame),null!==r&&this._animation.addSlotTimeline(t.name,r),null!==e&&this._animation.addSlotTimeline(t.name,e),this._slot=null}_parseFrame(a,t,r){const e=this._frameArray.length;return this._frameArray.length+=1,this._frameArray[e+0]=t,e}_parseTweenFrame(a,t,r){const e=this._parseFrame(a,t,r);if(r>0)if(D.DataParser.CURVE in a){const t=r+1;this._helpArray.length=t;const s=this._samplingEasingCurve(a[D.DataParser.CURVE],this._helpArray);this._frameArray.length+=2+this._helpArray.length,this._frameArray[e+1]=2,this._frameArray[e+2]=s?t:-t;for(let a=0;a<t;++a)this._frameArray[e+3+a]=Math.round(1e4*this._helpArray[a])}else{const t=-2;let r=t;D.DataParser.TWEEN_EASING in a&&(r=g._getNumber(a,D.DataParser.TWEEN_EASING,t)),r===t?(this._frameArray.length+=1,this._frameArray[e+1]=0):0===r?(this._frameArray.length+=1,this._frameArray[e+1]=1):r<0?(this._frameArray.length+=2,this._frameArray[e+1]=3,this._frameArray[e+2]=Math.round(100*-r)):r<=1?(this._frameArray.length+=2,this._frameArray[e+1]=4,this._frameArray[e+2]=Math.round(100*r)):(this._frameArray.length+=2,this._frameArray[e+1]=5,this._frameArray[e+2]=Math.round(100*r-100))}else this._frameArray.length+=1,this._frameArray[e+1]=0;return e}_parseSingleValueFrame(a,t,r){let e=0;switch(this._frameValueType){case 0:e=this._parseFrame(a,t,r),this._frameArray.length+=1,this._frameArray[e+1]=g._getNumber(a,D.DataParser.VALUE,this._frameDefaultValue);break;case 1:{e=this._parseTweenFrame(a,t,r);const s=this._frameIntArray.length;this._frameIntArray.length+=1,this._frameIntArray[s]=Math.round(g._getNumber(a,D.DataParser.VALUE,this._frameDefaultValue)*this._frameValueScale);break}case 2:{e=this._parseTweenFrame(a,t,r);const s=this._frameFloatArray.length;this._frameFloatArray.length+=1,this._frameFloatArray[s]=g._getNumber(a,D.DataParser.VALUE,this._frameDefaultValue)*this._frameValueScale;break}}return e}_parseDoubleValueFrame(a,t,r){let e=0;switch(this._frameValueType){case 0:e=this._parseFrame(a,t,r),this._frameArray.length+=2,this._frameArray[e+1]=g._getNumber(a,D.DataParser.X,this._frameDefaultValue),this._frameArray[e+2]=g._getNumber(a,D.DataParser.Y,this._frameDefaultValue);break;case 1:{e=this._parseTweenFrame(a,t,r);const s=this._frameIntArray.length;this._frameIntArray.length+=2,this._frameIntArray[s]=Math.round(g._getNumber(a,D.DataParser.X,this._frameDefaultValue)*this._frameValueScale),this._frameIntArray[s+1]=Math.round(g._getNumber(a,D.DataParser.Y,this._frameDefaultValue)*this._frameValueScale);break}case 2:{e=this._parseTweenFrame(a,t,r);const s=this._frameFloatArray.length;this._frameFloatArray.length+=2,this._frameFloatArray[s]=g._getNumber(a,D.DataParser.X,this._frameDefaultValue)*this._frameValueScale,this._frameFloatArray[s+1]=g._getNumber(a,D.DataParser.Y,this._frameDefaultValue)*this._frameValueScale;break}}return e}_parseActionFrame(a,t,r){const e=this._frameArray.length,s=a.actions.length;this._frameArray.length+=2+s,this._frameArray[e+0]=t,this._frameArray[e+0+1]=s;for(let t=0;t<s;++t)this._frameArray[e+0+2+t]=a.actions[t];return e}_parseZOrderFrame(a,t,r){const e=this._parseFrame(a,t,r);if(D.DataParser.Z_ORDER in a){const t=a[D.DataParser.Z_ORDER];if(t.length>0){const a=this._armature.sortedSlots.length,r=new Array(a-t.length/2),s=new Array(a);for(let a=0;a<r.length;++a)r[a]=0;for(let t=0;t<a;++t)s[t]=-1;let i=0,n=0;for(let a=0,e=t.length;a<e;a+=2){const e=t[a],o=t[a+1];for(;i!==e;)r[n++]=i++;s[i+o]=i++}for(;i<a;)r[n++]=i++;this._frameArray.length+=1+a,this._frameArray[e+1]=a;let o=a;for(;o--;)-1===s[o]?this._frameArray[e+2+o]=r[--n]||0:this._frameArray[e+2+o]=s[o]||0;return e}}return this._frameArray.length+=1,this._frameArray[e+1]=0,e}_parseBoneAllFrame(a,t,r){this._helpTransform.identity(),D.DataParser.TRANSFORM in a&&this._parseTransform(a[D.DataParser.TRANSFORM],this._helpTransform,1);let e=this._helpTransform.rotation;0!==t&&(0===this._prevClockwise?e=this._prevRotation+s.Transform.normalizeRadian(e-this._prevRotation):((this._prevClockwise>0?e>=this._prevRotation:e<=this._prevRotation)&&(this._prevClockwise=this._prevClockwise>0?this._prevClockwise-1:this._prevClockwise+1),e=this._prevRotation+e-this._prevRotation+s.Transform.PI_D*this._prevClockwise)),this._prevClockwise=g._getNumber(a,D.DataParser.TWEEN_ROTATE,0),this._prevRotation=e;const i=this._parseTweenFrame(a,t,r);let n=this._frameFloatArray.length;return this._frameFloatArray.length+=6,this._frameFloatArray[n++]=this._helpTransform.x,this._frameFloatArray[n++]=this._helpTransform.y,this._frameFloatArray[n++]=e,this._frameFloatArray[n++]=this._helpTransform.skew,this._frameFloatArray[n++]=this._helpTransform.scaleX,this._frameFloatArray[n++]=this._helpTransform.scaleY,this._parseActionDataInFrame(a,t,this._bone,this._slot),i}_parseBoneTranslateFrame(a,t,r){const e=this._parseTweenFrame(a,t,r);let s=this._frameFloatArray.length;return this._frameFloatArray.length+=2,this._frameFloatArray[s++]=g._getNumber(a,D.DataParser.X,0),this._frameFloatArray[s++]=g._getNumber(a,D.DataParser.Y,0),e}_parseBoneRotateFrame(a,t,r){let e=g._getNumber(a,D.DataParser.ROTATE,0)*s.Transform.DEG_RAD;0!==t&&(0===this._prevClockwise?e=this._prevRotation+s.Transform.normalizeRadian(e-this._prevRotation):((this._prevClockwise>0?e>=this._prevRotation:e<=this._prevRotation)&&(this._prevClockwise=this._prevClockwise>0?this._prevClockwise-1:this._prevClockwise+1),e=this._prevRotation+e-this._prevRotation+s.Transform.PI_D*this._prevClockwise)),this._prevClockwise=g._getNumber(a,D.DataParser.CLOCK_WISE,0),this._prevRotation=e;const i=this._parseTweenFrame(a,t,r);let n=this._frameFloatArray.length;return this._frameFloatArray.length+=2,this._frameFloatArray[n++]=e,this._frameFloatArray[n++]=g._getNumber(a,D.DataParser.SKEW,0)*s.Transform.DEG_RAD,i}_parseBoneScaleFrame(a,t,r){const e=this._parseTweenFrame(a,t,r);let s=this._frameFloatArray.length;return this._frameFloatArray.length+=2,this._frameFloatArray[s++]=g._getNumber(a,D.DataParser.X,1),this._frameFloatArray[s++]=g._getNumber(a,D.DataParser.Y,1),e}_parseSlotDisplayFrame(a,t,r){const e=this._parseFrame(a,t,r);return this._frameArray.length+=1,D.DataParser.VALUE in a?this._frameArray[e+1]=g._getNumber(a,D.DataParser.VALUE,0):this._frameArray[e+1]=g._getNumber(a,D.DataParser.DISPLAY_INDEX,0),this._parseActionDataInFrame(a,t,this._slot.parent,this._slot),e}_parseSlotColorFrame(a,t,r){const e=this._parseTweenFrame(a,t,r);let s=-1;if(D.DataParser.VALUE in a||D.DataParser.COLOR in a){const t=D.DataParser.VALUE in a?a[D.DataParser.VALUE]:a[D.DataParser.COLOR];for(let a in t){this._parseColorTransform(t,this._helpColorTransform),s=this._colorArray.length,this._colorArray.length+=8,this._colorArray[s++]=Math.round(100*this._helpColorTransform.alphaMultiplier),this._colorArray[s++]=Math.round(100*this._helpColorTransform.redMultiplier),this._colorArray[s++]=Math.round(100*this._helpColorTransform.greenMultiplier),this._colorArray[s++]=Math.round(100*this._helpColorTransform.blueMultiplier),this._colorArray[s++]=Math.round(this._helpColorTransform.alphaOffset),this._colorArray[s++]=Math.round(this._helpColorTransform.redOffset),this._colorArray[s++]=Math.round(this._helpColorTransform.greenOffset),this._colorArray[s++]=Math.round(this._helpColorTransform.blueOffset),s-=8;break}}s<0&&(this._defaultColorOffset<0&&(this._defaultColorOffset=s=this._colorArray.length,this._colorArray.length+=8,this._colorArray[s++]=100,this._colorArray[s++]=100,this._colorArray[s++]=100,this._colorArray[s++]=100,this._colorArray[s++]=0,this._colorArray[s++]=0,this._colorArray[s++]=0,this._colorArray[s++]=0),s=this._defaultColorOffset);const i=this._frameIntArray.length;return this._frameIntArray.length+=1,this._frameIntArray[i]=s,e}_parseSlotDeformFrame(a,t,r){const e=this._frameFloatArray.length,s=this._parseTweenFrame(a,t,r),i=D.DataParser.VERTICES in a?a[D.DataParser.VERTICES]:null,n=g._getNumber(a,D.DataParser.OFFSET,0),o=this._intArray[this._mesh.geometry.offset+0],l=this._mesh.parent.name+"_"+this._slot.name+"_"+this._mesh.name,h=this._mesh.geometry.weight;let _=0,m=0,f=0,A=0;if(null!==h){const a=this._weightSlotPose[l];this._helpMatrixA.copyFromArray(a,0),this._frameFloatArray.length+=2*h.count,f=h.offset+2+h.bones.length}else this._frameFloatArray.length+=2*o;for(let a=0;a<2*o;a+=2)if(null===i?(_=0,m=0):(_=a<n||a-n>=i.length?0:i[a-n],m=a+1<n||a+1-n>=i.length?0:i[a+1-n]),null!==h){const a=this._weightBonePoses[l],t=this._intArray[f++];this._helpMatrixA.transformPoint(_,m,this._helpPoint,!0),_=this._helpPoint.x,m=this._helpPoint.y;for(let r=0;r<t;++r){const t=this._intArray[f++];this._helpMatrixB.copyFromArray(a,7*t+1),this._helpMatrixB.invert(),this._helpMatrixB.transformPoint(_,m,this._helpPoint,!0),this._frameFloatArray[e+A++]=this._helpPoint.x,this._frameFloatArray[e+A++]=this._helpPoint.y}}else this._frameFloatArray[e+a]=_,this._frameFloatArray[e+a+1]=m;if(0===t){const a=this._frameIntArray.length;this._frameIntArray.length+=5,this._frameIntArray[a+0]=this._mesh.geometry.offset,this._frameIntArray[a+1]=this._frameFloatArray.length-e,this._frameIntArray[a+2]=this._frameFloatArray.length-e,this._frameIntArray[a+3]=0,this._frameIntArray[a+4]=e-this._animation.frameFloatOffset,this._timelineArray[this._timeline.offset+3]=a-this._animation.frameIntOffset}return s}_parseIKConstraintFrame(a,t,r){const e=this._parseTweenFrame(a,t,r);let s=this._frameIntArray.length;return this._frameIntArray.length+=2,this._frameIntArray[s++]=g._getBoolean(a,D.DataParser.BEND_POSITIVE,!0)?1:0,this._frameIntArray[s++]=Math.round(100*g._getNumber(a,D.DataParser.WEIGHT,1)),e}_parseActionData(t,r,e,s){const i=new Array;if("string"==typeof t){const n=a.BaseObject.borrowObject(c.ActionData);n.type=r,n.name=t,n.bone=e,n.slot=s,i.push(n)}else if(t instanceof Array)for(const n of t){const t=a.BaseObject.borrowObject(c.ActionData);if(D.DataParser.GOTO_AND_PLAY in n?(t.type=0,t.name=g._getString(n,D.DataParser.GOTO_AND_PLAY,"")):(D.DataParser.TYPE in n&&"string"==typeof n[D.DataParser.TYPE]?t.type=D.DataParser._getActionType(n[D.DataParser.TYPE]):t.type=g._getNumber(n,D.DataParser.TYPE,r),t.name=g._getString(n,D.DataParser.NAME,"")),D.DataParser.BONE in n){const a=g._getString(n,D.DataParser.BONE,"");t.bone=this._armature.getBone(a)}else t.bone=e;if(D.DataParser.SLOT in n){const a=g._getString(n,D.DataParser.SLOT,"");t.slot=this._armature.getSlot(a)}else t.slot=s;let o=null;if(D.DataParser.INTS in n){null===o&&(o=a.BaseObject.borrowObject(c.UserData));const t=n[D.DataParser.INTS];for(const a of t)o.addInt(a)}if(D.DataParser.FLOATS in n){null===o&&(o=a.BaseObject.borrowObject(c.UserData));const t=n[D.DataParser.FLOATS];for(const a of t)o.addFloat(a)}if(D.DataParser.STRINGS in n){null===o&&(o=a.BaseObject.borrowObject(c.UserData));const t=n[D.DataParser.STRINGS];for(const a of t)o.addString(a)}t.data=o,i.push(t)}return i}_parseDeformFrame(a,t,r){const e=this._frameFloatArray.length,s=this._parseTweenFrame(a,t,r),i=D.DataParser.VERTICES in a?a[D.DataParser.VERTICES]:D.DataParser.VALUE in a?a[D.DataParser.VALUE]:null,n=g._getNumber(a,D.DataParser.OFFSET,0),o=this._intArray[this._geometry.offset+0];let l=0,h=0;if(null!==this._geometry.weight);else{this._frameFloatArray.length+=2*o;for(let a=0;a<2*o;a+=2)null!==i?(l=a<n||a-n>=i.length?0:i[a-n],h=a+1<n||a+1-n>=i.length?0:i[a+1-n]):(l=0,h=0),this._frameFloatArray[e+a]=l,this._frameFloatArray[e+a+1]=h}if(0===t){const a=this._frameIntArray.length;this._frameIntArray.length+=5,this._frameIntArray[a+0]=this._geometry.offset,this._frameIntArray[a+1]=this._frameFloatArray.length-e,this._frameIntArray[a+2]=this._frameFloatArray.length-e,this._frameIntArray[a+3]=0,this._frameIntArray[a+4]=e-this._animation.frameFloatOffset,this._timelineArray[this._timeline.offset+3]=a-this._animation.frameIntOffset}return s}_parseTransform(a,t,r){t.x=g._getNumber(a,D.DataParser.X,0)*r,t.y=g._getNumber(a,D.DataParser.Y,0)*r,D.DataParser.ROTATE in a||D.DataParser.SKEW in a?(t.rotation=s.Transform.normalizeRadian(g._getNumber(a,D.DataParser.ROTATE,0)*s.Transform.DEG_RAD),t.skew=s.Transform.normalizeRadian(g._getNumber(a,D.DataParser.SKEW,0)*s.Transform.DEG_RAD)):(D.DataParser.SKEW_X in a||D.DataParser.SKEW_Y in a)&&(t.rotation=s.Transform.normalizeRadian(g._getNumber(a,D.DataParser.SKEW_Y,0)*s.Transform.DEG_RAD),t.skew=s.Transform.normalizeRadian(g._getNumber(a,D.DataParser.SKEW_X,0)*s.Transform.DEG_RAD)-t.rotation),t.scaleX=g._getNumber(a,D.DataParser.SCALE_X,1),t.scaleY=g._getNumber(a,D.DataParser.SCALE_Y,1)}_parseColorTransform(a,t){t.alphaMultiplier=.01*g._getNumber(a,D.DataParser.ALPHA_MULTIPLIER,100),t.redMultiplier=.01*g._getNumber(a,D.DataParser.RED_MULTIPLIER,100),t.greenMultiplier=.01*g._getNumber(a,D.DataParser.GREEN_MULTIPLIER,100),t.blueMultiplier=.01*g._getNumber(a,D.DataParser.BLUE_MULTIPLIER,100),t.alphaOffset=g._getNumber(a,D.DataParser.ALPHA_OFFSET,0),t.redOffset=g._getNumber(a,D.DataParser.RED_OFFSET,0),t.greenOffset=g._getNumber(a,D.DataParser.GREEN_OFFSET,0),t.blueOffset=g._getNumber(a,D.DataParser.BLUE_OFFSET,0)}_parseGeometry(t,r){const e=t[D.DataParser.VERTICES],s=Math.floor(e.length/2);let i=0;const n=this._intArray.length,o=this._floatArray.length;r.offset=n,r.data=this._data,this._intArray.length+=4,this._intArray[n+0]=s,this._intArray[n+2]=o,this._intArray[n+3]=-1,this._floatArray.length+=2*s;for(let a=0,t=2*s;a<t;++a)this._floatArray[o+a]=e[a];if(D.DataParser.TRIANGLES in t){const a=t[D.DataParser.TRIANGLES];i=Math.floor(a.length/3),this._intArray.length+=3*i;for(let t=0,r=3*i;t<r;++t)this._intArray[n+4+t]=a[t]}if(this._intArray[n+1]=i,D.DataParser.UVS in t){const a=t[D.DataParser.UVS],r=o+2*s;this._floatArray.length+=2*s;for(let t=0,e=2*s;t<e;++t)this._floatArray[r+t]=a[t]}if(D.DataParser.WEIGHTS in t){const i=t[D.DataParser.WEIGHTS],n=Math.floor(i.length-s)/2,l=this._intArray.length,h=this._floatArray.length;let m=0;const f=this._armature.sortedBones,A=a.BaseObject.borrowObject(_.WeightData);if(A.count=n,A.offset=l,this._intArray.length+=2+m+s+n,this._intArray[l+1]=h,D.DataParser.BONE_POSE in t){const a=t[D.DataParser.SLOT_POSE],r=t[D.DataParser.BONE_POSE],e=new Array;m=Math.floor(r.length/7),e.length=m;for(let a=0;a<m;++a){const t=r[7*a],s=this._rawBones[t];A.addBone(s),e[a]=t,this._intArray[l+2+a]=f.indexOf(s)}this._floatArray.length+=3*n,this._helpMatrixA.copyFromArray(a,0);for(let a=0,t=0,n=l+2+m,_=h;a<s;++a){const s=2*a,l=this._intArray[n++]=i[t++];let h=this._floatArray[o+s],m=this._floatArray[o+s+1];this._helpMatrixA.transformPoint(h,m,this._helpPoint),h=this._helpPoint.x,m=this._helpPoint.y;for(let a=0;a<l;++a){const a=i[t++],s=e.indexOf(a);this._helpMatrixB.copyFromArray(r,7*s+1),this._helpMatrixB.invert(),this._helpMatrixB.transformPoint(h,m,this._helpPoint),this._intArray[n++]=s,this._floatArray[_++]=i[t++],this._floatArray[_++]=this._helpPoint.x,this._floatArray[_++]=this._helpPoint.y}}}else{const a=t[D.DataParser.BONES];m=a.length;for(let t=0;t<m;t++){const r=a[t],e=this._rawBones[r];A.addBone(e),this._intArray[l+2+t]=f.indexOf(e)}this._floatArray.length+=3*n;for(let t=0,r=0,s=0,o=l+2+m,_=h;t<n;t++){const t=i[r++];this._intArray[o++]=t;for(let n=0;n<t;n++){const t=i[r++],n=i[r++],l=e[s++],h=e[s++];this._intArray[o++]=a.indexOf(t),this._floatArray[_++]=n,this._floatArray[_++]=l,this._floatArray[_++]=h}}}r.weight=A}}_parseArray(a){this._intArray.length=0,this._floatArray.length=0,this._frameIntArray.length=0,this._frameFloatArray.length=0,this._frameArray.length=0,this._timelineArray.length=0,this._colorArray.length=0}_modifyArray(){this._intArray.length%Int16Array.BYTES_PER_ELEMENT!=0&&this._intArray.push(0),this._frameIntArray.length%Int16Array.BYTES_PER_ELEMENT!=0&&this._frameIntArray.push(0),this._frameArray.length%Int16Array.BYTES_PER_ELEMENT!=0&&this._frameArray.push(0),this._timelineArray.length%Uint16Array.BYTES_PER_ELEMENT!=0&&this._timelineArray.push(0),this._timelineArray.length%Int16Array.BYTES_PER_ELEMENT!=0&&this._colorArray.push(0);const a=this._intArray.length*Int16Array.BYTES_PER_ELEMENT,t=this._floatArray.length*Float32Array.BYTES_PER_ELEMENT,r=this._frameIntArray.length*Int16Array.BYTES_PER_ELEMENT,e=this._frameFloatArray.length*Float32Array.BYTES_PER_ELEMENT,s=this._frameArray.length*Int16Array.BYTES_PER_ELEMENT,i=this._timelineArray.length*Uint16Array.BYTES_PER_ELEMENT,n=this._colorArray.length*Int16Array.BYTES_PER_ELEMENT,o=new ArrayBuffer(a+t+r+e+s+i+n),l=new Int16Array(o,0,this._intArray.length),h=new Float32Array(o,a,this._floatArray.length),_=new Int16Array(o,a+t,this._frameIntArray.length),m=new Float32Array(o,a+t+r,this._frameFloatArray.length),f=new Int16Array(o,a+t+r+e,this._frameArray.length),A=new Uint16Array(o,a+t+r+e+s,this._timelineArray.length),c=new Int16Array(o,a+t+r+e+s+i,this._colorArray.length);for(let a=0,t=this._intArray.length;a<t;++a)l[a]=this._intArray[a];for(let a=0,t=this._floatArray.length;a<t;++a)h[a]=this._floatArray[a];for(let a=0,t=this._frameIntArray.length;a<t;++a)_[a]=this._frameIntArray[a];for(let a=0,t=this._frameFloatArray.length;a<t;++a)m[a]=this._frameFloatArray[a];for(let a=0,t=this._frameArray.length;a<t;++a)f[a]=this._frameArray[a];for(let a=0,t=this._timelineArray.length;a<t;++a)A[a]=this._timelineArray[a];for(let a=0,t=this._colorArray.length;a<t;++a)c[a]=this._colorArray[a];this._data.binary=o,this._data.intArray=l,this._data.floatArray=h,this._data.frameIntArray=_,this._data.frameFloatArray=m,this._data.frameArray=f,this._data.timelineArray=A,this._data.colorArray=c,this._defaultColorOffset=-1}parseDragonBonesData(t,r=1){console.assert(null!=t,"Data error.");const e=g._getString(t,D.DataParser.VERSION,""),s=g._getString(t,D.DataParser.COMPATIBLE_VERSION,"");if(D.DataParser.DATA_VERSIONS.indexOf(e)>=0||D.DataParser.DATA_VERSIONS.indexOf(s)>=0){const s=a.BaseObject.borrowObject(m.DragonBonesData);if(s.version=e,s.name=g._getString(t,D.DataParser.NAME,""),s.frameRate=g._getNumber(t,D.DataParser.FRAME_RATE,24),0===s.frameRate&&(s.frameRate=24),D.DataParser.ARMATURE in t){this._data=s,this._parseArray(t);const a=t[D.DataParser.ARMATURE];for(const t of a)s.addArmature(this._parseArmature(t,r));this._data.binary||this._modifyArray(),D.DataParser.STAGE in t?s.stage=s.getArmature(g._getString(t,D.DataParser.STAGE,"")):s.armatureNames.length>0&&(s.stage=s.getArmature(s.armatureNames[0])),this._data=null}return D.DataParser.TEXTURE_ATLAS in t&&(this._rawTextureAtlases=t[D.DataParser.TEXTURE_ATLAS]),s}return console.assert(!1,"Nonsupport data version: "+e+"\nPlease convert DragonBones data to support version.\nRead more: https://github.com/DragonBones/Tools/"),null}parseTextureAtlasData(a,t,r=1){if(console.assert(void 0!==a),null===a){if(null===this._rawTextureAtlases||0===this._rawTextureAtlases.length)return!1;const a=this._rawTextureAtlases[this._rawTextureAtlasIndex++];return this.parseTextureAtlasData(a,t,r),this._rawTextureAtlasIndex>=this._rawTextureAtlases.length&&(this._rawTextureAtlasIndex=0,this._rawTextureAtlases=null),!0}if(t.width=g._getNumber(a,D.DataParser.WIDTH,0),t.height=g._getNumber(a,D.DataParser.HEIGHT,0),t.scale=1===r?1/g._getNumber(a,D.DataParser.SCALE,1):r,t.name=g._getString(a,D.DataParser.NAME,""),t.imagePath=g._getString(a,D.DataParser.IMAGE_PATH,""),D.DataParser.SUB_TEXTURE in a){const r=a[D.DataParser.SUB_TEXTURE];for(let a=0,e=r.length;a<e;++a){const e=r[a],s=g._getNumber(e,D.DataParser.FRAME_WIDTH,-1),i=g._getNumber(e,D.DataParser.FRAME_HEIGHT,-1),n=t.createTexture();n.rotated=g._getBoolean(e,D.DataParser.ROTATED,!1),n.name=g._getString(e,D.DataParser.NAME,""),n.region.x=g._getNumber(e,D.DataParser.X,0),n.region.y=g._getNumber(e,D.DataParser.Y,0),n.region.width=g._getNumber(e,D.DataParser.WIDTH,0),n.region.height=g._getNumber(e,D.DataParser.HEIGHT,0),s>0&&i>0&&(n.frame=A.TextureData.createRectangle(),n.frame.x=g._getNumber(e,D.DataParser.FRAME_X,0),n.frame.y=g._getNumber(e,D.DataParser.FRAME_Y,0),n.frame.width=s,n.frame.height=i),t.addTexture(n)}}return!0}static getInstance(){return null===g._objectDataParserInstance&&(g._objectDataParserInstance=new g),g._objectDataParserInstance}}g._objectDataParserInstance=null;class u{constructor(){this.frameStart=0,this.actions=[]}}exports.ActionFrame=u,exports.ObjectDataParser=g;
//# sourceMappingURL=ObjectDataParser.cjs.map