UNPKG

polygonjs-engine

Version:

node-based webgl 3D engine https://polygonjs.com

2 lines 50.7 kB
/*! For license information please see 4.js.LICENSE.txt */ (window.webpackJsonpPOLY=window.webpackJsonpPOLY||[]).push([[4],{207:function(e,t,r){"use strict";r.d(t,"a",(function(){return V}));var a={},n=void 0,i=a;function o(e,t){var r,a=e.split("."),o=i;!(a[0]in o)&&o.execScript&&o.execScript("var "+a[0]);for(;a.length&&(r=a.shift());)a.length||t===n?o=o[r]?o[r]:o[r]={}:o[r]=t}var s="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;function l(e){var t,r,a,n,i,o,l,u,c,h,p=e.length,f=0,v=Number.POSITIVE_INFINITY;for(u=0;u<p;++u)e[u]>f&&(f=e[u]),e[u]<v&&(v=e[u]);for(t=1<<f,r=new(s?Uint32Array:Array)(t),a=1,n=0,i=2;a<=f;){for(u=0;u<p;++u)if(e[u]===a){for(o=0,l=n,c=0;c<a;++c)o=o<<1|1&l,l>>=1;for(h=a<<16|u,c=o;c<t;c+=i)r[c]=h;++n}++a,n<<=1,i<<=1}return[r,f,v]}function u(e,t){switch(this.g=[],this.h=32768,this.d=this.f=this.a=this.l=0,this.input=s?new Uint8Array(e):e,this.m=!1,this.i=h,this.r=!1,!t&&(t={})||(t.index&&(this.a=t.index),t.bufferSize&&(this.h=t.bufferSize),t.bufferType&&(this.i=t.bufferType),t.resize&&(this.r=t.resize)),this.i){case c:this.b=32768,this.c=new(s?Uint8Array:Array)(32768+this.h+258);break;case h:this.b=0,this.c=new(s?Uint8Array:Array)(this.h),this.e=this.z,this.n=this.v,this.j=this.w;break;default:throw Error("invalid inflate mode")}}var c=0,h=1,p={t:c,s:h};u.prototype.k=function(){for(;!this.m;){var e=S(this,3);switch(1&e&&(this.m=!0),e>>>=1){case 0:var t=this.input,r=this.a,a=this.c,i=this.b,o=t.length,u=n,p=a.length,f=n;if(this.d=this.f=0,r+1>=o)throw Error("invalid uncompressed block header: LEN");if(u=t[r++]|t[r++]<<8,r+1>=o)throw Error("invalid uncompressed block header: NLEN");if(u===~(t[r++]|t[r++]<<8))throw Error("invalid uncompressed block header: length verify");if(r+u>t.length)throw Error("input buffer is broken");switch(this.i){case c:for(;i+u>a.length;){if(u-=f=p-i,s)a.set(t.subarray(r,r+f),i),i+=f,r+=f;else for(;f--;)a[i++]=t[r++];this.b=i,a=this.e(),i=this.b}break;case h:for(;i+u>a.length;)a=this.e({p:2});break;default:throw Error("invalid inflate mode")}if(s)a.set(t.subarray(r,r+u),i),i+=u,r+=u;else for(;u--;)a[i++]=t[r++];this.a=r,this.b=i,this.c=a;break;case 1:this.j(P,L);break;case 2:var v,d,g,y,w=S(this,5)+257,b=S(this,5)+1,I=S(this,4)+4,T=new(s?Uint8Array:Array)(m.length),x=n,A=n,E=n,k=n,D=n;for(D=0;D<I;++D)T[m[D]]=S(this,3);if(!s)for(D=I,I=T.length;D<I;++D)T[m[D]]=0;for(v=l(T),x=new(s?Uint8Array:Array)(w+b),D=0,y=w+b;D<y;)switch(A=F(this,v),A){case 16:for(k=3+S(this,2);k--;)x[D++]=E;break;case 17:for(k=3+S(this,3);k--;)x[D++]=0;E=0;break;case 18:for(k=11+S(this,7);k--;)x[D++]=0;E=0;break;default:E=x[D++]=A}d=l(s?x.subarray(0,w):x.slice(0,w)),g=l(s?x.subarray(w):x.slice(w)),this.j(d,g);break;default:throw Error("unknown BTYPE: "+e)}}return this.n()};var f,v,d=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],m=s?new Uint16Array(d):d,g=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],y=s?new Uint16Array(g):g,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],b=s?new Uint8Array(w):w,I=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],T=s?new Uint16Array(I):I,x=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],A=s?new Uint8Array(x):x,E=new(s?Uint8Array:Array)(288);for(f=0,v=E.length;f<v;++f)E[f]=143>=f?8:255>=f?9:279>=f?7:8;var k,D,P=l(E),N=new(s?Uint8Array:Array)(30);for(k=0,D=N.length;k<D;++k)N[k]=5;var L=l(N);function S(e,t){for(var r,a=e.f,n=e.d,i=e.input,o=e.a,s=i.length;n<t;){if(o>=s)throw Error("input buffer is broken");a|=i[o++]<<n,n+=8}return r=a&(1<<t)-1,e.f=a>>>t,e.d=n-t,e.a=o,r}function F(e,t){for(var r,a,n=e.f,i=e.d,o=e.input,s=e.a,l=o.length,u=t[0],c=t[1];i<c&&!(s>=l);)n|=o[s++]<<i,i+=8;if((a=(r=u[n&(1<<c)-1])>>>16)>i)throw Error("invalid code length: "+a);return e.f=n>>a,e.d=i-a,e.a=s,65535&r}function C(e,t){var r,a;switch(this.input=e,this.a=0,!t&&(t={})||(t.index&&(this.a=t.index),t.verify&&(this.A=t.verify)),r=e[this.a++],a=e[this.a++],15&r){case R:this.method=R;break;default:throw Error("unsupported compression method")}if(0!=((r<<8)+a)%31)throw Error("invalid fcheck flag:"+((r<<8)+a)%31);if(32&a)throw Error("fdict flag is not supported");this.q=new u(e,{index:this.a,bufferSize:t.bufferSize,bufferType:t.bufferType,resize:t.resize})}u.prototype.j=function(e,t){var r=this.c,a=this.b;this.o=e;for(var n,i,o,s,l=r.length-258;256!==(n=F(this,e));)if(256>n)a>=l&&(this.b=a,r=this.e(),a=this.b),r[a++]=n;else for(s=y[i=n-257],0<b[i]&&(s+=S(this,b[i])),n=F(this,t),o=T[n],0<A[n]&&(o+=S(this,A[n])),a>=l&&(this.b=a,r=this.e(),a=this.b);s--;)r[a]=r[a++-o];for(;8<=this.d;)this.d-=8,this.a--;this.b=a},u.prototype.w=function(e,t){var r=this.c,a=this.b;this.o=e;for(var n,i,o,s,l=r.length;256!==(n=F(this,e));)if(256>n)a>=l&&(l=(r=this.e()).length),r[a++]=n;else for(s=y[i=n-257],0<b[i]&&(s+=S(this,b[i])),n=F(this,t),o=T[n],0<A[n]&&(o+=S(this,A[n])),a+s>l&&(l=(r=this.e()).length);s--;)r[a]=r[a++-o];for(;8<=this.d;)this.d-=8,this.a--;this.b=a},u.prototype.e=function(){var e,t,r=new(s?Uint8Array:Array)(this.b-32768),a=this.b-32768,n=this.c;if(s)r.set(n.subarray(32768,r.length));else for(e=0,t=r.length;e<t;++e)r[e]=n[e+32768];if(this.g.push(r),this.l+=r.length,s)n.set(n.subarray(a,a+32768));else for(e=0;32768>e;++e)n[e]=n[a+e];return this.b=32768,n},u.prototype.z=function(e){var t,r,a,n=this.input.length/this.a+1|0,i=this.input,o=this.c;return e&&("number"==typeof e.p&&(n=e.p),"number"==typeof e.u&&(n+=e.u)),2>n?r=(a=(i.length-this.a)/this.o[2]/2*258|0)<o.length?o.length+a:o.length<<1:r=o.length*n,s?(t=new Uint8Array(r)).set(o):t=o,this.c=t},u.prototype.n=function(){var e,t,r,a,n,i=0,o=this.c,l=this.g,u=new(s?Uint8Array:Array)(this.l+(this.b-32768));if(0===l.length)return s?this.c.subarray(32768,this.b):this.c.slice(32768,this.b);for(t=0,r=l.length;t<r;++t)for(a=0,n=(e=l[t]).length;a<n;++a)u[i++]=e[a];for(t=32768,r=this.b;t<r;++t)u[i++]=o[t];return this.g=[],this.buffer=u},u.prototype.v=function(){var e,t=this.b;return s?this.r?(e=new Uint8Array(t)).set(this.c.subarray(0,t)):e=this.c.subarray(0,t):(this.c.length>t&&(this.c.length=t),e=this.c),this.buffer=e},C.prototype.k=function(){var e,t,r=this.input;if(e=this.q.k(),this.a=this.q.a,this.A){t=(r[this.a++]<<24|r[this.a++]<<16|r[this.a++]<<8|r[this.a++])>>>0;var a=e;if("string"==typeof a){var n,i,o=a.split("");for(n=0,i=o.length;n<i;n++)o[n]=(255&o[n].charCodeAt(0))>>>0;a=o}for(var s,l=1,u=0,c=a.length,h=0;0<c;){c-=s=1024<c?1024:c;do{u+=l+=a[h++]}while(--s);l%=65521,u%=65521}if(t!==(u<<16|l)>>>0)throw Error("invalid adler-32 checksum")}return e};var R=8;o("Zlib.Inflate",C),o("Zlib.Inflate.prototype.decompress",C.prototype.k);var O,M,B,U,j={ADAPTIVE:p.s,BLOCK:p.t};if(Object.keys)O=Object.keys(j);else for(M in O=[],B=0,j)O[B++]=M;for(B=0,U=O.length;B<U;++B)o("Zlib.Inflate.BufferType."+(M=O[B]),j[M]);var V=a.Zlib.Inflate},221:function(e,t,r){"use strict";r.r(t),r.d(t,"FBXLoader",(function(){return W}));var a=r(81),n=r(65),i=r(55),o=r(3),s=r(5),l=r(0),u=r(4),c=r(75),h=r(52),p=r(42),f=r(16),v=r(34),d=r(23),m=r(19),g=r(110),y=r(7),w=r(17),b=r(10),I=r(13),T=r(48),x=r(74),A=r(82),E=r(12),k=r(32),D=r(22),P=r(76),N=r(113),L=r(15),S=r(108),F=r(114),C=r(73),R=r(77),O=r(21),M=r(112),B=r(1),U=r(11),j=r(83),V=r(207),z=r(14),X={findSpan:function(e,t,r){var a=r.length-e-1;if(t>=r[a])return a-1;if(t<=r[e])return e;for(var n=e,i=a,o=Math.floor((n+i)/2);t<r[o]||t>=r[o+1];)t<r[o]?i=o:n=o,o=Math.floor((n+i)/2);return o},calcBasisFunctions:function(e,t,r,a){var n=[],i=[],o=[];n[0]=1;for(var s=1;s<=r;++s){i[s]=t-a[e+1-s],o[s]=a[e+s]-t;for(var l=0,u=0;u<s;++u){var c=o[u+1],h=i[s-u],p=n[u]/(c+h);n[u]=l+c*p,l=h*p}n[s]=l}return n},calcBSplinePoint:function(e,t,r,a){for(var n=this.findSpan(e,a,t),i=this.calcBasisFunctions(n,a,e,t),o=new U.a(0,0,0,0),s=0;s<=e;++s){var l=r[n-e+s],u=i[s],c=l.w*u;o.x+=l.x*c,o.y+=l.y*c,o.z+=l.z*c,o.w+=l.w*u}return o},calcBasisFunctionDerivatives:function(e,t,r,a,n){for(var i=[],o=0;o<=r;++o)i[o]=0;var s=[];for(o=0;o<=a;++o)s[o]=i.slice(0);var l=[];for(o=0;o<=r;++o)l[o]=i.slice(0);l[0][0]=1;for(var u=i.slice(0),c=i.slice(0),h=1;h<=r;++h){u[h]=t-n[e+1-h],c[h]=n[e+h]-t;for(var p=0,f=0;f<h;++f){var v=c[f+1],d=u[h-f];l[h][f]=v+d;var m=l[f][h-1]/l[h][f];l[f][h]=p+v*m,p=d*m}l[h][h]=p}for(h=0;h<=r;++h)s[0][h]=l[h][r];for(f=0;f<=r;++f){var g=0,y=1,w=[];for(o=0;o<=r;++o)w[o]=i.slice(0);w[0][0]=1;for(var b=1;b<=a;++b){var I=0,T=f-b,x=r-b;f>=b&&(w[y][0]=w[g][0]/l[x+1][T],I=w[y][0]*l[T][x]);var A=f-1<=x?b-1:r-f;for(h=T>=-1?1:-T;h<=A;++h)w[y][h]=(w[g][h]-w[g][h-1])/l[x+1][T+h],I+=w[y][h]*l[T+h][x];f<=x&&(w[y][b]=-w[g][b-1]/l[x+1][f],I+=w[y][b]*l[f][x]),s[b][f]=I;h=g;g=y,y=h}}for(f=r,b=1;b<=a;++b){for(h=0;h<=r;++h)s[b][h]*=f;f*=r-b}return s},calcBSplineDerivatives:function(e,t,r,a,n){for(var i=n<e?n:e,o=[],s=this.findSpan(e,a,t),l=this.calcBasisFunctionDerivatives(s,a,e,i,t),u=[],c=0;c<r.length;++c){var h=(f=r[c].clone()).w;f.x*=h,f.y*=h,f.z*=h,u[c]=f}for(var p=0;p<=i;++p){for(var f=u[s-e].clone().multiplyScalar(l[p][0]),v=1;v<=e;++v)f.add(u[s-e+v].clone().multiplyScalar(l[p][v]));o[p]=f}for(p=i+1;p<=n+1;++p)o[p]=new U.a(0,0,0);return o},calcKoverI:function(e,t){for(var r=1,a=2;a<=e;++a)r*=a;var n=1;for(a=2;a<=t;++a)n*=a;for(a=2;a<=e-t;++a)n*=a;return r/n},calcRationalCurveDerivatives:function(e){for(var t=e.length,r=[],a=[],n=0;n<t;++n){var i=e[n];r[n]=new B.a(i.x,i.y,i.z),a[n]=i.w}for(var o=[],s=0;s<t;++s){var l=r[s].clone();for(n=1;n<=s;++n)l.sub(o[s-n].clone().multiplyScalar(this.calcKoverI(s,n)*a[n]));o[s]=l.divideScalar(a[0])}return o},calcNURBSDerivatives:function(e,t,r,a,n){var i=this.calcBSplineDerivatives(e,t,r,a,n);return this.calcRationalCurveDerivatives(i)},calcSurfacePoint:function(e,t,r,a,n,i,o,s){for(var l=this.findSpan(e,i,r),u=this.findSpan(t,o,a),c=this.calcBasisFunctions(l,i,e,r),h=this.calcBasisFunctions(u,o,t,a),p=[],f=0;f<=t;++f){p[f]=new U.a(0,0,0,0);for(var v=0;v<=e;++v){var d=n[l-e+v][u-t+f].clone(),m=d.w;d.x*=m,d.y*=m,d.z*=m,p[f].add(d.multiplyScalar(c[v]))}}var g=new U.a(0,0,0,0);for(f=0;f<=t;++f)g.add(p[f].multiplyScalar(h[f]));g.divideScalar(g.w),s.set(g.x,g.y,g.z)}},G=function(e,t,r,a,n){z.a.call(this),this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=a||0,this.endKnot=n||this.knots.length-1;for(var i=0;i<r.length;++i){var o=r[i];this.controlPoints[i]=new U.a(o.x,o.y,o.z,o.w)}};(G.prototype=Object.create(z.a.prototype)).constructor=G,G.prototype.getPoint=function(e,t){var r=t||new B.a,a=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),n=X.calcBSplinePoint(this.degree,this.knots,this.controlPoints,a);return 1!=n.w&&n.divideScalar(n.w),r.set(n.x,n.y,n.z)},G.prototype.getTangent=function(e,t){var r=t||new B.a,a=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),n=X.calcNURBSDerivatives(this.degree,this.knots,this.controlPoints,a,1);return r.copy(n[1]).normalize(),r};var W=function(){var e,t,r;function z(e){m.a.call(this,e)}function X(e,t){this.textureLoader=e,this.manager=t}function W(){}function H(){}function _(){}function K(){}function Y(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=void 0===t||t}function Z(){}function q(e){var t=e.match(/FBXVersion: (\d+)/);if(t)return parseInt(t[1]);throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.")}function $(e){return e/46186158e3}z.prototype=Object.assign(Object.create(m.a.prototype),{constructor:z,load:function(e,t,r,a){var n=this,i=""===n.path?g.a.extractUrlBase(e):n.path,o=new p.a(this.manager);o.setPath(n.path),o.setResponseType("arraybuffer"),o.setRequestHeader(n.requestHeader),o.setWithCredentials(n.withCredentials),o.load(e,(function(r){try{t(n.parse(r,i))}catch(t){a?a(t):console.error(t),n.manager.itemError(e)}}),r,a)},parse:function(t,r){if(i="Kaydara FBX Binary \0",(n=t).byteLength>=i.length&&i===ie(n,0,i.length))e=(new K).parse(t);else{var a=ie(t);if(!function(e){var t=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"],r=0;function a(t){var a=e[t-1];return e=e.slice(r+t),r++,a}for(var n=0;n<t.length;++n){if(a(1)===t[n])return!1}return!0}(a))throw new Error("THREE.FBXLoader: Unknown format.");if(q(a)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+q(a));e=(new _).parse(a)}var n,i;return new X(new M.a(this.manager).setPath(this.resourcePath||r).setCrossOrigin(this.crossOrigin),this.manager).parse(e)}}),X.prototype={constructor:X,parse:function(){t=this.parseConnections();var e=this.parseImages(),a=this.parseTextures(e),n=this.parseMaterials(a),i=this.parseDeformers(),o=(new W).parse(i);return this.parseScene(i,o,n),r},parseConnections:function(){var t=new Map;"Connections"in e&&e.Connections.connections.forEach((function(e){var r=e[0],a=e[1],n=e[2];t.has(r)||t.set(r,{parents:[],children:[]});var i={ID:a,relationship:n};t.get(r).parents.push(i),t.has(a)||t.set(a,{parents:[],children:[]});var o={ID:r,relationship:n};t.get(a).children.push(o)}));return t},parseImages:function(){var t={},r={};if("Video"in e.Objects){var a=e.Objects.Video;for(var n in a){var i=a[n];if(t[u=parseInt(n)]=i.RelativeFilename||i.Filename,"Content"in i){var o=i.Content instanceof ArrayBuffer&&i.Content.byteLength>0,s="string"==typeof i.Content&&""!==i.Content;if(o||s){var l=this.parseImage(a[n]);r[i.RelativeFilename||i.Filename]=l}}}}for(var u in t){var c=t[u];void 0!==r[c]?t[u]=r[c]:t[u]=t[u].split("\\").pop()}return t},parseImage:function(e){var t,r=e.Content,a=e.RelativeFilename||e.Filename,n=a.slice(a.lastIndexOf(".")+1).toLowerCase();switch(n){case"bmp":t="image/bmp";break;case"jpg":case"jpeg":t="image/jpeg";break;case"png":t="image/png";break;case"tif":t="image/tiff";break;case"tga":null===this.manager.getHandler(".tga")&&console.warn("FBXLoader: TGA loader not found, skipping ",a),t="image/tga";break;default:return void console.warn('FBXLoader: Image type "'+n+'" is not supported.')}if("string"==typeof r)return"data:"+t+";base64,"+r;var i=new Uint8Array(r);return window.URL.createObjectURL(new Blob([i],{type:t}))},parseTextures:function(t){var r=new Map;if("Texture"in e.Objects){var a=e.Objects.Texture;for(var n in a){var i=this.parseTexture(a[n],t);r.set(parseInt(n),i)}}return r},parseTexture:function(e,t){var r=this.loadTexture(e,t);r.ID=e.id,r.name=e.attrName;var a=e.WrapModeU,n=e.WrapModeV,i=void 0!==a?a.value:0,o=void 0!==n?n.value:0;if(r.wrapS=0===i?l.wc:l.n,r.wrapT=0===o?l.wc:l.n,"Scaling"in e){var s=e.Scaling.value;r.repeat.x=s[0],r.repeat.y=s[1]}return r},loadTexture:function(e,r){var a,n,i=this.textureLoader.path,o=t.get(e.id).children;void 0!==o&&o.length>0&&void 0!==r[o[0].ID]&&(0!==(a=r[o[0].ID]).indexOf("blob:")&&0!==a.indexOf("data:")||this.textureLoader.setPath(void 0));var s=e.FileName.slice(-3).toLowerCase();if("tga"===s){var l=this.manager.getHandler(".tga");null===l?(console.warn("FBXLoader: TGA loader not found, creating placeholder texture for",e.RelativeFilename),n=new O.a):n=l.load(a)}else"psd"===s?(console.warn("FBXLoader: PSD textures are not supported, creating placeholder texture for",e.RelativeFilename),n=new O.a):n=this.textureLoader.load(a);return this.textureLoader.setPath(i),n},parseMaterials:function(t){var r=new Map;if("Material"in e.Objects){var a=e.Objects.Material;for(var n in a){var i=this.parseMaterial(a[n],t);null!==i&&r.set(parseInt(n),i)}}return r},parseMaterial:function(e,r){var a=e.id,n=e.attrName,i=e.ShadingModel;if("object"==typeof i&&(i=i.value),!t.has(a))return null;var o,s=this.parseParameters(e,r,a);switch(i.toLowerCase()){case"phong":o=new x.a;break;case"lambert":o=new T.a;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',i),o=new x.a}return o.setValues(s),o.name=n,o},parseParameters:function(e,r,a){var n={};e.BumpFactor&&(n.bumpScale=e.BumpFactor.value),e.Diffuse?n.color=(new u.a).fromArray(e.Diffuse.value):!e.DiffuseColor||"Color"!==e.DiffuseColor.type&&"ColorRGB"!==e.DiffuseColor.type||(n.color=(new u.a).fromArray(e.DiffuseColor.value)),e.DisplacementFactor&&(n.displacementScale=e.DisplacementFactor.value),e.Emissive?n.emissive=(new u.a).fromArray(e.Emissive.value):!e.EmissiveColor||"Color"!==e.EmissiveColor.type&&"ColorRGB"!==e.EmissiveColor.type||(n.emissive=(new u.a).fromArray(e.EmissiveColor.value)),e.EmissiveFactor&&(n.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),e.Opacity&&(n.opacity=parseFloat(e.Opacity.value)),n.opacity<1&&(n.transparent=!0),e.ReflectionFactor&&(n.reflectivity=e.ReflectionFactor.value),e.Shininess&&(n.shininess=e.Shininess.value),e.Specular?n.specular=(new u.a).fromArray(e.Specular.value):e.SpecularColor&&"Color"===e.SpecularColor.type&&(n.specular=(new u.a).fromArray(e.SpecularColor.value));var i=this;return t.get(a).children.forEach((function(e){var t=e.relationship;switch(t){case"Bump":n.bumpMap=i.getTexture(r,e.ID);break;case"Maya|TEX_ao_map":n.aoMap=i.getTexture(r,e.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":n.map=i.getTexture(r,e.ID),n.map.encoding=l.ld;break;case"DisplacementColor":n.displacementMap=i.getTexture(r,e.ID);break;case"EmissiveColor":n.emissiveMap=i.getTexture(r,e.ID),n.emissiveMap.encoding=l.ld;break;case"NormalMap":case"Maya|TEX_normal_map":n.normalMap=i.getTexture(r,e.ID);break;case"ReflectionColor":n.envMap=i.getTexture(r,e.ID),n.envMap.mapping=l.D,n.envMap.encoding=l.ld;break;case"SpecularColor":n.specularMap=i.getTexture(r,e.ID),n.specularMap.encoding=l.ld;break;case"TransparentColor":case"TransparencyFactor":n.alphaMap=i.getTexture(r,e.ID),n.transparent=!0;break;case"AmbientColor":case"ShininessExponent":case"SpecularFactor":case"VectorDisplacementColor":default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",t)}})),n},getTexture:function(r,a){return"LayeredTexture"in e.Objects&&a in e.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),a=t.get(a).children[0].ID),r.get(a)},parseDeformers:function(){var r={},a={};if("Deformer"in e.Objects){var n=e.Objects.Deformer;for(var i in n){var o=n[i],s=t.get(parseInt(i));if("Skin"===o.attrType){var l=this.parseSkeleton(s,n);l.ID=i,s.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),l.geometryID=s.parents[0].ID,r[i]=l}else if("BlendShape"===o.attrType){var u={id:i};u.rawTargets=this.parseMorphTargets(s,n),u.id=i,s.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),a[i]=u}}}return{skeletons:r,morphTargets:a}},parseSkeleton:function(e,t){var r=[];return e.children.forEach((function(e){var a=t[e.ID];if("Cluster"===a.attrType){var n={ID:e.ID,indices:[],weights:[],transformLink:(new b.a).fromArray(a.TransformLink.a)};"Indexes"in a&&(n.indices=a.Indexes.a,n.weights=a.Weights.a),r.push(n)}})),{rawBones:r,bones:[]}},parseMorphTargets:function(e,r){for(var a=[],n=0;n<e.children.length;n++){var i=e.children[n],o=r[i.ID],s={name:o.attrName,initialWeight:o.DeformPercent,id:o.id,fullWeights:o.FullWeights.a};if("BlendShapeChannel"!==o.attrType)return;s.geoID=t.get(parseInt(i.ID)).children.filter((function(e){return void 0===e.relationship}))[0].ID,a.push(s)}return a},parseScene:function(a,n,i){r=new f.a;var o=this.parseModels(a.skeletons,n,i),s=e.Objects.Model,l=this;o.forEach((function(e){var a=s[e.ID];l.setLookAtProperties(e,a),t.get(e.ID).parents.forEach((function(t){var r=o.get(t.ID);void 0!==r&&r.add(e)})),null===e.parent&&r.add(e)})),this.bindSkeleton(a.skeletons,n,o),this.createAmbientLight(),this.setupMorphMaterials(),r.traverse((function(e){if(e.userData.transformData){e.parent&&(e.userData.transformData.parentMatrixWorld=e.parent.matrix);var t=re(e.userData.transformData);e.applyMatrix4(t)}}));var u=(new H).parse();1===r.children.length&&r.children[0].isGroup&&(r.children[0].animations=u,r=r.children[0]),r.animations=u},parseModels:function(r,a,n){var o=new Map,s=e.Objects.Model;for(var l in s){var u=parseInt(l),c=s[l],h=t.get(u),p=this.buildSkeleton(h,r,u,c.attrName);if(!p){switch(c.attrType){case"Camera":p=this.createCamera(h);break;case"Light":p=this.createLight(h);break;case"Mesh":p=this.createMesh(h,a,n);break;case"NurbsCurve":p=this.createCurve(h,a);break;case"LimbNode":case"Root":p=new i.a;break;case"Null":default:p=new f.a}p.name=c.attrName?N.a.sanitizeNodeName(c.attrName):"",p.ID=u}this.getTransformData(p,c),o.set(u,p)}return o},buildSkeleton:function(e,t,r,a){var n=null;return e.parents.forEach((function(e){for(var o in t){var s=t[o];s.rawBones.forEach((function(t,o){if(t.ID===e.ID){var l=n;(n=new i.a).matrixWorld.copy(t.transformLink),n.name=a?N.a.sanitizeNodeName(a):"",n.ID=r,s.bones[o]=n,null!==l&&n.add(l)}}))}})),n},createCamera:function(t){var r,a;if(t.children.forEach((function(t){var r=e.Objects.NodeAttribute[t.ID];void 0!==r&&(a=r)})),void 0===a)r=new E.a;else{var n=0;void 0!==a.CameraProjectionType&&1===a.CameraProjectionType.value&&(n=1);var i=1;void 0!==a.NearPlane&&(i=a.NearPlane.value/1e3);var o=1e3;void 0!==a.FarPlane&&(o=a.FarPlane.value/1e3);var s=window.innerWidth,l=window.innerHeight;void 0!==a.AspectWidth&&void 0!==a.AspectHeight&&(s=a.AspectWidth.value,l=a.AspectHeight.value);var u=s/l,c=45;void 0!==a.FieldOfView&&(c=a.FieldOfView.value);var h=a.FocalLength?a.FocalLength.value:null;switch(n){case 0:r=new D.a(c,u,i,o),null!==h&&r.setFocalLength(h);break;case 1:r=new k.a(-s/2,s/2,l/2,-l/2,i,o);break;default:console.warn("THREE.FBXLoader: Unknown camera type "+n+"."),r=new E.a}}return r},createLight:function(t){var r,a;if(t.children.forEach((function(t){var r=e.Objects.NodeAttribute[t.ID];void 0!==r&&(a=r)})),void 0===a)r=new E.a;else{var n;n=void 0===a.LightType?0:a.LightType.value;var i=16777215;void 0!==a.Color&&(i=(new u.a).fromArray(a.Color.value));var o=void 0===a.Intensity?1:a.Intensity.value/100;void 0!==a.CastLightOnObject&&0===a.CastLightOnObject.value&&(o=0);var s=0;void 0!==a.FarAttenuationEnd&&(s=void 0!==a.EnableFarAttenuation&&0===a.EnableFarAttenuation.value?0:a.FarAttenuationEnd.value);switch(n){case 0:r=new P.a(i,o,s,1);break;case 1:r=new c.a(i,o);break;case 2:var l=Math.PI/3;void 0!==a.InnerAngle&&(l=y.a.degToRad(a.InnerAngle.value));var h=0;void 0!==a.OuterAngle&&(h=y.a.degToRad(a.OuterAngle.value),h=Math.max(h,1)),r=new R.a(i,o,s,l,h,1);break;default:console.warn("THREE.FBXLoader: Unknown light type "+a.LightType.value+", defaulting to a PointLight."),r=new P.a(i,o)}void 0!==a.CastShadows&&1===a.CastShadows.value&&(r.castShadow=!0)}return r},createMesh:function(e,t,r){var a,n=null,i=null,o=[];return e.children.forEach((function(e){t.has(e.ID)&&(n=t.get(e.ID)),r.has(e.ID)&&o.push(r.get(e.ID))})),o.length>1?i=o:o.length>0?i=o[0]:(i=new x.a({color:13421772}),o.push(i)),"color"in n.attributes&&o.forEach((function(e){e.vertexColors=!0})),n.FBX_Deformer?(o.forEach((function(e){e.skinning=!0})),(a=new C.a(n,i)).normalizeSkinWeights()):a=new I.a(n,i),a},createCurve:function(e,t){var r=e.children.reduce((function(e,r){return t.has(r.ID)&&(e=t.get(r.ID)),e}),null),a=new d.a({color:3342591,linewidth:1});return new v.a(r,a)},getTransformData:function(e,t){var r={};"InheritType"in t&&(r.inheritType=parseInt(t.InheritType.value)),r.eulerOrder="RotationOrder"in t?ae(t.RotationOrder.value):"ZYX","Lcl_Translation"in t&&(r.translation=t.Lcl_Translation.value),"PreRotation"in t&&(r.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(r.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(r.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(r.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(r.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(r.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(r.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(r.rotationPivot=t.RotationPivot.value),e.userData.transformData=r},setLookAtProperties:function(a,n){"LookAtProperty"in n&&t.get(a.ID).children.forEach((function(t){if("LookAtProperty"===t.relationship){var n=e.Objects.Model[t.ID];if("Lcl_Translation"in n){var i=n.Lcl_Translation.value;void 0!==a.target?(a.target.position.fromArray(i),r.add(a.target)):a.lookAt((new B.a).fromArray(i))}}}))},bindSkeleton:function(e,r,a){var n=this.parsePoseNodes();for(var i in e){var o=e[i];t.get(parseInt(o.ID)).parents.forEach((function(e){if(r.has(e.ID)){var i=e.ID;t.get(i).parents.forEach((function(e){a.has(e.ID)&&a.get(e.ID).bind(new F.a(o.bones),n[e.ID])}))}}))}},parsePoseNodes:function(){var t={};if("Pose"in e.Objects){var r=e.Objects.Pose;for(var a in r)if("BindPose"===r[a].attrType){var n=r[a].PoseNode;Array.isArray(n)?n.forEach((function(e){t[e.Node]=(new b.a).fromArray(e.Matrix.a)})):t[n.Node]=(new b.a).fromArray(n.Matrix.a)}}return t},createAmbientLight:function(){if("GlobalSettings"in e&&"AmbientColor"in e.GlobalSettings){var t=e.GlobalSettings.AmbientColor.value,n=t[0],i=t[1],o=t[2];if(0!==n||0!==i||0!==o){var s=new u.a(n,i,o);r.add(new a.a(s,1))}}},setupMorphMaterials:function(){var e=this;r.traverse((function(t){t.isMesh&&t.geometry.morphAttributes.position&&t.geometry.morphAttributes.position.length&&(Array.isArray(t.material)?t.material.forEach((function(r,a){e.setupMorphMaterial(t,r,a)})):e.setupMorphMaterial(t,t.material))}))},setupMorphMaterial:function(e,t,a){var n=e.uuid,i=t.uuid,o=!1;if(r.traverse((function(e){e.isMesh&&(Array.isArray(e.material)?e.material.forEach((function(t){t.uuid===i&&e.uuid!==n&&(o=!0)})):e.material.uuid===i&&e.uuid!==n&&(o=!0))})),!0===o){var s=t.clone();s.morphTargets=!0,void 0===a?e.material=s:e.material[a]=s}else t.morphTargets=!0}},W.prototype={constructor:W,parse:function(r){var a=new Map;if("Geometry"in e.Objects){var n=e.Objects.Geometry;for(var i in n){var o=t.get(parseInt(i)),s=this.parseGeometry(o,n[i],r);a.set(parseInt(i),s)}}return a},parseGeometry:function(e,t,r){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,r);case"NurbsCurve":return this.parseNurbsGeometry(t)}},parseMeshGeometry:function(t,r,a){var n=a.skeletons,i=[],o=t.parents.map((function(t){return e.Objects.Model[t.ID]}));if(0!==o.length){var s=t.children.reduce((function(e,t){return void 0!==n[t.ID]&&(e=n[t.ID]),e}),null);t.children.forEach((function(e){void 0!==a.morphTargets[e.ID]&&i.push(a.morphTargets[e.ID])}));var l=o[0],u={};"RotationOrder"in l&&(u.eulerOrder=ae(l.RotationOrder.value)),"InheritType"in l&&(u.inheritType=parseInt(l.InheritType.value)),"GeometricTranslation"in l&&(u.translation=l.GeometricTranslation.value),"GeometricRotation"in l&&(u.rotation=l.GeometricRotation.value),"GeometricScaling"in l&&(u.scale=l.GeometricScaling.value);var c=re(u);return this.genGeometry(r,s,i,c)}},genGeometry:function(e,t,r,a){var n=new s.a;e.attrName&&(n.name=e.attrName);var i=this.parseGeoNode(e,t),l=this.genBuffers(i),u=new o.b(l.vertex,3);if(u.applyMatrix4(a),n.setAttribute("position",u),l.colors.length>0&&n.setAttribute("color",new o.b(l.colors,3)),t&&(n.setAttribute("skinIndex",new o.d(l.weightsIndices,4)),n.setAttribute("skinWeight",new o.b(l.vertexWeights,4)),n.FBX_Deformer=t),l.normal.length>0){var c=(new w.a).getNormalMatrix(a),h=new o.b(l.normal,3);h.applyNormalMatrix(c),n.setAttribute("normal",h)}if(l.uvs.forEach((function(e,t){var r="uv"+(t+1).toString();0===t&&(r="uv"),n.setAttribute(r,new o.b(l.uvs[t],2))})),i.material&&"AllSame"!==i.material.mappingType){var p=l.materialIndex[0],f=0;if(l.materialIndex.forEach((function(e,t){e!==p&&(n.addGroup(f,t-f,p),p=e,f=t)})),n.groups.length>0){var v=n.groups[n.groups.length-1],d=v.start+v.count;d!==l.materialIndex.length&&n.addGroup(d,l.materialIndex.length-d,p)}0===n.groups.length&&n.addGroup(0,l.materialIndex.length,l.materialIndex[0])}return this.addMorphTargets(n,e,r,a),n},parseGeoNode:function(e,t){var r={};if(r.vertexPositions=void 0!==e.Vertices?e.Vertices.a:[],r.vertexIndices=void 0!==e.PolygonVertexIndex?e.PolygonVertexIndex.a:[],e.LayerElementColor&&(r.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(r.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(r.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){r.uv=[];for(var a=0;e.LayerElementUV[a];)e.LayerElementUV[a].UV&&r.uv.push(this.parseUVs(e.LayerElementUV[a])),a++}return r.weightTable={},null!==t&&(r.skeleton=t,t.rawBones.forEach((function(e,t){e.indices.forEach((function(a,n){void 0===r.weightTable[a]&&(r.weightTable[a]=[]),r.weightTable[a].push({id:t,weight:e.weights[n]})}))}))),r},genBuffers:function(e){var t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]},r=0,a=0,n=!1,i=[],o=[],s=[],l=[],u=[],c=[],h=this;return e.vertexIndices.forEach((function(p,f){var v=!1;p<0&&(p^=-1,v=!0);var d=[],m=[];if(i.push(3*p,3*p+1,3*p+2),e.color){var g=Q(f,r,p,e.color);s.push(g[0],g[1],g[2])}if(e.skeleton){if(void 0!==e.weightTable[p]&&e.weightTable[p].forEach((function(e){m.push(e.weight),d.push(e.id)})),m.length>4){n||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),n=!0);var y=[0,0,0,0],w=[0,0,0,0];m.forEach((function(e,t){var r=e,a=d[t];w.forEach((function(e,t,n){if(r>e){n[t]=r,r=e;var i=y[t];y[t]=a,a=i}}))})),d=y,m=w}for(;m.length<4;)m.push(0),d.push(0);for(var b=0;b<4;++b)u.push(m[b]),c.push(d[b])}if(e.normal){g=Q(f,r,p,e.normal);o.push(g[0],g[1],g[2])}if(e.material&&"AllSame"!==e.material.mappingType)var I=Q(f,r,p,e.material)[0];e.uv&&e.uv.forEach((function(e,t){var a=Q(f,r,p,e);void 0===l[t]&&(l[t]=[]),l[t].push(a[0]),l[t].push(a[1])})),a++,v&&(h.genFace(t,e,i,I,o,s,l,u,c,a),r++,a=0,i=[],o=[],s=[],l=[],u=[],c=[])})),t},genFace:function(e,t,r,a,n,i,o,s,l,u){for(var c=2;c<u;c++)e.vertex.push(t.vertexPositions[r[0]]),e.vertex.push(t.vertexPositions[r[1]]),e.vertex.push(t.vertexPositions[r[2]]),e.vertex.push(t.vertexPositions[r[3*(c-1)]]),e.vertex.push(t.vertexPositions[r[3*(c-1)+1]]),e.vertex.push(t.vertexPositions[r[3*(c-1)+2]]),e.vertex.push(t.vertexPositions[r[3*c]]),e.vertex.push(t.vertexPositions[r[3*c+1]]),e.vertex.push(t.vertexPositions[r[3*c+2]]),t.skeleton&&(e.vertexWeights.push(s[0]),e.vertexWeights.push(s[1]),e.vertexWeights.push(s[2]),e.vertexWeights.push(s[3]),e.vertexWeights.push(s[4*(c-1)]),e.vertexWeights.push(s[4*(c-1)+1]),e.vertexWeights.push(s[4*(c-1)+2]),e.vertexWeights.push(s[4*(c-1)+3]),e.vertexWeights.push(s[4*c]),e.vertexWeights.push(s[4*c+1]),e.vertexWeights.push(s[4*c+2]),e.vertexWeights.push(s[4*c+3]),e.weightsIndices.push(l[0]),e.weightsIndices.push(l[1]),e.weightsIndices.push(l[2]),e.weightsIndices.push(l[3]),e.weightsIndices.push(l[4*(c-1)]),e.weightsIndices.push(l[4*(c-1)+1]),e.weightsIndices.push(l[4*(c-1)+2]),e.weightsIndices.push(l[4*(c-1)+3]),e.weightsIndices.push(l[4*c]),e.weightsIndices.push(l[4*c+1]),e.weightsIndices.push(l[4*c+2]),e.weightsIndices.push(l[4*c+3])),t.color&&(e.colors.push(i[0]),e.colors.push(i[1]),e.colors.push(i[2]),e.colors.push(i[3*(c-1)]),e.colors.push(i[3*(c-1)+1]),e.colors.push(i[3*(c-1)+2]),e.colors.push(i[3*c]),e.colors.push(i[3*c+1]),e.colors.push(i[3*c+2])),t.material&&"AllSame"!==t.material.mappingType&&(e.materialIndex.push(a),e.materialIndex.push(a),e.materialIndex.push(a)),t.normal&&(e.normal.push(n[0]),e.normal.push(n[1]),e.normal.push(n[2]),e.normal.push(n[3*(c-1)]),e.normal.push(n[3*(c-1)+1]),e.normal.push(n[3*(c-1)+2]),e.normal.push(n[3*c]),e.normal.push(n[3*c+1]),e.normal.push(n[3*c+2])),t.uv&&t.uv.forEach((function(t,r){void 0===e.uvs[r]&&(e.uvs[r]=[]),e.uvs[r].push(o[r][0]),e.uvs[r].push(o[r][1]),e.uvs[r].push(o[r][2*(c-1)]),e.uvs[r].push(o[r][2*(c-1)+1]),e.uvs[r].push(o[r][2*c]),e.uvs[r].push(o[r][2*c+1])}))},addMorphTargets:function(t,r,a,n){if(0!==a.length){t.morphTargetsRelative=!0,t.morphAttributes.position=[];var i=this;a.forEach((function(a){a.rawTargets.forEach((function(a){var o=e.Objects.Geometry[a.geoID];void 0!==o&&i.genMorphGeometry(t,r,o,n,a.name)}))}))}},genMorphGeometry:function(e,t,r,a,n){for(var i=void 0!==t.PolygonVertexIndex?t.PolygonVertexIndex.a:[],s=void 0!==r.Vertices?r.Vertices.a:[],l=void 0!==r.Indexes?r.Indexes.a:[],u=3*e.attributes.position.count,c=new Float32Array(u),h=0;h<l.length;h++){var p=3*l[h];c[p]=s[3*h],c[p+1]=s[3*h+1],c[p+2]=s[3*h+2]}var f={vertexIndices:i,vertexPositions:c},v=this.genBuffers(f),d=new o.b(v.vertex,3);d.name=n||r.attrName,d.applyMatrix4(a),e.morphAttributes.position.push(d)},parseNormals:function(e){var t=e.MappingInformationType,r=e.ReferenceInformationType,a=e.Normals.a,n=[];return"IndexToDirect"===r&&("NormalIndex"in e?n=e.NormalIndex.a:"NormalsIndex"in e&&(n=e.NormalsIndex.a)),{dataSize:3,buffer:a,indices:n,mappingType:t,referenceType:r}},parseUVs:function(e){var t=e.MappingInformationType,r=e.ReferenceInformationType,a=e.UV.a,n=[];return"IndexToDirect"===r&&(n=e.UVIndex.a),{dataSize:2,buffer:a,indices:n,mappingType:t,referenceType:r}},parseVertexColors:function(e){var t=e.MappingInformationType,r=e.ReferenceInformationType,a=e.Colors.a,n=[];return"IndexToDirect"===r&&(n=e.ColorIndex.a),{dataSize:4,buffer:a,indices:n,mappingType:t,referenceType:r}},parseMaterialIndices:function(e){var t=e.MappingInformationType,r=e.ReferenceInformationType;if("NoMappingInformation"===t)return{dataSize:1,buffer:[0],indices:[0],mappingType:"AllSame",referenceType:r};for(var a=e.Materials.a,n=[],i=0;i<a.length;++i)n.push(i);return{dataSize:1,buffer:a,indices:n,mappingType:t,referenceType:r}},parseNurbsGeometry:function(e){if(void 0===G)return console.error("THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry."),new s.a;var t=parseInt(e.Order);if(isNaN(t))return console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s",e.Order,e.id),new s.a;for(var r,a,n=t-1,i=e.KnotVector.a,l=[],u=e.Points.a,c=0,h=u.length;c<h;c+=4)l.push((new U.a).fromArray(u,c));if("Closed"===e.Form)l.push(l[0]);else if("Periodic"===e.Form){r=n,a=i.length-1-r;for(c=0;c<n;++c)l.push(l[c])}var p=new G(n,i,l,r,a).getPoints(7*l.length),f=new Float32Array(3*p.length);p.forEach((function(e,t){e.toArray(f,3*t)}));var v=new s.a;return v.setAttribute("position",new o.a(f,3)),v}},H.prototype={constructor:H,parse:function(){var e=[],t=this.parseClips();if(void 0!==t)for(var r in t){var a=t[r],n=this.addClip(a);e.push(n)}return e},parseClips:function(){if(void 0!==e.Objects.AnimationCurve){var t=this.parseAnimationCurveNodes();this.parseAnimationCurves(t);var r=this.parseAnimationLayers(t);return this.parseAnimStacks(r)}},parseAnimationCurveNodes:function(){var t=e.Objects.AnimationCurveNode,r=new Map;for(var a in t){var n=t[a];if(null!==n.attrName.match(/S|R|T|DeformPercent/)){var i={id:n.id,attr:n.attrName,curves:{}};r.set(i.id,i)}}return r},parseAnimationCurves:function(r){var a=e.Objects.AnimationCurve;for(var n in a){var i={id:a[n].id,times:a[n].KeyTime.a.map($),values:a[n].KeyValueFloat.a},o=t.get(i.id);if(void 0!==o){var s=o.parents[0].ID,l=o.parents[0].relationship;l.match(/X/)?r.get(s).curves.x=i:l.match(/Y/)?r.get(s).curves.y=i:l.match(/Z/)?r.get(s).curves.z=i:l.match(/d|DeformPercent/)&&r.has(s)&&(r.get(s).curves.morph=i)}}},parseAnimationLayers:function(a){var n=e.Objects.AnimationLayer,i=new Map;for(var o in n){var s=[],l=t.get(parseInt(o));if(void 0!==l)l.children.forEach((function(n,i){if(a.has(n.ID)){var o=a.get(n.ID);if(void 0!==o.curves.x||void 0!==o.curves.y||void 0!==o.curves.z){if(void 0===s[i])if(void 0!==(f=t.get(n.ID).parents.filter((function(e){return void 0!==e.relationship}))[0].ID)){if(void 0===(u=e.Objects.Model[f.toString()]))return void console.warn("THREE.FBXLoader: Encountered a unused curve.",n);var l={modelName:u.attrName?N.a.sanitizeNodeName(u.attrName):"",ID:u.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1]};r.traverse((function(e){e.ID===u.id&&(l.transform=e.matrix,e.userData.transformData&&(l.eulerOrder=e.userData.transformData.eulerOrder))})),l.transform||(l.transform=new b.a),"PreRotation"in u&&(l.preRotation=u.PreRotation.value),"PostRotation"in u&&(l.postRotation=u.PostRotation.value),s[i]=l}s[i]&&(s[i][o.attr]=o)}else if(void 0!==o.curves.morph){if(void 0===s[i]){var u,c=t.get(n.ID).parents.filter((function(e){return void 0!==e.relationship}))[0].ID,h=t.get(c).parents[0].ID,p=t.get(h).parents[0].ID,f=t.get(p).parents[0].ID;l={modelName:(u=e.Objects.Model[f]).attrName?N.a.sanitizeNodeName(u.attrName):"",morphName:e.Objects.Deformer[c].attrName};s[i]=l}s[i][o.attr]=o}}})),i.set(parseInt(o),s)}return i},parseAnimStacks:function(r){var a=e.Objects.AnimationStack,n={};for(var i in a){var o=t.get(parseInt(i)).children;o.length>1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");var s=r.get(o[0].ID);n[i]={name:a[i].attrName,layer:s}}return n},addClip:function(e){var t=[],r=this;return e.layer.forEach((function(e){t=t.concat(r.generateTracks(e))})),new n.a(e.name,-1,t)},generateTracks:function(e){var t=[],r=new B.a,a=new L.a,n=new B.a;if(e.transform&&e.transform.decompose(r,a,n),r=r.toArray(),a=(new h.a).setFromQuaternion(a,e.eulerOrder).toArray(),n=n.toArray(),void 0!==e.T&&Object.keys(e.T.curves).length>0){var i=this.generateVectorTrack(e.modelName,e.T.curves,r,"position");void 0!==i&&t.push(i)}if(void 0!==e.R&&Object.keys(e.R.curves).length>0){var o=this.generateRotationTrack(e.modelName,e.R.curves,a,e.preRotation,e.postRotation,e.eulerOrder);void 0!==o&&t.push(o)}if(void 0!==e.S&&Object.keys(e.S.curves).length>0){var s=this.generateVectorTrack(e.modelName,e.S.curves,n,"scale");void 0!==s&&t.push(s)}if(void 0!==e.DeformPercent){var l=this.generateMorphTrack(e);void 0!==l&&t.push(l)}return t},generateVectorTrack:function(e,t,r,a){var n=this.getTimesForAllAxes(t),i=this.getKeyframeTrackValues(n,t,r);return new j.a(e+"."+a,n,i)},generateRotationTrack:function(e,t,r,a,n,i){void 0!==t.x&&(this.interpolateRotations(t.x),t.x.values=t.x.values.map(y.a.degToRad)),void 0!==t.y&&(this.interpolateRotations(t.y),t.y.values=t.y.values.map(y.a.degToRad)),void 0!==t.z&&(this.interpolateRotations(t.z),t.z.values=t.z.values.map(y.a.degToRad));var o=this.getTimesForAllAxes(t),s=this.getKeyframeTrackValues(o,t,r);void 0!==a&&((a=a.map(y.a.degToRad)).push(i),a=(new h.a).fromArray(a),a=(new L.a).setFromEuler(a)),void 0!==n&&((n=n.map(y.a.degToRad)).push(i),n=(new h.a).fromArray(n),n=(new L.a).setFromEuler(n).invert());for(var l=new L.a,u=new h.a,c=[],p=0;p<s.length;p+=3)u.set(s[p],s[p+1],s[p+2],i),l.setFromEuler(u),void 0!==a&&l.premultiply(a),void 0!==n&&l.multiply(n),l.toArray(c,p/3*4);return new S.a(e+".quaternion",o,c)},generateMorphTrack:function(e){var t=e.DeformPercent.curves.morph,a=t.values.map((function(e){return e/100})),n=r.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new A.a(e.modelName+".morphTargetInfluences["+n+"]",t.times,a)},getTimesForAllAxes:function(e){var t=[];if(void 0!==e.x&&(t=t.concat(e.x.times)),void 0!==e.y&&(t=t.concat(e.y.times)),void 0!==e.z&&(t=t.concat(e.z.times)),(t=t.sort((function(e,t){return e-t}))).length>1){for(var r=1,a=t[0],n=1;n<t.length;n++){var i=t[n];i!==a&&(t[r]=i,a=i,r++)}t=t.slice(0,r)}return t},getKeyframeTrackValues:function(e,t,r){var a=r,n=[],i=-1,o=-1,s=-1;return e.forEach((function(e){if(t.x&&(i=t.x.times.indexOf(e)),t.y&&(o=t.y.times.indexOf(e)),t.z&&(s=t.z.times.indexOf(e)),-1!==i){var r=t.x.values[i];n.push(r),a[0]=r}else n.push(a[0]);if(-1!==o){var l=t.y.values[o];n.push(l),a[1]=l}else n.push(a[1]);if(-1!==s){var u=t.z.values[s];n.push(u),a[2]=u}else n.push(a[2])})),n},interpolateRotations:function(e){for(var t=1;t<e.values.length;t++){var r=e.values[t-1],a=e.values[t]-r,n=Math.abs(a);if(n>=180){for(var i=n/180,o=a/i,s=r+o,l=e.times[t-1],u=(e.times[t]-l)/i,c=l+u,h=[],p=[];c<e.times[t];)h.push(c),c+=u,p.push(s),s+=o;e.times=oe(e.times,t,h),e.values=oe(e.values,t,p)}}}},_.prototype={constructor:_,getPrevNode:function(){return this.nodeStack[this.currentIndent-2]},getCurrentNode:function(){return this.nodeStack[this.currentIndent-1]},getCurrentProp:function(){return this.currentProp},pushStack:function(e){this.nodeStack.push(e),this.currentIndent+=1},popStack:function(){this.nodeStack.pop(),this.currentIndent-=1},setCurrentProp:function(e,t){this.currentProp=e,this.currentPropName=t},parse:function(e){this.currentIndent=0,this.allNodes=new Z,this.nodeStack=[],this.currentProp=[],this.currentPropName="";var t=this,r=e.split(/[\r\n]+/);return r.forEach((function(e,a){var n=e.match(/^[\s\t]*;/),i=e.match(/^[\s\t]*$/);if(!n&&!i){var o=e.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),s=e.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),l=e.match("^\\t{"+(t.currentIndent-1)+"}}");o?t.parseNodeBegin(e,o):s?t.parseNodeProperty(e,s,r[++a]):l?t.popStack():e.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(e)}})),this.allNodes},parseNodeBegin:function(e,t){var r=t[1].trim().replace(/^"/,"").replace(/"$/,""),a=t[2].split(",").map((function(e){return e.trim().replace(/^"/,"").replace(/"$/,"")})),n={name:r},i=this.parseNodeAttr(a),o=this.getCurrentNode();0===this.currentIndent?this.allNodes.add(r,n):r in o?("PoseNode"===r?o.PoseNode.push(n):void 0!==o[r].id&&(o[r]={},o[r][o[r].id]=o[r]),""!==i.id&&(o[r][i.id]=n)):"number"==typeof i.id?(o[r]={},o[r][i.id]=n):"Properties70"!==r&&(o[r]="PoseNode"===r?[n]:n),"number"==typeof i.id&&(n.id=i.id),""!==i.name&&(n.attrName=i.name),""!==i.type&&(n.attrType=i.type),this.pushStack(n)},parseNodeAttr:function(e){var t=e[0];""!==e[0]&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));var r="",a="";return e.length>1&&(r=e[1].replace(/^(\w+)::/,""),a=e[2]),{id:t,name:r,type:a}},parseNodeProperty:function(e,t,r){var a=t[1].replace(/^"/,"").replace(/"$/,"").trim(),n=t[2].replace(/^"/,"").replace(/"$/,"").trim();"Content"===a&&","===n&&(n=r.replace(/"/g,"").replace(/,$/,"").trim());var i=this.getCurrentNode();if("Properties70"!==i.name){if("C"===a){var o=n.split(",").slice(1),s=parseInt(o[0]),l=parseInt(o[1]),u=n.split(",").slice(3);a="connections",function(e,t){for(var r=0,a=e.length,n=t.length;r<n;r++,a++)e[a]=t[r]}(n=[s,l],u=u.map((function(e){return e.trim().replace(/^"/,"")}))),void 0===i[a]&&(i[a]=[])}"Node"===a&&(i.id=n),a in i&&Array.isArray(i[a])?i[a].push(n):"a"!==a?i[a]=n:i.a=n,this.setCurrentProp(i,a),"a"===a&&","!==n.slice(-1)&&(i.a=ne(n))}else this.parseNodeSpecialProperty(e,a,n)},parseNodePropertyContinued:function(e){var t=this.getCurrentNode();t.a+=e,","!==e.slice(-1)&&(t.a=ne(t.a))},parseNodeSpecialProperty:function(e,t,r){var a=r.split('",').map((function(e){return e.trim().replace(/^\"/,"").replace(/\s/,"_")})),n=a[0],i=a[1],o=a[2],s=a[3],l=a[4];switch(i){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":l=parseFloat(l);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":l=ne(l)}this.getPrevNode()[n]={type:i,type2:o,flag:s,value:l},this.setCurrentProp(this.getPrevNode(),n)}},K.prototype={constructor:K,parse:function(e){var t=new Y(e);t.skip(23);var r=t.getUint32();if(r<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+r);for(var a=new Z;!this.endOfContent(t);){var n=this.parseNode(t,r);null!==n&&a.add(n.name,n)}return a},endOfContent:function(e){return e.size()%16==0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()},parseNode:function(e,t){var r={},a=t>=7500?e.getUint64():e.getUint32(),n=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();var i=e.getUint8(),o=e.getString(i);if(0===a)return null;for(var s=[],l=0;l<n;l++)s.push(this.parseProperty(e));var u=s.length>0?s[0]:"",c=s.length>1?s[1]:"",h=s.length>2?s[2]:"";for(r.singleProperty=1===n&&e.getOffset()===a;a>e.getOffset();){var p=this.parseNode(e,t);null!==p&&this.parseSubNode(o,r,p)}return r.propertyList=s,"number"==typeof u&&(r.id=u),""!==c&&(r.attrName=c),""!==h&&(r.attrType=h),""!==o&&(r.name=o),r},parseSubNode:function(e,t,r){if(!0===r.singleProperty){var a=r.propertyList[0];Array.isArray(a)?(t[r.name]=r,r.a=a):t[r.name]=a}else if("Connections"===e&&"C"===r.name){var n=[];r.propertyList.forEach((function(e,t){0!==t&&n.push(e)})),void 0===t.connections&&(t.connections=[]),t.connections.push(n)}else if("Properties70"===r.name){Object.keys(r).forEach((function(e){t[e]=r[e]}))}else if("Properties70"===e&&"P"===r.name){var i,o=r.propertyList[0],s=r.propertyList[1],l=r.propertyList[2],u=r.propertyList[3];0===o.indexOf("Lcl ")&&(o=o.replace("Lcl ","Lcl_")),0===s.indexOf("Lcl ")&&(s=s.replace("Lcl ","Lcl_")),i="Color"===s||"ColorRGB"===s||"Vector"===s||"Vector3D"===s||0===s.indexOf("Lcl_")?[r.propertyList[4],r.propertyList[5],r.propertyList[6]]:r.propertyList[4],t[o]={type:s,type2:l,flag:u,value:i}}else void 0===t[r.name]?"number"==typeof r.id?(t[r.name]={},t[r.name][r.id]=r):t[r.name]=r:"PoseNode"===r.name?(Array.isArray(t[r.name])||(t[r.name]=[t[r.name]]),t[r.name].push(r)):void 0===t[r.name][r.id]&&(t[r.name][r.id]=r)},parseProperty:function(e){var t=e.getString(1);switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":var r=e.getUint32();return e.getArrayBuffer(r);case"S":r=e.getUint32();return e.getString(r);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":var a=e.getUint32(),n=e.getUint32(),i=e.getUint32();if(0===n)switch(t){case"b":case"c":return e.getBooleanArray(a);case"d":return e.getFloat64Array(a);case"f":return e.getFloat32Array(a);case"i":return e.getInt32Array(a);case"l":return e.getInt64Array(a)}void 0===V.a&&console.error("THREE.FBXLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js");var o=new Y(new V.a(new Uint8Array(e.getArrayBuffer(i))).decompress().buffer);switch(t){case"b":case"c":return o.getBooleanArray(a);case"d":return o.getFloat64Array(a);case"f":return o.getFloat32Array(a);case"i":return o.getInt32Array(a);case"l":return o.getInt64Array(a)}default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}},Y.prototype={constructor:Y,getOffset:function(){return this.offset},size:function(){return this.dv.buffer.byteLength},skip:function(e){this.offset+=e},getBoolean:function(){return 1==(1&this.getUint8())},getBooleanArray:function(e){for(var t=[],r=0;r<e;r++)t.push(this.getBoolean());return t},getUint8:function(){var e=this.dv.getUint8(this.offset);return this.offset+=1,e},getInt16:function(){var e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e},getInt32:function(){var e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e},getInt32Array:function(e){for(var t=[],r=0;r<e;r++)t.push(this.getInt32());return t},getUint32:function(){var e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e},getInt64:function(){var e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),2147483648&t?(t=4294967295&~t,4294967295===(e=4294967295&~e)&&(t=t+1&4294967295),-(4294967296*t+(e=e+1&4294967295))):4294967296*t+e},getInt64Array:function(e){for(var t=[],r=0;r<e;r++)t.push(this.getInt64());return t},getUint64:function(){var e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),4294967296*t+e},getFloat32:function(){var e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e},getFloat32Array:function(e){for(var t=[],r=0;r<e;r++)t.push(this.getFloat32());return t},getFloat64:function(){var e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e},getFloat64Array:function(e){for(var t=[],r=0;r<e;r++)t.push(this.getFloat64());return t},getArrayBuffer:function(e){var t=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,t},getString:function(e){for(var t=[],r=0;r<e;r++)t[r]=this.getUint8();var a=t.indexOf(0);return a>=0&&(t=t.slice(0,a)),g.a.decodeText(new Uint8Array(t))}},Z.prototype={constructor:Z,add:function(e,t){this[e]=t}};var J=[];function Q(e,t,r,a){var n;switch(a.mappingType){case"ByPolygonVertex":n=e;break;case"ByPolygon":n=t;break;case"ByVertice":n=r;break;case"AllSame":n=a.indices[0];break;default:console.warn("THREE.FBXLoader: unknown attribute mapping type "+a.mappingType)}"IndexToDirect"===a.referenceType&&(n=a.indices[n]);var i=n*a.dataSize,o=i+a.dataSize;return function(e,t,r,a){for(var n=r,i=0;n<a;n++,i++)e[i]=t[n];return e}(J,a.buffer,i,o)}var ee=new h.a,te=new B.a;function re(e){var t,r=new b.a,a=new b.a,n=new b.a,i=new b.a,o=new b.a,s=new b.a,l=new b.a,u=new b.a,c=new b.a,h=new b.a,p=new b.a,f=e.inheritType?e.inheritType:0;(e.translation&&r.setPosition(te.fromArray(e.translation)),e.preRotation)&&((t=e.preRotation.map(y.a.degToRad)).push(e.eulerOrder),a.makeRotationFromEuler(ee.fromArray(t)));e.rotation&&((t=e.rotation.map(y.a.degToRad)).push(e.eulerOrder),n.makeRotationFromEuler(ee.fromArray(t)));e.postRotation&&((t=e.postRotation.map(y.a.degToRad)).push(e.eulerOrder),i.makeRotationFromEuler(ee.fromArray(t)));e.scale&&o.scale(te.fromArray(e.scale)),e.scalingOffset&&l.setPosition(te.fromArray(e.scalingOffset)),e.scalingPivot&&s.setPosition(te.fromArray(e.scalingPivot)),e.rotationOffset&&u.setPosition(te.fromArray(e.rotationOffset)),e.rotationPivot&&c.setPosition(te.fromArray(e.rotationPivot)),e.parentMatrixWorld&&(h=e.parentMatrixWorld);var v=a.multiply(n).multiply(i),d=new b.a;h.extractRotation(d),(new b.a).copyPosition(h);var m=new b.a;m.copy(d).invert().multiply(h);var g=new b.a;if(0===f)g.copy(d).multiply(v).multiply(m).multiply(o);else if(1===f)g.copy(d).multiply(m).multiply(v).multiply(o);else{var w=new b.a;w.copy(o).invert();var I=(new b.a).multiply(m).multiply(w);g.copy(d).multiply(v).multiply(I).multiply(o)}var T=new b.a;T.copy(c).invert();var x=new b.a;x.copy(s).invert();var A=new b.a;A.copy(r).multiply(u).multiply(c).multiply(a).multiply(n).multiply(i).multiply(T).multip