@recast-navigation/three 0.16.2 → 0.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("three"),t=require("@recast-navigation/core");class i extends e.Object3D{agentMeshes=new Map;recastCrowd;agentMaterial;constructor({crowd:t,agentMaterial:i}){super(),this.recastCrowd=t,this.agentMaterial=i??new e.MeshBasicMaterial({color:"red"}),this.update()}update(){const t=this.recastCrowd.getAgents(),i=new Set(this.agentMeshes.keys());for(const a of t){i.delete(a.agentIndex);const t=a.position(),r=a.velocity();let s=this.agentMeshes.get(a.agentIndex);void 0===s?(s=this.createAgentMesh(a),this.add(s),this.agentMeshes.set(a.agentIndex,s)):this.updateAgentGeometry(s,a),s.position.set(t.x,t.y+a.height/2,t.z),s.lookAt((new e.Vector3).copy(s.position).add(r))}for(const e of i){const t=this.agentMeshes.get(e);t&&(this.remove(t),this.agentMeshes.delete(e))}}createAgentMesh(t){const i=new e.Mesh;return i.material=this.agentMaterial,this.updateAgentGeometry(i,t),i.userData={radius:t.radius,height:t.height},i}updateAgentGeometry(t,i){if(t.userData.radius!==i.radius||t.userData.height!==i.height){const a=new e.CylinderGeometry(i.radius,i.radius,i.height);t.geometry.dispose(),t.geometry=a,t.userData.radius=i.radius,t.userData.height=i.height}}}const a=new e.Matrix4;class r extends e.Object3D{heightfields;highlightWalkable;defaultColor;walkableColor;material;constructor({heightfields:t,highlightWalkable:i=!1,material:a=new e.MeshBasicMaterial,defaultColor:r="blue",walkableColor:s="green"}){super(),this.heightfields=t,this.highlightWalkable=i,this.material=a,this.defaultColor=new e.Color(r),this.walkableColor=new e.Color(s),this.update()}update(){this.clear();for(const t of this.heightfields){const i=t.bmin(),r=t.cs(),s=t.ch(),l=t.width(),o=t.height(),n=[];for(let e=0;e<o;++e)for(let a=0;a<l;++a){const o=i.x+a*r,h=i.z+e*r;let c=t.spans(a+e*l);for(;c;){const e=o,t=i.y+c.smin()*s,a=h,l=o+r,d=i.y+c.smax()*s,g=h+r;n.push({position:[(l+e)/2,(d+t)/2,(g+a)/2],walkable:this.highlightWalkable&&0!==c.area()}),c=c.next()}}const h=new e.BoxGeometry(r,s,r),c=new e.InstancedMesh(h,this.material,n.length);c.instanceMatrix.setUsage(e.DynamicDrawUsage);for(let e=0;e<n.length;e++){const{position:t,walkable:i}=n[e];c.setMatrixAt(e,a.setPosition(...t)),c.setColorAt(e,i?this.walkableColor:this.defaultColor)}c.instanceMatrix.needsUpdate=!0,c.instanceColor&&(c.instanceColor.needsUpdate=!0),this.add(c)}}}class s extends e.Object3D{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:t,navMeshMaterial:i}){super(),this.navMesh=t,this.geometry=new e.BufferGeometry,this.navMeshMaterial=i||new e.MeshBasicMaterial({color:"orange",transparent:!0,opacity:.7}),this.update(),this.mesh=new e.Mesh(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[t,i]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new e.BufferAttribute(Float32Array.from(t),3)),this.geometry.setIndex(new e.BufferAttribute(Uint32Array.from(i),1)),this.geometry.computeVertexNormals()}}class l extends e.Object3D{offMeshConnections;entryCircleMaterial;exitCircleMaterial;lineMaterial;constructor({offMeshConnections:t,entryCircleMaterial:i,exitCircleMaterial:a,lineMaterial:r}){super(),this.offMeshConnections=t??[],this.entryCircleMaterial=i??new e.MeshBasicMaterial({color:"green"}),this.exitCircleMaterial=a??new e.MeshBasicMaterial({color:"blue"}),this.lineMaterial=r??new e.LineBasicMaterial({color:"red"}),this.update()}update(){this.clear();for(const t of this.offMeshConnections){const i=new e.CircleGeometry(t.radius,16),a=new e.Mesh(i,this.entryCircleMaterial);a.position.copy(t.startPosition),a.position.y+=.001,a.rotation.x=-Math.PI/2,this.add(a);const r=new e.Mesh(i,t.bidirectional?this.entryCircleMaterial:this.exitCircleMaterial);r.position.copy(t.endPosition),r.position.y+=.001,r.rotation.x=-Math.PI/2,this.add(r);const s=(new e.Vector3).copy(t.startPosition),l=(new e.Vector3).copy(t.endPosition),o=(new e.Vector3).addVectors(s,l).multiplyScalar(.5);o.y*=1.2;const n=new e.CatmullRomCurve3([s,o,l]).getPoints(50),h=(new e.BufferGeometry).setFromPoints(n),c=new e.Line(h,this.lineMaterial);this.add(c)}}}class o extends e.Object3D{tileCache;obstacleMeshes=new Map;obstacleMaterial;constructor({tileCache:t,obstacleMaterial:i}){super(),this.tileCache=t,this.obstacleMaterial=i||new e.MeshBasicMaterial({color:"red",wireframe:!0,wireframeLinewidth:2}),this.update()}update(){const t=new Set(this.obstacleMeshes.keys());for(const[,i]of this.tileCache.obstacles){const a=this.obstacleMeshes.get(i);if(t.delete(i),!a){const{position:t}=i,a=new e.Mesh(void 0,this.obstacleMaterial);if(a.position.copy(t),"box"===i.type){const{extent:t,angle:r}=i;a.geometry=new e.BoxGeometry(2*t.x,2*t.y,2*t.z),a.rotation.y=r}else{if("cylinder"!==i.type)throw new Error(`Unknown obstacle type: ${i}`);{const{radius:t,height:r}=i;a.geometry=new e.CylinderGeometry(t,t,r,16),a.position.y+=r/2}}this.add(a),this.obstacleMeshes.set(i,a)}}for(const e of t){const t=this.obstacleMeshes.get(e);t&&(this.remove(t),this.obstacleMeshes.delete(e))}}}const n=(e,i)=>{const a={x:1/0,y:1/0,z:1/0},r={x:-1/0,y:-1/0,z:-1/0};for(let t=0;t<i.length;t++){const s=i[t],l=e[3*s],o=e[3*s+1],n=e[3*s+2];a.x=Math.min(a.x,l),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),r.x=Math.max(r.x,l),r.y=Math.max(r.y,o),r.z=Math.max(r.z,n)}return{bbMin:t.vec3.toArray(a),bbMax:t.vec3.toArray(r)}},h=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},c=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),d={...t.recastConfigDefaults},g={...t.recastConfigDefaults,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},u=(e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new t.TileCache,d=new t.NavMesh,u=()=>{if(!r)for(let e=0;e<l.tileIntermediates.length;e++){const i=l.tileIntermediates[e];i.heightfield&&(t.freeHeightfield(i.heightfield),i.heightfield=void 0),i.compactHeightfield&&(t.freeCompactHeightfield(i.compactHeightfield),i.compactHeightfield=void 0),i.heightfieldLayerSet&&(t.freeHeightfieldLayerSet(i.heightfieldLayerSet),i.heightfieldLayerSet=void 0)}},f=e=>(u(),o.destroy(),d.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:l,error:e}),m=e,b=i.length,M=new t.Arrays.VertsArray;M.copy(m,m.length);const y=i,w=i.length/3,p=new t.Arrays.TrisArray;p.copy(y,y.length);const{bbMin:C,bbMax:x}=n(e,i),{expectedLayersPerTile:S,maxObstacles:R,...A}={...g,...a},k=t.createRcConfig(A),v=t.calcGridSize(C,x,k.cs);k.width=v.width,k.height=v.height,k.minRegionArea=k.minRegionArea*k.minRegionArea,k.mergeRegionArea=k.mergeRegionArea*k.mergeRegionArea,k.detailSampleDist=k.detailSampleDist<.9?0:k.cs*k.detailSampleDist,k.detailSampleMaxError=k.ch*k.detailSampleMaxError;const H=Math.floor(k.tileSize),T=Math.floor((k.width+H-1)/H),z=Math.floor((k.height+H-1)/H);k.borderSize=k.walkableRadius+3,k.width=k.tileSize+2*k.borderSize,k.height=k.tileSize+2*k.borderSize;const _=t.DetourTileCacheParams.create({orig:C,cs:k.cs,ch:k.ch,width:k.tileSize,height:k.tileSize,walkableHeight:k.walkableHeight,walkableRadius:k.walkableRadius,walkableClimb:k.walkableClimb,maxSimplificationError:k.maxSimplificationError,maxTiles:T*z*S,maxObstacles:R}),D=new t.Raw.RecastLinearAllocator(32e3),L=new t.Raw.RecastFastLZCompressor,P=a.tileCacheMeshProcess??new t.TileCacheMeshProcess(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(_,D,L,P))return f("Failed to initialize tile cache");const E=t.vec3.fromArray(C);let F=Math.min(Math.floor(h(c(T*z*S))),14);F>14&&(F=14);const O=1<<F,I=1<<22-F,W=t.NavMeshParams.create({orig:E,tileWidth:k.tileSize*k.cs,tileHeight:k.tileSize*k.cs,maxTiles:O,maxPolys:I});if(!d.initTiled(W))return f("Failed to initialize tiled navmesh");const G=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=G,!G.init(M,p,w,256))return f("Failed to build chunky triangle mesh");const N=(e,i)=>{const a={tileX:e,tileY:i},o=k.tileSize*k.cs,n=t.cloneRcConfig(k),h=[C[0]+e*o,C[1],C[2]+i*o],c=[C[0]+(e+1)*o,x[1],C[2]+(i+1)*o];h[0]-=n.borderSize*n.cs,h[2]-=n.borderSize*n.cs,c[0]+=n.borderSize*n.cs,c[2]+=n.borderSize*n.cs,n.set_bmin(0,h[0]),n.set_bmin(1,h[1]),n.set_bmin(2,h[2]),n.set_bmax(0,c[0]),n.set_bmax(1,c[1]),n.set_bmax(2,c[2]);const d=t.allocHeightfield();if(a.heightfield=d,!t.createHeightfield(s,d,n.width,n.height,h,c,n.cs,n.ch))return{n:0};const g=[h[0],h[2]],u=[c[0],c[2]],f=new t.Arrays.ChunkIdsArray;f.resize(512);const m=G.getChunksOverlappingRect(g,u,f,512);if(0===m)return{n:0};for(let e=0;e<m;++e){const i=f.get_data(e),a=G.nodes(i).n,r=G.getNodeTris(i),l=new t.Arrays.TriAreasArray;l.resize(a),t.markWalkableTriangles(s,n.walkableSlopeAngle,M,b,r,a,l);const o=t.rasterizeTriangles(s,M,b,r,l,a,d,n.walkableClimb);if(l.free(),!o)return{n:0}}t.filterLowHangingWalkableObstacles(s,k.walkableClimb,d),t.filterLedgeSpans(s,k.walkableHeight,k.walkableClimb,d),t.filterWalkableLowHeightSpans(s,k.walkableHeight,d);const y=t.allocCompactHeightfield();if(!t.buildCompactHeightfield(s,k.walkableHeight,k.walkableClimb,d,y))return{n:0};if(r||(t.freeHeightfield(a.heightfield),a.heightfield=void 0),!t.erodeWalkableArea(s,k.walkableRadius,y))return{n:0};const w=t.allocHeightfieldLayerSet();if(!t.buildHeightfieldLayers(s,y,k.borderSize,k.walkableHeight,w))return{n:0};r||(t.freeCompactHeightfield(y),a.compactHeightfield=void 0);const p=[];for(let a=0;a<w.nlayers();a++){const r=new t.Arrays.TileCacheData,s=w.layers(a),l=new t.Raw.dtTileCacheLayerHeader;l.magic=t.Raw.Detour.TILECACHE_MAGIC,l.version=t.Raw.Detour.TILECACHE_VERSION,l.tx=e,l.ty=i,l.tlayer=a;const o=s.bmin(),n=s.bmax();l.set_bmin(0,o.x),l.set_bmin(1,o.y),l.set_bmin(2,o.z),l.set_bmax(0,n.x),l.set_bmax(1,n.y),l.set_bmax(2,n.z),l.width=s.width(),l.height=s.height(),l.minx=s.minx(),l.maxx=s.maxx(),l.miny=s.miny(),l.maxy=s.maxy(),l.hmin=s.hmin(),l.hmax=s.hmax();const h=t.getHeightfieldLayerHeights(s),c=t.getHeightfieldLayerAreas(s),d=t.getHeightfieldLayerCons(s),g=t.buildTileCacheLayer(L,l,h,c,d,r);if(t.Raw.Detour.statusFailed(g))return{n:0};p.push(r)}return r||(t.freeHeightfieldLayerSet(w),a.heightfieldLayerSet=void 0),l.tileIntermediates.push(a),{n:p.length,tiles:p}};for(let e=0;e<z;++e)for(let i=0;i<T;++i){const{n:a,tiles:r}=N(i,e);if(a>0&&r)for(let l=0;l<a;l++){const a=r[l],n=o.addTile(a);t.Raw.Detour.statusFailed(n.status)&&s.log(t.Raw.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${i}, ty: ${e}`)}}for(let e=0;e<z;e++)for(let i=0;i<T;i++){const a=o.buildNavMeshTilesAt(i,e,d);if(t.Raw.Detour.statusFailed(a))return f(`Failed to build nav mesh tiles at ${i}, ${e}`)}return u(),{success:!0,tileCache:o,navMesh:d,intermediates:l}},f={...t.recastConfigDefaults},m=new e.Vector3,b=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i;const r=i.geometry.getIndex()?.array;if(!r){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],r={};let s=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,l=e.geometry.getIndex().array;for(let o=0;o<l.length;o++){const n=3*l[o],h=m.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=r[c];d||(r[c]=d=s,i.push(h.x,h.y,h.z),s++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]};exports.CrowdHelper=i,exports.HeightfieldHelper=r,exports.NavMeshHelper=s,exports.OffMeshConnectionsHelper=l,exports.TileCacheHelper=o,exports.getPositionsAndIndices=b,exports.threeToSoloNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"solo",buildContext:s},o=new t.NavMesh,h=e=>(r||(l.heightfield&&(t.freeHeightfield(l.heightfield),l.heightfield=void 0),l.compactHeightfield&&(t.freeCompactHeightfield(l.compactHeightfield),l.compactHeightfield=void 0),l.contourSet&&(t.freeContourSet(l.contourSet),l.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:l,error:e}),c=e,g=i.length,u=new t.Arrays.VertsArray;u.copy(c,c.length);const f=i,m=i.length/3,b=new t.Arrays.TrisArray;b.copy(f,f.length);const{bbMin:M,bbMax:y}=n(e,i),w=t.createRcConfig({...d,...a});w.minRegionArea=w.minRegionArea*w.minRegionArea,w.mergeRegionArea=w.mergeRegionArea*w.mergeRegionArea,w.detailSampleDist=w.detailSampleDist<.9?0:w.cs*w.detailSampleDist,w.detailSampleMaxError=w.ch*w.detailSampleMaxError;const p=t.Raw.Recast.calcGridSize(M,y,w.cs);w.width=p.width,w.height=p.height;const C=t.allocHeightfield();if(l.heightfield=C,!t.createHeightfield(s,C,w.width,w.height,M,y,w.cs,w.ch))return h("Could not create heightfield");const x=new t.Arrays.TriAreasArray;if(x.resize(m),t.markWalkableTriangles(s,w.walkableSlopeAngle,u,g,b,m,x),!t.rasterizeTriangles(s,u,g,b,x,m,C,w.walkableClimb))return h("Could not rasterize triangles");x.free(),t.filterLowHangingWalkableObstacles(s,w.walkableClimb,C),t.filterLedgeSpans(s,w.walkableHeight,w.walkableClimb,C),t.filterWalkableLowHeightSpans(s,w.walkableHeight,C);const S=t.allocCompactHeightfield();if(l.compactHeightfield=S,!t.buildCompactHeightfield(s,w.walkableHeight,w.walkableClimb,C,S))return h("Failed to build compact data");if(r||(t.freeHeightfield(C),l.heightfield=void 0),!t.erodeWalkableArea(s,w.walkableRadius,S))return h("Failed to erode walkable area");if(!t.buildDistanceField(s,S))return h("Failed to build distance field");if(!t.buildRegions(s,S,w.borderSize,w.minRegionArea,w.mergeRegionArea))return h("Failed to build regions");const R=t.allocContourSet();if(l.contourSet=R,!t.buildContours(s,S,w.maxSimplificationError,w.maxEdgeLen,R,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const A=t.allocPolyMesh();if(!t.buildPolyMesh(s,R,w.maxVertsPerPoly,A))return h("Failed to triangulate contours");const k=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,A,S,w.detailSampleDist,w.detailSampleMaxError,k))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(S),l.compactHeightfield=void 0,t.freeContourSet(R),l.contourSet=void 0);for(let e=0;e<A.npolys();e++)A.areas(e)==t.Raw.Recast.WALKABLE_AREA&&A.setAreas(e,0),0==A.areas(e)&&A.setFlags(e,1);const v=new t.NavMeshCreateParams;v.setPolyMeshCreateParams(A),v.setPolyMeshDetailCreateParams(k),v.setWalkableHeight(w.walkableHeight),v.setWalkableRadius(w.walkableRadius),v.setWalkableClimb(w.walkableClimb),v.setCellSize(w.cs),v.setCellHeight(w.ch),v.setBuildBvTree(!0),a.offMeshConnections&&v.setOffMeshConnections(a.offMeshConnections);const H=t.createNavMeshData(v);if(!H.success)return h("Failed to create Detour navmesh data");const{navMeshData:T}=H;return o.initSolo(T)?{success:!0,navMesh:o,intermediates:l}:h("Failed to create Detour navmesh")})(r,s,i,a)},exports.threeToTileCache=(e,t={},i=!1)=>{const[a,r]=b(e);return u(a,r,t,i)},exports.threeToTiledNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new t.NavMesh,d=()=>{if(!r){for(let e=0;e<l.tileIntermediates.length;e++){const i=l.tileIntermediates[e];i.compactHeightfield&&t.freeCompactHeightfield(i.compactHeightfield),i.heightfield&&t.freeHeightfield(i.heightfield),i.contourSet&&t.freeContourSet(i.contourSet)}l.chunkyTriMesh&&(l.chunkyTriMesh=void 0)}},g=e=>(d(),o.destroy(),{success:!1,navMesh:void 0,intermediates:l,error:e}),u=t.createRcConfig({...f,...a}),{bbMin:m,bbMax:b}=n(e,i),M=t.calcGridSize(m,b,u.cs);u.width=M.width,u.height=M.height,u.minRegionArea=u.minRegionArea*u.minRegionArea,u.mergeRegionArea=u.mergeRegionArea*u.mergeRegionArea,u.tileSize=Math.floor(u.tileSize),u.borderSize=u.walkableRadius+3,u.width=u.tileSize+2*u.borderSize,u.height=u.tileSize+2*u.borderSize,u.detailSampleDist=u.detailSampleDist<.9?0:u.cs*u.detailSampleDist,u.detailSampleMaxError=u.ch*u.detailSampleMaxError;const y=Math.floor(u.tileSize),w=Math.floor((M.width+y-1)/y),p=Math.floor((M.height+y-1)/y),C=u.tileSize*u.cs,x=e,S=i.length,R=new t.Arrays.VertsArray;R.copy(x,x.length);const A=i,k=i.length/3,v=new t.Arrays.TrisArray;v.copy(A,A.length);const H=t.vec3.fromArray(m);let T=Math.min(Math.floor(h(c(w*p))),14);T>14&&(T=14);const z=1<<T,_=1<<22-T,D=t.NavMeshParams.create({orig:H,tileWidth:u.tileSize*u.cs,tileHeight:u.tileSize*u.cs,maxTiles:z,maxPolys:_});if(!o.initTiled(D))return g("Could not init nav mesh for tiled use");const L=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=L,!L.init(R,v,k,256))return g("Failed to build chunky triangle mesh");const P=(e,i,o,n)=>{const h=e=>(s.log(t.Raw.Module.RC_LOG_ERROR,e),{success:!1,error:e}),c={tileX:e,tileY:i};l.tileIntermediates.push(c);const d=t.cloneRcConfig(u),g=[...o],f=[...n];g[0]-=d.borderSize*d.cs,g[2]-=d.borderSize*d.cs,f[0]+=d.borderSize*d.cs,f[2]+=d.borderSize*d.cs,d.set_bmin(0,g[0]),d.set_bmin(1,g[1]),d.set_bmin(2,g[2]),d.set_bmax(0,f[0]),d.set_bmax(1,f[1]),d.set_bmax(2,f[2]),s.resetTimers(),s.startTimer(t.Raw.Module.RC_TIMER_TOTAL),s.log(t.Raw.Module.RC_LOG_PROGRESS,`Building tile ${l.tileIntermediates.length} at x: ${e}, y: ${i}`),s.log(t.Raw.Module.RC_LOG_PROGRESS,` - ${u.width} x ${u.height} cells`),s.log(t.Raw.Module.RC_LOG_PROGRESS,` - ${S/1e3}fK verts, ${k/1e3}K tris`);const m=t.allocHeightfield();if(c.heightfield=m,!t.createHeightfield(s,m,d.width,d.height,g,f,d.cs,d.ch))return h("Could not create heightfield");(new t.Arrays.TriAreasArray).resize(L.maxTrisPerChunk());const b=[g[0],g[2]],M=[f[0],f[2]],y=new t.Arrays.ChunkIdsArray;y.resize(512);const w=L.getChunksOverlappingRect(b,M,y,512);if(0===w)return{success:!0};for(let e=0;e<w;++e){const i=y.get_data(e),a=L.nodes(i).n,r=L.getNodeTris(i),l=new t.Arrays.TriAreasArray;l.resize(a),t.markWalkableTriangles(s,d.walkableSlopeAngle,R,S,r,a,l);const o=t.rasterizeTriangles(s,R,S,r,l,a,m,d.walkableClimb);if(l.free(),!o)return h("Could not rasterize triangles")}t.filterLowHangingWalkableObstacles(s,d.walkableClimb,m),t.filterLedgeSpans(s,d.walkableHeight,d.walkableClimb,m),t.filterWalkableLowHeightSpans(s,d.walkableHeight,m);const p=t.allocCompactHeightfield();if(c.compactHeightfield=p,!t.buildCompactHeightfield(s,d.walkableHeight,d.walkableClimb,m,p))return h("Could not build compact heightfield");if(r||(t.freeHeightfield(c.heightfield),c.heightfield=void 0),!t.erodeWalkableArea(s,d.walkableRadius,p))return h("Could not erode walkable area");if(!t.buildDistanceField(s,p))return h("Failed to build distance field");if(!t.buildRegions(s,p,d.borderSize,d.minRegionArea,d.mergeRegionArea))return h("Failed to build regions");const C=t.allocContourSet();if(c.contourSet=C,!t.buildContours(s,p,d.maxSimplificationError,d.maxEdgeLen,C,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const x=t.allocPolyMesh();if(!t.buildPolyMesh(s,C,d.maxVertsPerPoly,x))return h("Failed to triangulate contours");const A=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,x,p,d.detailSampleDist,d.detailSampleMaxError,A))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(p),c.compactHeightfield=void 0,t.freeContourSet(C),c.contourSet=void 0);for(let e=0;e<x.npolys();e++)x.areas(e)==t.Raw.Recast.WALKABLE_AREA&&x.setAreas(e,0),0==x.areas(e)&&x.setFlags(e,1);const v=new t.NavMeshCreateParams;v.setPolyMeshCreateParams(x),v.setPolyMeshDetailCreateParams(A),v.setWalkableHeight(d.walkableHeight),v.setWalkableRadius(d.walkableRadius),v.setWalkableClimb(d.walkableClimb),v.setCellSize(d.cs),v.setCellHeight(d.ch),v.setBuildBvTree(!0),a.offMeshConnections&&v.setOffMeshConnections(a.offMeshConnections),v.setTileX(e),v.setTileY(i);const H=t.createNavMeshData(v);return H.success?(s.log(t.Raw.Module.RC_LOG_PROGRESS,`>> Polymesh: ${x.nverts()} vertices ${x.npolys()} polygons`),{success:!0,data:H.navMeshData}):h("Failed to create Detour navmesh data")};s.startTimer(t.Raw.Module.RC_TIMER_TEMP);const E=[0,0,0],F=[0,0,0];for(let e=0;e<p;e++)for(let i=0;i<w;i++){E[0]=m[0]+i*C,E[1]=m[1],E[2]=m[2]+e*C,F[0]=m[0]+(i+1)*C,F[1]=b[1],F[2]=m[2]+(e+1)*C;const a=P(i,e,E,F);if(a.success&&a.data){o.removeTile(o.getTileRefAt(i,e,0));const r=o.addTile(a.data,t.Raw.Module.DT_TILE_FREE_DATA,0);t.Raw.Detour.statusFailed(r.status)&&(s.log(t.Raw.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${i}, ty: ${e},status: ${t.dtStatusToReadableString(r.status)} (${r.status})`),a.data.free())}}return s.stopTimer(t.Raw.Module.RC_TIMER_TEMP),r||d(),{success:!0,navMesh:o,intermediates:l}})(r,s,i,a)};
|
|
1
|
+
"use strict";var e=require("three"),t=require("@recast-navigation/core");class i extends e.Object3D{agentMeshes=new Map;recastCrowd;agentMaterial;constructor({crowd:t,agentMaterial:i}){super(),this.recastCrowd=t,this.agentMaterial=i??new e.MeshBasicMaterial({color:"red"}),this.update()}update(){const t=this.recastCrowd.getAgents(),i=new Set(this.agentMeshes.keys());for(const a of t){i.delete(a.agentIndex);const t=a.position(),r=a.velocity();let s=this.agentMeshes.get(a.agentIndex);void 0===s?(s=this.createAgentMesh(a),this.add(s),this.agentMeshes.set(a.agentIndex,s)):this.updateAgentGeometry(s,a),s.position.set(t.x,t.y+a.height/2,t.z),s.lookAt((new e.Vector3).copy(s.position).add(r))}for(const e of i){const t=this.agentMeshes.get(e);t&&(this.remove(t),this.agentMeshes.delete(e))}}createAgentMesh(t){const i=new e.Mesh;return i.material=this.agentMaterial,this.updateAgentGeometry(i,t),i.userData={radius:t.radius,height:t.height},i}updateAgentGeometry(t,i){if(t.userData.radius!==i.radius||t.userData.height!==i.height){const a=new e.CylinderGeometry(i.radius,i.radius,i.height);t.geometry.dispose(),t.geometry=a,t.userData.radius=i.radius,t.userData.height=i.height}}}const a=new e.Matrix4;class r extends e.Object3D{heightfields;highlightWalkable;defaultColor;walkableColor;material;constructor({heightfields:t,highlightWalkable:i=!1,material:a=new e.MeshBasicMaterial,defaultColor:r="blue",walkableColor:s="green"}){super(),this.heightfields=t,this.highlightWalkable=i,this.material=a,this.defaultColor=new e.Color(r),this.walkableColor=new e.Color(s),this.update()}update(){this.clear();for(const t of this.heightfields){const i=t.bmin(),r=t.cs(),s=t.ch(),l=t.width(),o=t.height(),n=[];for(let e=0;e<o;++e)for(let a=0;a<l;++a){const o=i.x+a*r,h=i.z+e*r;let c=t.spans(a+e*l);for(;c;){const e=o,t=i.y+c.smin()*s,a=h,l=o+r,d=i.y+c.smax()*s,g=h+r;n.push({position:[(l+e)/2,(d+t)/2,(g+a)/2],walkable:this.highlightWalkable&&0!==c.area()}),c=c.next()}}const h=new e.BoxGeometry(r,s,r),c=new e.InstancedMesh(h,this.material,n.length);c.instanceMatrix.setUsage(e.DynamicDrawUsage);for(let e=0;e<n.length;e++){const{position:t,walkable:i}=n[e];c.setMatrixAt(e,a.setPosition(...t)),c.setColorAt(e,i?this.walkableColor:this.defaultColor)}c.instanceMatrix.needsUpdate=!0,c.instanceColor&&(c.instanceColor.needsUpdate=!0),this.add(c)}}}class s extends e.Object3D{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:t,navMeshMaterial:i}){super(),this.navMesh=t,this.geometry=new e.BufferGeometry,this.navMeshMaterial=i||new e.MeshBasicMaterial({color:"orange",transparent:!0,opacity:.7,depthWrite:!1}),this.update(),this.mesh=new e.Mesh(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[t,i]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new e.BufferAttribute(Float32Array.from(t),3)),this.geometry.setIndex(new e.BufferAttribute(Uint32Array.from(i),1)),this.geometry.computeVertexNormals()}}class l extends e.Object3D{offMeshConnections;entryCircleMaterial;exitCircleMaterial;lineMaterial;constructor({offMeshConnections:t,entryCircleMaterial:i,exitCircleMaterial:a,lineMaterial:r}){super(),this.offMeshConnections=t??[],this.entryCircleMaterial=i??new e.MeshBasicMaterial({color:"green"}),this.exitCircleMaterial=a??new e.MeshBasicMaterial({color:"blue"}),this.lineMaterial=r??new e.LineBasicMaterial({color:"red"}),this.update()}update(){this.clear();for(const t of this.offMeshConnections){const i=new e.CircleGeometry(t.radius,16),a=new e.Mesh(i,this.entryCircleMaterial);a.position.copy(t.startPosition),a.position.y+=.001,a.rotation.x=-Math.PI/2,this.add(a);const r=new e.Mesh(i,t.bidirectional?this.entryCircleMaterial:this.exitCircleMaterial);r.position.copy(t.endPosition),r.position.y+=.001,r.rotation.x=-Math.PI/2,this.add(r);const s=(new e.Vector3).copy(t.startPosition),l=(new e.Vector3).copy(t.endPosition),o=(new e.Vector3).addVectors(s,l).multiplyScalar(.5);o.y*=1.2;const n=new e.CatmullRomCurve3([s,o,l]).getPoints(50),h=(new e.BufferGeometry).setFromPoints(n),c=new e.Line(h,this.lineMaterial);this.add(c)}}}class o extends e.Object3D{tileCache;obstacleMeshes=new Map;obstacleMaterial;constructor({tileCache:t,obstacleMaterial:i}){super(),this.tileCache=t,this.obstacleMaterial=i||new e.MeshBasicMaterial({color:"red",wireframe:!0,wireframeLinewidth:2}),this.update()}update(){const t=new Set(this.obstacleMeshes.keys());for(const[,i]of this.tileCache.obstacles){const a=this.obstacleMeshes.get(i);if(t.delete(i),!a){const{position:t}=i,a=new e.Mesh(void 0,this.obstacleMaterial);if(a.position.copy(t),"box"===i.type){const{extent:t,angle:r}=i;a.geometry=new e.BoxGeometry(2*t.x,2*t.y,2*t.z),a.rotation.y=r}else{if("cylinder"!==i.type)throw new Error(`Unknown obstacle type: ${i}`);{const{radius:t,height:r}=i;a.geometry=new e.CylinderGeometry(t,t,r,16),a.position.y+=r/2}}this.add(a),this.obstacleMeshes.set(i,a)}}for(const e of t){const t=this.obstacleMeshes.get(e);t&&(this.remove(t),this.obstacleMeshes.delete(e))}}}const n=(e,i)=>{const a={x:1/0,y:1/0,z:1/0},r={x:-1/0,y:-1/0,z:-1/0};for(let t=0;t<i.length;t++){const s=i[t],l=e[3*s],o=e[3*s+1],n=e[3*s+2];a.x=Math.min(a.x,l),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),r.x=Math.max(r.x,l),r.y=Math.max(r.y,o),r.z=Math.max(r.z,n)}return{bbMin:t.vec3.toArray(a),bbMax:t.vec3.toArray(r)}},h=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},c=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),d={...t.recastConfigDefaults},g={...t.recastConfigDefaults,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},u=(e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new t.TileCache,d=new t.NavMesh,u=()=>{if(!r)for(let e=0;e<l.tileIntermediates.length;e++){const i=l.tileIntermediates[e];i.heightfield&&(t.freeHeightfield(i.heightfield),i.heightfield=void 0),i.compactHeightfield&&(t.freeCompactHeightfield(i.compactHeightfield),i.compactHeightfield=void 0),i.heightfieldLayerSet&&(t.freeHeightfieldLayerSet(i.heightfieldLayerSet),i.heightfieldLayerSet=void 0)}},f=e=>(u(),o.destroy(),d.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:l,error:e}),m=e,b=i.length,M=new t.Arrays.VertsArray;M.copy(m,m.length);const y=i,w=i.length/3,p=new t.Arrays.TrisArray;p.copy(y,y.length);const{bbMin:C,bbMax:x}=n(e,i),{expectedLayersPerTile:S,maxObstacles:R,...A}={...g,...a},k=t.createRcConfig(A),v=t.calcGridSize(C,x,k.cs);k.width=v.width,k.height=v.height,k.minRegionArea=k.minRegionArea*k.minRegionArea,k.mergeRegionArea=k.mergeRegionArea*k.mergeRegionArea,k.detailSampleDist=k.detailSampleDist<.9?0:k.cs*k.detailSampleDist,k.detailSampleMaxError=k.ch*k.detailSampleMaxError;const H=Math.floor(k.tileSize),T=Math.floor((k.width+H-1)/H),z=Math.floor((k.height+H-1)/H);k.borderSize=k.walkableRadius+3,k.width=k.tileSize+2*k.borderSize,k.height=k.tileSize+2*k.borderSize;const _=t.DetourTileCacheParams.create({orig:C,cs:k.cs,ch:k.ch,width:k.tileSize,height:k.tileSize,walkableHeight:k.walkableHeight,walkableRadius:k.walkableRadius,walkableClimb:k.walkableClimb,maxSimplificationError:k.maxSimplificationError,maxTiles:T*z*S,maxObstacles:R}),D=new t.Raw.RecastLinearAllocator(32e3),L=new t.Raw.RecastFastLZCompressor,P=a.tileCacheMeshProcess??new t.TileCacheMeshProcess(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(_,D,L,P))return f("Failed to initialize tile cache");const E=t.vec3.fromArray(C);let F=Math.min(Math.floor(h(c(T*z*S))),14);F>14&&(F=14);const O=1<<F,W=1<<22-F,I=t.NavMeshParams.create({orig:E,tileWidth:k.tileSize*k.cs,tileHeight:k.tileSize*k.cs,maxTiles:O,maxPolys:W});if(!d.initTiled(I))return f("Failed to initialize tiled navmesh");const G=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=G,!G.init(M,p,w,256))return f("Failed to build chunky triangle mesh");const N=(e,i)=>{const a={tileX:e,tileY:i},o=k.tileSize*k.cs,n=t.cloneRcConfig(k),h=[C[0]+e*o,C[1],C[2]+i*o],c=[C[0]+(e+1)*o,x[1],C[2]+(i+1)*o];h[0]-=n.borderSize*n.cs,h[2]-=n.borderSize*n.cs,c[0]+=n.borderSize*n.cs,c[2]+=n.borderSize*n.cs,n.set_bmin(0,h[0]),n.set_bmin(1,h[1]),n.set_bmin(2,h[2]),n.set_bmax(0,c[0]),n.set_bmax(1,c[1]),n.set_bmax(2,c[2]);const d=t.allocHeightfield();if(a.heightfield=d,!t.createHeightfield(s,d,n.width,n.height,h,c,n.cs,n.ch))return{n:0};const g=[h[0],h[2]],u=[c[0],c[2]],f=new t.Arrays.ChunkIdsArray;f.resize(512);const m=G.getChunksOverlappingRect(g,u,f,512);if(0===m)return{n:0};for(let e=0;e<m;++e){const i=f.get_data(e),a=G.nodes(i).n,r=G.getNodeTris(i),l=new t.Arrays.TriAreasArray;l.resize(a),t.markWalkableTriangles(s,n.walkableSlopeAngle,M,b,r,a,l);const o=t.rasterizeTriangles(s,M,b,r,l,a,d,n.walkableClimb);if(l.free(),!o)return{n:0}}t.filterLowHangingWalkableObstacles(s,k.walkableClimb,d),t.filterLedgeSpans(s,k.walkableHeight,k.walkableClimb,d),t.filterWalkableLowHeightSpans(s,k.walkableHeight,d);const y=t.allocCompactHeightfield();if(!t.buildCompactHeightfield(s,k.walkableHeight,k.walkableClimb,d,y))return{n:0};if(r||(t.freeHeightfield(a.heightfield),a.heightfield=void 0),!t.erodeWalkableArea(s,k.walkableRadius,y))return{n:0};const w=t.allocHeightfieldLayerSet();if(!t.buildHeightfieldLayers(s,y,k.borderSize,k.walkableHeight,w))return{n:0};r||(t.freeCompactHeightfield(y),a.compactHeightfield=void 0);const p=[];for(let a=0;a<w.nlayers();a++){const r=new t.Arrays.TileCacheData,s=w.layers(a),l=new t.Raw.dtTileCacheLayerHeader;l.magic=t.Raw.Detour.TILECACHE_MAGIC,l.version=t.Raw.Detour.TILECACHE_VERSION,l.tx=e,l.ty=i,l.tlayer=a;const o=s.bmin(),n=s.bmax();l.set_bmin(0,o.x),l.set_bmin(1,o.y),l.set_bmin(2,o.z),l.set_bmax(0,n.x),l.set_bmax(1,n.y),l.set_bmax(2,n.z),l.width=s.width(),l.height=s.height(),l.minx=s.minx(),l.maxx=s.maxx(),l.miny=s.miny(),l.maxy=s.maxy(),l.hmin=s.hmin(),l.hmax=s.hmax();const h=t.getHeightfieldLayerHeights(s),c=t.getHeightfieldLayerAreas(s),d=t.getHeightfieldLayerCons(s),g=t.buildTileCacheLayer(L,l,h,c,d,r);if(t.Raw.Detour.statusFailed(g))return{n:0};p.push(r)}return r||(t.freeHeightfieldLayerSet(w),a.heightfieldLayerSet=void 0),l.tileIntermediates.push(a),{n:p.length,tiles:p}};for(let e=0;e<z;++e)for(let i=0;i<T;++i){const{n:a,tiles:r}=N(i,e);if(a>0&&r)for(let l=0;l<a;l++){const a=r[l],n=o.addTile(a);t.Raw.Detour.statusFailed(n.status)&&s.log(t.Raw.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${i}, ty: ${e}`)}}for(let e=0;e<z;e++)for(let i=0;i<T;i++){const a=o.buildNavMeshTilesAt(i,e,d);if(t.Raw.Detour.statusFailed(a))return f(`Failed to build nav mesh tiles at ${i}, ${e}`)}return u(),{success:!0,tileCache:o,navMesh:d,intermediates:l}},f={...t.recastConfigDefaults},m=new e.Vector3,b=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i;const r=i.geometry.getIndex()?.array;if(void 0===r){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],r={};let s=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,l=e.geometry.getIndex().array;for(let o=0;o<l.length;o++){const n=3*l[o],h=m.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=r[c];d||(r[c]=d=s,i.push(h.x,h.y,h.z),s++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]};exports.CrowdHelper=i,exports.HeightfieldHelper=r,exports.NavMeshHelper=s,exports.OffMeshConnectionsHelper=l,exports.TileCacheHelper=o,exports.getPositionsAndIndices=b,exports.threeToSoloNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"solo",buildContext:s},o=new t.NavMesh,h=e=>(r||(l.heightfield&&(t.freeHeightfield(l.heightfield),l.heightfield=void 0),l.compactHeightfield&&(t.freeCompactHeightfield(l.compactHeightfield),l.compactHeightfield=void 0),l.contourSet&&(t.freeContourSet(l.contourSet),l.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:l,error:e}),c=e,g=i.length,u=new t.Arrays.VertsArray;u.copy(c,c.length);const f=i,m=i.length/3,b=new t.Arrays.TrisArray;b.copy(f,f.length);const{bbMin:M,bbMax:y}=n(e,i),w=t.createRcConfig({...d,...a});w.minRegionArea=w.minRegionArea*w.minRegionArea,w.mergeRegionArea=w.mergeRegionArea*w.mergeRegionArea,w.detailSampleDist=w.detailSampleDist<.9?0:w.cs*w.detailSampleDist,w.detailSampleMaxError=w.ch*w.detailSampleMaxError;const p=t.Raw.Recast.calcGridSize(M,y,w.cs);w.width=p.width,w.height=p.height;const C=t.allocHeightfield();if(l.heightfield=C,!t.createHeightfield(s,C,w.width,w.height,M,y,w.cs,w.ch))return h("Could not create heightfield");const x=new t.Arrays.TriAreasArray;if(x.resize(m),t.markWalkableTriangles(s,w.walkableSlopeAngle,u,g,b,m,x),!t.rasterizeTriangles(s,u,g,b,x,m,C,w.walkableClimb))return h("Could not rasterize triangles");x.free(),t.filterLowHangingWalkableObstacles(s,w.walkableClimb,C),t.filterLedgeSpans(s,w.walkableHeight,w.walkableClimb,C),t.filterWalkableLowHeightSpans(s,w.walkableHeight,C);const S=t.allocCompactHeightfield();if(l.compactHeightfield=S,!t.buildCompactHeightfield(s,w.walkableHeight,w.walkableClimb,C,S))return h("Failed to build compact data");if(r||(t.freeHeightfield(C),l.heightfield=void 0),!t.erodeWalkableArea(s,w.walkableRadius,S))return h("Failed to erode walkable area");if(!t.buildDistanceField(s,S))return h("Failed to build distance field");if(!t.buildRegions(s,S,w.borderSize,w.minRegionArea,w.mergeRegionArea))return h("Failed to build regions");const R=t.allocContourSet();if(l.contourSet=R,!t.buildContours(s,S,w.maxSimplificationError,w.maxEdgeLen,R,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const A=t.allocPolyMesh();if(!t.buildPolyMesh(s,R,w.maxVertsPerPoly,A))return h("Failed to triangulate contours");const k=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,A,S,w.detailSampleDist,w.detailSampleMaxError,k))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(S),l.compactHeightfield=void 0,t.freeContourSet(R),l.contourSet=void 0);for(let e=0;e<A.npolys();e++)A.areas(e)==t.Raw.Recast.WALKABLE_AREA&&A.setAreas(e,0),0==A.areas(e)&&A.setFlags(e,1);const v=new t.NavMeshCreateParams;v.setPolyMeshCreateParams(A),v.setPolyMeshDetailCreateParams(k),v.setWalkableHeight(w.walkableHeight),v.setWalkableRadius(w.walkableRadius),v.setWalkableClimb(w.walkableClimb),v.setCellSize(w.cs),v.setCellHeight(w.ch),v.setBuildBvTree(!0),a.offMeshConnections&&v.setOffMeshConnections(a.offMeshConnections);const H=t.createNavMeshData(v);if(!H.success)return h("Failed to create Detour navmesh data");const{navMeshData:T}=H;return o.initSolo(T)?{success:!0,navMesh:o,intermediates:l}:h("Failed to create Detour navmesh")})(r,s,i,a)},exports.threeToTileCache=(e,t={},i=!1)=>{const[a,r]=b(e);return u(a,r,t,i)},exports.threeToTiledNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new t.NavMesh,d=()=>{if(!r){for(let e=0;e<l.tileIntermediates.length;e++){const i=l.tileIntermediates[e];i.compactHeightfield&&t.freeCompactHeightfield(i.compactHeightfield),i.heightfield&&t.freeHeightfield(i.heightfield),i.contourSet&&t.freeContourSet(i.contourSet)}l.chunkyTriMesh&&(l.chunkyTriMesh=void 0)}},g=e=>(d(),o.destroy(),{success:!1,navMesh:void 0,intermediates:l,error:e}),u=t.createRcConfig({...f,...a}),{bbMin:m,bbMax:b}=n(e,i),M=t.calcGridSize(m,b,u.cs);u.width=M.width,u.height=M.height,u.minRegionArea=u.minRegionArea*u.minRegionArea,u.mergeRegionArea=u.mergeRegionArea*u.mergeRegionArea,u.tileSize=Math.floor(u.tileSize),u.borderSize=u.walkableRadius+3,u.width=u.tileSize+2*u.borderSize,u.height=u.tileSize+2*u.borderSize,u.detailSampleDist=u.detailSampleDist<.9?0:u.cs*u.detailSampleDist,u.detailSampleMaxError=u.ch*u.detailSampleMaxError;const y=Math.floor(u.tileSize),w=Math.floor((M.width+y-1)/y),p=Math.floor((M.height+y-1)/y),C=u.tileSize*u.cs,x=e,S=i.length,R=new t.Arrays.VertsArray;R.copy(x,x.length);const A=i,k=i.length/3,v=new t.Arrays.TrisArray;v.copy(A,A.length);const H=t.vec3.fromArray(m);let T=Math.min(Math.floor(h(c(w*p))),14);T>14&&(T=14);const z=1<<T,_=1<<22-T,D=t.NavMeshParams.create({orig:H,tileWidth:u.tileSize*u.cs,tileHeight:u.tileSize*u.cs,maxTiles:z,maxPolys:_});if(!o.initTiled(D))return g("Could not init nav mesh for tiled use");const L=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=L,!L.init(R,v,k,256))return g("Failed to build chunky triangle mesh");const P=(e,i,o,n)=>{const h=e=>(s.log(t.Raw.Module.RC_LOG_ERROR,e),{success:!1,error:e}),c={tileX:e,tileY:i};l.tileIntermediates.push(c);const d=t.cloneRcConfig(u),g=[...o],f=[...n];g[0]-=d.borderSize*d.cs,g[2]-=d.borderSize*d.cs,f[0]+=d.borderSize*d.cs,f[2]+=d.borderSize*d.cs,d.set_bmin(0,g[0]),d.set_bmin(1,g[1]),d.set_bmin(2,g[2]),d.set_bmax(0,f[0]),d.set_bmax(1,f[1]),d.set_bmax(2,f[2]),s.resetTimers(),s.startTimer(t.Raw.Module.RC_TIMER_TOTAL),s.log(t.Raw.Module.RC_LOG_PROGRESS,`Building tile ${l.tileIntermediates.length} at x: ${e}, y: ${i}`),s.log(t.Raw.Module.RC_LOG_PROGRESS,` - ${u.width} x ${u.height} cells`),s.log(t.Raw.Module.RC_LOG_PROGRESS,` - ${S/1e3}fK verts, ${k/1e3}K tris`);const m=t.allocHeightfield();if(c.heightfield=m,!t.createHeightfield(s,m,d.width,d.height,g,f,d.cs,d.ch))return h("Could not create heightfield");(new t.Arrays.TriAreasArray).resize(L.maxTrisPerChunk());const b=[g[0],g[2]],M=[f[0],f[2]],y=new t.Arrays.ChunkIdsArray;y.resize(512);const w=L.getChunksOverlappingRect(b,M,y,512);if(0===w)return{success:!0};for(let e=0;e<w;++e){const i=y.get_data(e),a=L.nodes(i).n,r=L.getNodeTris(i),l=new t.Arrays.TriAreasArray;l.resize(a),t.markWalkableTriangles(s,d.walkableSlopeAngle,R,S,r,a,l);const o=t.rasterizeTriangles(s,R,S,r,l,a,m,d.walkableClimb);if(l.free(),!o)return h("Could not rasterize triangles")}t.filterLowHangingWalkableObstacles(s,d.walkableClimb,m),t.filterLedgeSpans(s,d.walkableHeight,d.walkableClimb,m),t.filterWalkableLowHeightSpans(s,d.walkableHeight,m);const p=t.allocCompactHeightfield();if(c.compactHeightfield=p,!t.buildCompactHeightfield(s,d.walkableHeight,d.walkableClimb,m,p))return h("Could not build compact heightfield");if(r||(t.freeHeightfield(c.heightfield),c.heightfield=void 0),!t.erodeWalkableArea(s,d.walkableRadius,p))return h("Could not erode walkable area");if(!t.buildDistanceField(s,p))return h("Failed to build distance field");if(!t.buildRegions(s,p,d.borderSize,d.minRegionArea,d.mergeRegionArea))return h("Failed to build regions");const C=t.allocContourSet();if(c.contourSet=C,!t.buildContours(s,p,d.maxSimplificationError,d.maxEdgeLen,C,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const x=t.allocPolyMesh();if(!t.buildPolyMesh(s,C,d.maxVertsPerPoly,x))return h("Failed to triangulate contours");const A=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,x,p,d.detailSampleDist,d.detailSampleMaxError,A))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(p),c.compactHeightfield=void 0,t.freeContourSet(C),c.contourSet=void 0);for(let e=0;e<x.npolys();e++)x.areas(e)==t.Raw.Recast.WALKABLE_AREA&&x.setAreas(e,0),0==x.areas(e)&&x.setFlags(e,1);const v=new t.NavMeshCreateParams;v.setPolyMeshCreateParams(x),v.setPolyMeshDetailCreateParams(A),v.setWalkableHeight(d.walkableHeight),v.setWalkableRadius(d.walkableRadius),v.setWalkableClimb(d.walkableClimb),v.setCellSize(d.cs),v.setCellHeight(d.ch),v.setBuildBvTree(!0),a.offMeshConnections&&v.setOffMeshConnections(a.offMeshConnections),v.setTileX(e),v.setTileY(i);const H=t.createNavMeshData(v);return H.success?(s.log(t.Raw.Module.RC_LOG_PROGRESS,`>> Polymesh: ${x.nverts()} vertices ${x.npolys()} polygons`),{success:!0,data:H.navMeshData}):h("Failed to create Detour navmesh data")};s.startTimer(t.Raw.Module.RC_TIMER_TEMP);const E=[0,0,0],F=[0,0,0];for(let e=0;e<p;e++)for(let i=0;i<w;i++){E[0]=m[0]+i*C,E[1]=m[1],E[2]=m[2]+e*C,F[0]=m[0]+(i+1)*C,F[1]=b[1],F[2]=m[2]+(e+1)*C;const a=P(i,e,E,F);if(a.success&&a.data){o.removeTile(o.getTileRefAt(i,e,0));const r=o.addTile(a.data,t.Raw.Module.DT_TILE_FREE_DATA,0);t.Raw.Detour.statusFailed(r.status)&&(s.log(t.Raw.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${i}, ty: ${e},status: ${t.dtStatusToReadableString(r.status)} (${r.status})`),a.data.free())}}return s.stopTimer(t.Raw.Module.RC_TIMER_TEMP),r||d(),{success:!0,navMesh:o,intermediates:l}})(r,s,i,a)};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as y,buildContours as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as T,TileCacheMeshProcess as v,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as V}from\"@recast-navigation/core\";const K=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...t},Z=(e,t,v={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.VertsArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.TrisArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),V=r({...U,...v});V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const X=s.Recast.calcGridSize(W,B,V.cs);V.width=X.width,V.height=X.height;const Y=o();if(F.heightfield=Y,!n(H,Y,V.width,V.height,W,B,V.cs,V.ch))return D(\"Could not create heightfield\");const Z=new l.TriAreasArray;if(Z.resize($),d(H,V.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,V.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,V.walkableClimb,Y),m(H,V.walkableHeight,V.walkableClimb,Y),g(H,V.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,V.walkableHeight,V.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!S(H,V.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!M(H,j,V.borderSize,V.minRegionArea,V.mergeRegionArea))return D(\"Failed to build regions\");const q=y();if(F.contourSet=q,!R(H,j,V.maxSimplificationError,V.maxEdgeLen,q,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=C();if(!x(H,q,V.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,V.detailSampleDist,V.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==s.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(V.walkableHeight),ee.setWalkableRadius(V.walkableRadius),ee.setWalkableClimb(V.walkableClimb),ee.setCellSize(V.cs),ee.setCellHeight(V.ch),ee.setBuildBvTree(!0),v.offMeshConnections&&ee.setOffMeshConnections(v.offMeshConnections);const te=T(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new v(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,M={},y=!1)=>{const R=new i,C={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},x=new E,p=new a,A=()=>{if(!y)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),_=t,T=w.length,v=new l.VertsArray;v.copy(_,_.length);const V=w,U=w.length/3,Z=new l.TrisArray;Z.copy(V,V.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=F.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new s.RecastLinearAllocator(32e3),he=new s.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(C.chunkyTriMesh=Se,!Se.init(v,Z,U,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],M=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,M[0]+=r.borderSize*r.cs,M[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,M[0]),r.set_bmax(1,M[1]),r.set_bmax(2,M[2]);const x=o();if(i.heightfield=x,!n(R,x,r.width,r.height,w,M,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[M[0],M[2]],z=new l.ChunkIdsArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,v,T,a,i,s);const o=h(R,v,T,a,s,i,x,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,x),m(R,ae.walkableHeight,ae.walkableClimb,x),g(R,ae.walkableHeight,x);const E=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,E))return{n:0};const H=I();if(!G(R,E,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),o=new s.dtTileCacheLayerHeader;o.magic=s.Detour.TILECACHE_MAGIC,o.version=s.Detour.TILECACHE_VERSION,o.tx=e,o.ty=t,o.tlayer=i;const n=r.bmin(),d=r.bmax();o.set_bmin(0,n.x),o.set_bmin(1,n.y),o.set_bmin(2,n.z),o.set_bmax(0,d.x),o.set_bmax(1,d.y),o.set_bmax(2,d.z),o.width=r.width(),o.height=r.height(),o.minx=r.minx(),o.maxx=r.maxx(),o.miny=r.miny(),o.maxy=r.maxy(),o.hmin=r.hmin(),o.hmax=r.hmax();const h=$(r),c=N(r),m=W(r),g=B(he,o,h,c,m,a);if(s.Detour.statusFailed(g))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);s.Detour.statusFailed(r.status)&&R.log(s.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(s.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:C}},Q={...t},ee=(t,v,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:U}=K(t,v),Z=H(B,U,W.cs);W.width=Z.width,W.height=Z.height,W.minRegionArea=W.minRegionArea*W.minRegionArea,W.mergeRegionArea=W.mergeRegionArea*W.mergeRegionArea,W.tileSize=Math.floor(W.tileSize),W.borderSize=W.walkableRadius+3,W.width=W.tileSize+2*W.borderSize,W.height=W.tileSize+2*W.borderSize,W.detailSampleDist=W.detailSampleDist<.9?0:W.cs*W.detailSampleDist,W.detailSampleMaxError=W.ch*W.detailSampleMaxError;const j=Math.floor(W.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=v.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=v,re=v.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=e.fromArray(B);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:oe,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,se,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(s.Module.RC_LOG_ERROR,e),{success:!1,error:e}),v={tileX:e,tileY:t};I.tileIntermediates.push(v);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(s.Module.RC_TIMER_TOTAL),O.log(s.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(s.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(s.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=o();if(v.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect($,N,B,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,G,H.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(v.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(v.heightfield),v.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(v.contourSet=X,!R(O,K,H.maxSimplificationError,H.maxEdgeLen,X,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(!x(O,X,H.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=p();if(!A(O,Y,K,H.detailSampleDist,H.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(k(K),v.compactHeightfield=void 0,z(X),v.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==s.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=T(Z);return j.success?(O.log(s.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(s.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=B[0]+t*ee,ue[1]=B[1],ue[2]=B[2]+e*ee,be[0]=B[0]+(t+1)*ee,be[1]=U[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,s.Module.DT_TILE_FREE_DATA,0);s.Detour.statusFailed(a.status)&&(O.log(s.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${V(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(s.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","s","o","n","min","max","bbMin","vec3","toArray","bbMax","X","Number","Y","U","j","recastConfigDefaults","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","RecastBuildContext","C","buildContext","chunkyTriMesh","tileIntermediates","E","TileCache","p","NavMesh","A","heightfield","f","compactHeightfield","k","freeCompactHeightfield","heightfieldLayerSet","O","destroy","success","intermediates","error","_","T","v","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","markWalkableTriangles","walkableSlopeAngle","h","rasterizeTriangles","free","c","m","g","u","allocCompactHeightfield","b","buildCompactHeightfield","S","I","allocHeightfieldLayerSet","G","buildHeightfieldLayers","nlayers","TileCacheData","layers","Raw","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","getHeightfieldLayerHeights","N","getHeightfieldLayerAreas","W","B","statusFailed","freeHeightfieldLayerSet","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","navMeshGeneratorConfig","keepIntermediates","freeHeightfield","contourSet","Arrays","createRcConfig","Recast","calcGridSize","createHeightfield","filterLowHangingWalkableObstacles","filterWalkableLowHeightSpans","erodeWalkableArea","q","buildContours","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","allocPolyMeshDetail","buildPolyMeshDetail","npolys","areas","WALKABLE_AREA","setAreas","setFlags","NavMeshCreateParams","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","RC_LOG_ERROR","cloneRcConfig","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","allocHeightfield","maxTrisPerChunk","allocContourSet","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","dtStatusToReadableString","stopTimer","generateTiledNavMesh"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n depthWrite: false,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as y,buildContours as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as T,TileCacheMeshProcess as v,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as V}from\"@recast-navigation/core\";const K=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...t},Z=(e,t,v={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.VertsArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.TrisArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),V=r({...U,...v});V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const X=s.Recast.calcGridSize(W,B,V.cs);V.width=X.width,V.height=X.height;const Y=o();if(F.heightfield=Y,!n(H,Y,V.width,V.height,W,B,V.cs,V.ch))return D(\"Could not create heightfield\");const Z=new l.TriAreasArray;if(Z.resize($),d(H,V.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,V.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,V.walkableClimb,Y),m(H,V.walkableHeight,V.walkableClimb,Y),g(H,V.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,V.walkableHeight,V.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!S(H,V.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!M(H,j,V.borderSize,V.minRegionArea,V.mergeRegionArea))return D(\"Failed to build regions\");const q=y();if(F.contourSet=q,!R(H,j,V.maxSimplificationError,V.maxEdgeLen,q,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=C();if(!x(H,q,V.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,V.detailSampleDist,V.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==s.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(V.walkableHeight),ee.setWalkableRadius(V.walkableRadius),ee.setWalkableClimb(V.walkableClimb),ee.setCellSize(V.cs),ee.setCellHeight(V.ch),ee.setBuildBvTree(!0),v.offMeshConnections&&ee.setOffMeshConnections(v.offMeshConnections);const te=T(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new v(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,M={},y=!1)=>{const R=new i,C={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},x=new E,p=new a,A=()=>{if(!y)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),_=t,T=w.length,v=new l.VertsArray;v.copy(_,_.length);const V=w,U=w.length/3,Z=new l.TrisArray;Z.copy(V,V.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=F.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new s.RecastLinearAllocator(32e3),he=new s.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(C.chunkyTriMesh=Se,!Se.init(v,Z,U,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],M=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,M[0]+=r.borderSize*r.cs,M[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,M[0]),r.set_bmax(1,M[1]),r.set_bmax(2,M[2]);const x=o();if(i.heightfield=x,!n(R,x,r.width,r.height,w,M,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[M[0],M[2]],z=new l.ChunkIdsArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,v,T,a,i,s);const o=h(R,v,T,a,s,i,x,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,x),m(R,ae.walkableHeight,ae.walkableClimb,x),g(R,ae.walkableHeight,x);const E=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,E))return{n:0};const H=I();if(!G(R,E,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),o=new s.dtTileCacheLayerHeader;o.magic=s.Detour.TILECACHE_MAGIC,o.version=s.Detour.TILECACHE_VERSION,o.tx=e,o.ty=t,o.tlayer=i;const n=r.bmin(),d=r.bmax();o.set_bmin(0,n.x),o.set_bmin(1,n.y),o.set_bmin(2,n.z),o.set_bmax(0,d.x),o.set_bmax(1,d.y),o.set_bmax(2,d.z),o.width=r.width(),o.height=r.height(),o.minx=r.minx(),o.maxx=r.maxx(),o.miny=r.miny(),o.maxy=r.maxy(),o.hmin=r.hmin(),o.hmax=r.hmax();const h=$(r),c=N(r),m=W(r),g=B(he,o,h,c,m,a);if(s.Detour.statusFailed(g))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);s.Detour.statusFailed(r.status)&&R.log(s.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(s.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:C}},Q={...t},ee=(t,v,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:U}=K(t,v),Z=H(B,U,W.cs);W.width=Z.width,W.height=Z.height,W.minRegionArea=W.minRegionArea*W.minRegionArea,W.mergeRegionArea=W.mergeRegionArea*W.mergeRegionArea,W.tileSize=Math.floor(W.tileSize),W.borderSize=W.walkableRadius+3,W.width=W.tileSize+2*W.borderSize,W.height=W.tileSize+2*W.borderSize,W.detailSampleDist=W.detailSampleDist<.9?0:W.cs*W.detailSampleDist,W.detailSampleMaxError=W.ch*W.detailSampleMaxError;const j=Math.floor(W.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=v.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=v,re=v.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=e.fromArray(B);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:oe,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,se,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(s.Module.RC_LOG_ERROR,e),{success:!1,error:e}),v={tileX:e,tileY:t};I.tileIntermediates.push(v);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(s.Module.RC_TIMER_TOTAL),O.log(s.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(s.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(s.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=o();if(v.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect($,N,B,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,G,H.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(v.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(v.heightfield),v.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(v.contourSet=X,!R(O,K,H.maxSimplificationError,H.maxEdgeLen,X,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(!x(O,X,H.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=p();if(!A(O,Y,K,H.detailSampleDist,H.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(k(K),v.compactHeightfield=void 0,z(X),v.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==s.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=T(Z);return j.success?(O.log(s.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(s.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=B[0]+t*ee,ue[1]=B[1],ue[2]=B[2]+e*ee,be[0]=B[0]+(t+1)*ee,be[1]=U[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,s.Module.DT_TILE_FREE_DATA,0);s.Detour.statusFailed(a.status)&&(O.log(s.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${V(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(s.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (index === undefined) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","depthWrite","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","s","o","n","min","max","bbMin","vec3","toArray","bbMax","X","Number","Y","U","j","recastConfigDefaults","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","RecastBuildContext","C","buildContext","chunkyTriMesh","tileIntermediates","E","TileCache","p","NavMesh","A","heightfield","f","compactHeightfield","k","freeCompactHeightfield","heightfieldLayerSet","O","destroy","success","intermediates","error","_","T","v","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","markWalkableTriangles","walkableSlopeAngle","h","rasterizeTriangles","free","c","m","g","u","allocCompactHeightfield","b","buildCompactHeightfield","S","I","allocHeightfieldLayerSet","G","buildHeightfieldLayers","nlayers","TileCacheData","layers","Raw","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","getHeightfieldLayerHeights","N","getHeightfieldLayerAreas","W","B","statusFailed","freeHeightfieldLayerSet","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","navMeshGeneratorConfig","keepIntermediates","freeHeightfield","contourSet","Arrays","createRcConfig","Recast","calcGridSize","createHeightfield","filterLowHangingWalkableObstacles","filterWalkableLowHeightSpans","erodeWalkableArea","q","buildContours","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","allocPolyMeshDetail","buildPolyMeshDetail","npolys","areas","WALKABLE_AREA","setAreas","setFlags","NavMeshCreateParams","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","RC_LOG_ERROR","cloneRcConfig","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","allocHeightfield","maxTrisPerChunk","allocContourSet","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","dtStatusToReadableString","stopTimer","generateTiledNavMesh"],"mappings":"yEAeM,MAAOA,UAAoBC,EAAAA,SAC/BC,YAAiC,IAAIC,IAErCC,YAEAC,cAEA,WAAAC,EAAYC,MAAEA,EAAKF,cAAEA,IACnBG,QAEAC,KAAKL,YAAcG,EAEnBE,KAAKJ,cACHA,GAAiB,IAAIK,EAAiBA,kBAAC,CAAEC,MAAO,QAElDF,KAAKG,QACN,CAOD,MAAAA,GACE,MAAMC,EAASJ,KAAKL,YAAYU,YAE1BC,EAAS,IAAIC,IAAIP,KAAKP,YAAYe,QAExC,IAAK,MAAMC,KAASL,EAAQ,CAC1BE,EAAOI,OAAOD,EAAME,YAEpB,MAAMC,EAAWH,EAAMG,WACjBC,EAAWJ,EAAMI,WAEvB,IAAIC,EAA8Bd,KAAKP,YAAYsB,IAAIN,EAAME,iBAE3CK,IAAdF,GACFA,EAAYd,KAAKiB,gBAAgBR,GAEjCT,KAAKkB,IAAIJ,GACTd,KAAKP,YAAY0B,IAAIV,EAAME,WAAYG,IAEvCd,KAAKoB,oBAAoBN,EAAWL,GAGtCK,EAAUF,SAASO,IACjBP,EAASS,EACTT,EAASU,EAAIb,EAAMc,OAAS,EAC5BX,EAASY,GAGXV,EAAUW,QACR,IAAIC,EAAOA,SAAGC,KAAKb,EAAUF,UAAUM,IAAIL,GAE9C,CAED,IAAK,MAAMe,KAAWtB,EAAQ,CAC5B,MAAMQ,EAAYd,KAAKP,YAAYsB,IAAIa,GAEnCd,IACFd,KAAK6B,OAAOf,GACZd,KAAKP,YAAYiB,OAAOkB,GAE3B,CACF,CAEO,eAAAX,CAAgBR,GACtB,MAAMqB,EAAO,IAAIC,EAAAA,KAWjB,OATAD,EAAKE,SAAWhC,KAAKJ,cAErBI,KAAKoB,oBAAoBU,EAAMrB,GAE/BqB,EAAKG,SAAW,CACdC,OAAQzB,EAAMyB,OACdX,OAAQd,EAAMc,QAGTO,CACR,CAEO,mBAAAV,CAAoBN,EAAiBqB,GAC3C,GACErB,EAAUmB,SAASC,SAAWC,EAAYD,QAC1CpB,EAAUmB,SAASV,SAAWY,EAAYZ,OAC1C,CACA,MAAMa,EAAW,IAAIC,EAAgBA,iBACnCF,EAAYD,OACZC,EAAYD,OACZC,EAAYZ,QAGdT,EAAUsB,SAASE,UACnBxB,EAAUsB,SAAWA,EAErBtB,EAAUmB,SAASC,OAASC,EAAYD,OACxCpB,EAAUmB,SAASV,OAASY,EAAYZ,MACzC,CACF,ECnGH,MAAMgB,EAAa,IAAIC,EAAAA,QA0BjB,MAAOC,UAA0BjD,EAAAA,SACrCkD,aAEAC,kBAEAC,aAEAC,cAEAb,SAEA,WAAAnC,EAAY6C,aACVA,EAAYC,kBACZA,GAAoB,EAAKX,SACzBA,EAAW,IAAI/B,EAAiBA,kBAAE2C,aAClCA,EAAe,OAAMC,cACrBA,EAAgB,UAEhB9C,QAEAC,KAAK0C,aAAeA,EACpB1C,KAAK2C,kBAAoBA,EACzB3C,KAAKgC,SAAWA,EAChBhC,KAAK4C,aAAe,IAAIE,EAAKA,MAACF,GAC9B5C,KAAK6C,cAAgB,IAAIC,EAAKA,MAACD,GAE/B7C,KAAKG,QACN,CAED,MAAAA,GACEH,KAAK+C,QAEL,IAAK,MAAMC,KAAMhD,KAAK0C,aAAc,CAClC,MAAMO,EAAOD,EAAGE,OACVC,EAAKH,EAAGG,KACRC,EAAKJ,EAAGI,KAERC,EAAQL,EAAGK,QACX9B,EAASyB,EAAGzB,SAEZ+B,EAGA,GAEN,IAAK,IAAIhC,EAAI,EAAGA,EAAIC,IAAUD,EAC5B,IAAK,IAAID,EAAI,EAAGA,EAAIgC,IAAShC,EAAG,CAC9B,MAAMkC,EAAKN,EAAK5B,EAAIA,EAAI8B,EAClBK,EAAKP,EAAKzB,EAAIF,EAAI6B,EAExB,IAAIM,EAA0BT,EAAGU,MAAMrC,EAAIC,EAAI+B,GAE/C,KAAOI,GAAM,CACX,MAAME,EAAOJ,EACPK,EAAOX,EAAK3B,EAAImC,EAAKI,OAAST,EAC9BU,EAAON,EAEPO,EAAOR,EAAKJ,EACZa,EAAOf,EAAK3B,EAAImC,EAAKQ,OAASb,EAC9Bc,EAAOV,EAAKL,EAElBG,EAAMa,KAAK,CACTvD,SAAU,EACPmD,EAAOJ,GAAQ,GACfK,EAAOJ,GAAQ,GACfM,EAAOJ,GAAQ,GAElBM,SAAUpE,KAAK2C,mBAAqC,IAAhBc,EAAKY,SAG3CZ,EAAOA,EAAKa,MACb,CACF,CAGH,MAAMlC,EAAW,IAAImC,EAAWA,YAACpB,EAAIC,EAAID,GAEnCqB,EAAgB,IAAIC,EAAAA,cACxBrC,EACApC,KAAKgC,SACLsB,EAAMoB,QAERF,EAAcG,eAAeC,SAASC,EAAAA,kBAEtC,IAAK,IAAIC,EAAI,EAAGA,EAAIxB,EAAMoB,OAAQI,IAAK,CACrC,MAAMlE,SAAEA,EAAQwD,SAAEA,GAAad,EAAMwB,GAErCN,EAAcO,YAAYD,EAAGvC,EAAWyC,eAAepE,IACvD4D,EAAcS,WACZH,EACAV,EAAWpE,KAAK6C,cAAgB7C,KAAK4C,aAExC,CAED4B,EAAcG,eAAeO,aAAc,EAEvCV,EAAcW,gBAChBX,EAAcW,cAAcD,aAAc,GAG5ClF,KAAKkB,IAAIsD,EACV,CACF,EC/HG,MAAOY,UAAsB5F,EAAAA,SACjC6F,QAEAC,gBAEAxD,KAEAM,SAEA,WAAAvC,EAAYwF,QAAEA,EAAOC,gBAAEA,IACrBvF,QAEAC,KAAKqF,QAAUA,EAEfrF,KAAKoC,SAAW,IAAImD,EAAAA,eAEpBvF,KAAKsF,gBAAkBA,GAEnB,IAAIrF,oBAAkB,CACpBC,MAAO,SACPsF,aAAa,EACbC,QAAS,GACTC,YAAY,IAGlB1F,KAAKG,SAELH,KAAK8B,KAAO,IAAIC,EAAIA,KAAC/B,KAAKoC,SAAUpC,KAAKsF,iBAEzCtF,KAAKkB,IAAIlB,KAAK8B,KACf,CAOD,MAAA3B,GACE,MAAOwF,EAAWC,GAAW5F,KAAKqF,QAAQQ,kBAE1C7F,KAAKoC,SAAS0D,aACZ,WACA,IAAIC,EAAAA,gBAAgBC,aAAaC,KAAKN,GAAY,IAEpD3F,KAAKoC,SAAS8D,SAAS,IAAIH,EAAeA,gBAACI,YAAYF,KAAKL,GAAU,IACtE5F,KAAKoC,SAASgE,sBACf,ECxCG,MAAOC,UAAiC7G,EAAAA,SAC5C8G,mBAEAC,oBAEAC,mBAEAC,aAEA,WAAA5G,EAAYyG,mBACVA,EAAkBC,oBAClBA,EAAmBC,mBACnBA,EAAkBC,aAClBA,IAEA1G,QAEAC,KAAKsG,mBAAqBA,GAAsB,GAEhDtG,KAAKuG,oBACHA,GAAuB,IAAItG,EAAiBA,kBAAC,CAAEC,MAAO,UAExDF,KAAKwG,mBACHA,GAAsB,IAAIvG,EAAiBA,kBAAC,CAAEC,MAAO,SAEvDF,KAAKyG,aAAeA,GAAgB,IAAIC,EAAiBA,kBAAC,CAAExG,MAAO,QAEnEF,KAAKG,QACN,CAKD,MAAAA,GACEH,KAAK+C,QAEL,IAAK,MAAM4D,KAAqB3G,KAAKsG,mBAAoB,CAEvD,MAAMM,EAAiB,IAAIC,EAAcA,eAACF,EAAkBzE,OAAQ,IAE9D4E,EAAY,IAAI/E,EAAIA,KAAC6E,EAAgB5G,KAAKuG,qBAChDO,EAAUlG,SAASe,KAAKgF,EAAkBI,eAC1CD,EAAUlG,SAASU,GAAK,KACxBwF,EAAUE,SAAS3F,GAAK4F,KAAKC,GAAK,EAClClH,KAAKkB,IAAI4F,GAET,MAAMK,EAAU,IAAIpF,EAAAA,KAClB6E,EACAD,EAAkBS,cACdpH,KAAKuG,oBACLvG,KAAKwG,oBAEXW,EAAQvG,SAASe,KAAKgF,EAAkBU,aACxCF,EAAQvG,SAASU,GAAK,KACtB6F,EAAQH,SAAS3F,GAAK4F,KAAKC,GAAK,EAChClH,KAAKkB,IAAIiG,GAGT,MAAMG,GAAQ,IAAI5F,EAAOA,SAAGC,KAC1BgF,EAAkBI,eAEdQ,GAAM,IAAI7F,EAAOA,SAAGC,KAAKgF,EAAkBU,aAE3CG,GAAS,IAAI9F,EAAOA,SAAG+F,WAAWH,EAAOC,GAAKG,eAAe,IACnEF,EAAOlG,GAAK,IAEZ,MACMqG,EADQ,IAAIC,mBAAiB,CAACN,EAAOE,EAAQD,IACzBM,UAAU,IAE9BC,GAAe,IAAIvC,EAAAA,gBAAiBwC,cAAcJ,GAClDK,EAAO,IAAIC,EAAIA,KAACH,EAAc9H,KAAKyG,cAEzCzG,KAAKkB,IAAI8G,EACV,CACF,EC/EG,MAAOE,UAAwB1I,EAAAA,SACnC2I,UAEAC,eAAsC,IAAI1I,IAE1C2I,iBAEA,WAAAxI,EAAYsI,UAAEA,EAASE,iBAAEA,IACvBtI,QAEAC,KAAKmI,UAAYA,EAEjBnI,KAAKqI,iBAAmBA,GAEpB,IAAIpI,oBAAkB,CACpBC,MAAO,MACPoI,WAAW,EACXC,mBAAoB,IAG1BvI,KAAKG,QACN,CAOD,MAAAA,GACE,MAAMG,EAAS,IAAIC,IAAIP,KAAKoI,eAAe5H,QAE3C,IAAK,MAAM,CAAGgI,KAAaxI,KAAKmI,UAAUM,UAAW,CACnD,MAAMC,EAAe1I,KAAKoI,eAAerH,IAAIyH,GAI7C,GAFAlI,EAAOI,OAAO8H,IAETE,EAAc,CACjB,MAAM9H,SAAEA,GAAa4H,EAEf1G,EAAO,IAAIC,EAAIA,UAACf,EAAWhB,KAAKqI,kBAItC,GAFAvG,EAAKlB,SAASe,KAAKf,GAEG,QAAlB4H,EAASG,KAAgB,CAC3B,MAAMC,OAAEA,EAAMC,MAAEA,GAAUL,EAE1B1G,EAAKM,SAAW,IAAImC,cACP,EAAXqE,EAAOvH,EACI,EAAXuH,EAAOtH,EACI,EAAXsH,EAAOpH,GAGTM,EAAKkF,SAAS1F,EAAIuH,CACnB,KAAM,IAAsB,aAAlBL,EAASG,KAOlB,MAAM,IAAIG,MAAM,0BAA0BN,KAPH,CACvC,MAAMtG,OAAEA,EAAMX,OAAEA,GAAWiH,EAE3B1G,EAAKM,SAAW,IAAIC,EAAgBA,iBAACH,EAAQA,EAAQX,EAAQ,IAE7DO,EAAKlB,SAASU,GAAKC,EAAS,CAC7B,CAEA,CAEDvB,KAAKkB,IAAIY,GACT9B,KAAKoI,eAAejH,IAAIqH,EAAU1G,EACnC,CACF,CAED,IAAK,MAAM0G,KAAYlI,EAAQ,CAC7B,MAAMoI,EAAe1I,KAAKoI,eAAerH,IAAIyH,GAEzCE,IACF1I,KAAK6B,OAAO6G,GACZ1I,KAAKoI,eAAe1H,OAAO8H,GAE9B,CACF,EC5FikC,MAAMO,EAAE,CAACC,EAAElE,KAAK,MAAMmE,EAAE,CAAC5H,EAAE,IAAIC,EAAE,IAAIE,EAAE,KAAK0H,EAAE,CAAC7H,GAAE,IAAKC,GAAE,IAAKE,GAAE,KAAM,IAAI,IAAI2H,EAAE,EAAEA,EAAErE,EAAEJ,OAAOyE,IAAI,CAAC,MAAMC,EAAEtE,EAAEqE,GAAGE,EAAEL,EAAE,EAAEI,GAAGE,EAAEN,EAAE,EAAEI,EAAE,GAAGG,EAAEP,EAAE,EAAEI,EAAE,GAAGH,EAAE5H,EAAE4F,KAAKuC,IAAIP,EAAE5H,EAAEgI,GAAGJ,EAAE3H,EAAE2F,KAAKuC,IAAIP,EAAE3H,EAAEgI,GAAGL,EAAEzH,EAAEyF,KAAKuC,IAAIP,EAAEzH,EAAE+H,GAAGL,EAAE7H,EAAE4F,KAAKwC,IAAIP,EAAE7H,EAAEgI,GAAGH,EAAE5H,EAAE2F,KAAKwC,IAAIP,EAAE5H,EAAEgI,GAAGJ,EAAE1H,EAAEyF,KAAKwC,IAAIP,EAAE1H,EAAE+H,EAAE,CAAC,MAAM,CAACG,MAAMP,EAACQ,KAACC,QAAQX,GAAGY,MAAMV,EAAAA,KAAES,QAAQV,GAAE,EAAGY,EAAEX,IAAI,IAAIH,EAAE,EAAElE,EAAE,EAAE,OAAOkE,EAAEe,OAAOZ,EAAE,QAAQ,EAAEA,IAAIH,EAAElE,EAAEiF,OAAOZ,EAAE,MAAM,EAAEA,IAAIrE,EAAEkE,GAAGlE,EAAEA,EAAEiF,OAAOZ,EAAE,KAAK,EAAEA,IAAIrE,EAAEkE,GAAGlE,EAAEA,EAAEiF,OAAOZ,EAAE,IAAI,EAAEH,GAAGlE,EAAEkE,IAAIG,IAAIrE,IAAI,EAAEkE,GAAGgB,EAAEb,IAAIA,IAAIA,GAAGA,GAAG,EAAEA,GAAGA,GAAG,EAAEA,GAAGA,GAAG,EAAEA,GAAGA,GAAG,EAAEA,GAAGA,GAAG,KAAKA,GAAGc,EAAE,IAAIjB,EAAAA,sBAAkhFkB,EAAE,IAAIlB,EAACmB,qBAACC,SAAS,GAAGC,sBAAsB,EAAEC,aAAa,KAAqFC,EAAE,CAACvB,EAAEwB,EAAEC,EAAE,CAAE,EAACnJ,GAAE,KAAM,MAAMoJ,EAAE,IAAI5F,EAAC6F,mBAACC,EAAE,CAACjC,KAAK,YAAYkC,aAAaH,EAAEI,mBAAc,EAAOC,kBAAkB,IAAI1J,EAAE,IAAI2J,EAACC,UAACC,EAAE,IAAIjC,EAACkC,QAACC,EAAE,KAAK,IAAI9J,EAAE,IAAI,IAAI6H,EAAE,EAAEA,EAAEyB,EAAEG,kBAAkBrG,OAAOyE,IAAI,CAAC,MAAMH,EAAE4B,EAAEG,kBAAkB5B,GAAGH,EAAEqC,cAAcC,kBAAEtC,EAAEqC,aAAarC,EAAEqC,iBAAY,GAAQrC,EAAEuC,qBAAqBC,EAACC,uBAACzC,EAAEuC,oBAAoBvC,EAAEuC,wBAAmB,GAAQvC,EAAE0C,sBAAsBC,EAAAA,wBAAE3C,EAAE0C,qBAAqB1C,EAAE0C,yBAAoB,EAAO,GAAGlK,EAAE2H,IAAIiC,IAAI/J,EAAEuK,UAAUV,EAAEU,UAAU,CAACC,SAAQ,EAAGxG,aAAQ,EAAO8C,eAAU,EAAO2D,cAAclB,EAAEmB,MAAM5C,IAAI6C,EAAEhD,EAAEiD,EAAEzB,EAAE9F,OAAOwH,EAAE,IAAIhD,EAAAA,OAAEiD,WAAWD,EAAEvK,KAAKqK,EAAEA,EAAEtH,QAAQ,MAAM0H,EAAE5B,EAAEP,EAAEO,EAAE9F,OAAO,EAAE2H,EAAE,IAAInD,SAAEoD,UAAUD,EAAE1K,KAAKyK,EAAEA,EAAE1H,QAAQ,MAAMgF,MAAMa,EAAEV,MAAM0C,GAAGxD,EAAEC,EAAEwB,IAAIH,sBAAsBmC,EAAGlC,aAAamC,KAAMC,GAAI,IAAIxC,KAAKO,GAAGkC,EAAGvD,iBAAEsD,GAAIE,EAAGC,EAAAA,aAAEtC,EAAEgC,EAAEI,EAAGxJ,IAAIwJ,EAAGtJ,MAAMuJ,EAAGvJ,MAAMsJ,EAAGpL,OAAOqL,EAAGrL,OAAOoL,EAAGG,cAAcH,EAAGG,cAAcH,EAAGG,cAAcH,EAAGI,gBAAgBJ,EAAGI,gBAAgBJ,EAAGI,gBAAgBJ,EAAGK,iBAAiBL,EAAGK,iBAAiB,GAAG,EAAEL,EAAGxJ,GAAGwJ,EAAGK,iBAAiBL,EAAGM,qBAAqBN,EAAGvJ,GAAGuJ,EAAGM,qBAAqB,MAAMC,EAAGjG,KAAKkG,MAAMR,EAAGvC,UAAUgD,EAAGnG,KAAKkG,OAAOR,EAAGtJ,MAAM6J,EAAG,GAAGA,GAAIG,EAAGpG,KAAKkG,OAAOR,EAAGpL,OAAO2L,EAAG,GAAGA,GAAIP,EAAGW,WAAWX,EAAGY,eAAe,EAAEZ,EAAGtJ,MAAMsJ,EAAGvC,SAAS,EAAEuC,EAAGW,WAAWX,EAAGpL,OAAOoL,EAAGvC,SAAS,EAAEuC,EAAGW,WAAW,MAAME,EAAGC,EAAAA,sBAAEC,OAAO,CAACzK,KAAKsH,EAAEpH,GAAGwJ,EAAGxJ,GAAGC,GAAGuJ,EAAGvJ,GAAGC,MAAMsJ,EAAGvC,SAAS7I,OAAOoL,EAAGvC,SAASuD,eAAehB,EAAGgB,eAAeJ,eAAeZ,EAAGY,eAAeK,cAAcjB,EAAGiB,cAAcC,uBAAuBlB,EAAGkB,uBAAuBC,SAASV,EAAGC,EAAGb,EAAGlC,aAAamC,IAAKsB,EAAG,IAAI1E,MAAE2E,sBAAsB,MAAMC,EAAG,IAAI5E,MAAE6E,uBAAuBC,EAAG1D,EAAE2D,sBAAxnD,IAAIlC,EAACmC,sBAAA,CAAGlF,EAAEH,EAAElE,KAAK,IAAI,IAAImE,EAAE,EAAEA,EAAEE,EAAEmF,cAAcrF,EAAED,EAAE7H,IAAI8H,EAAE,GAAGnE,EAAE3D,IAAI8H,EAAE,EAAG,IAA2kD,IAAI5H,EAAEkN,KAAKf,EAAGO,EAAGE,EAAGE,GAAI,OAAO3M,EAAE,mCAAmC,MAAMgN,EAAGrF,EAACQ,KAAC8E,UAAUlE,GAAG,IAAImE,EAAGzH,KAAKuC,IAAIvC,KAAKkG,MAAMrD,EAAEE,EAAEoD,EAAGC,EAAGb,KAAM,IAAIkC,EAAG,KAAKA,EAAG,IAAI,MAAMC,EAAG,GAAGD,EAAGE,EAAG,GAAG,GAAGF,EAAGG,EAAGC,gBAAEpB,OAAO,CAACzK,KAAKuL,EAAGO,UAAUpC,EAAGvC,SAASuC,EAAGxJ,GAAG6L,WAAWrC,EAAGvC,SAASuC,EAAGxJ,GAAG2K,SAASa,EAAGM,SAASL,IAAK,IAAI1D,EAAEgE,UAAUL,GAAI,OAAOrN,EAAE,sCAAsC,MAAM2N,EAAG,IAAIC,EAAAA,oBAAE,GAAGxE,EAAEE,cAAcqE,GAAIA,EAAGZ,KAAKrC,EAAEG,EAAEpC,EAAE,KAAK,OAAOzI,EAAE,wCAAwC,MAAM6N,EAAG,CAAClG,EAAEH,KAAK,MAAMlE,EAAE,CAACwK,MAAMnG,EAAEoG,MAAMvG,GAAGC,EAAE0D,EAAGvC,SAASuC,EAAGxJ,GAAGiG,EAAEoG,EAAAA,cAAE7C,GAAInC,EAAE,CAACD,EAAE,GAAGpB,EAAEF,EAAEsB,EAAE,GAAGA,EAAE,GAAGvB,EAAEC,GAAGwB,EAAE,CAACF,EAAE,IAAIpB,EAAE,GAAGF,EAAEsD,EAAE,GAAGhC,EAAE,IAAIvB,EAAE,GAAGC,GAAGuB,EAAE,IAAIpB,EAAEkE,WAAWlE,EAAEjG,GAAGqH,EAAE,IAAIpB,EAAEkE,WAAWlE,EAAEjG,GAAGsH,EAAE,IAAIrB,EAAEkE,WAAWlE,EAAEjG,GAAGsH,EAAE,IAAIrB,EAAEkE,WAAWlE,EAAEjG,GAAGiG,EAAEqG,SAAS,EAAEjF,EAAE,IAAIpB,EAAEqG,SAAS,EAAEjF,EAAE,IAAIpB,EAAEqG,SAAS,EAAEjF,EAAE,IAAIpB,EAAEsG,SAAS,EAAEjF,EAAE,IAAIrB,EAAEsG,SAAS,EAAEjF,EAAE,IAAIrB,EAAEsG,SAAS,EAAEjF,EAAE,IAAI,MAAMpJ,EAAEiI,EAAAA,mBAAI,GAAGxE,EAAEuG,YAAYhK,GAAGkI,oBAAEmB,EAAErJ,EAAE+H,EAAE/F,MAAM+F,EAAE7H,OAAOiJ,EAAEC,EAAErB,EAAEjG,GAAGiG,EAAEhG,IAAI,MAAM,CAACmG,EAAE,GAAG,MAAM2B,EAAE,CAACV,EAAE,GAAGA,EAAE,IAAIY,EAAE,CAACX,EAAE,GAAGA,EAAE,IAAIjJ,EAAE,IAAI0H,SAAEyG,cAAcnO,EAAEoO,OAAO,KAAK,MAAM5D,EAAEmD,EAAGU,yBAAyB3E,EAAEE,EAAE5J,EAAE,KAAK,GAAG,IAAIwK,EAAE,MAAM,CAACzC,EAAE,GAAG,IAAI,IAAIJ,EAAE,EAAEA,EAAE6C,IAAI7C,EAAE,CAAC,MAAMH,EAAExH,EAAEsO,SAAS3G,GAAGrE,EAAEqK,EAAGY,MAAM/G,GAAGO,EAAEN,EAAEkG,EAAGa,YAAYhH,GAAGK,EAAE,IAAIH,SAAE+G,cAAc5G,EAAEuG,OAAO9K,GAAGoL,EAACC,sBAACzF,EAAEtB,EAAEgH,mBAAmBlE,EAAED,EAAEhD,EAAEnE,EAAEuE,GAAG,MAAMC,EAAE+G,EAACC,mBAAC5F,EAAEwB,EAAED,EAAEhD,EAAEI,EAAEvE,EAAEzD,EAAE+H,EAAEwE,eAAe,GAAGvE,EAAEkH,QAAQjH,EAAE,MAAM,CAACC,EAAE,EAAE,CAACiH,EAAAA,kCAAE9F,EAAEiC,EAAGiB,cAAcvM,GAAGoP,EAAAA,iBAAE/F,EAAEiC,EAAGgB,eAAehB,EAAGiB,cAAcvM,GAAGqP,EAAAA,6BAAEhG,EAAEiC,EAAGgB,eAAetM,GAAG,MAAM2J,EAAE2F,EAACC,0BAAG,IAAIC,EAACC,wBAACpG,EAAEiC,EAAGgB,eAAehB,EAAGiB,cAAcvM,EAAE2J,GAAG,MAAM,CAACzB,EAAE,GAAG,GAAGjI,IAAIgK,EAAAA,gBAAExG,EAAEuG,aAAavG,EAAEuG,iBAAY,IAAS0F,oBAAErG,EAAEiC,EAAGY,eAAevC,GAAG,MAAM,CAACzB,EAAE,GAAG,MAAMsD,EAAEmE,EAACC,2BAAG,IAAIC,EAACC,uBAACzG,EAAEM,EAAE2B,EAAGW,WAAWX,EAAGgB,eAAed,GAAG,MAAM,CAACtD,EAAE,GAAGjI,IAAIkK,EAACC,uBAACT,GAAGlG,EAAEyG,wBAAmB,GAAQ,MAAMkC,EAAE,GAAG,IAAI,IAAI3I,EAAE,EAAEA,EAAE+H,EAAEuE,UAAUtM,IAAI,CAAC,MAAMmE,EAAE,IAAIC,SAAEmI,cAAcjI,EAAEyD,EAAEyE,OAAOxM,GAAGwE,EAAE,IAAID,EAACkI,IAACC,uBAAuBlI,EAAEmI,MAAMpI,EAAAA,IAAEqI,OAAOC,gBAAgBrI,EAAEsI,QAAQvI,EAACkI,IAACG,OAAOG,kBAAkBvI,EAAEwI,GAAG3I,EAAEG,EAAEyI,GAAG/I,EAAEM,EAAE0I,OAAOlN,EAAE,MAAMyE,EAAEH,EAAElG,OAAOgN,EAAE9G,EAAE6I,OAAO3I,EAAEmG,SAAS,EAAElG,EAAElI,GAAGiI,EAAEmG,SAAS,EAAElG,EAAEjI,GAAGgI,EAAEmG,SAAS,EAAElG,EAAE/H,GAAG8H,EAAEoG,SAAS,EAAEQ,EAAE7O,GAAGiI,EAAEoG,SAAS,EAAEQ,EAAE5O,GAAGgI,EAAEoG,SAAS,EAAEQ,EAAE1O,GAAG8H,EAAEjG,MAAM+F,EAAE/F,QAAQiG,EAAE/H,OAAO6H,EAAE7H,SAAS+H,EAAE4I,KAAK9I,EAAE8I,OAAO5I,EAAE6I,KAAK/I,EAAE+I,OAAO7I,EAAE8I,KAAKhJ,EAAEgJ,OAAO9I,EAAE+I,KAAKjJ,EAAEiJ,OAAO/I,EAAEgJ,KAAKlJ,EAAEkJ,OAAOhJ,EAAEiJ,KAAKnJ,EAAEmJ,OAAO,MAAMlC,EAAEmC,EAACC,2BAACrJ,GAAGoH,EAAEkC,EAACC,yBAACvJ,GAAGqH,EAAEmC,0BAAExJ,GAAGsH,EAAEmC,EAAAA,oBAAE5E,EAAG3E,EAAE+G,EAAEG,EAAEC,EAAExH,GAAG,GAAGI,EAACkI,IAACG,OAAOoB,aAAapC,GAAG,MAAM,CAACnH,EAAE,GAAGkE,EAAEtJ,KAAK8E,EAAE,CAAC,OAAO3H,IAAIqK,EAACoH,wBAAClG,GAAG/H,EAAE4G,yBAAoB,GAAQd,EAAEG,kBAAkB5G,KAAKW,GAAG,CAACyE,EAAEkE,EAAE/I,OAAOsO,MAAMvF,EAAC,EAAG,IAAI,IAAItE,EAAE,EAAEA,EAAEkE,IAAKlE,EAAE,IAAI,IAAIH,EAAE,EAAEA,EAAEoE,IAAKpE,EAAE,CAAC,MAAMO,EAAEzE,EAAEkO,MAAM/J,GAAGoG,EAAGrG,EAAEG,GAAG,GAAGrE,EAAE,GAAGmE,EAAE,IAAI,IAAIC,EAAE,EAAEA,EAAEpE,EAAEoE,IAAI,CAAC,MAAMpE,EAAEmE,EAAEC,GAAGE,EAAE/H,EAAE4R,QAAQnO,GAAGuE,MAAEqI,OAAOoB,aAAa1J,EAAE8J,SAASxI,EAAEyI,IAAI9J,MAAE+J,OAAOC,eAAe,0CAA0CrK,UAAUG,IAAI,CAAC,CAAC,IAAI,IAAIA,EAAE,EAAEA,EAAEkE,EAAGlE,IAAI,IAAI,IAAIH,EAAE,EAAEA,EAAEoE,EAAGpE,IAAI,CAAC,MAAMlE,EAAEzD,EAAEiS,oBAAoBtK,EAAEG,EAAE+B,GAAG,GAAG7B,MAAEqI,OAAOoB,aAAahO,GAAG,OAAOtD,EAAE,qCAAqCwH,MAAMG,IAAI,CAAC,OAAOiC,IAAI,CAACS,SAAQ,EAAG1D,UAAU9G,EAAEgE,QAAQ6F,EAAEY,cAAclB,EAAC,EAAG2B,EAAE,IAAIvD,wBCEz+QuK,EAAU,IAAI7R,EAAAA,QAEP8R,EACXC,IAEA,MAAMC,EAAwB,GAE9B,IAAK,MAAM5R,KAAQ2R,EAAQ,CACzB,MAAME,EAAoB7R,EAAKM,SAASwR,WACrChT,SAEH,IAAK+S,GAAoD,IAA/BA,EAAkBE,SAC1C,SAGF,IAAIC,EAAchS,EAClB,MAAMiS,EAAuCjS,EAAKM,SAAS4R,YAAYC,MAEvE,QAAcjT,IAAV+S,EAAqB,CACvBD,EAAcA,EAAYI,QAC1BJ,EAAY1R,SAAWN,EAAKM,SAAS8R,QAGrC,MAAMC,EAA2B,GACjC,IAAK,IAAIrP,EAAI,EAAGA,EAAI6O,EAAkBS,MAAOtP,IAC3CqP,EAAehQ,KAAKW,GAGtBgP,EAAY1R,SAAS8D,SAASiO,EAC/B,CAEDT,EAAcvP,KAAK2P,EACpB,CAED,MAAMO,EAA4B,GAC5BC,EAA0B,GAE1BC,EAA8C,CAAA,EACpD,IAAIC,EAAe,EAEnB,IAAK,MAAM1S,KAAQ4R,EAAe,CAChC5R,EAAK2S,oBAEL,MAAM9O,EAAY7D,EAAKM,SAASwR,WAAWhT,SAASqT,MAC9CF,EAAQjS,EAAKM,SAAS4R,WAAYC,MAExC,IAAK,IAAInP,EAAI,EAAGA,EAAIiP,EAAMrP,OAAQI,IAAK,CACrC,MAAM4P,EAAgB,EAAXX,EAAMjP,GAEX6P,EAAMpB,EAAQpS,IAClBwE,EAAU+O,GACV/O,EAAU+O,EAAK,GACf/O,EAAU+O,EAAK,IAEjB5S,EAAK8S,aAAaD,GAElB,MAAME,EAAM,GAAGF,EAAItT,KAAKsT,EAAIrT,KAAKqT,EAAInT,IACrC,IAAIsT,EAAMP,EAAgBM,GAErBC,IACHP,EAAgBM,GAAOC,EAAMN,EAC7BH,EAAgBlQ,KAAKwQ,EAAItT,EAAGsT,EAAIrT,EAAGqT,EAAInT,GACvCgT,KAGFF,EAAcnQ,KAAK2Q,EACpB,CACF,CAED,MAAO,CAAC9O,aAAaC,KAAKoO,GAAkBlO,YAAYF,KAAKqO,GAAe,qMC5D5C,CAChCb,EACAsB,EAA8D,CAAA,EAC9DC,GAAoB,KAEpB,MAAOrP,EAAWC,GAAW4N,EAAuBC,GAEpD,MFlB+kD,EAACtK,EAAEH,EAAEkD,EAAE,CAAE,EAAClB,GAAE,KAAM,MAAM6B,EAAE,IAAI/H,EAAC6F,mBAAC8C,EAAE,CAAC9E,KAAK,OAAOkC,aAAagC,GAAGiC,EAAE,IAAI7F,EAAAA,QAAEmG,EAAEjG,IAAI6B,IAAIyC,EAAEpC,cAAcC,EAAC2J,gBAACxH,EAAEpC,aAAaoC,EAAEpC,iBAAY,GAAQoC,EAAElC,qBAAqBC,yBAAEiC,EAAElC,oBAAoBkC,EAAElC,wBAAmB,GAAQkC,EAAEyH,aAAa1T,EAAAA,eAAEiM,EAAEyH,YAAYzH,EAAEyH,gBAAW,IAASpG,EAAElD,UAAU,CAACvG,aAAQ,EAAOwG,SAAQ,EAAGC,cAAc2B,EAAE1B,MAAM5C,IAAIwC,EAAExC,EAAEqG,EAAExG,EAAEtE,OAAOsM,EAAE,IAAI9H,EAACiM,OAAChJ,WAAW6E,EAAErP,KAAKgK,EAAEA,EAAEjH,QAAQ,MAAMwM,EAAElI,EAAEwJ,EAAExJ,EAAEtE,OAAO,EAAEgO,EAAE,IAAIxJ,EAAAA,OAAEoD,UAAUoG,EAAE/Q,KAAKuP,EAAEA,EAAExM,QAAQ,MAAMgF,MAAMkJ,EAAE/I,MAAMgJ,GAAG9J,EAAEI,EAAEH,GAAGoD,EAAEhD,EAACgM,eAAC,IAAInL,KAAKiC,IAAIE,EAAEU,cAAcV,EAAEU,cAAcV,EAAEU,cAAcV,EAAEW,gBAAgBX,EAAEW,gBAAgBX,EAAEW,gBAAgBX,EAAEY,iBAAiBZ,EAAEY,iBAAiB,GAAG,EAAEZ,EAAEjJ,GAAGiJ,EAAEY,iBAAiBZ,EAAEa,qBAAqBb,EAAEhJ,GAAGgJ,EAAEa,qBAAqB,MAAMnD,EAAET,EAACkI,IAAC8D,OAAOC,aAAa1C,EAAEC,EAAEzG,EAAEjJ,IAAIiJ,EAAE/I,MAAMyG,EAAEzG,MAAM+I,EAAE7K,OAAOuI,EAAEvI,OAAO,MAAMyI,EAAEV,qBAAI,GAAGmE,EAAEpC,YAAYrB,GAAGT,EAACgM,kBAAC1I,EAAE7C,EAAEoC,EAAE/I,MAAM+I,EAAE7K,OAAOqR,EAAEC,EAAEzG,EAAEjJ,GAAGiJ,EAAEhJ,IAAI,OAAOgM,EAAE,gCAAgC,MAAM/C,EAAE,IAAInD,EAAAA,OAAE+G,cAAc,GAAG5D,EAAEuD,OAAO4C,GAAGtC,EAAAA,sBAAErD,EAAET,EAAEgE,mBAAmBY,EAAExB,EAAEkD,EAAEF,EAAEnG,IAAIgE,EAAAA,mBAAExD,EAAEmE,EAAExB,EAAEkD,EAAErG,EAAEmG,EAAExI,EAAEoC,EAAEwB,eAAe,OAAOwB,EAAE,iCAAiC/C,EAAEkE,OAAOC,EAACgF,kCAAC3I,EAAET,EAAEwB,cAAc5D,GAAGyG,EAAAA,iBAAE5D,EAAET,EAAEuB,eAAevB,EAAEwB,cAAc5D,GAAG0G,EAAC+E,6BAAC5I,EAAET,EAAEuB,eAAe3D,GAAG,MAAME,EAAEyG,4BAAI,GAAGlD,EAAElC,mBAAmBrB,GAAG2G,EAACC,wBAACjE,EAAET,EAAEuB,eAAevB,EAAEwB,cAAc5D,EAAEE,GAAG,OAAOkF,EAAE,gCAAgC,GAAGpE,IAAIM,EAAAA,gBAAEtB,GAAGyD,EAAEpC,iBAAY,IAAS0F,EAAC2E,kBAAC7I,EAAET,EAAEmB,eAAerD,GAAG,OAAOkF,EAAE,iCAAiC,IAAI5E,EAAAA,mBAAEqC,EAAE3C,GAAG,OAAOkF,EAAE,kCAAkC,IAAI3E,EAAAA,aAAEoC,EAAE3C,EAAEkC,EAAEkB,WAAWlB,EAAEU,cAAcV,EAAEW,iBAAiB,OAAOqC,EAAE,2BAA2B,MAAMuG,EAAErU,EAAAA,kBAAI,GAAGmM,EAAEyH,WAAWS,GAAGjL,EAACkL,cAAC/I,EAAE3C,EAAEkC,EAAEyB,uBAAuBzB,EAAEyJ,WAAWF,EAAEtM,EAACkI,IAAC6B,OAAO0C,4BAA4B,OAAO1G,EAAE,6BAA6B,MAAM7E,EAAEK,EAAAA,gBAAI,IAAIvJ,EAAAA,cAAEwL,EAAE8I,EAAEvJ,EAAE2J,gBAAgBxL,GAAG,OAAO6E,EAAE,kCAAkC,MAAM7C,EAAErB,EAAC8K,sBAAG,IAAI5K,EAAC6K,oBAACpJ,EAAEtC,EAAEL,EAAEkC,EAAEY,iBAAiBZ,EAAEa,qBAAqBV,GAAG,OAAO6C,EAAE,+BAA+BpE,IAAIQ,yBAAEtB,GAAGuD,EAAElC,wBAAmB,EAAO/J,EAAAA,eAAEmU,GAAGlI,EAAEyH,gBAAW,GAAQ,IAAI,IAAI/L,EAAE,EAAEA,EAAEoB,EAAE2L,SAAS/M,IAAIoB,EAAE4L,MAAMhN,IAAIE,MAAEgM,OAAOe,eAAe7L,EAAE8L,SAASlN,EAAE,GAAG,GAAGoB,EAAE4L,MAAMhN,IAAIoB,EAAE+L,SAASnN,EAAE,GAAG,MAAMqD,EAAG,IAAIR,EAACuK,oBAAC/J,EAAGgK,wBAAwBjM,GAAGiC,EAAGiK,8BAA8BlK,GAAGC,EAAGkK,kBAAkBtK,EAAEuB,gBAAgBnB,EAAGmK,kBAAkBvK,EAAEmB,gBAAgBf,EAAGoK,iBAAiBxK,EAAEwB,eAAepB,EAAGqK,YAAYzK,EAAEjJ,IAAIqJ,EAAGsK,cAAc1K,EAAEhJ,IAAIoJ,EAAGuK,gBAAe,GAAI7K,EAAE5F,oBAAoBkG,EAAGwK,sBAAsB9K,EAAE5F,oBAAoB,MAAMmG,EAAGR,oBAAEO,GAAI,IAAIC,EAAGZ,QAAQ,OAAOuD,EAAE,wCAAwC,MAAM6H,YAAYvK,GAAID,EAAG,OAAOqC,EAAEoI,SAASxK,GAAI,CAACb,SAAQ,EAAGxG,QAAQyJ,EAAEhD,cAAc2B,GAAG2B,EAAE,kCAAiC,EEkBllI+H,CACLxR,EACAC,EACAmP,EACAC,EACD,2BAkB6B,CAC9BvB,EACAsB,EAA4D,CAAA,EAC5DC,GAAoB,KAEpB,MAAOrP,EAAWC,GAAW4N,EAAuBC,GAEpD,OAAO2D,EACLzR,EACAC,EACAmP,EACAC,EACD,8BA3BgC,CACjCvB,EACAsB,EAA+D,CAAA,EAC/DC,GAAoB,KAEpB,MAAOrP,EAAWC,GAAW4N,EAAuBC,GAEpD,MFjCm/Q,EAACzK,EAAEkD,EAAElB,EAAE,CAAA,EAAGyC,GAAE,KAAM,MAAM9B,EAAE,IAAI7G,EAAAA,mBAAEkM,EAAE,CAACrI,KAAK,QAAQkC,aAAac,EAAEb,mBAAc,EAAOC,kBAAkB,IAAImG,EAAE,IAAIjI,UAAEuJ,EAAE,KAAK,IAAI/E,EAAE,CAAC,IAAI,IAAItE,EAAE,EAAEA,EAAE6H,EAAEjG,kBAAkBrG,OAAOyE,IAAI,CAAC,MAAMH,EAAEgI,EAAEjG,kBAAkB5B,GAAGH,EAAEuC,oBAAoBC,EAAAA,uBAAExC,EAAEuC,oBAAoBvC,EAAEqC,aAAaC,EAAC2J,gBAACjM,EAAEqC,aAAarC,EAAEkM,YAAY1T,EAAAA,eAAEwH,EAAEkM,WAAW,CAAClE,EAAElG,gBAAgBkG,EAAElG,mBAAc,EAAO,GAAG4H,EAAEvJ,IAAIqJ,IAAItB,EAAEtF,UAAU,CAACC,SAAQ,EAAGxG,aAAQ,EAAOyG,cAAckF,EAAEjF,MAAM5C,IAAIyJ,EAAExJ,EAAAA,eAAE,IAAImD,KAAKvB,KAAKtB,MAAMmJ,EAAEhJ,MAAMI,GAAGlB,EAAEC,EAAEkD,GAAGG,EAAEQ,EAAAA,aAAEgG,EAAE5I,EAAE2I,EAAEzP,IAAIyP,EAAEvP,MAAMgJ,EAAEhJ,MAAMuP,EAAErR,OAAO8K,EAAE9K,OAAOqR,EAAE9F,cAAc8F,EAAE9F,cAAc8F,EAAE9F,cAAc8F,EAAE7F,gBAAgB6F,EAAE7F,gBAAgB6F,EAAE7F,gBAAgB6F,EAAExI,SAASnD,KAAKkG,MAAMyF,EAAExI,UAAUwI,EAAEtF,WAAWsF,EAAErF,eAAe,EAAEqF,EAAEvP,MAAMuP,EAAExI,SAAS,EAAEwI,EAAEtF,WAAWsF,EAAErR,OAAOqR,EAAExI,SAAS,EAAEwI,EAAEtF,WAAWsF,EAAE5F,iBAAiB4F,EAAE5F,iBAAiB,GAAG,EAAE4F,EAAEzP,GAAGyP,EAAE5F,iBAAiB4F,EAAE3F,qBAAqB2F,EAAExP,GAAGwP,EAAE3F,qBAAqB,MAAM/C,EAAEjD,KAAKkG,MAAMyF,EAAExI,UAAUuL,EAAE1O,KAAKkG,OAAOd,EAAEhJ,MAAM6G,EAAE,GAAGA,GAAGK,EAAEtD,KAAKkG,OAAOd,EAAE9K,OAAO2I,EAAE,GAAGA,GAAGsC,EAAGoG,EAAExI,SAASwI,EAAEzP,GAAGsJ,EAAGzD,EAAE0D,EAAGR,EAAExH,OAAOiI,EAAG,IAAIzD,EAACiM,OAAChJ,WAAWQ,EAAGhL,KAAK8K,EAAGA,EAAG/H,QAAQ,MAAMkI,EAAGV,EAAEgB,EAAGhB,EAAExH,OAAO,EAAE0I,EAAG,IAAIlE,EAAAA,OAAEoD,UAAUc,EAAGzL,KAAKiL,EAAGA,EAAGlI,QAAQ,MAAM2I,EAAGlE,OAAEsF,UAAUoE,GAAG,IAAIrF,EAAGvG,KAAKuC,IAAIvC,KAAKkG,MAAMrD,EAAEE,EAAE2L,EAAEpL,KAAK,IAAIiD,EAAG,KAAKA,EAAG,IAAI,MAAMO,EAAG,GAAGP,EAAGS,EAAG,GAAG,GAAGT,EAAGW,EAAGW,EAAAA,cAAEpB,OAAO,CAACzK,KAAKoK,EAAG0B,UAAU6D,EAAExI,SAASwI,EAAEzP,GAAG6L,WAAW4D,EAAExI,SAASwI,EAAEzP,GAAG2K,SAASC,EAAGkB,SAAShB,IAAK,IAAIiD,EAAEhC,UAAUf,GAAI,OAAOuE,EAAE,yCAAyC,MAAMlE,EAAG,IAAIY,EAAAA,oBAAE,GAAG4B,EAAElG,cAAc0D,GAAIA,EAAGD,KAAK5B,EAAGS,EAAGF,EAAG,KAAK,OAAOwF,EAAE,wCAAwC,MAAMhE,EAAG,CAACvF,EAAEH,EAAElE,EAAEmE,KAAK,MAAMG,EAAED,IAAIwC,EAAEwH,IAAI9J,EAAAA,IAAE+J,OAAOiE,aAAalO,GAAG,CAAC0C,SAAQ,EAAGE,MAAM5C,IAAI+C,EAAE,CAACoD,MAAMnG,EAAEoG,MAAMvG,GAAGgI,EAAEjG,kBAAkB5G,KAAK+H,GAAG,MAAMW,EAAE2C,EAAC8H,cAAC1E,GAAG9D,EAAE,IAAIhK,GAAGsK,EAAE,IAAInG,GAAG6F,EAAE,IAAIjC,EAAES,WAAWT,EAAE1J,GAAG2L,EAAE,IAAIjC,EAAES,WAAWT,EAAE1J,GAAGiM,EAAE,IAAIvC,EAAES,WAAWT,EAAE1J,GAAGiM,EAAE,IAAIvC,EAAES,WAAWT,EAAE1J,GAAG0J,EAAE4C,SAAS,EAAEX,EAAE,IAAIjC,EAAE4C,SAAS,EAAEX,EAAE,IAAIjC,EAAE4C,SAAS,EAAEX,EAAE,IAAIjC,EAAE6C,SAAS,EAAEN,EAAE,IAAIvC,EAAE6C,SAAS,EAAEN,EAAE,IAAIvC,EAAE6C,SAAS,EAAEN,EAAE,IAAIzD,EAAE4L,cAAc5L,EAAE6L,WAAWnO,EAACkI,IAAC6B,OAAOqE,gBAAgB9L,EAAEwH,IAAI9J,EAAAA,IAAE+J,OAAOsE,gBAAgB,iBAAiB1G,EAAEjG,kBAAkBrG,gBAAgByE,SAASH,KAAK2C,EAAEwH,IAAI9J,EAAAA,IAAE+J,OAAOsE,gBAAgB,MAAM9E,EAAEvP,WAAWuP,EAAErR,gBAAgBoK,EAAEwH,IAAI9J,EAACkI,IAAC6B,OAAOsE,gBAAgB,MAAMhL,EAAG,gBAAgBQ,EAAG,aAAa,MAAMgE,EAAE5H,EAACqO,mBAAG,GAAGzL,EAAEb,YAAY6F,GAAG3H,EAAAA,kBAAEoC,EAAEuF,EAAErE,EAAExJ,MAAMwJ,EAAEtL,OAAOuN,EAAEM,EAAEvC,EAAE1J,GAAG0J,EAAEzJ,IAAI,OAAOgG,EAAE,iCAAgC,IAAKF,EAAAA,OAAE+G,eAAeL,OAAOpB,EAAGoJ,mBAAmB,MAAMpF,EAAE,CAAC1D,EAAE,GAAGA,EAAE,IAAI4D,EAAE,CAACtD,EAAE,GAAGA,EAAE,IAAIyD,EAAE,IAAI3J,SAAEyG,cAAckD,EAAEjD,OAAO,KAAK,MAAMxD,EAAEoC,EAAGqB,yBAAyB2C,EAAEE,EAAEG,EAAE,KAAK,GAAG,IAAIzG,EAAE,MAAM,CAACP,SAAQ,GAAI,IAAI,IAAI1C,EAAE,EAAEA,EAAEiD,IAAIjD,EAAE,CAAC,MAAMH,EAAE6J,EAAE/C,SAAS3G,GAAGrE,EAAE0J,EAAGuB,MAAM/G,GAAGO,EAAEN,EAAEuF,EAAGwB,YAAYhH,GAAGK,EAAE,IAAIH,EAACiM,OAAClF,cAAc5G,EAAEuG,OAAO9K,GAAGoL,EAAAA,sBAAEvE,EAAEkB,EAAEuD,mBAAmBzD,EAAGD,EAAGzD,EAAEnE,EAAEuE,GAAG,MAAMC,EAAE+G,EAAAA,mBAAE1E,EAAEgB,EAAGD,EAAGzD,EAAEI,EAAEvE,EAAEoM,EAAErE,EAAEe,eAAe,GAAGvE,EAAEkH,QAAQjH,EAAE,OAAOF,EAAE,gCAAgC,CAACoH,EAAAA,kCAAE7E,EAAEkB,EAAEe,cAAcsD,GAAGT,mBAAE9E,EAAEkB,EAAEc,eAAed,EAAEe,cAAcsD,GAAGR,+BAAE/E,EAAEkB,EAAEc,eAAeuD,GAAG,MAAMnI,EAAE4H,EAAAA,0BAAI,GAAGzE,EAAEX,mBAAmBxC,GAAG8H,0BAAElF,EAAEkB,EAAEc,eAAed,EAAEe,cAAcsD,EAAEnI,GAAG,OAAOK,EAAE,uCAAuC,GAAGqE,IAAInC,kBAAEY,EAAEb,aAAaa,EAAEb,iBAAY,IAAS0F,EAAC2E,kBAAC/J,EAAEkB,EAAEU,eAAexE,GAAG,OAAOK,EAAE,iCAAiC,IAAIoB,EAAAA,mBAAEmB,EAAE5C,GAAG,OAAOK,EAAE,kCAAkC,IAAIqB,EAAAA,aAAEkB,EAAE5C,EAAE8D,EAAES,WAAWT,EAAEC,cAAcD,EAAEE,iBAAiB,OAAO3D,EAAE,2BAA2B,MAAMU,EAAExI,EAACuW,kBAAG,GAAG3L,EAAEgJ,WAAWpL,GAAGY,EAAAA,cAAEiB,EAAE5C,EAAE8D,EAAEgB,uBAAuBhB,EAAEgJ,WAAW/L,EAAET,EAACkI,IAAC6B,OAAO0C,4BAA4B,OAAO1M,EAAE,6BAA6B,MAAMY,EAAEY,EAAAA,gBAAI,IAAIvJ,EAAAA,cAAEsK,EAAE7B,EAAE+C,EAAEkJ,gBAAgB/L,GAAG,OAAOZ,EAAE,kCAAkC,MAAMa,EAAEiB,wBAAI,IAAIE,sBAAEO,EAAE3B,EAAEjB,EAAE8D,EAAEG,iBAAiBH,EAAEI,qBAAqBhD,GAAG,OAAOb,EAAE,+BAA+BqE,IAAIjC,EAAAA,uBAAEzC,GAAGmD,EAAEX,wBAAmB,EAAO/J,EAAAA,eAAEsI,GAAGoC,EAAEgJ,gBAAW,GAAQ,IAAI,IAAI/L,EAAE,EAAEA,EAAEa,EAAEkM,SAAS/M,IAAIa,EAAEmM,MAAMhN,IAAIE,EAAAA,IAAEgM,OAAOe,eAAepM,EAAEqM,SAASlN,EAAE,GAAG,GAAGa,EAAEmM,MAAMhN,IAAIa,EAAEsM,SAASnN,EAAE,GAAG,MAAMkD,EAAE,IAAIL,EAACuK,oBAAClK,EAAEmK,wBAAwBxM,GAAGqC,EAAEoK,8BAA8BxM,GAAGoC,EAAEqK,kBAAkB7J,EAAEc,gBAAgBtB,EAAEsK,kBAAkB9J,EAAEU,gBAAgBlB,EAAEuK,iBAAiB/J,EAAEe,eAAevB,EAAEwK,YAAYhK,EAAE1J,IAAIkJ,EAAEyK,cAAcjK,EAAEzJ,IAAIiJ,EAAE0K,gBAAe,GAAI/L,EAAE1E,oBAAoB+F,EAAE2K,sBAAsBhM,EAAE1E,oBAAoB+F,EAAEyL,SAAS3O,GAAGkD,EAAE0L,SAAS/O,GAAG,MAAMkB,EAAE+B,EAAAA,kBAAEI,GAAG,OAAOnC,EAAE2B,SAASF,EAAEwH,IAAI9J,EAACkI,IAAC6B,OAAOsE,gBAAgB,gBAAgB1N,EAAEgO,sBAAsBhO,EAAEkM,qBAAqB,CAACrK,SAAQ,EAAGoM,KAAK/N,EAAE+M,cAAc7N,EAAE,uCAAsC,EAAGuC,EAAE6L,WAAWnO,MAAE+J,OAAO8E,eAAe,MAAMvJ,EAAG,CAAC,EAAE,EAAE,GAAGC,EAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAIzF,EAAE,EAAEA,EAAEoB,EAAEpB,IAAI,IAAI,IAAIH,EAAE,EAAEA,EAAE2M,EAAE3M,IAAI,CAAC2F,EAAG,GAAGkE,EAAE,GAAG7J,EAAEwD,EAAGmC,EAAG,GAAGkE,EAAE,GAAGlE,EAAG,GAAGkE,EAAE,GAAG1J,EAAEqD,EAAGoC,EAAG,GAAGiE,EAAE,IAAI7J,EAAE,GAAGwD,EAAGoC,EAAG,GAAG3E,EAAE,GAAG2E,EAAG,GAAGiE,EAAE,IAAI1J,EAAE,GAAGqD,EAAG,MAAM1H,EAAE4J,EAAG1F,EAAEG,EAAEwF,EAAGC,GAAI,GAAG9J,EAAE+G,SAAS/G,EAAEmT,KAAK,CAAC/G,EAAEiH,WAAWjH,EAAEkH,aAAapP,EAAEG,EAAE,IAAI,MAAMF,EAAEiI,EAAE+B,QAAQnO,EAAEmT,KAAK5O,EAACkI,IAAC6B,OAAOiF,kBAAkB,GAAGhP,MAAEqI,OAAOoB,aAAa7J,EAAEiK,UAAUvH,EAAEwH,IAAI9J,EAAAA,IAAE+J,OAAOC,eAAe,yCAAyCrK,UAAUG,aAAaiD,EAACkM,yBAACrP,EAAEiK,YAAYjK,EAAEiK,WAAWpO,EAAEmT,KAAK1H,OAAO,CAAC,CAAC,OAAO5E,EAAE4M,UAAUlP,EAACkI,IAAC6B,OAAO8E,eAAezK,GAAG+E,IAAI,CAAC3G,SAAQ,EAAGxG,QAAQ6L,EAAEpF,cAAckF,EAAC,EEiCjvawH,CACL7S,EACAC,EACAmP,EACAC,EACD"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Object3D as e,MeshBasicMaterial as t,Vector3 as i,Mesh as a,CylinderGeometry as s,Matrix4 as r,Color as o,BoxGeometry as l,InstancedMesh as n,DynamicDrawUsage as h,BufferGeometry as c,BufferAttribute as d,LineBasicMaterial as g,CircleGeometry as m,CatmullRomCurve3 as u,Line as f}from"three";import{recastConfigDefaults as b,RecastBuildContext as w,NavMesh as M,Arrays as y,createRcConfig as p,Raw as C,allocHeightfield as x,createHeightfield as S,markWalkableTriangles as A,rasterizeTriangles as k,filterLowHangingWalkableObstacles as R,filterLedgeSpans as v,filterWalkableLowHeightSpans as z,allocCompactHeightfield as _,buildCompactHeightfield as T,freeHeightfield as E,erodeWalkableArea as H,buildDistanceField as D,buildRegions as P,allocContourSet as F,buildContours as L,allocPolyMesh as I,buildPolyMesh as O,allocPolyMeshDetail as $,buildPolyMeshDetail as G,freeCompactHeightfield as W,freeContourSet as N,NavMeshCreateParams as U,createNavMeshData as V,TileCache as B,calcGridSize as K,DetourTileCacheParams as X,vec3 as Y,NavMeshParams as Z,RecastChunkyTriMesh as j,dtStatusToReadableString as q,TileCacheMeshProcess as J,freeHeightfieldLayerSet as Q,cloneRcConfig as ee,allocHeightfieldLayerSet as te,buildHeightfieldLayers as ie,getHeightfieldLayerHeights as ae,getHeightfieldLayerAreas as se,getHeightfieldLayerCons as re,buildTileCacheLayer as oe}from"@recast-navigation/core";class le extends e{agentMeshes=new Map;recastCrowd;agentMaterial;constructor({crowd:e,agentMaterial:i}){super(),this.recastCrowd=e,this.agentMaterial=i??new t({color:"red"}),this.update()}update(){const e=this.recastCrowd.getAgents(),t=new Set(this.agentMeshes.keys());for(const a of e){t.delete(a.agentIndex);const e=a.position(),s=a.velocity();let r=this.agentMeshes.get(a.agentIndex);void 0===r?(r=this.createAgentMesh(a),this.add(r),this.agentMeshes.set(a.agentIndex,r)):this.updateAgentGeometry(r,a),r.position.set(e.x,e.y+a.height/2,e.z),r.lookAt((new i).copy(r.position).add(s))}for(const e of t){const t=this.agentMeshes.get(e);t&&(this.remove(t),this.agentMeshes.delete(e))}}createAgentMesh(e){const t=new a;return t.material=this.agentMaterial,this.updateAgentGeometry(t,e),t.userData={radius:e.radius,height:e.height},t}updateAgentGeometry(e,t){if(e.userData.radius!==t.radius||e.userData.height!==t.height){const i=new s(t.radius,t.radius,t.height);e.geometry.dispose(),e.geometry=i,e.userData.radius=t.radius,e.userData.height=t.height}}}const ne=new r;class he extends e{heightfields;highlightWalkable;defaultColor;walkableColor;material;constructor({heightfields:e,highlightWalkable:i=!1,material:a=new t,defaultColor:s="blue",walkableColor:r="green"}){super(),this.heightfields=e,this.highlightWalkable=i,this.material=a,this.defaultColor=new o(s),this.walkableColor=new o(r),this.update()}update(){this.clear();for(const e of this.heightfields){const t=e.bmin(),i=e.cs(),a=e.ch(),s=e.width(),r=e.height(),o=[];for(let l=0;l<r;++l)for(let r=0;r<s;++r){const n=t.x+r*i,h=t.z+l*i;let c=e.spans(r+l*s);for(;c;){const e=n,s=t.y+c.smin()*a,r=h,l=n+i,d=t.y+c.smax()*a,g=h+i;o.push({position:[(l+e)/2,(d+s)/2,(g+r)/2],walkable:this.highlightWalkable&&0!==c.area()}),c=c.next()}}const c=new l(i,a,i),d=new n(c,this.material,o.length);d.instanceMatrix.setUsage(h);for(let e=0;e<o.length;e++){const{position:t,walkable:i}=o[e];d.setMatrixAt(e,ne.setPosition(...t)),d.setColorAt(e,i?this.walkableColor:this.defaultColor)}d.instanceMatrix.needsUpdate=!0,d.instanceColor&&(d.instanceColor.needsUpdate=!0),this.add(d)}}}class ce extends e{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:e,navMeshMaterial:i}){super(),this.navMesh=e,this.geometry=new c,this.navMeshMaterial=i||new t({color:"orange",transparent:!0,opacity:.7}),this.update(),this.mesh=new a(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[e,t]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new d(Float32Array.from(e),3)),this.geometry.setIndex(new d(Uint32Array.from(t),1)),this.geometry.computeVertexNormals()}}class de extends e{offMeshConnections;entryCircleMaterial;exitCircleMaterial;lineMaterial;constructor({offMeshConnections:e,entryCircleMaterial:i,exitCircleMaterial:a,lineMaterial:s}){super(),this.offMeshConnections=e??[],this.entryCircleMaterial=i??new t({color:"green"}),this.exitCircleMaterial=a??new t({color:"blue"}),this.lineMaterial=s??new g({color:"red"}),this.update()}update(){this.clear();for(const e of this.offMeshConnections){const t=new m(e.radius,16),s=new a(t,this.entryCircleMaterial);s.position.copy(e.startPosition),s.position.y+=.001,s.rotation.x=-Math.PI/2,this.add(s);const r=new a(t,e.bidirectional?this.entryCircleMaterial:this.exitCircleMaterial);r.position.copy(e.endPosition),r.position.y+=.001,r.rotation.x=-Math.PI/2,this.add(r);const o=(new i).copy(e.startPosition),l=(new i).copy(e.endPosition),n=(new i).addVectors(o,l).multiplyScalar(.5);n.y*=1.2;const h=new u([o,n,l]).getPoints(50),d=(new c).setFromPoints(h),g=new f(d,this.lineMaterial);this.add(g)}}}class ge extends e{tileCache;obstacleMeshes=new Map;obstacleMaterial;constructor({tileCache:e,obstacleMaterial:i}){super(),this.tileCache=e,this.obstacleMaterial=i||new t({color:"red",wireframe:!0,wireframeLinewidth:2}),this.update()}update(){const e=new Set(this.obstacleMeshes.keys());for(const[,t]of this.tileCache.obstacles){const i=this.obstacleMeshes.get(t);if(e.delete(t),!i){const{position:e}=t,i=new a(void 0,this.obstacleMaterial);if(i.position.copy(e),"box"===t.type){const{extent:e,angle:a}=t;i.geometry=new l(2*e.x,2*e.y,2*e.z),i.rotation.y=a}else{if("cylinder"!==t.type)throw new Error(`Unknown obstacle type: ${t}`);{const{radius:e,height:a}=t;i.geometry=new s(e,e,a,16),i.position.y+=a/2}}this.add(i),this.obstacleMeshes.set(t,i)}}for(const t of e){const e=this.obstacleMeshes.get(t);e&&(this.remove(e),this.obstacleMeshes.delete(t))}}}const me=(e,t)=>{const i={x:1/0,y:1/0,z:1/0},a={x:-1/0,y:-1/0,z:-1/0};for(let s=0;s<t.length;s++){const r=t[s],o=e[3*r],l=e[3*r+1],n=e[3*r+2];i.x=Math.min(i.x,o),i.y=Math.min(i.y,l),i.z=Math.min(i.z,n),a.x=Math.max(a.x,o),a.y=Math.max(a.y,l),a.z=Math.max(a.z,n)}return{bbMin:Y.toArray(i),bbMax:Y.toArray(a)}},ue=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},fe=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),be={...b},we={...b,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},Me=(e,t,i={},a=!1)=>{const s=new w,r={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new B,l=new M,n=()=>{if(!a)for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.heightfield&&(E(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(W(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(Q(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},h=e=>(n(),o.destroy(),l.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:r,error:e}),c=e,d=t.length,g=new y.VertsArray;g.copy(c,c.length);const m=t,u=t.length/3,f=new y.TrisArray;f.copy(m,m.length);const{bbMin:b,bbMax:D}=me(e,t),{expectedLayersPerTile:P,maxObstacles:F,...L}={...we,...i},I=p(L),O=K(b,D,I.cs);I.width=O.width,I.height=O.height,I.minRegionArea=I.minRegionArea*I.minRegionArea,I.mergeRegionArea=I.mergeRegionArea*I.mergeRegionArea,I.detailSampleDist=I.detailSampleDist<.9?0:I.cs*I.detailSampleDist,I.detailSampleMaxError=I.ch*I.detailSampleMaxError;const $=Math.floor(I.tileSize),G=Math.floor((I.width+$-1)/$),N=Math.floor((I.height+$-1)/$);I.borderSize=I.walkableRadius+3,I.width=I.tileSize+2*I.borderSize,I.height=I.tileSize+2*I.borderSize;const U=X.create({orig:b,cs:I.cs,ch:I.ch,width:I.tileSize,height:I.tileSize,walkableHeight:I.walkableHeight,walkableRadius:I.walkableRadius,walkableClimb:I.walkableClimb,maxSimplificationError:I.maxSimplificationError,maxTiles:G*N*P,maxObstacles:F}),V=new C.RecastLinearAllocator(32e3),q=new C.RecastFastLZCompressor,le=i.tileCacheMeshProcess??new J(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(U,V,q,le))return h("Failed to initialize tile cache");const ne=Y.fromArray(b);let he=Math.min(Math.floor(ue(fe(G*N*P))),14);he>14&&(he=14);const ce=1<<he,de=1<<22-he,ge=Z.create({orig:ne,tileWidth:I.tileSize*I.cs,tileHeight:I.tileSize*I.cs,maxTiles:ce,maxPolys:de});if(!l.initTiled(ge))return h("Failed to initialize tiled navmesh");const be=new j;if(r.chunkyTriMesh=be,!be.init(g,f,u,256))return h("Failed to build chunky triangle mesh");const Me=(e,t)=>{const i={tileX:e,tileY:t},o=I.tileSize*I.cs,l=ee(I),n=[b[0]+e*o,b[1],b[2]+t*o],h=[b[0]+(e+1)*o,D[1],b[2]+(t+1)*o];n[0]-=l.borderSize*l.cs,n[2]-=l.borderSize*l.cs,h[0]+=l.borderSize*l.cs,h[2]+=l.borderSize*l.cs,l.set_bmin(0,n[0]),l.set_bmin(1,n[1]),l.set_bmin(2,n[2]),l.set_bmax(0,h[0]),l.set_bmax(1,h[1]),l.set_bmax(2,h[2]);const c=x();if(i.heightfield=c,!S(s,c,l.width,l.height,n,h,l.cs,l.ch))return{n:0};const m=[n[0],n[2]],u=[h[0],h[2]],f=new y.ChunkIdsArray;f.resize(512);const w=be.getChunksOverlappingRect(m,u,f,512);if(0===w)return{n:0};for(let e=0;e<w;++e){const t=f.get_data(e),i=be.nodes(t).n,a=be.getNodeTris(t),r=new y.TriAreasArray;r.resize(i),A(s,l.walkableSlopeAngle,g,d,a,i,r);const o=k(s,g,d,a,r,i,c,l.walkableClimb);if(r.free(),!o)return{n:0}}R(s,I.walkableClimb,c),v(s,I.walkableHeight,I.walkableClimb,c),z(s,I.walkableHeight,c);const M=_();if(!T(s,I.walkableHeight,I.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!H(s,I.walkableRadius,M))return{n:0};const p=te();if(!ie(s,M,I.borderSize,I.walkableHeight,p))return{n:0};a||(W(M),i.compactHeightfield=void 0);const P=[];for(let i=0;i<p.nlayers();i++){const a=new y.TileCacheData,s=p.layers(i),r=new C.dtTileCacheLayerHeader;r.magic=C.Detour.TILECACHE_MAGIC,r.version=C.Detour.TILECACHE_VERSION,r.tx=e,r.ty=t,r.tlayer=i;const o=s.bmin(),l=s.bmax();r.set_bmin(0,o.x),r.set_bmin(1,o.y),r.set_bmin(2,o.z),r.set_bmax(0,l.x),r.set_bmax(1,l.y),r.set_bmax(2,l.z),r.width=s.width(),r.height=s.height(),r.minx=s.minx(),r.maxx=s.maxx(),r.miny=s.miny(),r.maxy=s.maxy(),r.hmin=s.hmin(),r.hmax=s.hmax();const n=ae(s),h=se(s),c=re(s),d=oe(q,r,n,h,c,a);if(C.Detour.statusFailed(d))return{n:0};P.push(a)}return a||(Q(p),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:P.length,tiles:P}};for(let e=0;e<N;++e)for(let t=0;t<G;++t){const{n:i,tiles:a}=Me(t,e);if(i>0&&a)for(let r=0;r<i;r++){const i=a[r],l=o.addTile(i);C.Detour.statusFailed(l.status)&&s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<N;e++)for(let t=0;t<G;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(C.Detour.statusFailed(i))return h(`Failed to build nav mesh tiles at ${t}, ${e}`)}return n(),{success:!0,tileCache:o,navMesh:l,intermediates:r}},ye={...b},pe=new i,Ce=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i;const s=i.geometry.getIndex()?.array;if(!s){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],s={};let r=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,o=e.geometry.getIndex().array;for(let l=0;l<o.length;l++){const n=3*o[l],h=pe.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=s[c];d||(s[c]=d=r,i.push(h.x,h.y,h.z),r++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]},xe=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"solo",buildContext:s},o=new M,l=e=>(a||(r.heightfield&&(E(r.heightfield),r.heightfield=void 0),r.compactHeightfield&&(W(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(N(r.contourSet),r.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:r,error:e}),n=e,h=t.length,c=new y.VertsArray;c.copy(n,n.length);const d=t,g=t.length/3,m=new y.TrisArray;m.copy(d,d.length);const{bbMin:u,bbMax:f}=me(e,t),b=p({...be,...i});b.minRegionArea=b.minRegionArea*b.minRegionArea,b.mergeRegionArea=b.mergeRegionArea*b.mergeRegionArea,b.detailSampleDist=b.detailSampleDist<.9?0:b.cs*b.detailSampleDist,b.detailSampleMaxError=b.ch*b.detailSampleMaxError;const B=C.Recast.calcGridSize(u,f,b.cs);b.width=B.width,b.height=B.height;const K=x();if(r.heightfield=K,!S(s,K,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const X=new y.TriAreasArray;if(X.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,X),!k(s,c,h,m,X,g,K,b.walkableClimb))return l("Could not rasterize triangles");X.free(),R(s,b.walkableClimb,K),v(s,b.walkableHeight,b.walkableClimb,K),z(s,b.walkableHeight,K);const Y=_();if(r.compactHeightfield=Y,!T(s,b.walkableHeight,b.walkableClimb,K,Y))return l("Failed to build compact data");if(a||(E(K),r.heightfield=void 0),!H(s,b.walkableRadius,Y))return l("Failed to erode walkable area");if(!D(s,Y))return l("Failed to build distance field");if(!P(s,Y,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const Z=F();if(r.contourSet=Z,!L(s,Y,b.maxSimplificationError,b.maxEdgeLen,Z,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const j=I();if(!O(s,Z,b.maxVertsPerPoly,j))return l("Failed to triangulate contours");const q=$();if(!G(s,j,Y,b.detailSampleDist,b.detailSampleMaxError,q))return l("Failed to build detail mesh");a||(W(Y),r.compactHeightfield=void 0,N(Z),r.contourSet=void 0);for(let e=0;e<j.npolys();e++)j.areas(e)==C.Recast.WALKABLE_AREA&&j.setAreas(e,0),0==j.areas(e)&&j.setFlags(e,1);const J=new U;J.setPolyMeshCreateParams(j),J.setPolyMeshDetailCreateParams(q),J.setWalkableHeight(b.walkableHeight),J.setWalkableRadius(b.walkableRadius),J.setWalkableClimb(b.walkableClimb),J.setCellSize(b.cs),J.setCellHeight(b.ch),J.setBuildBvTree(!0),i.offMeshConnections&&J.setOffMeshConnections(i.offMeshConnections);const Q=V(J);if(!Q.success)return l("Failed to create Detour navmesh data");const{navMeshData:ee}=Q;return o.initSolo(ee)?{success:!0,navMesh:o,intermediates:r}:l("Failed to create Detour navmesh")})(a,s,t,i)},Se=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new M,l=()=>{if(!a){for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.compactHeightfield&&W(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&N(t.contourSet)}r.chunkyTriMesh&&(r.chunkyTriMesh=void 0)}},n=e=>(l(),o.destroy(),{success:!1,navMesh:void 0,intermediates:r,error:e}),h=p({...ye,...i}),{bbMin:c,bbMax:d}=me(e,t),g=K(c,d,h.cs);h.width=g.width,h.height=g.height,h.minRegionArea=h.minRegionArea*h.minRegionArea,h.mergeRegionArea=h.mergeRegionArea*h.mergeRegionArea,h.tileSize=Math.floor(h.tileSize),h.borderSize=h.walkableRadius+3,h.width=h.tileSize+2*h.borderSize,h.height=h.tileSize+2*h.borderSize,h.detailSampleDist=h.detailSampleDist<.9?0:h.cs*h.detailSampleDist,h.detailSampleMaxError=h.ch*h.detailSampleMaxError;const m=Math.floor(h.tileSize),u=Math.floor((g.width+m-1)/m),f=Math.floor((g.height+m-1)/m),b=h.tileSize*h.cs,B=e,X=t.length,J=new y.VertsArray;J.copy(B,B.length);const Q=t,te=t.length/3,ie=new y.TrisArray;ie.copy(Q,Q.length);const ae=Y.fromArray(c);let se=Math.min(Math.floor(ue(fe(u*f))),14);se>14&&(se=14);const re=1<<se,oe=1<<22-se,le=Z.create({orig:ae,tileWidth:h.tileSize*h.cs,tileHeight:h.tileSize*h.cs,maxTiles:re,maxPolys:oe});if(!o.initTiled(le))return n("Could not init nav mesh for tiled use");const ne=new j;if(r.chunkyTriMesh=ne,!ne.init(J,ie,te,256))return n("Failed to build chunky triangle mesh");const he=(e,t,o,l)=>{const n=e=>(s.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),c={tileX:e,tileY:t};r.tileIntermediates.push(c);const d=ee(h),g=[...o],m=[...l];g[0]-=d.borderSize*d.cs,g[2]-=d.borderSize*d.cs,m[0]+=d.borderSize*d.cs,m[2]+=d.borderSize*d.cs,d.set_bmin(0,g[0]),d.set_bmin(1,g[1]),d.set_bmin(2,g[2]),d.set_bmax(0,m[0]),d.set_bmax(1,m[1]),d.set_bmax(2,m[2]),s.resetTimers(),s.startTimer(C.Module.RC_TIMER_TOTAL),s.log(C.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(C.Module.RC_LOG_PROGRESS,` - ${h.width} x ${h.height} cells`),s.log(C.Module.RC_LOG_PROGRESS,` - ${X/1e3}fK verts, ${te/1e3}K tris`);const u=x();if(c.heightfield=u,!S(s,u,d.width,d.height,g,m,d.cs,d.ch))return n("Could not create heightfield");(new y.TriAreasArray).resize(ne.maxTrisPerChunk());const f=[g[0],g[2]],b=[m[0],m[2]],w=new y.ChunkIdsArray;w.resize(512);const M=ne.getChunksOverlappingRect(f,b,w,512);if(0===M)return{success:!0};for(let e=0;e<M;++e){const t=w.get_data(e),i=ne.nodes(t).n,a=ne.getNodeTris(t),r=new y.TriAreasArray;r.resize(i),A(s,d.walkableSlopeAngle,J,X,a,i,r);const o=k(s,J,X,a,r,i,u,d.walkableClimb);if(r.free(),!o)return n("Could not rasterize triangles")}R(s,d.walkableClimb,u),v(s,d.walkableHeight,d.walkableClimb,u),z(s,d.walkableHeight,u);const p=_();if(c.compactHeightfield=p,!T(s,d.walkableHeight,d.walkableClimb,u,p))return n("Could not build compact heightfield");if(a||(E(c.heightfield),c.heightfield=void 0),!H(s,d.walkableRadius,p))return n("Could not erode walkable area");if(!D(s,p))return n("Failed to build distance field");if(!P(s,p,d.borderSize,d.minRegionArea,d.mergeRegionArea))return n("Failed to build regions");const B=F();if(c.contourSet=B,!L(s,p,d.maxSimplificationError,d.maxEdgeLen,B,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const K=I();if(!O(s,B,d.maxVertsPerPoly,K))return n("Failed to triangulate contours");const Y=$();if(!G(s,K,p,d.detailSampleDist,d.detailSampleMaxError,Y))return n("Failed to build detail mesh");a||(W(p),c.compactHeightfield=void 0,N(B),c.contourSet=void 0);for(let e=0;e<K.npolys();e++)K.areas(e)==C.Recast.WALKABLE_AREA&&K.setAreas(e,0),0==K.areas(e)&&K.setFlags(e,1);const Z=new U;Z.setPolyMeshCreateParams(K),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(d.walkableHeight),Z.setWalkableRadius(d.walkableRadius),Z.setWalkableClimb(d.walkableClimb),Z.setCellSize(d.cs),Z.setCellHeight(d.ch),Z.setBuildBvTree(!0),i.offMeshConnections&&Z.setOffMeshConnections(i.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=V(Z);return j.success?(s.log(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${K.nverts()} vertices ${K.npolys()} polygons`),{success:!0,data:j.navMeshData}):n("Failed to create Detour navmesh data")};s.startTimer(C.Module.RC_TIMER_TEMP);const ce=[0,0,0],de=[0,0,0];for(let e=0;e<f;e++)for(let t=0;t<u;t++){ce[0]=c[0]+t*b,ce[1]=c[1],ce[2]=c[2]+e*b,de[0]=c[0]+(t+1)*b,de[1]=d[1],de[2]=c[2]+(e+1)*b;const i=he(t,e,ce,de);if(i.success&&i.data){o.removeTile(o.getTileRefAt(t,e,0));const a=o.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${q(a.status)} (${a.status})`),i.data.free())}}return s.stopTimer(C.Module.RC_TIMER_TEMP),a||l(),{success:!0,navMesh:o,intermediates:r}})(a,s,t,i)},Ae=(e,t={},i=!1)=>{const[a,s]=Ce(e);return Me(a,s,t,i)};export{le as CrowdHelper,he as HeightfieldHelper,ce as NavMeshHelper,de as OffMeshConnectionsHelper,ge as TileCacheHelper,Ce as getPositionsAndIndices,xe as threeToSoloNavMesh,Ae as threeToTileCache,Se as threeToTiledNavMesh};
|
|
1
|
+
import{Object3D as e,MeshBasicMaterial as t,Vector3 as i,Mesh as a,CylinderGeometry as s,Matrix4 as r,Color as o,BoxGeometry as l,InstancedMesh as n,DynamicDrawUsage as h,BufferGeometry as c,BufferAttribute as d,LineBasicMaterial as g,CircleGeometry as m,CatmullRomCurve3 as u,Line as f}from"three";import{recastConfigDefaults as b,RecastBuildContext as w,NavMesh as M,Arrays as y,createRcConfig as p,Raw as C,allocHeightfield as x,createHeightfield as S,markWalkableTriangles as A,rasterizeTriangles as k,filterLowHangingWalkableObstacles as R,filterLedgeSpans as v,filterWalkableLowHeightSpans as z,allocCompactHeightfield as _,buildCompactHeightfield as T,freeHeightfield as E,erodeWalkableArea as H,buildDistanceField as D,buildRegions as P,allocContourSet as F,buildContours as L,allocPolyMesh as I,buildPolyMesh as O,allocPolyMeshDetail as W,buildPolyMeshDetail as $,freeCompactHeightfield as G,freeContourSet as N,NavMeshCreateParams as U,createNavMeshData as V,TileCache as B,calcGridSize as K,DetourTileCacheParams as X,vec3 as Y,NavMeshParams as Z,RecastChunkyTriMesh as j,dtStatusToReadableString as q,TileCacheMeshProcess as J,freeHeightfieldLayerSet as Q,cloneRcConfig as ee,allocHeightfieldLayerSet as te,buildHeightfieldLayers as ie,getHeightfieldLayerHeights as ae,getHeightfieldLayerAreas as se,getHeightfieldLayerCons as re,buildTileCacheLayer as oe}from"@recast-navigation/core";class le extends e{agentMeshes=new Map;recastCrowd;agentMaterial;constructor({crowd:e,agentMaterial:i}){super(),this.recastCrowd=e,this.agentMaterial=i??new t({color:"red"}),this.update()}update(){const e=this.recastCrowd.getAgents(),t=new Set(this.agentMeshes.keys());for(const a of e){t.delete(a.agentIndex);const e=a.position(),s=a.velocity();let r=this.agentMeshes.get(a.agentIndex);void 0===r?(r=this.createAgentMesh(a),this.add(r),this.agentMeshes.set(a.agentIndex,r)):this.updateAgentGeometry(r,a),r.position.set(e.x,e.y+a.height/2,e.z),r.lookAt((new i).copy(r.position).add(s))}for(const e of t){const t=this.agentMeshes.get(e);t&&(this.remove(t),this.agentMeshes.delete(e))}}createAgentMesh(e){const t=new a;return t.material=this.agentMaterial,this.updateAgentGeometry(t,e),t.userData={radius:e.radius,height:e.height},t}updateAgentGeometry(e,t){if(e.userData.radius!==t.radius||e.userData.height!==t.height){const i=new s(t.radius,t.radius,t.height);e.geometry.dispose(),e.geometry=i,e.userData.radius=t.radius,e.userData.height=t.height}}}const ne=new r;class he extends e{heightfields;highlightWalkable;defaultColor;walkableColor;material;constructor({heightfields:e,highlightWalkable:i=!1,material:a=new t,defaultColor:s="blue",walkableColor:r="green"}){super(),this.heightfields=e,this.highlightWalkable=i,this.material=a,this.defaultColor=new o(s),this.walkableColor=new o(r),this.update()}update(){this.clear();for(const e of this.heightfields){const t=e.bmin(),i=e.cs(),a=e.ch(),s=e.width(),r=e.height(),o=[];for(let l=0;l<r;++l)for(let r=0;r<s;++r){const n=t.x+r*i,h=t.z+l*i;let c=e.spans(r+l*s);for(;c;){const e=n,s=t.y+c.smin()*a,r=h,l=n+i,d=t.y+c.smax()*a,g=h+i;o.push({position:[(l+e)/2,(d+s)/2,(g+r)/2],walkable:this.highlightWalkable&&0!==c.area()}),c=c.next()}}const c=new l(i,a,i),d=new n(c,this.material,o.length);d.instanceMatrix.setUsage(h);for(let e=0;e<o.length;e++){const{position:t,walkable:i}=o[e];d.setMatrixAt(e,ne.setPosition(...t)),d.setColorAt(e,i?this.walkableColor:this.defaultColor)}d.instanceMatrix.needsUpdate=!0,d.instanceColor&&(d.instanceColor.needsUpdate=!0),this.add(d)}}}class ce extends e{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:e,navMeshMaterial:i}){super(),this.navMesh=e,this.geometry=new c,this.navMeshMaterial=i||new t({color:"orange",transparent:!0,opacity:.7,depthWrite:!1}),this.update(),this.mesh=new a(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[e,t]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new d(Float32Array.from(e),3)),this.geometry.setIndex(new d(Uint32Array.from(t),1)),this.geometry.computeVertexNormals()}}class de extends e{offMeshConnections;entryCircleMaterial;exitCircleMaterial;lineMaterial;constructor({offMeshConnections:e,entryCircleMaterial:i,exitCircleMaterial:a,lineMaterial:s}){super(),this.offMeshConnections=e??[],this.entryCircleMaterial=i??new t({color:"green"}),this.exitCircleMaterial=a??new t({color:"blue"}),this.lineMaterial=s??new g({color:"red"}),this.update()}update(){this.clear();for(const e of this.offMeshConnections){const t=new m(e.radius,16),s=new a(t,this.entryCircleMaterial);s.position.copy(e.startPosition),s.position.y+=.001,s.rotation.x=-Math.PI/2,this.add(s);const r=new a(t,e.bidirectional?this.entryCircleMaterial:this.exitCircleMaterial);r.position.copy(e.endPosition),r.position.y+=.001,r.rotation.x=-Math.PI/2,this.add(r);const o=(new i).copy(e.startPosition),l=(new i).copy(e.endPosition),n=(new i).addVectors(o,l).multiplyScalar(.5);n.y*=1.2;const h=new u([o,n,l]).getPoints(50),d=(new c).setFromPoints(h),g=new f(d,this.lineMaterial);this.add(g)}}}class ge extends e{tileCache;obstacleMeshes=new Map;obstacleMaterial;constructor({tileCache:e,obstacleMaterial:i}){super(),this.tileCache=e,this.obstacleMaterial=i||new t({color:"red",wireframe:!0,wireframeLinewidth:2}),this.update()}update(){const e=new Set(this.obstacleMeshes.keys());for(const[,t]of this.tileCache.obstacles){const i=this.obstacleMeshes.get(t);if(e.delete(t),!i){const{position:e}=t,i=new a(void 0,this.obstacleMaterial);if(i.position.copy(e),"box"===t.type){const{extent:e,angle:a}=t;i.geometry=new l(2*e.x,2*e.y,2*e.z),i.rotation.y=a}else{if("cylinder"!==t.type)throw new Error(`Unknown obstacle type: ${t}`);{const{radius:e,height:a}=t;i.geometry=new s(e,e,a,16),i.position.y+=a/2}}this.add(i),this.obstacleMeshes.set(t,i)}}for(const t of e){const e=this.obstacleMeshes.get(t);e&&(this.remove(e),this.obstacleMeshes.delete(t))}}}const me=(e,t)=>{const i={x:1/0,y:1/0,z:1/0},a={x:-1/0,y:-1/0,z:-1/0};for(let s=0;s<t.length;s++){const r=t[s],o=e[3*r],l=e[3*r+1],n=e[3*r+2];i.x=Math.min(i.x,o),i.y=Math.min(i.y,l),i.z=Math.min(i.z,n),a.x=Math.max(a.x,o),a.y=Math.max(a.y,l),a.z=Math.max(a.z,n)}return{bbMin:Y.toArray(i),bbMax:Y.toArray(a)}},ue=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},fe=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),be={...b},we={...b,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},Me=(e,t,i={},a=!1)=>{const s=new w,r={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new B,l=new M,n=()=>{if(!a)for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.heightfield&&(E(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(G(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(Q(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},h=e=>(n(),o.destroy(),l.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:r,error:e}),c=e,d=t.length,g=new y.VertsArray;g.copy(c,c.length);const m=t,u=t.length/3,f=new y.TrisArray;f.copy(m,m.length);const{bbMin:b,bbMax:D}=me(e,t),{expectedLayersPerTile:P,maxObstacles:F,...L}={...we,...i},I=p(L),O=K(b,D,I.cs);I.width=O.width,I.height=O.height,I.minRegionArea=I.minRegionArea*I.minRegionArea,I.mergeRegionArea=I.mergeRegionArea*I.mergeRegionArea,I.detailSampleDist=I.detailSampleDist<.9?0:I.cs*I.detailSampleDist,I.detailSampleMaxError=I.ch*I.detailSampleMaxError;const W=Math.floor(I.tileSize),$=Math.floor((I.width+W-1)/W),N=Math.floor((I.height+W-1)/W);I.borderSize=I.walkableRadius+3,I.width=I.tileSize+2*I.borderSize,I.height=I.tileSize+2*I.borderSize;const U=X.create({orig:b,cs:I.cs,ch:I.ch,width:I.tileSize,height:I.tileSize,walkableHeight:I.walkableHeight,walkableRadius:I.walkableRadius,walkableClimb:I.walkableClimb,maxSimplificationError:I.maxSimplificationError,maxTiles:$*N*P,maxObstacles:F}),V=new C.RecastLinearAllocator(32e3),q=new C.RecastFastLZCompressor,le=i.tileCacheMeshProcess??new J(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(U,V,q,le))return h("Failed to initialize tile cache");const ne=Y.fromArray(b);let he=Math.min(Math.floor(ue(fe($*N*P))),14);he>14&&(he=14);const ce=1<<he,de=1<<22-he,ge=Z.create({orig:ne,tileWidth:I.tileSize*I.cs,tileHeight:I.tileSize*I.cs,maxTiles:ce,maxPolys:de});if(!l.initTiled(ge))return h("Failed to initialize tiled navmesh");const be=new j;if(r.chunkyTriMesh=be,!be.init(g,f,u,256))return h("Failed to build chunky triangle mesh");const Me=(e,t)=>{const i={tileX:e,tileY:t},o=I.tileSize*I.cs,l=ee(I),n=[b[0]+e*o,b[1],b[2]+t*o],h=[b[0]+(e+1)*o,D[1],b[2]+(t+1)*o];n[0]-=l.borderSize*l.cs,n[2]-=l.borderSize*l.cs,h[0]+=l.borderSize*l.cs,h[2]+=l.borderSize*l.cs,l.set_bmin(0,n[0]),l.set_bmin(1,n[1]),l.set_bmin(2,n[2]),l.set_bmax(0,h[0]),l.set_bmax(1,h[1]),l.set_bmax(2,h[2]);const c=x();if(i.heightfield=c,!S(s,c,l.width,l.height,n,h,l.cs,l.ch))return{n:0};const m=[n[0],n[2]],u=[h[0],h[2]],f=new y.ChunkIdsArray;f.resize(512);const w=be.getChunksOverlappingRect(m,u,f,512);if(0===w)return{n:0};for(let e=0;e<w;++e){const t=f.get_data(e),i=be.nodes(t).n,a=be.getNodeTris(t),r=new y.TriAreasArray;r.resize(i),A(s,l.walkableSlopeAngle,g,d,a,i,r);const o=k(s,g,d,a,r,i,c,l.walkableClimb);if(r.free(),!o)return{n:0}}R(s,I.walkableClimb,c),v(s,I.walkableHeight,I.walkableClimb,c),z(s,I.walkableHeight,c);const M=_();if(!T(s,I.walkableHeight,I.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!H(s,I.walkableRadius,M))return{n:0};const p=te();if(!ie(s,M,I.borderSize,I.walkableHeight,p))return{n:0};a||(G(M),i.compactHeightfield=void 0);const P=[];for(let i=0;i<p.nlayers();i++){const a=new y.TileCacheData,s=p.layers(i),r=new C.dtTileCacheLayerHeader;r.magic=C.Detour.TILECACHE_MAGIC,r.version=C.Detour.TILECACHE_VERSION,r.tx=e,r.ty=t,r.tlayer=i;const o=s.bmin(),l=s.bmax();r.set_bmin(0,o.x),r.set_bmin(1,o.y),r.set_bmin(2,o.z),r.set_bmax(0,l.x),r.set_bmax(1,l.y),r.set_bmax(2,l.z),r.width=s.width(),r.height=s.height(),r.minx=s.minx(),r.maxx=s.maxx(),r.miny=s.miny(),r.maxy=s.maxy(),r.hmin=s.hmin(),r.hmax=s.hmax();const n=ae(s),h=se(s),c=re(s),d=oe(q,r,n,h,c,a);if(C.Detour.statusFailed(d))return{n:0};P.push(a)}return a||(Q(p),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:P.length,tiles:P}};for(let e=0;e<N;++e)for(let t=0;t<$;++t){const{n:i,tiles:a}=Me(t,e);if(i>0&&a)for(let r=0;r<i;r++){const i=a[r],l=o.addTile(i);C.Detour.statusFailed(l.status)&&s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<N;e++)for(let t=0;t<$;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(C.Detour.statusFailed(i))return h(`Failed to build nav mesh tiles at ${t}, ${e}`)}return n(),{success:!0,tileCache:o,navMesh:l,intermediates:r}},ye={...b},pe=new i,Ce=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i;const s=i.geometry.getIndex()?.array;if(void 0===s){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],s={};let r=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,o=e.geometry.getIndex().array;for(let l=0;l<o.length;l++){const n=3*o[l],h=pe.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=s[c];d||(s[c]=d=r,i.push(h.x,h.y,h.z),r++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]},xe=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"solo",buildContext:s},o=new M,l=e=>(a||(r.heightfield&&(E(r.heightfield),r.heightfield=void 0),r.compactHeightfield&&(G(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(N(r.contourSet),r.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:r,error:e}),n=e,h=t.length,c=new y.VertsArray;c.copy(n,n.length);const d=t,g=t.length/3,m=new y.TrisArray;m.copy(d,d.length);const{bbMin:u,bbMax:f}=me(e,t),b=p({...be,...i});b.minRegionArea=b.minRegionArea*b.minRegionArea,b.mergeRegionArea=b.mergeRegionArea*b.mergeRegionArea,b.detailSampleDist=b.detailSampleDist<.9?0:b.cs*b.detailSampleDist,b.detailSampleMaxError=b.ch*b.detailSampleMaxError;const B=C.Recast.calcGridSize(u,f,b.cs);b.width=B.width,b.height=B.height;const K=x();if(r.heightfield=K,!S(s,K,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const X=new y.TriAreasArray;if(X.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,X),!k(s,c,h,m,X,g,K,b.walkableClimb))return l("Could not rasterize triangles");X.free(),R(s,b.walkableClimb,K),v(s,b.walkableHeight,b.walkableClimb,K),z(s,b.walkableHeight,K);const Y=_();if(r.compactHeightfield=Y,!T(s,b.walkableHeight,b.walkableClimb,K,Y))return l("Failed to build compact data");if(a||(E(K),r.heightfield=void 0),!H(s,b.walkableRadius,Y))return l("Failed to erode walkable area");if(!D(s,Y))return l("Failed to build distance field");if(!P(s,Y,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const Z=F();if(r.contourSet=Z,!L(s,Y,b.maxSimplificationError,b.maxEdgeLen,Z,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const j=I();if(!O(s,Z,b.maxVertsPerPoly,j))return l("Failed to triangulate contours");const q=W();if(!$(s,j,Y,b.detailSampleDist,b.detailSampleMaxError,q))return l("Failed to build detail mesh");a||(G(Y),r.compactHeightfield=void 0,N(Z),r.contourSet=void 0);for(let e=0;e<j.npolys();e++)j.areas(e)==C.Recast.WALKABLE_AREA&&j.setAreas(e,0),0==j.areas(e)&&j.setFlags(e,1);const J=new U;J.setPolyMeshCreateParams(j),J.setPolyMeshDetailCreateParams(q),J.setWalkableHeight(b.walkableHeight),J.setWalkableRadius(b.walkableRadius),J.setWalkableClimb(b.walkableClimb),J.setCellSize(b.cs),J.setCellHeight(b.ch),J.setBuildBvTree(!0),i.offMeshConnections&&J.setOffMeshConnections(i.offMeshConnections);const Q=V(J);if(!Q.success)return l("Failed to create Detour navmesh data");const{navMeshData:ee}=Q;return o.initSolo(ee)?{success:!0,navMesh:o,intermediates:r}:l("Failed to create Detour navmesh")})(a,s,t,i)},Se=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new M,l=()=>{if(!a){for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.compactHeightfield&&G(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&N(t.contourSet)}r.chunkyTriMesh&&(r.chunkyTriMesh=void 0)}},n=e=>(l(),o.destroy(),{success:!1,navMesh:void 0,intermediates:r,error:e}),h=p({...ye,...i}),{bbMin:c,bbMax:d}=me(e,t),g=K(c,d,h.cs);h.width=g.width,h.height=g.height,h.minRegionArea=h.minRegionArea*h.minRegionArea,h.mergeRegionArea=h.mergeRegionArea*h.mergeRegionArea,h.tileSize=Math.floor(h.tileSize),h.borderSize=h.walkableRadius+3,h.width=h.tileSize+2*h.borderSize,h.height=h.tileSize+2*h.borderSize,h.detailSampleDist=h.detailSampleDist<.9?0:h.cs*h.detailSampleDist,h.detailSampleMaxError=h.ch*h.detailSampleMaxError;const m=Math.floor(h.tileSize),u=Math.floor((g.width+m-1)/m),f=Math.floor((g.height+m-1)/m),b=h.tileSize*h.cs,B=e,X=t.length,J=new y.VertsArray;J.copy(B,B.length);const Q=t,te=t.length/3,ie=new y.TrisArray;ie.copy(Q,Q.length);const ae=Y.fromArray(c);let se=Math.min(Math.floor(ue(fe(u*f))),14);se>14&&(se=14);const re=1<<se,oe=1<<22-se,le=Z.create({orig:ae,tileWidth:h.tileSize*h.cs,tileHeight:h.tileSize*h.cs,maxTiles:re,maxPolys:oe});if(!o.initTiled(le))return n("Could not init nav mesh for tiled use");const ne=new j;if(r.chunkyTriMesh=ne,!ne.init(J,ie,te,256))return n("Failed to build chunky triangle mesh");const he=(e,t,o,l)=>{const n=e=>(s.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),c={tileX:e,tileY:t};r.tileIntermediates.push(c);const d=ee(h),g=[...o],m=[...l];g[0]-=d.borderSize*d.cs,g[2]-=d.borderSize*d.cs,m[0]+=d.borderSize*d.cs,m[2]+=d.borderSize*d.cs,d.set_bmin(0,g[0]),d.set_bmin(1,g[1]),d.set_bmin(2,g[2]),d.set_bmax(0,m[0]),d.set_bmax(1,m[1]),d.set_bmax(2,m[2]),s.resetTimers(),s.startTimer(C.Module.RC_TIMER_TOTAL),s.log(C.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(C.Module.RC_LOG_PROGRESS,` - ${h.width} x ${h.height} cells`),s.log(C.Module.RC_LOG_PROGRESS,` - ${X/1e3}fK verts, ${te/1e3}K tris`);const u=x();if(c.heightfield=u,!S(s,u,d.width,d.height,g,m,d.cs,d.ch))return n("Could not create heightfield");(new y.TriAreasArray).resize(ne.maxTrisPerChunk());const f=[g[0],g[2]],b=[m[0],m[2]],w=new y.ChunkIdsArray;w.resize(512);const M=ne.getChunksOverlappingRect(f,b,w,512);if(0===M)return{success:!0};for(let e=0;e<M;++e){const t=w.get_data(e),i=ne.nodes(t).n,a=ne.getNodeTris(t),r=new y.TriAreasArray;r.resize(i),A(s,d.walkableSlopeAngle,J,X,a,i,r);const o=k(s,J,X,a,r,i,u,d.walkableClimb);if(r.free(),!o)return n("Could not rasterize triangles")}R(s,d.walkableClimb,u),v(s,d.walkableHeight,d.walkableClimb,u),z(s,d.walkableHeight,u);const p=_();if(c.compactHeightfield=p,!T(s,d.walkableHeight,d.walkableClimb,u,p))return n("Could not build compact heightfield");if(a||(E(c.heightfield),c.heightfield=void 0),!H(s,d.walkableRadius,p))return n("Could not erode walkable area");if(!D(s,p))return n("Failed to build distance field");if(!P(s,p,d.borderSize,d.minRegionArea,d.mergeRegionArea))return n("Failed to build regions");const B=F();if(c.contourSet=B,!L(s,p,d.maxSimplificationError,d.maxEdgeLen,B,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const K=I();if(!O(s,B,d.maxVertsPerPoly,K))return n("Failed to triangulate contours");const Y=W();if(!$(s,K,p,d.detailSampleDist,d.detailSampleMaxError,Y))return n("Failed to build detail mesh");a||(G(p),c.compactHeightfield=void 0,N(B),c.contourSet=void 0);for(let e=0;e<K.npolys();e++)K.areas(e)==C.Recast.WALKABLE_AREA&&K.setAreas(e,0),0==K.areas(e)&&K.setFlags(e,1);const Z=new U;Z.setPolyMeshCreateParams(K),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(d.walkableHeight),Z.setWalkableRadius(d.walkableRadius),Z.setWalkableClimb(d.walkableClimb),Z.setCellSize(d.cs),Z.setCellHeight(d.ch),Z.setBuildBvTree(!0),i.offMeshConnections&&Z.setOffMeshConnections(i.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=V(Z);return j.success?(s.log(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${K.nverts()} vertices ${K.npolys()} polygons`),{success:!0,data:j.navMeshData}):n("Failed to create Detour navmesh data")};s.startTimer(C.Module.RC_TIMER_TEMP);const ce=[0,0,0],de=[0,0,0];for(let e=0;e<f;e++)for(let t=0;t<u;t++){ce[0]=c[0]+t*b,ce[1]=c[1],ce[2]=c[2]+e*b,de[0]=c[0]+(t+1)*b,de[1]=d[1],de[2]=c[2]+(e+1)*b;const i=he(t,e,ce,de);if(i.success&&i.data){o.removeTile(o.getTileRefAt(t,e,0));const a=o.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${q(a.status)} (${a.status})`),i.data.free())}}return s.stopTimer(C.Module.RC_TIMER_TEMP),a||l(),{success:!0,navMesh:o,intermediates:r}})(a,s,t,i)},Ae=(e,t={},i=!1)=>{const[a,s]=Ce(e);return Me(a,s,t,i)};export{le as CrowdHelper,he as HeightfieldHelper,ce as NavMeshHelper,de as OffMeshConnectionsHelper,ge as TileCacheHelper,Ce as getPositionsAndIndices,xe as threeToSoloNavMesh,Ae as threeToTileCache,Se as threeToTiledNavMesh};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as y,buildContours as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as T,TileCacheMeshProcess as v,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as V}from\"@recast-navigation/core\";const K=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...t},Z=(e,t,v={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.VertsArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.TrisArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),V=r({...U,...v});V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const X=s.Recast.calcGridSize(W,B,V.cs);V.width=X.width,V.height=X.height;const Y=o();if(F.heightfield=Y,!n(H,Y,V.width,V.height,W,B,V.cs,V.ch))return D(\"Could not create heightfield\");const Z=new l.TriAreasArray;if(Z.resize($),d(H,V.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,V.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,V.walkableClimb,Y),m(H,V.walkableHeight,V.walkableClimb,Y),g(H,V.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,V.walkableHeight,V.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!S(H,V.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!M(H,j,V.borderSize,V.minRegionArea,V.mergeRegionArea))return D(\"Failed to build regions\");const q=y();if(F.contourSet=q,!R(H,j,V.maxSimplificationError,V.maxEdgeLen,q,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=C();if(!x(H,q,V.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,V.detailSampleDist,V.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==s.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(V.walkableHeight),ee.setWalkableRadius(V.walkableRadius),ee.setWalkableClimb(V.walkableClimb),ee.setCellSize(V.cs),ee.setCellHeight(V.ch),ee.setBuildBvTree(!0),v.offMeshConnections&&ee.setOffMeshConnections(v.offMeshConnections);const te=T(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new v(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,M={},y=!1)=>{const R=new i,C={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},x=new E,p=new a,A=()=>{if(!y)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),_=t,T=w.length,v=new l.VertsArray;v.copy(_,_.length);const V=w,U=w.length/3,Z=new l.TrisArray;Z.copy(V,V.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=F.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new s.RecastLinearAllocator(32e3),he=new s.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(C.chunkyTriMesh=Se,!Se.init(v,Z,U,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],M=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,M[0]+=r.borderSize*r.cs,M[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,M[0]),r.set_bmax(1,M[1]),r.set_bmax(2,M[2]);const x=o();if(i.heightfield=x,!n(R,x,r.width,r.height,w,M,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[M[0],M[2]],z=new l.ChunkIdsArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,v,T,a,i,s);const o=h(R,v,T,a,s,i,x,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,x),m(R,ae.walkableHeight,ae.walkableClimb,x),g(R,ae.walkableHeight,x);const E=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,E))return{n:0};const H=I();if(!G(R,E,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),o=new s.dtTileCacheLayerHeader;o.magic=s.Detour.TILECACHE_MAGIC,o.version=s.Detour.TILECACHE_VERSION,o.tx=e,o.ty=t,o.tlayer=i;const n=r.bmin(),d=r.bmax();o.set_bmin(0,n.x),o.set_bmin(1,n.y),o.set_bmin(2,n.z),o.set_bmax(0,d.x),o.set_bmax(1,d.y),o.set_bmax(2,d.z),o.width=r.width(),o.height=r.height(),o.minx=r.minx(),o.maxx=r.maxx(),o.miny=r.miny(),o.maxy=r.maxy(),o.hmin=r.hmin(),o.hmax=r.hmax();const h=$(r),c=N(r),m=W(r),g=B(he,o,h,c,m,a);if(s.Detour.statusFailed(g))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);s.Detour.statusFailed(r.status)&&R.log(s.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(s.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:C}},Q={...t},ee=(t,v,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:U}=K(t,v),Z=H(B,U,W.cs);W.width=Z.width,W.height=Z.height,W.minRegionArea=W.minRegionArea*W.minRegionArea,W.mergeRegionArea=W.mergeRegionArea*W.mergeRegionArea,W.tileSize=Math.floor(W.tileSize),W.borderSize=W.walkableRadius+3,W.width=W.tileSize+2*W.borderSize,W.height=W.tileSize+2*W.borderSize,W.detailSampleDist=W.detailSampleDist<.9?0:W.cs*W.detailSampleDist,W.detailSampleMaxError=W.ch*W.detailSampleMaxError;const j=Math.floor(W.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=v.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=v,re=v.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=e.fromArray(B);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:oe,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,se,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(s.Module.RC_LOG_ERROR,e),{success:!1,error:e}),v={tileX:e,tileY:t};I.tileIntermediates.push(v);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(s.Module.RC_TIMER_TOTAL),O.log(s.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(s.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(s.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=o();if(v.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect($,N,B,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,G,H.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(v.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(v.heightfield),v.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(v.contourSet=X,!R(O,K,H.maxSimplificationError,H.maxEdgeLen,X,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(!x(O,X,H.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=p();if(!A(O,Y,K,H.detailSampleDist,H.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(k(K),v.compactHeightfield=void 0,z(X),v.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==s.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=T(Z);return j.success?(O.log(s.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(s.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=B[0]+t*ee,ue[1]=B[1],ue[2]=B[2]+e*ee,be[0]=B[0]+(t+1)*ee,be[1]=U[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,s.Module.DT_TILE_FREE_DATA,0);s.Detour.statusFailed(a.status)&&(O.log(s.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${V(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(s.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","s","o","n","min","max","bbMin","toArray","bbMax","X","Number","Y","U","j","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","C","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","T","v","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","S","I","G","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","N","W","B","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","Recast","calcGridSize","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n depthWrite: false,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as y,buildContours as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as T,TileCacheMeshProcess as v,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as V}from\"@recast-navigation/core\";const K=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...t},Z=(e,t,v={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.VertsArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.TrisArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),V=r({...U,...v});V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const X=s.Recast.calcGridSize(W,B,V.cs);V.width=X.width,V.height=X.height;const Y=o();if(F.heightfield=Y,!n(H,Y,V.width,V.height,W,B,V.cs,V.ch))return D(\"Could not create heightfield\");const Z=new l.TriAreasArray;if(Z.resize($),d(H,V.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,V.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,V.walkableClimb,Y),m(H,V.walkableHeight,V.walkableClimb,Y),g(H,V.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,V.walkableHeight,V.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!S(H,V.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!M(H,j,V.borderSize,V.minRegionArea,V.mergeRegionArea))return D(\"Failed to build regions\");const q=y();if(F.contourSet=q,!R(H,j,V.maxSimplificationError,V.maxEdgeLen,q,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=C();if(!x(H,q,V.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,V.detailSampleDist,V.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==s.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(V.walkableHeight),ee.setWalkableRadius(V.walkableRadius),ee.setWalkableClimb(V.walkableClimb),ee.setCellSize(V.cs),ee.setCellHeight(V.ch),ee.setBuildBvTree(!0),v.offMeshConnections&&ee.setOffMeshConnections(v.offMeshConnections);const te=T(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new v(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,M={},y=!1)=>{const R=new i,C={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},x=new E,p=new a,A=()=>{if(!y)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),_=t,T=w.length,v=new l.VertsArray;v.copy(_,_.length);const V=w,U=w.length/3,Z=new l.TrisArray;Z.copy(V,V.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=F.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new s.RecastLinearAllocator(32e3),he=new s.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(C.chunkyTriMesh=Se,!Se.init(v,Z,U,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],M=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,M[0]+=r.borderSize*r.cs,M[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,M[0]),r.set_bmax(1,M[1]),r.set_bmax(2,M[2]);const x=o();if(i.heightfield=x,!n(R,x,r.width,r.height,w,M,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[M[0],M[2]],z=new l.ChunkIdsArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,v,T,a,i,s);const o=h(R,v,T,a,s,i,x,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,x),m(R,ae.walkableHeight,ae.walkableClimb,x),g(R,ae.walkableHeight,x);const E=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,E))return{n:0};const H=I();if(!G(R,E,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),o=new s.dtTileCacheLayerHeader;o.magic=s.Detour.TILECACHE_MAGIC,o.version=s.Detour.TILECACHE_VERSION,o.tx=e,o.ty=t,o.tlayer=i;const n=r.bmin(),d=r.bmax();o.set_bmin(0,n.x),o.set_bmin(1,n.y),o.set_bmin(2,n.z),o.set_bmax(0,d.x),o.set_bmax(1,d.y),o.set_bmax(2,d.z),o.width=r.width(),o.height=r.height(),o.minx=r.minx(),o.maxx=r.maxx(),o.miny=r.miny(),o.maxy=r.maxy(),o.hmin=r.hmin(),o.hmax=r.hmax();const h=$(r),c=N(r),m=W(r),g=B(he,o,h,c,m,a);if(s.Detour.statusFailed(g))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);s.Detour.statusFailed(r.status)&&R.log(s.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(s.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:C}},Q={...t},ee=(t,v,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:U}=K(t,v),Z=H(B,U,W.cs);W.width=Z.width,W.height=Z.height,W.minRegionArea=W.minRegionArea*W.minRegionArea,W.mergeRegionArea=W.mergeRegionArea*W.mergeRegionArea,W.tileSize=Math.floor(W.tileSize),W.borderSize=W.walkableRadius+3,W.width=W.tileSize+2*W.borderSize,W.height=W.tileSize+2*W.borderSize,W.detailSampleDist=W.detailSampleDist<.9?0:W.cs*W.detailSampleDist,W.detailSampleMaxError=W.ch*W.detailSampleMaxError;const j=Math.floor(W.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=v.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=v,re=v.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=e.fromArray(B);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:oe,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,se,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(s.Module.RC_LOG_ERROR,e),{success:!1,error:e}),v={tileX:e,tileY:t};I.tileIntermediates.push(v);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(s.Module.RC_TIMER_TOTAL),O.log(s.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(s.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(s.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=o();if(v.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect($,N,B,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,G,H.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(v.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(v.heightfield),v.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(v.contourSet=X,!R(O,K,H.maxSimplificationError,H.maxEdgeLen,X,s.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(!x(O,X,H.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=p();if(!A(O,Y,K,H.detailSampleDist,H.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(k(K),v.compactHeightfield=void 0,z(X),v.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==s.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=T(Z);return j.success?(O.log(s.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(s.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=B[0]+t*ee,ue[1]=B[1],ue[2]=B[2]+e*ee,be[0]=B[0]+(t+1)*ee,be[1]=U[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,s.Module.DT_TILE_FREE_DATA,0);s.Detour.statusFailed(a.status)&&(O.log(s.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${V(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(s.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (index === undefined) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","depthWrite","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","s","o","n","min","max","bbMin","toArray","bbMax","X","Number","Y","U","j","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","C","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","T","v","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","S","I","G","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","N","W","B","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","Recast","calcGridSize","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"email": "isaac@isaacmason.com",
|
|
7
7
|
"url": "https://isaacmason.com/"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.16.
|
|
9
|
+
"version": "0.16.4",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"homepage": "https://github.com/isaac-mason/recast-navigation-js",
|
|
12
12
|
"bugs": {
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"lint": "eslint --ext .ts src"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@recast-navigation/core": "0.16.
|
|
30
|
-
"@recast-navigation/generators": "0.16.
|
|
29
|
+
"@recast-navigation/core": "0.16.4",
|
|
30
|
+
"@recast-navigation/generators": "0.16.4"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@types/three": "0.x.x",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
39
39
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
40
40
|
"@rollup/plugin-terser": "^0.4.3",
|
|
41
|
-
"@rollup/plugin-typescript": "^11.1.
|
|
41
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
42
42
|
"@types/three": "^0.160.0",
|
|
43
43
|
"eslint": "^8.56.0",
|
|
44
44
|
"prettier": "^3.1.0",
|