1/*! © 2011â2026 Georg Luif · georgluif.at · All rights reserved. */ 2import*as t from"./three.module.min.js";import{loadModel as u}from"./model-loader.js";const i=new Map;function l(e){if(Array.isArray(e))return e.map(l);let r=i.get(e);return r||(r=new t.MeshBasicMaterial({map:e.map||null,color:e.color?e.color.clone():new t.Color(16777215),transparent:!!e.transparent,alphaTest:e.alphaTest||0,side:e.side}),i.set(e,r)),r}export function buildHatVisual(e){const r=new t.Group;r.name="hat:"+e.id;const o=new t.Group;o.position.fromArray(e.pos),o.scale.setScalar(e.scale),r.add(o);let s=!1;const c=u(e.model).then(function(f){if(s)return;const a=f.scene.clone(!0);a.traverse(function(n){n.isMesh&&(n.material=l(n.material),n.castShadow=!0,n.frustumCulled=!1,n.raycast=function(){})}),o.add(a)}).catch(function(){});return{object3d:r,hatId:e.id,ready:c,dispose:function(){s=!0,r.parent&&r.parent.remove(r)}}}
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.