UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.06 kB
import{RefCountedObject as n}from"../core/ref-counted-object.js";import{SkinInstance as e}from"./skin-instance.js";class t extends n{constructor(n,e){super(),this.skin=n,this.skinInstance=e}}class s{static createCachedSkinInstance(n,t,c){let i=s.getCachedSkinInstance(n,t);return i||(i=new e(n),i.resolve(t,c),s.addCachedSkinInstance(n,t,i)),i}static getCachedSkinInstance(n,e){let t=null;const c=s._skinInstanceCache.get(e);if(c){const e=c.find((e=>e.skin===n));e&&(e.incRefCount(),t=e.skinInstance)}return t}static addCachedSkinInstance(n,e,c){let i=s._skinInstanceCache.get(e);i||(i=[],s._skinInstanceCache.set(e,i));let a=i.find((e=>e.skin===n));a||(a=new t(n,c),i.push(a)),a.incRefCount()}static removeCachedSkinInstance(n){if(n){const e=n.rootBone;if(e){const t=s._skinInstanceCache.get(e);if(t){const c=t.findIndex((e=>e.skinInstance===n));if(c>=0){const i=t[c];i.decRefCount(),0===i.refCount&&(t.splice(c,1),t.length||s._skinInstanceCache.delete(e),n&&(n.destroy(),i.skinInstance=null))}}}}}}s._skinInstanceCache=new Map;export{s as SkinInstanceCache};