1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6703],{36703:(e,t,i)=>{i.d(t,{ColladaLoader:()=>c});var r=i(7720);class a extends r.BRH{constructor(e){super(e)}parse(e){if(e.length<19)throw Error("THREE.TGALoader: Not enough data to contain header.");let t=0,i=new Uint8Array(e),a={id_length:i[t++],colormap_type:i[t++],image_type:i[t++],colormap_index:i[t++]|i[t++]<<8,colormap_length:i[t++]|i[t++]<<8,colormap_size:i[t++],origin:[i[t++]|i[t++]<<8,i[t++]|i[t++]<<8],width:i[t++]|i[t++]<<8,height:i[t++]|i[t++]<<8,pixel_size:i[t++],flags:i[t++]};switch(a.image_type){case 1:case 9:if(a.colormap_length>256||24!==a.colormap_size||1!==a.colormap_type)throw Error("THREE.TGALoader: Invalid type colormap data for indexed type.");break;case 2:case 3:case 10:case 11:if(a.colormap_type)throw Error("THREE.TGALoader: Invalid type colormap data for colormap type.");break;case 0:throw Error("THREE.TGALoader: No data.");default:throw Error("THREE.TGALoader: Invalid type "+a.image_type)}if(a.width<=0||a.height<=0)throw Error("THREE.TGALoader: Invalid image size.");if(8!==a.pixel_size&&16!==a.pixel_size&&24!==a.pixel_size&&32!==a.pixel_size)throw Error("THREE.TGALoader: Invalid pixel size "+a.pixel_size);if(a.id_length+t>e.length)throw Error("THREE.TGALoader: No data.");t+=a.id_length;let s=!1,n=!1,l=!1;switch(a.image_type){case 9:s=!0,n=!0;break;case 1:n=!0;break;case 10:s=!0;break;case 2:break;case 11:s=!0,l=!0;break;case 3:l=!0}let o=new Uint8Array(a.width*a.height*4),d=function(e,t,i,r,a){let s,n,l=i.pixel_size>>3,o=i.width*i.height*l;if(t&&(n=a.subarray(r,r+=i.colormap_length*(i.colormap_size>>3))),e){let e,t,i;s=new Uint8Array(o);let n=0,d=new Uint8Array(l);for(;n<o;)if(t=(127&(e=a[r++]))+1,128&e){for(i=0;i<l;++i)d[i]=a[r++];for(i=0;i<t;++i)s.set(d,n+i*l);n+=l*t}else{for(t*=l,i=0;i<t;++i)s[n+i]=a[r++];n+=t}}else s=a.subarray(r,r+=t?i.width*i.height:o);return{pixel_data:s,palettes:n}}(s,n,a,t,i);return!function(e,t,i,r,s){let n,o,d,h,c,u;switch((48&a.flags)>>4){default:case 2:n=0,d=1,c=t,o=0,h=1,u=i;break;case 0:n=0,d=1,c=t,o=i-1,h=-1,u=-1;break;case 3:n=t-1,d=-1,c=-1,o=0,h=1,u=i;break;case 1:n=t-1,d=-1,c=-1,o=i-1,h=-1,u=-1}if(l)switch(a.pixel_size){case 8:!function(e,t,i,r,s,n,l,o){let d,h=0,c,u,p=a.width;for(u=t;u!==r;u+=i)for(c=s;c!==l;c+=n,h++)d=o[h],e[(c+p*u)*4+0]=d,e[(c+p*u)*4+1]=d,e[(c+p*u)*4+2]=d,e[(c+p*u)*4+3]=255}(e,o,h,u,n,d,c,r);break;case 16:var p=e,m=o,f=h,b=u,g=n,y=d,A=c,T=r;let x=0,N,w,k=a.width;for(w=m;w!==b;w+=f)for(N=g;N!==A;N+=y,x+=2)p[(N+k*w)*4+0]=T[x+0],p[(N+k*w)*4+1]=T[x+0],p[(N+k*w)*4+2]=T[x+0],p[(N+k*w)*4+3]=T[x+1];break;default:throw Error("THREE.TGALoader: Format not supported.")}else switch(a.pixel_size){case 8:!function(e,t,i,r,s,n,l,o,d){let h,c=0,u,p,m=a.width;for(p=t;p!==r;p+=i)for(u=s;u!==l;u+=n,c++)h=o[c],e[(u+m*p)*4+3]=255,e[(u+m*p)*4+2]=d[3*h+0],e[(u+m*p)*4+1]=d[3*h+1],e[(u+m*p)*4+0]=d[3*h+2]}(e,o,h,u,n,d,c,r,s);break;case 16:!function(e,t,i,r,s,n,l,o){let d,h=0,c,u,p=a.width;for(u=t;u!==r;u+=i)for(c=s;c!==l;c+=n,h+=2)d=o[h+0]+(o[h+1]<<8),e[(c+p*u)*4+0]=(31744&d)>>7,e[(c+p*u)*4+1]=(992&d)>>2,e[(c+p*u)*4+2]=(31&d)<<3,e[(c+p*u)*4+3]=32768&d?0:255}(e,o,h,u,n,d,c,r);break;case 24:var E=e,v=o,C=h,_=u,I=n,L=d,P=c,q=r;let M=0,R,S,O=a.width;for(S=v;S!==_;S+=C)for(R=I;R!==P;R+=L,M+=3)E[(R+O*S)*4+3]=255,E[(R+O*S)*4+2]=q[M+0],E[(R+O*S)*4+1]=q[M+1],E[(R+O*S)*4+0]=q[M+2];break;case 32:var j=e,z=o,G=h,H=u,B=n,D=d,V=c,U=r;let K=0,J,F,W=a.width;for(F=z;F!==H;F+=G)for(J=B;J!==V;J+=D,K+=4)j[(J+W*F)*4+2]=U[K+0],j[(J+W*F)*4+1]=U[K+1],j[(J+W*F)*4+0]=U[K+2],j[(J+W*F)*4+3]=U[K+3];break;default:throw Error("THREE.TGALoader: Format not supported.")}}(o,a.width,a.height,d.pixel_data,d.palettes),{data:o,width:a.width,height:a.height,flipY:!0,generateMipmaps:!0,minFilter:r.$_I}}}function s(e,t){let i=[],r=e.childNodes;for(let e=0,a=r.length;e<a;e++){let a=r[e];a.nodeName===t&&i.push(a)}return i}function n(e){return 0===e.length?[]:e.trim().split(/\s+/).map(parseFloat)}function l(e){return 0===e.length?[]:e.trim().split(/\s+/).map(e=>parseInt(e))}function o(e){return e.substring(1)}class d{constructor(){this.count=0}generateId(){return"three_default_"+this.count++}parse(e){if(0===e.length)return null;let t=new DOMParser().parseFromString(e,"application/xml"),i=s(t,"COLLADA")[0],r=t.getElementsByTagName("parsererror")[0];if(void 0!==r){let e=s(r,"div")[0];return console.error("THREE.ColladaLoader: Failed to parse collada file.\n",e?e.textContent:this.parserErrorToText(r)),null}console.debug("THREE.ColladaLoader: File version",i.getAttribute("version"));let a=this.parseAsset(s(i,"asset")[0]),n={animations:{},clips:{},controllers:{},images:{},effects:{},materials:{},cameras:{},lights:{},geometries:{},nodes:{},visualScenes:{},kinematicsModels:{},physicsModels:{},kinematicsScenes:{},joints:{}};return this.library=n,this.collada=i,this.parseLibrary(i,"library_animations","animation",this.parseAnimation.bind(this)),this.parseLibrary(i,"library_animation_clips","animation_clip",this.parseAnimationClip.bind(this)),this.parseLibrary(i,"library_controllers","controller",this.parseController.bind(this)),this.parseLibrary(i,"library_images","image",this.parseImage.bind(this)),this.parseLibrary(i,"library_effects","effect",this.parseEffect.bind(this)),this.parseLibrary(i,"library_materials","material",this.parseMaterial.bind(this)),this.parseLibrary(i,"library_cameras","camera",this.parseCamera.bind(this)),this.parseLibrary(i,"library_lights","light",this.parseLight.bind(this)),this.parseLibrary(i,"library_geometries","geometry",this.parseGeometry.bind(this)),this.parseLibrary(i,"library_nodes","no
1de",this.parseNode.bind(this)),this.parseLibrary(i,"library_visual_scenes","visual_scene",this.parseVisualScene.bind(this)),this.parseLibrary(i,"library_joints","joint",this.parseLibraryJoint.bind(this)),this.parseLibrary(i,"library_kinematics_models","kinematics_model",this.parseKinematicsModel.bind(this)),this.parseLibrary(i,"library_physics_models","physics_model",this.parsePhysicsModel.bind(this)),this.parseLibrary(i,"scene","instance_kinematics_scene",this.parseKinematicsScene.bind(this)),{library:n,asset:a,collada:i}}parserErrorToText(e){let t=[],i=[e];for(;i.length;){let e=i.shift();e.nodeType===Node.TEXT_NODE?t.push(e.textContent):(t.push("\n"),i.push(...e.childNodes))}return t.join("").trim()}parseAsset(e){return{unit:this.parseAssetUnit(s(e,"unit")[0]),upAxis:this.parseAssetUpAxis(s(e,"up_axis")[0])}}parseAssetUnit(e){return void 0!==e&&!0===e.hasAttribute("meter")?parseFloat(e.getAttribute("meter")):1}parseAssetUpAxis(e){return void 0!==e?e.textContent:"Y_UP"}parseLibrary(e,t,i,r){let a=s(e,t)[0];if(void 0!==a){let e=s(a,i);for(let t=0;t<e.length;t++)r(e[t])}}parseAnimation(e){let t={sources:{},samplers:{},channels:{}},i=!1;for(let r=0,a=e.childNodes.length;r<a;r++){let a,s=e.childNodes[r];if(1===s.nodeType)switch(s.nodeName){case"source":a=s.getAttribute("id"),t.sources[a]=this.parseSource(s);break;case"sampler":a=s.getAttribute("id"),t.samplers[a]=this.parseAnimationSampler(s);break;case"channel":a=s.getAttribute("target"),t.channels[a]=this.parseAnimationChannel(s);break;case"animation":this.parseAnimation(s),i=!0}}!1===i&&(this.library.animations[e.getAttribute("id")||r.cj9.generateUUID()]=t)}parseAnimationSampler(e){let t={inputs:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType&&"input"===r.nodeName){let e=o(r.getAttribute("source")),i=r.getAttribute("semantic");t.inputs[i]=e}}return t}parseAnimationChannel(e){let t={},i=e.getAttribute("target").split("/"),r=i.shift(),a=i.shift(),s=-1!==a.indexOf("("),n=-1!==a.indexOf(".");if(n)a=(i=a.split(".")).shift(),t.member=i.shift();else if(s){let e=a.split("(");a=e.shift();for(let t=0;t<e.length;t++)e[t]=parseInt(e[t].replace(/\)/,""));t.indices=e}return t.id=r,t.sid=a,t.arraySyntax=s,t.memberSyntax=n,t.sampler=o(e.getAttribute("source")),t}parseAnimationClip(e){let t={name:e.getAttribute("id")||"default",start:parseFloat(e.getAttribute("start")||0),end:parseFloat(e.getAttribute("end")||0),animations:[]};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"instance_animation"===r.nodeName&&t.animations.push(o(r.getAttribute("url")))}this.library.clips[e.getAttribute("id")]=t}parseController(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"skin":t.id=o(r.getAttribute("source")),t.skin=this.parseSkin(r);break;case"morph":t.id=o(r.getAttribute("source")),console.warn("THREE.ColladaLoader: Morph target animation not supported yet.")}}this.library.controllers[e.getAttribute("id")]=t}parseSkin(e){let t={sources:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"bind_shape_matrix":t.bindShapeMatrix=n(r.textContent);break;case"source":let a=r.getAttribute("id");t.sources[a]=this.parseSource(r);break;case"joints":t.joints=this.parseJoints(r);break;case"vertex_weights":t.vertexWeights=this.parseVertexWeights(r)}}return t}parseJoints(e){let t={inputs:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType&&"input"===r.nodeName){let e=r.getAttribute("semantic"),i=o(r.getAttribute("source"));t.inputs[e]=i}}return t}parseVertexWeights(e){let t={inputs:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"input":let a=r.getAttribute("semantic"),s=o(r.getAttribute("source")),n=parseInt(r.getAttribute("offset"));t.inputs[a]={id:s,offset:n};break;case"vcount":t.vcount=l(r.textContent);break;case"v":t.v=l(r.textContent)}}return t}parseImage(e){let t={init_from:s(e,"init_from")[0].textContent};this.library.images[e.getAttribute("id")]=t}parseEffect(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"profile_COMMON"===r.nodeName&&(t.profile=this.parseEffectProfileCOMMON(r))}this.library.effects[e.getAttribute("id")]=t}parseEffectProfileCOMMON(e){let t={surfaces:{},samplers:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"newparam":this.parseEffectNewparam(r,t);break;case"technique":t.technique=this.parseEffectTechnique(r);break;case"extra":t.extra=this.parseEffectExtra(r)}}return t}parseEffectNewparam(e,t){let i=e.getAttribute("sid");for(let r=0,a=e.childNodes.length;r<a;r++){let a=e.childNodes[r];if(1===a.nodeType)switch(a.nodeName){case"surface":t.surfaces[i]=this.parseEffectSurface(a);break;case"sampler2D":t.samplers[i]=this.parseEffectSampler(a)}}}parseEffectSurface(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"init_from"===r.nodeName&&(t.init_from=r.textContent)}return t}parseEffectSampler(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"source"===r.nodeName&&(t.source=r.textContent)}return t}parseEffectTechnique(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"constant":case"lambert":case"blinn":case"phong":t.type=r.nodeName,t.parameters=this.parseEffectParameters(r);break;case"extra":t.extra=this.parseEffectExtra(r)}}return t}parseEffectParameters(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"emission":case"diffuse":case"specular":case"bump":case"ambient":case"shininess":case"transparency":t[r.nodeName]=this.parseEffectParameter(r);break;
1case"transparent":t[r.nodeName]={opaque:r.hasAttribute("opaque")?r.getAttribute("opaque"):"A_ONE",data:this.parseEffectParameter(r)}}}return t}parseEffectParameter(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"color":t[r.nodeName]=n(r.textContent);break;case"float":t[r.nodeName]=parseFloat(r.textContent);break;case"texture":t[r.nodeName]={id:r.getAttribute("texture"),extra:this.parseEffectParameterTexture(r)}}}return t}parseEffectParameterTexture(e){let t={technique:{}};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"extra"===r.nodeName&&this.parseEffectParameterTextureExtra(r,t)}return t}parseEffectParameterTextureExtra(e,t){for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"technique"===r.nodeName&&this.parseEffectParameterTextureExtraTechnique(r,t)}}parseEffectParameterTextureExtraTechnique(e,t){for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"repeatU":case"repeatV":case"offsetU":case"offsetV":t.technique[r.nodeName]=parseFloat(r.textContent);break;case"wrapU":case"wrapV":"TRUE"===r.textContent.toUpperCase()?t.technique[r.nodeName]=1:"FALSE"===r.textContent.toUpperCase()?t.technique[r.nodeName]=0:t.technique[r.nodeName]=parseInt(r.textContent);break;case"bump":t[r.nodeName]=this.parseEffectExtraTechniqueBump(r)}}}parseEffectExtra(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"technique"===r.nodeName&&(t.technique=this.parseEffectExtraTechnique(r))}return t}parseEffectExtraTechnique(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"double_sided":t[r.nodeName]=parseInt(r.textContent);break;case"bump":t[r.nodeName]=this.parseEffectExtraTechniqueBump(r)}}return t}parseEffectExtraTechniqueBump(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"texture"===r.nodeName&&(t[r.nodeName]={id:r.getAttribute("texture"),texcoord:r.getAttribute("texcoord"),extra:this.parseEffectParameterTexture(r)})}return t}parseMaterial(e){let t={name:e.getAttribute("name")};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"instance_effect"===r.nodeName&&(t.url=o(r.getAttribute("url")))}this.library.materials[e.getAttribute("id")]=t}parseCamera(e){let t={name:e.getAttribute("name")};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"optics"===r.nodeName&&(t.optics=this.parseCameraOptics(r))}this.library.cameras[e.getAttribute("id")]=t}parseCameraOptics(e){for(let t=0;t<e.childNodes.length;t++){let i=e.childNodes[t];if("technique_common"===i.nodeName)return this.parseCameraTechnique(i)}return{}}parseCameraTechnique(e){let t={};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];switch(r.nodeName){case"perspective":case"orthographic":t.technique=r.nodeName,t.parameters=this.parseCameraParameters(r)}}return t}parseCameraParameters(e){let t={};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];switch(r.nodeName){case"xfov":case"yfov":case"xmag":case"ymag":case"znear":case"zfar":case"aspect_ratio":t[r.nodeName]=parseFloat(r.textContent)}}return t}parseLight(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];1===r.nodeType&&"technique_common"===r.nodeName&&(t=this.parseLightTechnique(r))}this.library.lights[e.getAttribute("id")]=t}parseLightTechnique(e){let t={};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"directional":case"point":case"spot":case"ambient":t.technique=r.nodeName,t.parameters=this.parseLightParameters(r)}}return t}parseLightParameters(e){let t={};for(let i=0,a=e.childNodes.length;i<a;i++){let a=e.childNodes[i];if(1===a.nodeType)switch(a.nodeName){case"color":let s=n(a.textContent);t.color=new r.Q1f().fromArray(s),r.ppV.colorSpaceToWorking(t.color,r.er$);break;case"falloff_angle":t.falloffAngle=parseFloat(a.textContent);break;case"quadratic_attenuation":let l=parseFloat(a.textContent);t.distance=l?Math.sqrt(1/l):0}}return t}parseGeometry(e){let t={name:e.getAttribute("name"),sources:{},vertices:{},primitives:[]},i=s(e,"mesh")[0];if(void 0!==i){for(let e=0;e<i.childNodes.length;e++){let r=i.childNodes[e];if(1!==r.nodeType)continue;let a=r.getAttribute("id");switch(r.nodeName){case"source":t.sources[a]=this.parseSource(r);break;case"vertices":t.vertices=this.parseGeometryVertices(r);break;case"polygons":case"lines":case"linestrips":case"polylist":case"triangles":t.primitives.push(this.parseGeometryPrimitive(r))}}this.library.geometries[e.getAttribute("id")]=t}}parseSource(e){let t={array:[],stride:3};for(let r=0;r<e.childNodes.length;r++){let a=e.childNodes[r];if(1===a.nodeType)switch(a.nodeName){case"float_array":t.array=n(a.textContent);break;case"Name_array":var i;t.array=0===(i=a.textContent).length?[]:i.trim().split(/\s+/);break;case"technique_common":let l=s(a,"accessor")[0];void 0!==l&&(t.stride=parseInt(l.getAttribute("stride")))}}return t}parseGeometryVertices(e){let t={};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];1===r.nodeType&&(t[r.getAttribute("semantic")]=o(r.getAttribute("source")))}return t}parseGeometryPrimitive(e){let t={type:e.nodeName,material:e.getAttribute("material"),count:parseInt(e.getAttribute("count")),inputs:{},stride:0,hasUV:!1};for(let i=0,r=e.childNodes.length;i<r;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"input":let a=o(r.getAttribute("source")),s=r.getAttribute("semantic"),n=parseInt(r.getAttribute("offset")),d=parseInt(r.getAttribute("set")),h=d>0?s+d:s;
1t.inputs[h]={id:a,offset:n},t.stride=Math.max(t.stride,n+1),"TEXCOORD"===s&&(t.hasUV=!0);break;case"vcount":t.vcount=l(r.textContent);break;case"p":t.p=l(r.textContent)}}return"polygons"===t.type&&(t.vcount=[t.p.length/t.stride]),t}parseLibraryJoint(e){this.library.joints[e.getAttribute("id")]=this.parseKinematicsJoint(e)}parseKinematicsModel(e){let t={name:e.getAttribute("name")||"",joints:{},links:[]};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];1===r.nodeType&&"technique_common"===r.nodeName&&this.parseKinematicsTechniqueCommon(r,t)}this.library.kinematicsModels[e.getAttribute("id")]=t}parseKinematicsTechniqueCommon(e,t){for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"joint":t.joints[r.getAttribute("sid")]=this.parseKinematicsJoint(r);break;case"instance_joint":t.joints[r.getAttribute("sid")]=this.library.joints[o(r.getAttribute("url"))];break;case"link":t.links.push(this.parseKinematicsLink(r))}}}parseKinematicsJoint(e){let t;for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"prismatic":case"revolute":t=this.parseKinematicsJointParameter(r)}}return t}parseKinematicsJointParameter(e){let t={sid:e.getAttribute("sid"),name:e.getAttribute("name")||"",axis:new r.Pq0,limits:{min:0,max:0},type:e.nodeName,static:!1,zeroPosition:0,middlePosition:0};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"axis":let a=n(r.textContent);t.axis.fromArray(a);break;case"limits":let s=r.getElementsByTagName("max")[0],l=r.getElementsByTagName("min")[0];t.limits.max=parseFloat(s.textContent),t.limits.min=parseFloat(l.textContent)}}return t.limits.min>=t.limits.max&&(t.static=!0),t.middlePosition=(t.limits.min+t.limits.max)/2,t}parseKinematicsLink(e){let t={sid:e.getAttribute("sid"),name:e.getAttribute("name")||"",attachments:[],transforms:[]};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"attachment_full":t.attachments.push(this.parseKinematicsAttachment(r));break;case"matrix":case"translate":case"rotate":t.transforms.push(this.parseKinematicsTransform(r))}}return t}parseKinematicsAttachment(e){let t={joint:e.getAttribute("joint").split("/").pop(),transforms:[],links:[]};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"link":t.links.push(this.parseKinematicsLink(r));break;case"matrix":case"translate":case"rotate":t.transforms.push(this.parseKinematicsTransform(r))}}return t}parseKinematicsTransform(e){let t={type:e.nodeName},i=n(e.textContent);switch(t.type){case"matrix":t.obj=new r.kn4,t.obj.fromArray(i).transpose();break;case"translate":t.obj=new r.Pq0,t.obj.fromArray(i);break;case"rotate":t.obj=new r.Pq0,t.obj.fromArray(i),t.angle=r.cj9.degToRad(i[3])}return t}parsePhysicsModel(e){let t={name:e.getAttribute("name")||"",rigidBodies:{}};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];1===r.nodeType&&"rigid_body"===r.nodeName&&(t.rigidBodies[r.getAttribute("name")]={},this.parsePhysicsRigidBody(r,t.rigidBodies[r.getAttribute("name")]))}this.library.physicsModels[e.getAttribute("id")]=t}parsePhysicsRigidBody(e,t){for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];1===r.nodeType&&"technique_common"===r.nodeName&&this.parsePhysicsTechniqueCommon(r,t)}}parsePhysicsTechniqueCommon(e,t){for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType)switch(r.nodeName){case"inertia":t.inertia=n(r.textContent);break;case"mass":t.mass=n(r.textContent)[0]}}}parseKinematicsScene(e){let t={bindJointAxis:[]};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];1===r.nodeType&&"bind_joint_axis"===r.nodeName&&t.bindJointAxis.push(this.parseKinematicsBindJointAxis(r))}this.library.kinematicsScenes[o(e.getAttribute("url"))]=t}parseKinematicsBindJointAxis(e){let t={target:e.getAttribute("target").split("/").pop()};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];if(1===r.nodeType&&"axis"===r.nodeName){t.axis=r.getElementsByTagName("param")[0].textContent;let e=t.axis.split("inst_").pop().split("axis")[0];t.jointIndex=e.substring(0,e.length-1)}}return t}prepareNodes(e){let t=e.getElementsByTagName("node");for(let e=0;e<t.length;e++){let i=t[e];!1===i.hasAttribute("id")&&i.setAttribute("id",this.generateId())}}parseNode(e){let t=new r.kn4,i=new r.Pq0,a={name:e.getAttribute("name")||"",type:e.getAttribute("type"),id:e.getAttribute("id"),sid:e.getAttribute("sid"),matrix:new r.kn4,nodes:[],instanceCameras:[],instanceControllers:[],instanceLights:[],instanceGeometries:[],instanceNodes:[],transforms:{},transformData:{},transformOrder:[]};for(let s=0;s<e.childNodes.length;s++){let l,d=e.childNodes[s];if(1===d.nodeType)switch(d.nodeName){case"node":a.nodes.push(d.getAttribute("id")),this.parseNode(d);break;case"instance_camera":a.instanceCameras.push(o(d.getAttribute("url")));break;case"instance_controller":a.instanceControllers.push(this.parseNodeInstance(d));break;case"instance_light":a.instanceLights.push(o(d.getAttribute("url")));break;case"instance_geometry":a.instanceGeometries.push(this.parseNodeInstance(d));break;case"instance_node":a.instanceNodes.push(o(d.getAttribute("url")));break;case"matrix":l=n(d.textContent),a.matrix.multiply(t.fromArray(l).transpose());{let e=d.getAttribute("sid");a.transforms[e]=d.nodeName,a.transformData[e]={type:"matrix",array:l},a.transformOrder.push(e)}break;case"translate":l=n(d.textContent),i.fromArray(l),a.matrix.multiply(t.makeTranslation(i.x,i.y,i.z));{let e=d.getAttribute("sid");a.transforms[e]=d.nodeName,a.transformData[e]={type:"translate",x:l[0],y:l[1],z:l[2]},a.transformOrder.push(e)}break;case"rotate":l=n(d.textContent);{let e=r.cj9.degToRad(l[3]);a.matrix.multiply(t.makeRotationAxis(i.fromArray(l),e));let s=d.getAttribute("sid");a.transforms[s]=d.nodeName,a.transformData[s]={type:"rotate",axis:[l[0],l[1],l[2]],angle:l[3]},a.transformOrder.push(s)}break;case"scale":l=n(d.textContent),a.matrix.scale(i.fromArray(l));{let e=d.getAttribute("sid");a.transforms[e]=d.nodeName,a.transformData[e]={type:"scale",x:l[0],y:l[1],z:l[2]},a.transformOrder.push(e)}}}return this.hasNode(a.id)?console.warn("THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.",a.id):this.library.nodes[a.id]=a,a}parseNodeInstance(e){let t={id:o(e.getAttribute("url")),materials:{},skeletons:[]};for(let i=0;i<e.childNodes.length;i++){let r=e.childNodes[i];switch(r.nodeName){case"bind_material":let a=r.getElementsByTagName("instance_material");for(let e=0;e<a.length;e++){let i=a[e],r=i.getAttribute("symbol"),s=i.getAttribute("target");t.materials[r]=o(s)}break;case"skeleton":t.skeletons.push(o(r.textContent))}}return t}parseVisualScene(e){let t={name:e.getAttribute("name"),children:[]};this.prepareNodes(e);let i=s(e,"node");for(let e=0;e<i.length;e++)t.children.push(this.parseNode(i[e]));this.library.visualScenes[e.getAttribute("id")]=t}hasNode(e){return void 0!==this.library.nodes[e]}}class h{constructor(e,t,i,a){this.library=e,this.collada=t,this.textureLoader=i,this.tgaLoader=a,this.tempColor=new r.Q1f,this.animations=[],this.kinematics={},this.position=new r.Pq0,this.scale=new r.Pq0,this.quaternion=new r.PTz,this.matrix=new r.kn4,this.deferredPivotAnimations={},this.transformNodes={}}compose(){let e=this.library;this.buildLibrary(e.animations,this.buildAnimation.bind(this)),this.buildLibrary(e.clips,this.buildAnimationClip.bind(this)),this.buildLibrary(e.controllers,this.buildController.bind(this)),this.buildLibrary(e.images,this.buildImage.bind(this)),this.buildLibrary(e.effects,this.buildEffect.bind(this)),this.buildLibrary(e.materials,this.buildMaterial.bind(this)),this.buildLibrary(e.cameras,this.buildCamera.bind(this)),this.buildLibrary(e.lights,this.buildLight.bind(this)),this.buildLibrary(e.geometries,this.buildGeometry.bind(this)),this.buildLibrary(e.visualScenes,this.buildVisualScene.bind(this)),this.setupAnimations(),this.setupKinematics();let t=this.parseScene(s(this.collada,"scene")[0]);return t.animations=this.animations,{scene:t,animations:this.animations,kinematics:this.kinematics}}buildLibrary(e,t){for(let i in e)e[i].build=t(e[i])}getBuild(e,t){return void 0!==e.build||(e.build=t(e)),e.build}isEmpty(e){return 0===Object.keys(e).length}buildAnimation(e){let t=[],i=e.channels,r=e.samplers,a=e.sources,s=this.aggregateAnimationChannels(i,r,a);for(let e in s){let i=this.library.nodes[e];if(!i)continue;let r=s[e];if(this.hasPivotTransforms(i))this.collectDeferredPivotAnimation(e,r);else{let a=this.getNode(e),s=!1;for(let e in r){let n=i.transforms[e],l=i.transformData[e],o=r[e];switch(n){case"matrix":this.buildMatrixTracks(a,o,i,t);break;case"translate":this.buildTranslateTrack(a,o,l,t);break;case"rotate":s||(this.buildRotateTrack(a,e,o,l,i,t),s=!0);break;case"scale":this.buildScaleTrack(a,o,l,t)}}}}return t}collectDeferredPivotAnimation(e,t){this.deferredPivotAnimations[e]||(this.deferredPivotAnimations[e]={});let i=this.deferredPivotAnimations[e];for(let e in t)for(let r in i[e]||(i[e]={}),t[e])i[e][r]=t[e][r]}hasPivotTransforms(e){for(let t of["rotatePivot","rotatePivotInverse","rotatePivotTranslation","scalePivot","scalePivotInverse","scalePivotTranslation"])if(void 0!==e.transforms[t])return!0;return!1}getAnimation(e){return this.getBuild(this.library.animations[e],this.buildAnimation.bind(this))}aggregateAnimationChannels(e,t,i){let r={};for(let a in e){if(!e.hasOwnProperty(a))continue;let s=e[a],n=t[s.sampler],l=n.inputs.INPUT,o=n.inputs.OUTPUT,d=i[l],h=i[o],c=n.inputs.INTERPOLATION,u=n.inputs.IN_TANGENT,p=n.inputs.OUT_TANGENT,m=c?i[c]:null,f=u?i[u]:null,b=p?i[p]:null,g=s.id,y=s.sid,A=s.member||"default";r[g]||(r[g]={}),r[g][y]||(r[g][y]={}),r[g][y][A]={times:d.array,values:h.array,stride:h.stride,arraySyntax:s.arraySyntax,indices:s.indices,interpolation:m?m.array:null,inTangent:f?f.array:null,outTangent:b?b.array:null,inTangentStride:f?f.stride:0,outTangentStride:b?b.stride:0}}return r}buildMatrixTracks(e,t,i,r){let a=i.matrix.clone().transpose(),s={};for(let e in t){let i=t[e],r=i.times,a=i.values,n=i.stride;for(let e=0,t=r.length;e<t;e++){let t=r[e],l=e*n;if(void 0===s[t]&&(s[t]={}
1),!0===i.arraySyntax){let e=a[l],r=i.indices[0]+4*i.indices[1];s[t][r]=e}else for(let e=0;e<n;e++)s[t][e]=a[l+e]}}let n=this.prepareAnimationData(s,a),l={name:e.uuid,keyframes:n};this.createKeyframeTracks(l,r)}buildTranslateTrack(e,t,i,a){if(t.default&&3===t.default.stride){let i=t.default,s=Array.from(i.times),n=Array.from(i.values),l=new r.RiT(e.uuid+".position",s,n),o=this.getInterpolationInfo(t);this.applyInterpolation(l,o,t),a.push(l);return}let s=this.getTimesForAllAxes(t);if(0===s.length)return;let n=[],l=this.getInterpolationInfo(t);for(let e=0;e<s.length;e++){let r=s[e],a=this.getValueAtTime(t.X,r,i.x),l=this.getValueAtTime(t.Y,r,i.y),o=this.getValueAtTime(t.Z,r,i.z);n.push(a,l,o)}let o=new r.RiT(e.uuid+".position",s,n);this.applyInterpolation(o,l),a.push(o)}buildRotateTrack(e,t,i,a,s,n){let l=i.ANGLE||i.default;if(!l)return;let o=Array.from(l.times);if(0===o.length)return;let d=[];for(let e of s.transformOrder)if("rotate"===s.transforms[e]){let t=s.transformData[e];d.push({sid:e,axis:new r.Pq0(t.axis[0],t.axis[1],t.axis[2]),defaultAngle:t.angle})}let h=new r.PTz,c=new r.PTz,u=new r.PTz,p=[],m=this.getInterpolationInfo(i);for(let e=0;e<o.length;e++){let i=o[e];for(let e of(h.identity(),d)){let a;a=e.sid===t?this.getValueAtTime(l,i,e.defaultAngle):e.defaultAngle;let s=r.cj9.degToRad(a);u.setFromAxisAngle(e.axis,s),h.multiply(u)}e>0&&0>c.dot(h)&&(h.x=-h.x,h.y=-h.y,h.z=-h.z,h.w=-h.w),c.copy(h),p.push(h.x,h.y,h.z,h.w)}let f=new r.MBL(e.uuid+".quaternion",o,p);this.applyInterpolation(f,m),n.push(f)}buildScaleTrack(e,t,i,a){if(t.default&&3===t.default.stride){let i=t.default,s=Array.from(i.times),n=Array.from(i.values),l=new r.RiT(e.uuid+".scale",s,n),o=this.getInterpolationInfo(t);this.applyInterpolation(l,o,t),a.push(l);return}let s=this.getTimesForAllAxes(t);if(0===s.length)return;let n=[],l=this.getInterpolationInfo(t);for(let e=0;e<s.length;e++){let r=s[e],a=this.getValueAtTime(t.X,r,i.x),l=this.getValueAtTime(t.Y,r,i.y),o=this.getValueAtTime(t.Z,r,i.z);n.push(a,l,o)}let o=new r.RiT(e.uuid+".scale",s,n);this.applyInterpolation(o,l),a.push(o)}getTimesForAllAxes(e){let t=[];return e.X&&(t=t.concat(Array.from(e.X.times))),e.Y&&(t=t.concat(Array.from(e.Y.times))),e.Z&&(t=t.concat(Array.from(e.Z.times))),e.ANGLE&&(t=t.concat(Array.from(e.ANGLE.times))),e.default&&(t=t.concat(Array.from(e.default.times))),t=[...new Set(t)].sort((e,t)=>e-t)}getValueAtTime(e,t,i){if(!e)return i;let r=e.times,a=e.values,s=e.interpolation;for(let i=0;i<r.length;i++){if(r[i]===t)return a[i];if(r[i]>t){if(0===i)return a[0];let n=i-1,l=i,o=r[n],d=r[l],h=a[n],c=a[l],u=s?s[n]:"LINEAR";if("STEP"===u)return h;if("BEZIER"===u&&e.inTangent&&e.outTangent)return this.evaluateBezierComponent(e,n,l,o,d,t);return h+(t-o)/(d-o)*(c-h)}}return a[a.length-1]}evaluateBezierComponent(e,t,i,r,a,s){let n,l,o,d,h=e.values,c=e.inTangent,u=e.outTangent,p=e.inTangentStride||1,m=h[t],f=h[i];2===p?(n=u[2*t],l=u[2*t+1],o=c[2*i],d=c[2*i+1]):(n=r+(a-r)/3,l=u[t],o=a-(a-r)/3,d=c[i]);let b=(s-r)/(a-r);for(let e=0;e<8;e++){let e=b*b,t=e*b,i=1-b,l=i*i,d=l*i*r+3*l*b*n+3*i*e*o+t*a,h=3*l*(n-r)+6*i*b*(o-n)+3*e*(a-o);if(1e-10>Math.abs(h))break;let c=d-s;if(1e-10>Math.abs(c))break;b-=c/h,b=Math.max(0,Math.min(1,b))}let g=b*b,y=g*b,A=1-b,T=A*A;return T*A*m+3*T*b*l+3*A*g*d+y*f}getInterpolationInfo(e){let t=null,i=!0;for(let r of["X","Y","Z","ANGLE","default"]){let a=e[r];if(!a||!a.interpolation)continue;let s=a.interpolation;for(let e=0;e<s.length;e++){let r=s[e];null===t?t=r:r!==t&&(i=!1)}}return{type:t||"LINEAR",uniform:i}}applyInterpolation(e,t,i=null){if("STEP"===t.type&&t.uniform)e.setInterpolation(r.ljd);else if("BEZIER"===t.type&&t.uniform&&i){let t=i.default;t&&t.inTangent&&t.outTangent&&(e.setInterpolation(r.dJg),e.settings={inTangents:new Float32Array(t.inTangent),outTangents:new Float32Array(t.outTangent)})}}prepareAnimationData(e,t){let i=[];for(let t in e)i.push({time:parseFloat(t),value:e[t]});i.sort((e,t)=>e.time-t.time);for(let e=0;e<16;e++)this.transformAnimationData(i,e,t.elements[e]);return i}createKeyframeTracks(e,t){let i=e.keyframes,a=e.name,s=[],n=[],l=[],o=[],d=this.position,h=this.quaternion,c=this.scale,u=this.matrix;for(let e=0,t=i.length;e<t;e++){let t=i[e],r=t.time,a=t.value;u.fromArray(a).transpose(),u.decompose(d,h,c),s.push(r),n.push(d.x,d.y,d.z),l.push(h.x,h.y,h.z,h.w),o.push(c.x,c.y,c.z)}return n.length>0&&t.push(new r.RiT(a+".position",s,n)),l.length>0&&t.push(new r.MBL(a+".quaternion",s,l)),o.length>0&&t.push(new r.RiT(a+".scale",s,o)),t}transformAnimationData(e,t,i){let r,a,s,n=!0;for(a=0,s=e.length;a<s;a++)void 0===(r=e[a]).value[t]?r.value[t]=null:n=!1;if(!0===n)for(a=0,s=e.length;a<s;a++)(r=e[a]).value[t]=i;else this.createMissingKeyframes(e,t)}createMissingKeyframes(e,t){let i,r;for(let a=0,s=e.length;a<s;a++){let s=e[a];if(null===s.value[t]){if(i=this.getPrev(e,a,t),r=this.getNext(e,a,t),null===i){s.value[t]=r.value[t];continue}if(null===r){s.value[t]=i.value[t];continue}this.interpolate(s,i,r,t)}}}getPrev(e,t,i){for(;t>=0;){let r=e[t];if(null!==r.value[i])return r;t--}return null}getNext(e,t,i){for(;t<e.length;){let r=e[t];if(null!==r.value[i])return r;t++}return null}interpolate(e,t,i,r){if(i.time-t.time==0){e.value[r]=t.value[r];return}e.value[r]=(e.time-t.time)*(i.value[r]-t.value[r])/(i.time-t.time)+t.value[r]}buildAnimationClip(e){let t=[],i=e.name,a=e.end-e.start||-1,s=e.animations;for(let e=0,i=s.length;e<i;e++){let i=this.getAnimation(s[e]);for(let e=0,r=i.length;e<r;e++)t.push(i[e])}return new r.tz3(i,a,t)}getAnimationClip(e){return this.getBuild(this.library.clips[e],this.buildAnimationClip.bind(this))}buildController(e){let t={id:e.id},i=this.library.geometries[t.id];return void 0!==e.skin&&(t.skin=this.buildSkin(e.skin),i.sources.skinIndices=t.skin.indices,i.sources.skinWeights=t.skin.weights),t}buildSkin(e){let t,i,a,s={joints:[],indices:{array:[],stride:4},weights:{array:[],stride:4}},n=e.sources,l=e.vertexWeights,o=l.vcount,d=l.v,h=l.inputs.JOINT.offset,c=l.inputs.WEIGHT.offset,u=e.sources[e.joints.inputs.JOINT],p=e.sources[e.joints.inputs.INV_BIND_MATRIX],m=n[l.inputs.WEIGHT.id].array,f=0;for(t=0,a=o.length;t<a;t++){let e=o[t],r=[];for(i=0;i<e;i++){let e=d[f+h],t=m[d[f+c]];
1r.push({index:e,weight:t}),f+=2}for(r.sort(b),i=0;i<4;i++){let e=r[i];void 0!==e?(s.indices.array.push(e.index),s.weights.array.push(e.weight)):(s.indices.array.push(0),s.weights.array.push(0))}}for(e.bindShapeMatrix?s.bindMatrix=new r.kn4().fromArray(e.bindShapeMatrix).transpose():s.bindMatrix=new r.kn4().identity(),t=0,a=u.array.length;t<a;t++){let e=u.array[t],i=new r.kn4().fromArray(p.array,t*p.stride).transpose();s.joints.push({name:e,boneInverse:i})}return s;function b(e,t){return t.weight-e.weight}}getController(e){return this.getBuild(this.library.controllers[e],this.buildController.bind(this))}buildImage(e){return void 0!==e.build?e.build:e.init_from}getImage(e){let t=this.library.images[e];return void 0!==t?this.getBuild(t,this.buildImage.bind(this)):(console.warn("THREE.ColladaLoader: Couldn't find image with ID:",e),null)}buildEffect(e){return e}getEffect(e){return this.getBuild(this.library.effects[e],this.buildEffect.bind(this))}getTextureLoader(e){let t=e.slice((e.lastIndexOf(".")-1>>>0)+2);return"tga"===(t=t.toLowerCase())?this.tgaLoader:this.textureLoader}buildMaterial(e){let t,i=this.getEffect(e.url),a=i.profile.technique;switch(a.type){case"phong":case"blinn":t=new r.tXL;break;case"lambert":t=new r.G_z;break;default:t=new r.V9B}t.name=e.name||"";let s=this;function n(e,t=null){let a=i.profile.samplers[e.id],l=null;if(void 0!==a){let e=i.profile.surfaces[a.source];l=s.getImage(e.init_from)}else console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530)."),l=s.getImage(e.id);if(null===l)return console.warn("THREE.ColladaLoader: Couldn't create texture with ID:",e.id),null;{let i=s.getTextureLoader(l);if(void 0===i)return console.warn("THREE.ColladaLoader: Loader for texture %s not found.",l),null;{let a=i.load(l),n=e.extra;if(void 0!==n&&void 0!==n.technique&&!1===s.isEmpty(n.technique)){let e=n.technique;a.wrapS=e.wrapU?r.GJx:r.ghU,a.wrapT=e.wrapV?r.GJx:r.ghU,a.offset.set(e.offsetU||0,e.offsetV||0),a.repeat.set(e.repeatU||1,e.repeatV||1)}else a.wrapS=r.GJx,a.wrapT=r.GJx;
1return null!==t&&(a.colorSpace=t),a}}}let l=a.parameters;for(let e in l){let i=l[e];switch(e){case"diffuse":i.color&&t.color.fromArray(i.color),i.texture&&(t.map=n(i.texture,r.er$));break;case"specular":i.color&&t.specular&&t.specular.fromArray(i.color),i.texture&&(t.specularMap=n(i.texture));break;case"bump":i.texture&&(t.normalMap=n(i.texture));break;case"ambient":i.texture&&(t.lightMap=n(i.texture,r.er$));break;case"shininess":i.float&&t.shininess&&(t.shininess=i.float);break;case"emission":i.color&&t.emissive&&t.emissive.fromArray(i.color),i.texture&&(t.emissiveMap=n(i.texture,r.er$))}}r.ppV.colorSpaceToWorking(t.color,r.er$),t.specular&&r.ppV.colorSpaceToWorking(t.specular,r.er$),t.emissive&&r.ppV.colorSpaceToWorking(t.emissive,r.er$);let o=l.transparent,d=l.transparency;if(void 0===d&&o&&(d={float:1}),void 0===o&&d&&(o={opaque:"A_ONE",data:{color:[1,1,1,1]}}),o&&d)if(o.data.texture)t.transparent=!0;else{let e=o.data.color;switch(o.opaque){case"A_ONE":t.opacity=e[3]*d.float;break;case"RGB_ZERO":t.opacity=1-e[0]*d.float;break;case"A_ZERO":t.opacity=1-e[3]*d.float;break;case"RGB_ONE":t.opacity=e[0]*d.float;break;default:console.warn('THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.',o.opaque)}t.opacity<1&&(t.transparent=!0)}if(void 0!==a.extra&&void 0!==a.extra.technique){let e=a.extra.technique;for(let i in e){let a=e[i];switch(i){case"double_sided":t.side=1===a?r.$EB:r.hB5;break;case"bump":t.normalMap=n(a.texture),t.normalScale=new r.I9Y(1,1)}}}return t}getMaterial(e){return this.getBuild(this.library.materials[e],this.buildMaterial.bind(this))}buildCamera(e){let t;switch(e.optics.technique){case"perspective":t=new r.ubm(e.optics.parameters.yfov,e.optics.parameters.aspect_ratio,e.optics.parameters.znear,e.optics.parameters.zfar);break;case"orthographic":let i=e.optics.parameters.ymag,a=e.optics.parameters.xmag,s=e.optics.parameters.aspect_ratio;a=void 0===a?i*s:a,i=void 0===i?a/s:i,a*=.5,i*=.5,t=new r.qUd(-a,a,i,-i,e.optics.parameters.znear,e.optics.parameters.zfar);break;default:t=new r.ubm}return t.name=e.name||"",t}getCamera(e){let t=this.library.cameras[e];return void 0!==t?this.getBuild(t,this.buildCamera.bind(this)):(console.warn("THREE.ColladaLoader: Couldn't find camera with ID:",e),null)}buildLight(e){let t;switch(e.technique){case"directional":t=new r.ZyN;break;case"point":t=new r.HiM;break;case"spot":t=new r.nCl;break;case"ambient":t=new r.$p8}return e.parameters.color&&t.color.copy(e.parameters.color),e.parameters.distance&&(t.distance=e.parameters.distance),e.parameters.falloffAngle&&(t.angle=r.cj9.degToRad(e.parameters.falloffAngle)),t}getLight(e){let t=this.library.lights[e];return void 0!==t?this.getBuild(t,this.buildLight.bind(this)):(console.warn("THREE.ColladaLoader: Couldn't find light with ID:",e),null)}groupPrimitives(e){let t={};for(let i=0;i<e.length;i++){let r=e[i];void 0===t[r.type]&&(t[r.type]=[]),t[r.type].push(r)}return t}checkUVCoordinates(e){let t=0;for(let i=0,r=e.length;i<r;i++)!0===e[i].hasUV&&t++;t>0&&t<e.length&&(e.uvsNeedsFix=!0)}buildGeometry(e){let t={},i=e.sources,r=e.vertices,a=e.primitives;if(0===a.length)return{};let s=this.groupPrimitives(a);for(let e in s){let a=s[e];this.checkUVCoordinates(a),t[e]=this.buildGeometryType(a,i,r)}return t}buildGeometryType(e,t,i){let a={},s={array:[],stride:0},n={array:[],stride:0},l={array:[],stride:0},o={array:[],stride:0},d={array:[],stride:0},h=[],c=[],u=new r.LoY,p=[],m=0;for(let r=0;r<e.length;r++){let a=e[r],f=a.inputs,b=0;switch(a.type){case"lines":case"linestrips":b=2*a.count;break;case"triangles":b=3*a.count;break;case"polygons":case"polylist":for(let e=0;e<a.count;e++){let t=a.vcount[e];switch(t){case 3:b+=3;break;case 4:b+=6;break;default:b+=(t-2)*3}}break;default:console.warn("THREE.ColladaLoader: Unknown primitive type:",a.type)}for(let g in u.addGroup(m,b,r),m+=b,a.material&&p.push(a.material),f){let r=f[g];switch(g){case"VERTEX":for(let u in i){let p=i[u];switch(u){case"POSITION":let m=s.array.length;if(this.buildGeometryData(a,t[p],r.offset,s.array),s.stride=t[p].stride,t.skinWeights&&t.skinIndices&&(this.buildGeometryData(a,t.skinIndices,r.offset,h),this.buildGeometryData(a,t.skinWeights,r.offset,c)),!1===a.hasUV&&!0===e.uvsNeedsFix){let e=(s.array.length-m)/s.stride;for(let t=0;t<e;t++)l.array.push(0,0)}break;case"NORMAL":this.buildGeometryData(a,t[p],r.offset,n.array),n.stride=t[p].stride;break;case"COLOR":this.buildGeometryData(a,t[p],r.offset,d.array),d.stride=t[p].stride;break;case"TEXCOORD":this.buildGeometryData(a,t[p],r.offset,l.array),l.stride=t[p].stride;break;case"TEXCOORD1":this.buildGeometryData(a,t[p],r.offset,o.array),l.stride=t[p].stride;break;default:console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.',u)}}break;case"NORMAL":this.buildGeometryData(a,t[r.id],r.offset,n.array),n.stride=t[r.id].stride;break;case"COLOR":this.buildGeometryData(a,t[r.id],r.offset,d.array,!0),d.stride=t[r.id].stride;break;case"TEXCOORD":this.buildGeometryData(a,t[r.id],r.offset,l.array),l.stride=t[r.id].stride;break;case"TEXCOORD1":this.buildGeometryData(a,t[r.id],r.offset,o.array),o.stride=t[r.id].stride}}}return s.array.length>0&&u.setAttribute("position",new r.qtW(s.array,s.stride)),n.array.length>0&&u.setAttribute("normal",new r.qtW(n.array,n.stride)),d.array.length>0&&u.setAttribute("color",new r.qtW(d.array,d.stride)),l.array.length>0&&u.setAttribute("uv",new r.qtW(l.array,l.stride)),o.array.length>0&&u.setAttribute("uv1",new r.qtW(o.array,o.stride)),h.length>0&&u.setAttribute("skinIndex",new r.qtW(h,4)),c.length>0&&u.setAttribute("skinWeight",new r.qtW(c,4)),a.data=u,a.type=e[0].type,a.materialKeys=p,a}buildGeometryData(e,t,i,a,s=!1){let n=e.p,l=e.stride,o=e.vcount,d=this.tempColor;function h(e){let t=n[e+i]*u,l=t+u;for(;t<l;t++)a.push(c[t]);if(s){let e=a.length-u-1;d.setRGB(a[e+0],a[e+1],a[e+2],r.er$),a[e+0]=d.r,a[e+1]=d.g,a[e+2]=d.b}}let c=t.array,u=t.stride;if(void 0!==e.vcount){let e=0;for(let t=0,i=o.length;t<i;t++){let i=o[t];if(4===i){let t=e+0*l,i=e+ +l,r=e+2*l,a=e+3*l;h(t),h(i),h(a),h(i),h(r),h(a)}else if(3===i){let t=e+0*l,i=e+ +l,r=e+2*l;h(t),h(i),h(r)}else if(i>4){let t=[];for(let a=0;a<i;a++){let i=n[e+l*a]*u,s=c[i],o=c[i+1],d=c[i+2];t.push(new r.Pq0(s,o,d))}let a=new r.Pq0,s=new r.lMl;s.a=t[0],s.b=t[1],s.c=t[2],s.getNormal(a);let o=[];if(Math.abs(a.x)>Math.abs(a.y)&&Math.abs(a.x)>Math.abs(a.z))for(let e=0;e<i;e++)o.push(new r.I9Y(t[e].y,t[e].z));else if(Math.abs(a.y)>Math.abs(a.z))for(let e=0;e<i;e++)o.push(new r.I9Y(t[e].x,t[e].z));else for(let e=0;e<i;e++)o.push(new r.I9Y(t[e].x,t[e].y));let d=r.xJ6.isClockWise(o);!0===d&&o.reverse();let p=r.xJ6.triangulateShape(o,[]);for(let t=0;t<p.length;t++){let r,a,s,n=p[t];!1===d?(r=n[0],a=n[1],s=n[2]):(r=i-1-n[0],a=i-1-n[2],s=i-1-n[1]);let o=e+l*r,c=e+l*a,u=e+l*s;h(o),h(c),h(u)}}e+=l*i}}else for(let e=0,t=n.length;e<t;e+=l)h(e)}getGeometry(e){return this.getBuild(this.library.geometries[e],this.buildGeometry.bind(this))}buildKinematicsModel(e){return void 0!==e.build?e.build:e}getKinematicsModel(e){return this.getBuild(this.library.kinematicsModels[e],this.buildKinematicsModel.bind(this))}buildKinematicsScene(e){return void 0!==e.build?e.build:e}getKinematicsScene(e){return this.getBuild(this.library.kinematicsScenes[e],this.buildKinematicsScene.bind(this))}setupKinematics(){let e=Object.keys(this.library.kinematicsModels)[0],t=Object.keys(this.library.kinematicsScenes)[0],i=Object.keys(this.library.visualScenes)[0];if(void 0===e||void 0===t)return;let a=this.getKinematicsModel(e),s=this.getKinematicsScene(t),n=this.getVisualScene(i),l=s.bindJointAxis,o={},d=this.collada,h=this;for(let e=0,t=l.length;e<t;e++){let t=l[e],i=d.querySelector('[sid="'+t.target+'"]');if(i){let e=i.parentElement;!function(e,t){let i=t.getAttribute("name"),r=a.joints[e],s=h.buildTransformList(t);n.traverse(function(t){t.name===i&&(o[e]={object:t,transforms:s,joint:r,position:r.zeroPosition})})}(t.jointIndex,e)}}let c=new r.kn4,u=this.matrix;this.kinematics={joints:a&&a.joints,getJointValue:function(e){let t=o[e];if(t)return t.position;console.warn("THREE.ColladaLoader: Joint "+e+" doesn't exist.")},setJointValue:function(e,t){let i=o[e];if(i){let a=i.joint;if(t>a.limits.max||t<a.limits.min)console.warn("THREE.ColladaLoader: Joint "+e+" value "+t+" outside of limits (min: "+a.limits.min+", max: "+a.limits.max+").");else if(a.static)console.warn("THREE.ColladaLoader: Joint "+e+" is static.");else{let s=i.object,n=a.axis,l=i.transforms;u.identity();for(let i=0;i<l.length;i++){let s=l[i];if(s.sid&&-1!==s.sid.indexOf(e))switch(a.type){case"revolute":u.multiply(c.makeRotationAxis(n,r.cj9.degToRad(t)));break;case"prismatic":u.multiply(c.makeTranslation(n.x*t,n.y*t,n.z*t));break;default:console.warn("THREE.ColladaLoader: Unknown joint type: "+a.type)}else switch(s.type){case"matrix":u.multiply(s.obj);break;case"translate":u.multiply(c.makeTranslation(s.obj.x,s.obj.y,s.obj.z));break;case"scale":u.scale(s.obj);break;case"rotate":u.multiply(c.makeRotationAxis(s.obj,s.angle))}}s.matrix.copy(u),s.matrix.decompose(s.position,s.quaternion,s.scale),o[e].position=t}}else console.warn("THREE.ColladaLoader: Joint "+e+" does not exist.")}}}buildTransformList(e){let t=[],i=this.collada.querySelector('[id="'+e.id+'"]');for(let e=0;e<i.childNodes.length;e++){let a,s,l=i.childNodes[e];
1if(1===l.nodeType)switch(l.nodeName){case"matrix":a=n(l.textContent);let o=new r.kn4().fromArray(a).transpose();t.push({sid:l.getAttribute("sid"),type:l.nodeName,obj:o});break;case"translate":case"scale":a=n(l.textContent),s=new r.Pq0().fromArray(a),t.push({sid:l.getAttribute("sid"),type:l.nodeName,obj:s});break;case"rotate":a=n(l.textContent),s=new r.Pq0().fromArray(a);let d=r.cj9.degToRad(a[3]);t.push({sid:l.getAttribute("sid"),type:l.nodeName,obj:s,angle:d})}}return t}buildSkeleton(e,t){let i,a,s,n=[],l=[];for(i=0;i<e.length;i++){let r,a=e[i];if(this.hasNode(a))r=this.getNode(a),this.buildBoneHierarchy(r,t,n);else if(this.hasVisualScene(a)){let e=this.library.visualScenes[a].children;for(let i=0;i<e.length;i++){let r=e[i];if("JOINT"===r.type){let e=this.getNode(r.id);this.buildBoneHierarchy(e,t,n)}}}else console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:",a)}for(i=0;i<t.length;i++)for(a=0;a<n.length;a++)if((s=n[a]).bone.name===t[i].name){l[i]=s,s.processed=!0;break}for(i=0;i<n.length;i++)!1===(s=n[i]).processed&&(l.push(s),s.processed=!0);let o=[],d=[];for(i=0;i<l.length;i++)s=l[i],o.push(s.bone),d.push(s.boneInverse);return new r.EAD(o,d)}buildBoneHierarchy(e,t,i){e.traverse(function(e){if(!0===e.isBone){let a;for(let i=0;i<t.length;i++){let r=t[i];if(r.name===e.name){a=r.boneInverse;break}}void 0===a&&(a=new r.kn4),i.push({bone:e,boneInverse:a,processed:!1})}})}buildNode(e){let t,i=[],a=e.matrix,s=e.nodes,n=e.type,l=e.instanceCameras,o=e.instanceControllers,d=e.instanceLights,h=e.instanceGeometries,c=e.instanceNodes;for(let e=0,t=s.length;e<t;e++)i.push(this.getNode(s[e]));for(let e=0,t=l.length;e<t;e++){let t=this.getCamera(l[e]);null!==t&&i.push(t.clone())}for(let e=0,t=o.length;e<t;e++){let t=o[e],r=this.getController(t.id),a=this.getGeometry(r.id),s=this.buildObjects(a,t.materials),n=t.skeletons,l=r.skin.joints,d=this.buildSkeleton(n,l);for(let e=0,t=s.length;e<t;e++){let t=s[e];t.isSkinnedMesh&&(t.bind(d,r.skin.bindMatrix),t.normalizeSkinWeights()),i.push(t)}}for(let e=0,t=d.length;e<t;e++){let t=this.getLight(d[e]);null!==t&&i.push(t.clone())}for(let e=0,t=h.length;e<t;e++){let t=h[e],r=this.getGeometry(t.id),a=this.buildObjects(r,t.materials);for(let e=0,t=a.length;e<t;e++)i.push(a[e])}for(let e=0,t=c.length;e<t;e++)i.push(this.getNode(c[e]).clone());if(0===s.length&&1===i.length)t=i[0];else{t="JOINT"===n?new r.$Kf:new r.YJl;for(let e=0;e<i.length;e++)t.add(i[e])}return(t.name="JOINT"===n?e.sid:e.name,"JOINT"!==n&&this.hasPivotTransforms(e))?this.wrapWithTransformHierarchy(t,e):(t.matrix.copy(a),t.matrix.decompose(t.position,t.quaternion,t.scale),t)}wrapWithTransformHierarchy(e,t){let i=t.id;this.transformNodes[i]={};let a=t.transformOrder,s=t.transformData,n=new r.YJl;n.name=t.name;let l=n;for(let e=0;e<a.length;e++){let n=a[e],o=s[n],d=new r.YJl;switch(d.name=t.name+"_"+n,o.type){case"translate":d.position.set(o.x,o.y,o.z);break;case"rotate":{let e=new r.Pq0(o.axis[0],o.axis[1],o.axis[2]),t=r.cj9.degToRad(o.angle);d.quaternion.setFromAxisAngle(e,t),d.userData.rotationAxis=e;break}case"scale":d.scale.set(o.x,o.y,o.z);break;case"matrix":new r.kn4().fromArray(o.array).transpose().decompose(d.position,d.quaternion,d.scale)}this.transformNodes[i][n]=d,l.add(d),l=d}return l.add(e),n}resolveMaterialBinding(e,t){let i=[];for(let r=0,a=e.length;r<a;r++){let a=t[e[r]];void 0===a?(console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.",e[r]),i.push(this.fallbackMaterial)):i.push(this.getMaterial(a))}return i}get fallbackMaterial(){return void 0===this._fallbackMaterial&&(this._fallbackMaterial=new r.V9B({name:r.aHM.DEFAULT_MATERIAL_NAME,color:0xff00ff})),this._fallbackMaterial}buildObjects(e,t){let i=[];for(let a in e){let s,n=e[a],l=this.resolveMaterialBinding(n.materialKeys,t);if(0===l.length&&("lines"===a||"linestrips"===a?l.push(new r.mrM):l.push(new r.tXL)),"lines"===a||"linestrips"===a)for(let e=0,t=l.length;e<t;e++){let t=l[e];if(!0===t.isMeshPhongMaterial||!0===t.isMeshLambertMaterial){let i=new r.mrM;i.color.copy(t.color),i.opacity=t.opacity,i.transparent=t.transparent,l[e]=i}}let o=void 0!==n.data.attributes.skinIndex,d=1===l.length?l[0]:l;switch(a){case"lines":s=new r.DXC(n.data,d);break;case"linestrips":s=new r.N1A(n.data,d);break;case"triangles":case"polygons":case"polylist":s=o?new r.I46(n.data,d):new r.eaF(n.data,d)}i.push(s)}return i}hasNode(e){return void 0!==this.library.nodes[e]}getNode(e){return this.getBuild(this.library.nodes[e],this.buildNode.bind(this))}buildVisualScene(e){let t=new r.YJl;t.name=e.name;let i=e.children;for(let e=0;e<i.length;e++){let r=i[e];t.add(this.getNode(r.id))}return t}hasVisualScene(e){return void 0!==this.library.visualScenes[e]}getVisualScene(e){return this.getBuild(this.library.visualScenes[e],this.buildVisualScene.bind(this))}parseScene(e){let t=s(e,"instance_visual_scene")[0];return this.getVisualScene(this.parseId(t.getAttribute("url")))}parseId(e){return e.substring(1)}setupAnimations(){let e=this.library.clips;if(!0===this.isEmpty(e)){if(!1===this.isEmpty(this.library.animations)){let e=[];for(let t in this.library.animations){let i=this.getAnimation(t);for(let t=0,r=i.length;t<r;t++)e.push(i[t])}this.buildDeferredPivotAnimationTracks(e),this.animations.push(new r.tz3("default",-1,e))}}else for(let t in e)this.animations.push(this.getAnimationClip(t))}buildDeferredPivotAnimationTracks(e){for(let t in this.deferredPivotAnimations){let i=this.library.nodes[t];
1if(!i)continue;let r=this.deferredPivotAnimations[t];this.buildTransformHierarchyTracks(t,r,i,e)}}buildTransformHierarchyTracks(e,t,i,r){let a=this.transformNodes[e];if(!a)return void console.warn("THREE.ColladaLoader: Transform hierarchy not found for node:",e);for(let e in t){let s=a[e];if(!s)continue;let n=i.transforms[e],l=i.transformData[e],o=t[e];switch(n){case"translate":this.buildHierarchyTranslateTrack(s,o,l,r);break;case"rotate":this.buildHierarchyRotateTrack(s,o,l,r);break;case"scale":this.buildHierarchyScaleTrack(s,o,l,r)}}}buildHierarchyTranslateTrack(e,t,i,a){if(t.default&&3===t.default.stride){let i=t.default,s=new r.RiT(e.uuid+".position",Array.from(i.times),Array.from(i.values)),n=this.getInterpolationInfo(t);this.applyInterpolation(s,n,t),a.push(s);return}let s=this.getTimesForAllAxes(t);if(0===s.length)return;let n=[],l=this.getInterpolationInfo(t);for(let e=0;e<s.length;e++){let r=s[e],a=this.getValueAtTime(t.X,r,i.x),l=this.getValueAtTime(t.Y,r,i.y),o=this.getValueAtTime(t.Z,r,i.z);n.push(a,l,o)}let o=new r.RiT(e.uuid+".position",s,n);this.applyInterpolation(o,l),a.push(o)}buildHierarchyRotateTrack(e,t,i,a){let s=t.ANGLE||t.default;if(!s)return;let n=Array.from(s.times);if(0===n.length)return;let l=e.userData.rotationAxis||new r.Pq0(i.axis[0],i.axis[1],i.axis[2]),o=new r.PTz,d=new r.PTz,h=[],c=this.getInterpolationInfo(t);for(let e=0;e<n.length;e++){let t=n[e],a=this.getValueAtTime(s,t,i.angle),c=r.cj9.degToRad(a);o.setFromAxisAngle(l,c),e>0&&0>d.dot(o)&&(o.x=-o.x,o.y=-o.y,o.z=-o.z,o.w=-o.w),d.copy(o),h.push(o.x,o.y,o.z,o.w)}let u=new r.MBL(e.uuid+".quaternion",n,h);this.applyInterpolation(u,c),a.push(u)}buildHierarchyScaleTrack(e,t,i,a){if(t.default&&3===t.default.stride){let i=t.default,s=new r.RiT(e.uuid+".scale",Array.from(i.times),Array.from(i.values)),n=this.getInterpolationInfo(t);this.applyInterpolation(s,n,t),a.push(s);return}let s=this.getTimesForAllAxes(t);if(0===s.length)return;let n=[],l=this.getInterpolationInfo(t);for(let e=0;e<s.length;e++){let r=s[e],a=this.getValueAtTime(t.X,r,i.x),l=this.getValueAtTime(t.Y,r,i.y),o=this.getValueAtTime(t.Z,r,i.z);n.push(a,l,o)}let o=new r.RiT(e.uuid+".scale",s,n);this.applyInterpolation(o,l),a.push(o)}}class c extends r.aHM{load(e,t,i,a){let s=this,n=""===s.path?r.r6x.extractUrlBase(e):s.path,l=new r.Y9S(s.manager);l.setPath(s.path),l.setRequestHeader(s.requestHeader),l.setWithCredentials(s.withCredentials),l.load(e,function(i){try{t(s.parse(i,n))}catch(t){a?a(t):console.error(t),s.manager.itemError(e)}},i,a)}parse(e,t){let i;if(0===e.length)return{scene:new r.Z58};let s=new d().parse(e);if(null===s)return null;let{library:n,asset:l,collada:o}=s,c=new r.Tap(this.manager);c.setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin),a&&(i=new a(this.manager)).setPath(this.resourcePath||t);let{scene:u,animations:p,kinematics:m}=new h(n,o,c,i).compose();return u.animations=p,"Z_UP"===l.upAxis&&(console.warn("THREE.ColladaLoader: You are loading an asset with a Z-UP coordinate system. The loader just rotates the asset to transform it into Y-UP. The vertex data are not converted, see #24289."),u.rotation.set(-Math.PI/2,0,0)),u.scale.multiplyScalar(l.unit),{get animations(){return console.warn("THREE.ColladaLoader: Please access animations over scene.animations now."),p},kinematics:m,library:n,scene:u}}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.