UNPKG

pixi-dragonbones-runtime

Version:
3 lines (2 loc) 8.43 kB
import{Armature as t}from"../armature/Armature.mjs";import{Bone as a}from"../armature/Bone.mjs";import{IKConstraint as e,PathConstraint as r}from"../armature/Constraint.mjs";import{BaseObject as n}from"../core/BaseObject.mjs";import"../core/DragonBones.mjs";import{EventObject as s}from"../event/EventObject.mjs";import"../geom/Transform.mjs";import"../armature/TransformObject.mjs";import{Surface as l}from"../armature/Surface.mjs";import{BinaryDataParser as i}from"../parser/BinaryDataParser.mjs";import"../parser/DataParser.mjs";import{ObjectDataParser as o}from"../parser/ObjectDataParser.mjs";class u{constructor(t=null){this.autoSearch=!1,this._dragonBonesDataMap={},this._textureAtlasDataMap={},this._dragonBones=null,this._dataParser=null,null===u._objectParser&&(u._objectParser=new o),null===u._binaryParser&&(u._binaryParser=new i),this._dataParser=null!==t?t:u._objectParser}_isSupportMesh(){return!0}_getTextureData(t,a){if(t in this._textureAtlasDataMap)for(const e of this._textureAtlasDataMap[t]){const t=e.getTexture(a);if(null!==t)return t}if(this.autoSearch)for(let t in this._textureAtlasDataMap)for(const e of this._textureAtlasDataMap[t])if(e.autoSearch){const t=e.getTexture(a);if(null!==t)return t}return null}_fillBuildArmaturePackage(t,a,e,r,n){let s=null,l=null;if(a.length>0&&a in this._dragonBonesDataMap&&(s=this._dragonBonesDataMap[a],l=s.getArmature(e)),null===l&&(0===a.length||this.autoSearch))for(let t in this._dragonBonesDataMap)if(s=this._dragonBonesDataMap[t],(0===a.length||s.autoSearch)&&(l=s.getArmature(e),null!==l)){a=t;break}if(null!==l){if(t.dataName=a,t.textureAtlasName=n,t.data=s,t.armature=l,t.skin=null,r.length>0&&(t.skin=l.getSkin(r),null===t.skin&&this.autoSearch))for(let a in this._dragonBonesDataMap){const e=this._dragonBonesDataMap[a].getArmature(r);if(null!==e){t.skin=e.defaultSkin;break}}return null===t.skin&&(t.skin=l.defaultSkin),!0}return!1}_buildBones(t,e){for(const r of t.armature.sortedBones){n.borrowObject(0===r.type?a:l).init(r,e)}}_buildSlots(t,a){const e=t.skin,r=t.armature.defaultSkin;if(null===e||null===r)return;const n={};for(let t in r.displays){const a=r.getDisplays(t);n[t]=a}if(e!==r)for(let t in e.displays){const a=e.getDisplays(t);n[t]=a}for(const e of t.armature.sortedSlots){const r=e.name in n?n[e.name]:null,s=this._buildSlot(t,e,a);if(null!==r){s.displayFrameCount=r.length;for(let a=0,e=s.displayFrameCount;a<e;++a){const e=r[a];if(s.replaceRawDisplayData(e,a),null!==e){if(t.textureAtlasName.length>0){const r=this._getTextureData(t.textureAtlasName,e.path);s.replaceTextureData(r,a)}const r=this._getSlotDisplay(t,e,s);s.replaceDisplay(r,a)}else s.replaceDisplay(null)}}s._setDisplayIndex(e.displayIndex,!0)}}_buildConstraints(t,a){const s=t.armature.constraints;for(let t in s){const l=s[t];switch(l.type){case 0:const t=n.borrowObject(e);t.init(l,a),a._addConstraint(t);break;case 1:const s=n.borrowObject(r);s.init(l,a),a._addConstraint(s);break;default:const i=n.borrowObject(e);i.init(l,a),a._addConstraint(i)}}}_buildChildArmature(t,a,e){return this.buildArmature(e.path,null!==t?t.dataName:"","",null!==t?t.textureAtlasName:"")}_getSlotDisplay(t,a,e){const r=null!==t?t.dataName:a.parent.parent.parent.name;let l=null;switch(a.type){case 0:{const t=a;null===t.texture&&(t.texture=this._getTextureData(r,a.path)),l=e.rawDisplay;break}case 2:{const t=a;null===t.texture&&(t.texture=this._getTextureData(r,t.path)),l=this._isSupportMesh()?e.meshDisplay:e.rawDisplay;break}case 1:{const r=a,i=this._buildChildArmature(t,e,r);if(null!==i){if(i.inheritAnimation=r.inheritAnimation,!i.inheritAnimation){const t=r.actions.length>0?r.actions:i.armatureData.defaultActions;if(t.length>0)for(const a of t){const t=n.borrowObject(s);s.actionDataToInstance(a,t,e.armature),t.slot=e,e.armature._bufferAction(t,!1)}else i.animation.play()}r.armature=i.armatureData}l=i;break}}return l}parseDragonBonesData(t,a=null,e=1){const r=t instanceof ArrayBuffer?u._binaryParser:this._dataParser,n=r.parseDragonBonesData(t,e);for(;;){const t=this._buildTextureAtlasData(null,null);if(!r.parseTextureAtlasData(null,t,e)){t.returnToPool();break}this.addTextureAtlasData(t,a)}return null!==n&&this.addDragonBonesData(n,a),n}parseTextureAtlasData(t,a,e=null,r=1){const n=this._buildTextureAtlasData(null,null);return this._dataParser.parseTextureAtlasData(t,n,r),this._buildTextureAtlasData(n,a||null),this.addTextureAtlasData(n,e),n}updateTextureAtlases(t,a){const e=this.getTextureAtlasData(a);if(null!==e)for(let a=0,r=e.length;a<r;++a)a<t.length&&this._buildTextureAtlasData(e[a],t[a])}getDragonBonesData(t){return t in this._dragonBonesDataMap?this._dragonBonesDataMap[t]:null}addDragonBonesData(t,a=null){if((a=null!==a?a:t.name)in this._dragonBonesDataMap){if(this._dragonBonesDataMap[a]===t)return;console.warn("Can not add same name data: "+a)}else this._dragonBonesDataMap[a]=t}removeDragonBonesData(t,a=!0){t in this._dragonBonesDataMap&&(a&&this._dragonBones.bufferObject(this._dragonBonesDataMap[t]),delete this._dragonBonesDataMap[t])}getTextureAtlasData(t){return t in this._textureAtlasDataMap?this._textureAtlasDataMap[t]:null}addTextureAtlasData(t,a=null){const e=(a=null!==a?a:t.name)in this._textureAtlasDataMap?this._textureAtlasDataMap[a]:this._textureAtlasDataMap[a]=[];e.indexOf(t)<0&&e.push(t)}removeTextureAtlasData(t,a=!0){if(t in this._textureAtlasDataMap){const e=this._textureAtlasDataMap[t];if(a)for(const t of e)this._dragonBones.bufferObject(t);delete this._textureAtlasDataMap[t]}}getArmatureData(t,a=""){const e=new p;return this._fillBuildArmaturePackage(e,a,t,"","")?e.armature:null}clear(t=!0){for(let a in this._dragonBonesDataMap)t&&this._dragonBones.bufferObject(this._dragonBonesDataMap[a]),delete this._dragonBonesDataMap[a];for(let a in this._textureAtlasDataMap){if(t){const t=this._textureAtlasDataMap[a];for(const a of t)this._dragonBones.bufferObject(a)}delete this._textureAtlasDataMap[a]}}buildArmature(t,a="",e="",r=""){const n=new p;if(!this._fillBuildArmaturePackage(n,a||"",t,e||"",r||""))return console.warn("No armature data: "+t+", "+(null!==a?a:"")),null;const s=this._buildArmature(n);return this._buildBones(n,s),this._buildSlots(n,s),this._buildConstraints(n,s),s.invalidUpdate(null,!0),s.advanceTime(0),s}replaceDisplay(t,a,e=-1){if(e<0&&(e=t.displayIndex),e<0&&(e=0),t.replaceDisplayData(a,e),null!==a){let r=this._getSlotDisplay(null,a,t);if(0===a.type){const a=t.getDisplayFrameAt(e).rawDisplayData;null!==a&&2===a.type&&(r=t.meshDisplay)}t.replaceDisplay(r,e)}else t.replaceDisplay(null,e)}replaceSlotDisplay(t,a,e,r,n,s=-1){const l=this.getArmatureData(a,t||"");if(null===l||null===l.defaultSkin)return!1;const i=l.defaultSkin.getDisplay(e,r);return this.replaceDisplay(n,i,s),!0}replaceSlotDisplayList(t,a,e,r){const n=this.getArmatureData(a,t||"");if(!n||!n.defaultSkin)return!1;const s=n.defaultSkin.getDisplays(e);if(!s)return!1;r.displayFrameCount=s.length;for(let t=0,a=r.displayFrameCount;t<a;++t){const a=s[t];this.replaceDisplay(r,a,t)}return!0}replaceSkin(t,a,e=!1,r=null){let n=!1;const s=a.parent.defaultSkin;for(const l of t.getSlots()){if(null!==r&&r.indexOf(l.name)>=0)continue;let t=a.getDisplays(l.name);if(null!==t||(null!==s&&a!==s&&(t=s.getDisplays(l.name)),null!==t)){l.displayFrameCount=t.length;for(let a=0,e=l.displayFrameCount;a<e;++a){const e=t[a];l.replaceRawDisplayData(e,a),null!==e?l.replaceDisplay(this._getSlotDisplay(null,e,l),a):l.replaceDisplay(null,a)}n=!0}else e&&(l.displayFrameCount=0)}return n}replaceAnimation(a,e,r=!0){const n=e.defaultSkin;if(null===n)return!1;if(r)a.animation.animations=e.animations;else{const t=a.animation.animations,r={};for(let a in t)r[a]=t[a];for(let t in e.animations)r[t]=e.animations[t];a.animation.animations=r}for(const e of a.getSlots()){let a=0;for(const s of e.displayList){if(s instanceof t){const t=n.getDisplays(e.name);if(null!==t&&a<t.length){const e=t[a];if(null!==e&&1===e.type){const t=this.getArmatureData(e.path,e.parent.parent.parent.name);t&&this.replaceAnimation(s,t,r)}}}a++}}return!0}getAllDragonBonesData(){return this._dragonBonesDataMap}getAllTextureAtlasData(){return this._textureAtlasDataMap}get clock(){return this._dragonBones.clock}get dragonBones(){return this._dragonBones}}u._objectParser=null,u._binaryParser=null;class p{constructor(){this.dataName="",this.textureAtlasName="",this.skin=null}}export{u as BaseFactory,p as BuildArmaturePackage}; //# sourceMappingURL=BaseFactory.mjs.map