@recast-navigation/three 0.19.0 → 0.20.0

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 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,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.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.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.statusToReadableString(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
@@ -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 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,calcGridSize 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,Raw as C,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as $,getHeightfieldLayerHeights as G,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,E={},H=!1)=>{const F=new i,L={type:\"solo\",buildContext:F},D=new a,O=e=>(H||(L.heightfield&&(f(L.heightfield),L.heightfield=void 0),L.compactHeightfield&&(_(L.compactHeightfield),L.compactHeightfield=void 0),L.contourSet&&(z(L.contourSet),L.contourSet=void 0)),D.destroy(),{navMesh:void 0,success:!1,intermediates:L,error:e}),P=e,I=t.length,$=new l.VertsArray;$.copy(P,P.length);const G=t,N=t.length/3,W=new l.TrisArray;W.copy(G,G.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(L.heightfield=Z,!n(F,Z,X.width,X.height,B,V,X.cs,X.ch))return O(\"Could not create heightfield\");const j=new l.TriAreasArray;if(j.resize(N),d(F,X.walkableSlopeAngle,$,I,W,N,j),!h(F,$,I,W,j,N,Z,X.walkableClimb))return O(\"Could not rasterize triangles\");j.free(),c(F,X.walkableClimb,Z),m(F,X.walkableHeight,X.walkableClimb,Z),g(F,X.walkableHeight,Z);const q=u();if(L.compactHeightfield=q,!b(F,X.walkableHeight,X.walkableClimb,Z,q))return O(\"Failed to build compact data\");if(H||(f(Z),L.heightfield=void 0),!S(F,X.walkableRadius,q))return O(\"Failed to erode walkable area\");if(!w(F,q))return O(\"Failed to build distance field\");if(!M(F,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return O(\"Failed to build regions\");const J=y();if(L.contourSet=J,!R(F,q,X.maxSimplificationError,X.maxEdgeLen,J,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return O(\"Failed to create contours\");const Q=x();if(!p(F,J,X.maxVertsPerPoly,Q))return O(\"Failed to triangulate contours\");const ee=A();if(!k(F,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return O(\"Failed to build detail mesh\");H||(_(q),L.compactHeightfield=void 0,z(J),L.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==C.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new T;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return O(\"Failed to create Detour navmesh data\");const{navMeshData:ae}=ie;return D.initSolo(ae)?{success:!0,navMesh:D,intermediates:L}:O(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((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,x={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!y)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),T=t,v=w.length,E=new l.VertsArray;E.copy(T,T.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=s(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 C.RecastLinearAllocator(32e3),he=new C.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.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(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(x.chunkyTriMesh=Se,!Se.init(E,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),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(R,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Se.getChunksOverlappingRect(p,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,E,v,a,i,s);const o=h(R,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,M),m(R,ae.walkableHeight,ae.walkableClimb,M),g(R,ae.walkableHeight,M);const T=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,M,T))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,T))return{n:0};const H=I();if(!$(R,T,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(_(T),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=G(r),h=N(r),c=W(r),m=B(he,s,d,h,c,a);if(C.Detour.statusFailed(m))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),x.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=p.addTile(i);C.Detour.statusFailed(r.status)&&R.log(C.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=p.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...t},ee=(t,E,H={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},$=new a,G=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&_(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,...H}),{bbMin:B,bbMax:U}=K(t,E),Z=s(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=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.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(!$.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(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};I.tileIntermediates.push(s);const E=P(W),L=[...i],D=[...a];L[0]-=E.borderSize*E.cs,L[2]-=E.borderSize*E.cs,D[0]+=E.borderSize*E.cs,D[2]+=E.borderSize*E.cs,E.set_bmin(0,L[0]),E.set_bmin(1,L[1]),E.set_bmin(2,L[2]),E.set_bmax(0,D[0]),E.set_bmax(1,D[1]),E.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(C.Module.RC_TIMER_TOTAL),O.log(C.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(C.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(C.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const $=o();if(s.heightfield=$,!n(O,$,E.width,E.height,L,D,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect(G,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,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,$,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,E.walkableClimb,$),m(O,E.walkableHeight,E.walkableClimb,$),g(O,E.walkableHeight,$);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,$,K))return r(\"Could not build compact heightfield\");if(F||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(s.contourSet=X,!R(O,K,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(C.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(C.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){$.removeTile($.getTileRefAt(t,e,0));const a=$.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(O.log(C.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(C.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:$,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","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","buildContext","chunkyTriMesh","tileIntermediates","p","H","A","k","heightfield","f","compactHeightfield","_","freeCompactHeightfield","heightfieldLayerSet","O","destroy","success","intermediates","error","T","v","E","Arrays","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","C","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","NavMeshParams","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","createHeightfield","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","walkableSlopeAngle","h","rasterizeTriangles","free","c","m","g","u","allocCompactHeightfield","b","buildCompactHeightfield","S","erodeWalkableArea","I","$","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","N","getHeightfieldLayerAreas","W","getHeightfieldLayerCons","B","Raw","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","navMeshGeneratorConfig","keepIntermediates","RecastBuildContext","freeHeightfield","contourSet","createRcConfig","markWalkableTriangles","filterLowHangingWalkableObstacles","filterWalkableLowHeightSpans","q","buildDistanceField","buildRegions","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","allocPolyMesh","buildPolyMesh","maxVertsPerPoly","allocPolyMeshDetail","buildPolyMeshDetail","freeContourSet","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","NavMeshCreateParams","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","calcGridSize","RecastChunkyTriMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","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,calcGridSize 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,Raw as C,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as $,getHeightfieldLayerHeights as G,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,statusToReadableString 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,E={},H=!1)=>{const F=new i,L={type:\"solo\",buildContext:F},D=new a,O=e=>(H||(L.heightfield&&(f(L.heightfield),L.heightfield=void 0),L.compactHeightfield&&(_(L.compactHeightfield),L.compactHeightfield=void 0),L.contourSet&&(z(L.contourSet),L.contourSet=void 0)),D.destroy(),{navMesh:void 0,success:!1,intermediates:L,error:e}),P=e,I=t.length,$=new l.VertsArray;$.copy(P,P.length);const G=t,N=t.length/3,W=new l.TrisArray;W.copy(G,G.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(L.heightfield=Z,!n(F,Z,X.width,X.height,B,V,X.cs,X.ch))return O(\"Could not create heightfield\");const j=new l.TriAreasArray;if(j.resize(N),d(F,X.walkableSlopeAngle,$,I,W,N,j),!h(F,$,I,W,j,N,Z,X.walkableClimb))return O(\"Could not rasterize triangles\");j.free(),c(F,X.walkableClimb,Z),m(F,X.walkableHeight,X.walkableClimb,Z),g(F,X.walkableHeight,Z);const q=u();if(L.compactHeightfield=q,!b(F,X.walkableHeight,X.walkableClimb,Z,q))return O(\"Failed to build compact data\");if(H||(f(Z),L.heightfield=void 0),!S(F,X.walkableRadius,q))return O(\"Failed to erode walkable area\");if(!w(F,q))return O(\"Failed to build distance field\");if(!M(F,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return O(\"Failed to build regions\");const J=y();if(L.contourSet=J,!R(F,q,X.maxSimplificationError,X.maxEdgeLen,J,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return O(\"Failed to create contours\");const Q=x();if(!p(F,J,X.maxVertsPerPoly,Q))return O(\"Failed to triangulate contours\");const ee=A();if(!k(F,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return O(\"Failed to build detail mesh\");H||(_(q),L.compactHeightfield=void 0,z(J),L.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==C.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new T;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return O(\"Failed to create Detour navmesh data\");const{navMeshData:ae}=ie;return D.initSolo(ae)?{success:!0,navMesh:D,intermediates:L}:O(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((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,x={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!y)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),T=t,v=w.length,E=new l.VertsArray;E.copy(T,T.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=s(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 C.RecastLinearAllocator(32e3),he=new C.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.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(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(x.chunkyTriMesh=Se,!Se.init(E,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),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(R,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Se.getChunksOverlappingRect(p,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,E,v,a,i,s);const o=h(R,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,M),m(R,ae.walkableHeight,ae.walkableClimb,M),g(R,ae.walkableHeight,M);const T=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,M,T))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,T))return{n:0};const H=I();if(!$(R,T,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(_(T),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=G(r),h=N(r),c=W(r),m=B(he,s,d,h,c,a);if(C.Detour.statusFailed(m))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),x.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=p.addTile(i);C.Detour.statusFailed(r.status)&&R.log(C.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=p.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...t},ee=(t,E,H={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},$=new a,G=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&_(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,...H}),{bbMin:B,bbMax:U}=K(t,E),Z=s(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=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.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(!$.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(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};I.tileIntermediates.push(s);const E=P(W),L=[...i],D=[...a];L[0]-=E.borderSize*E.cs,L[2]-=E.borderSize*E.cs,D[0]+=E.borderSize*E.cs,D[2]+=E.borderSize*E.cs,E.set_bmin(0,L[0]),E.set_bmin(1,L[1]),E.set_bmin(2,L[2]),E.set_bmax(0,D[0]),E.set_bmax(1,D[1]),E.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(C.Module.RC_TIMER_TOTAL),O.log(C.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(C.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(C.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const $=o();if(s.heightfield=$,!n(O,$,E.width,E.height,L,D,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect(G,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,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,$,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,E.walkableClimb,$),m(O,E.walkableHeight,E.walkableClimb,$),g(O,E.walkableHeight,$);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,$,K))return r(\"Could not build compact heightfield\");if(F||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(s.contourSet=X,!R(O,K,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(C.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(C.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){$.removeTile($.getTileRefAt(t,e,0));const a=$.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(O.log(C.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(C.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:$,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","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","buildContext","chunkyTriMesh","tileIntermediates","p","H","A","k","heightfield","f","compactHeightfield","_","freeCompactHeightfield","heightfieldLayerSet","O","destroy","success","intermediates","error","T","v","E","Arrays","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","C","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","NavMeshParams","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","createHeightfield","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","walkableSlopeAngle","h","rasterizeTriangles","free","c","m","g","u","allocCompactHeightfield","b","buildCompactHeightfield","S","erodeWalkableArea","I","$","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","N","getHeightfieldLayerAreas","W","getHeightfieldLayerCons","B","Raw","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","navMeshGeneratorConfig","keepIntermediates","RecastBuildContext","freeHeightfield","contourSet","createRcConfig","markWalkableTriangles","filterLowHangingWalkableObstacles","filterWalkableLowHeightSpans","q","buildDistanceField","buildRegions","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","allocPolyMesh","buildPolyMesh","maxVertsPerPoly","allocPolyMeshDetail","buildPolyMeshDetail","freeContourSet","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","NavMeshCreateParams","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","calcGridSize","RecastChunkyTriMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","allocContourSet","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","statusToReadableString","stopTimer","generateTiledNavMesh"],"mappings":"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"}
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,calcGridSize 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,Raw as I,allocPolyMesh as O,buildPolyMesh as W,allocPolyMeshDetail as $,buildPolyMeshDetail as G,freeCompactHeightfield as N,freeContourSet as U,NavMeshCreateParams as V,createNavMeshData as B,TileCache 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 K,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&&(N(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},O=p(L),W=C(b,D,O.cs);O.width=W.width,O.height=W.height,O.minRegionArea=O.minRegionArea*O.minRegionArea,O.mergeRegionArea=O.mergeRegionArea*O.mergeRegionArea,O.detailSampleDist=O.detailSampleDist<.9?0:O.cs*O.detailSampleDist,O.detailSampleMaxError=O.ch*O.detailSampleMaxError;const $=Math.floor(O.tileSize),G=Math.floor((O.width+$-1)/$),U=Math.floor((O.height+$-1)/$);O.borderSize=O.walkableRadius+3,O.width=O.tileSize+2*O.borderSize,O.height=O.tileSize+2*O.borderSize;const V=X.create({orig:b,cs:O.cs,ch:O.ch,width:O.tileSize,height:O.tileSize,walkableHeight:O.walkableHeight,walkableRadius:O.walkableRadius,walkableClimb:O.walkableClimb,maxSimplificationError:O.maxSimplificationError,maxTiles:G*U*P,maxObstacles:F}),B=new I.RecastLinearAllocator(32e3),q=new I.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(V,B,q,le))return h("Failed to initialize tile cache");const ne=Y.fromArray(b);let he=Math.min(Math.floor(ue(fe(G*U*P))),14);he>14&&(he=14);const ce=1<<he,de=1<<22-he,ge=Z.create({orig:ne,tileWidth:O.tileSize*O.cs,tileHeight:O.tileSize*O.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=O.tileSize*O.cs,l=ee(O),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,O.walkableClimb,c),v(s,O.walkableHeight,O.walkableClimb,c),z(s,O.walkableHeight,c);const M=_();if(!T(s,O.walkableHeight,O.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!H(s,O.walkableRadius,M))return{n:0};const p=te();if(!ie(s,M,O.borderSize,O.walkableHeight,p))return{n:0};a||(N(M),i.compactHeightfield=void 0);const C=[];for(let i=0;i<p.nlayers();i++){const a=new y.TileCacheData,s=p.layers(i),r=new I.dtTileCacheLayerHeader;r.magic=I.Detour.TILECACHE_MAGIC,r.version=I.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(I.Detour.statusFailed(d))return{n:0};C.push(a)}return a||(Q(p),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:C.length,tiles:C}};for(let e=0;e<U;++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);I.Detour.statusFailed(l.status)&&s.log(I.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<U;e++)for(let t=0;t<G;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(I.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&&(N(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(U(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 K=C(u,f,b.cs);b.width=K.width,b.height=K.height;const X=x();if(r.heightfield=X,!S(s,X,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const Y=new y.TriAreasArray;if(Y.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,Y),!k(s,c,h,m,Y,g,X,b.walkableClimb))return l("Could not rasterize triangles");Y.free(),R(s,b.walkableClimb,X),v(s,b.walkableHeight,b.walkableClimb,X),z(s,b.walkableHeight,X);const Z=_();if(r.compactHeightfield=Z,!T(s,b.walkableHeight,b.walkableClimb,X,Z))return l("Failed to build compact data");if(a||(E(X),r.heightfield=void 0),!H(s,b.walkableRadius,Z))return l("Failed to erode walkable area");if(!D(s,Z))return l("Failed to build distance field");if(!P(s,Z,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const j=F();if(r.contourSet=j,!L(s,Z,b.maxSimplificationError,b.maxEdgeLen,j,I.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const q=O();if(!W(s,j,b.maxVertsPerPoly,q))return l("Failed to triangulate contours");const J=$();if(!G(s,q,Z,b.detailSampleDist,b.detailSampleMaxError,J))return l("Failed to build detail mesh");a||(N(Z),r.compactHeightfield=void 0,U(j),r.contourSet=void 0);for(let e=0;e<q.npolys();e++)q.areas(e)==I.Recast.WALKABLE_AREA&&q.setAreas(e,0),0==q.areas(e)&&q.setFlags(e,1);const Q=new V;Q.setPolyMeshCreateParams(q),Q.setPolyMeshDetailCreateParams(J),Q.setWalkableHeight(b.walkableHeight),Q.setWalkableRadius(b.walkableRadius),Q.setWalkableClimb(b.walkableClimb),Q.setCellSize(b.cs),Q.setCellHeight(b.ch),Q.setBuildBvTree(!0),i.offMeshConnections&&Q.setOffMeshConnections(i.offMeshConnections);const ee=B(Q);if(!ee.success)return l("Failed to create Detour navmesh data");const{navMeshData:te}=ee;return o.initSolo(te)?{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&&N(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&U(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=C(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,K=e,X=t.length,J=new y.VertsArray;J.copy(K,K.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(I.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(I.Module.RC_TIMER_TOTAL),s.log(I.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(I.Module.RC_LOG_PROGRESS,` - ${h.width} x ${h.height} cells`),s.log(I.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 C=F();if(c.contourSet=C,!L(s,p,d.maxSimplificationError,d.maxEdgeLen,C,I.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const K=O();if(!W(s,C,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||(N(p),c.compactHeightfield=void 0,U(C),c.contourSet=void 0);for(let e=0;e<K.npolys();e++)K.areas(e)==I.Recast.WALKABLE_AREA&&K.setAreas(e,0),0==K.areas(e)&&K.setFlags(e,1);const Z=new V;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=B(Z);return j.success?(s.log(I.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(I.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,I.Module.DT_TILE_FREE_DATA,0);I.Detour.statusFailed(a.status)&&(s.log(I.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(I.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,calcGridSize 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,Raw as I,allocPolyMesh as O,buildPolyMesh as W,allocPolyMeshDetail as $,buildPolyMeshDetail as G,freeCompactHeightfield as N,freeContourSet as U,NavMeshCreateParams as V,createNavMeshData as B,TileCache as K,DetourTileCacheParams as X,vec3 as Y,NavMeshParams as Z,RecastChunkyTriMesh as j,statusToReadableString 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 K,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&&(N(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},O=p(L),W=C(b,D,O.cs);O.width=W.width,O.height=W.height,O.minRegionArea=O.minRegionArea*O.minRegionArea,O.mergeRegionArea=O.mergeRegionArea*O.mergeRegionArea,O.detailSampleDist=O.detailSampleDist<.9?0:O.cs*O.detailSampleDist,O.detailSampleMaxError=O.ch*O.detailSampleMaxError;const $=Math.floor(O.tileSize),G=Math.floor((O.width+$-1)/$),U=Math.floor((O.height+$-1)/$);O.borderSize=O.walkableRadius+3,O.width=O.tileSize+2*O.borderSize,O.height=O.tileSize+2*O.borderSize;const V=X.create({orig:b,cs:O.cs,ch:O.ch,width:O.tileSize,height:O.tileSize,walkableHeight:O.walkableHeight,walkableRadius:O.walkableRadius,walkableClimb:O.walkableClimb,maxSimplificationError:O.maxSimplificationError,maxTiles:G*U*P,maxObstacles:F}),B=new I.RecastLinearAllocator(32e3),q=new I.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(V,B,q,le))return h("Failed to initialize tile cache");const ne=Y.fromArray(b);let he=Math.min(Math.floor(ue(fe(G*U*P))),14);he>14&&(he=14);const ce=1<<he,de=1<<22-he,ge=Z.create({orig:ne,tileWidth:O.tileSize*O.cs,tileHeight:O.tileSize*O.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=O.tileSize*O.cs,l=ee(O),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,O.walkableClimb,c),v(s,O.walkableHeight,O.walkableClimb,c),z(s,O.walkableHeight,c);const M=_();if(!T(s,O.walkableHeight,O.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!H(s,O.walkableRadius,M))return{n:0};const p=te();if(!ie(s,M,O.borderSize,O.walkableHeight,p))return{n:0};a||(N(M),i.compactHeightfield=void 0);const C=[];for(let i=0;i<p.nlayers();i++){const a=new y.TileCacheData,s=p.layers(i),r=new I.dtTileCacheLayerHeader;r.magic=I.Detour.TILECACHE_MAGIC,r.version=I.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(I.Detour.statusFailed(d))return{n:0};C.push(a)}return a||(Q(p),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:C.length,tiles:C}};for(let e=0;e<U;++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);I.Detour.statusFailed(l.status)&&s.log(I.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<U;e++)for(let t=0;t<G;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(I.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&&(N(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(U(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 K=C(u,f,b.cs);b.width=K.width,b.height=K.height;const X=x();if(r.heightfield=X,!S(s,X,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const Y=new y.TriAreasArray;if(Y.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,Y),!k(s,c,h,m,Y,g,X,b.walkableClimb))return l("Could not rasterize triangles");Y.free(),R(s,b.walkableClimb,X),v(s,b.walkableHeight,b.walkableClimb,X),z(s,b.walkableHeight,X);const Z=_();if(r.compactHeightfield=Z,!T(s,b.walkableHeight,b.walkableClimb,X,Z))return l("Failed to build compact data");if(a||(E(X),r.heightfield=void 0),!H(s,b.walkableRadius,Z))return l("Failed to erode walkable area");if(!D(s,Z))return l("Failed to build distance field");if(!P(s,Z,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const j=F();if(r.contourSet=j,!L(s,Z,b.maxSimplificationError,b.maxEdgeLen,j,I.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const q=O();if(!W(s,j,b.maxVertsPerPoly,q))return l("Failed to triangulate contours");const J=$();if(!G(s,q,Z,b.detailSampleDist,b.detailSampleMaxError,J))return l("Failed to build detail mesh");a||(N(Z),r.compactHeightfield=void 0,U(j),r.contourSet=void 0);for(let e=0;e<q.npolys();e++)q.areas(e)==I.Recast.WALKABLE_AREA&&q.setAreas(e,0),0==q.areas(e)&&q.setFlags(e,1);const Q=new V;Q.setPolyMeshCreateParams(q),Q.setPolyMeshDetailCreateParams(J),Q.setWalkableHeight(b.walkableHeight),Q.setWalkableRadius(b.walkableRadius),Q.setWalkableClimb(b.walkableClimb),Q.setCellSize(b.cs),Q.setCellHeight(b.ch),Q.setBuildBvTree(!0),i.offMeshConnections&&Q.setOffMeshConnections(i.offMeshConnections);const ee=B(Q);if(!ee.success)return l("Failed to create Detour navmesh data");const{navMeshData:te}=ee;return o.initSolo(te)?{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&&N(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&U(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=C(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,K=e,X=t.length,J=new y.VertsArray;J.copy(K,K.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(I.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(I.Module.RC_TIMER_TOTAL),s.log(I.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(I.Module.RC_LOG_PROGRESS,` - ${h.width} x ${h.height} cells`),s.log(I.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 C=F();if(c.contourSet=C,!L(s,p,d.maxSimplificationError,d.maxEdgeLen,C,I.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const K=O();if(!W(s,C,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||(N(p),c.compactHeightfield=void 0,U(C),c.contourSet=void 0);for(let e=0;e<K.npolys();e++)K.areas(e)==I.Recast.WALKABLE_AREA&&K.setAreas(e,0),0==K.areas(e)&&K.setFlags(e,1);const Z=new V;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=B(Z);return j.success?(s.log(I.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(I.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,I.Module.DT_TILE_FREE_DATA,0);I.Detour.statusFailed(a.status)&&(s.log(I.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(I.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
@@ -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 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,calcGridSize 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,Raw as C,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as $,getHeightfieldLayerHeights as G,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,E={},H=!1)=>{const F=new i,L={type:\"solo\",buildContext:F},D=new a,O=e=>(H||(L.heightfield&&(f(L.heightfield),L.heightfield=void 0),L.compactHeightfield&&(_(L.compactHeightfield),L.compactHeightfield=void 0),L.contourSet&&(z(L.contourSet),L.contourSet=void 0)),D.destroy(),{navMesh:void 0,success:!1,intermediates:L,error:e}),P=e,I=t.length,$=new l.VertsArray;$.copy(P,P.length);const G=t,N=t.length/3,W=new l.TrisArray;W.copy(G,G.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(L.heightfield=Z,!n(F,Z,X.width,X.height,B,V,X.cs,X.ch))return O(\"Could not create heightfield\");const j=new l.TriAreasArray;if(j.resize(N),d(F,X.walkableSlopeAngle,$,I,W,N,j),!h(F,$,I,W,j,N,Z,X.walkableClimb))return O(\"Could not rasterize triangles\");j.free(),c(F,X.walkableClimb,Z),m(F,X.walkableHeight,X.walkableClimb,Z),g(F,X.walkableHeight,Z);const q=u();if(L.compactHeightfield=q,!b(F,X.walkableHeight,X.walkableClimb,Z,q))return O(\"Failed to build compact data\");if(H||(f(Z),L.heightfield=void 0),!S(F,X.walkableRadius,q))return O(\"Failed to erode walkable area\");if(!w(F,q))return O(\"Failed to build distance field\");if(!M(F,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return O(\"Failed to build regions\");const J=y();if(L.contourSet=J,!R(F,q,X.maxSimplificationError,X.maxEdgeLen,J,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return O(\"Failed to create contours\");const Q=x();if(!p(F,J,X.maxVertsPerPoly,Q))return O(\"Failed to triangulate contours\");const ee=A();if(!k(F,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return O(\"Failed to build detail mesh\");H||(_(q),L.compactHeightfield=void 0,z(J),L.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==C.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new T;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return O(\"Failed to create Detour navmesh data\");const{navMeshData:ae}=ie;return D.initSolo(ae)?{success:!0,navMesh:D,intermediates:L}:O(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((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,x={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!y)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),T=t,v=w.length,E=new l.VertsArray;E.copy(T,T.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=s(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 C.RecastLinearAllocator(32e3),he=new C.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.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(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(x.chunkyTriMesh=Se,!Se.init(E,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),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(R,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Se.getChunksOverlappingRect(p,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,E,v,a,i,s);const o=h(R,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,M),m(R,ae.walkableHeight,ae.walkableClimb,M),g(R,ae.walkableHeight,M);const T=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,M,T))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,T))return{n:0};const H=I();if(!$(R,T,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(_(T),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=G(r),h=N(r),c=W(r),m=B(he,s,d,h,c,a);if(C.Detour.statusFailed(m))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),x.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=p.addTile(i);C.Detour.statusFailed(r.status)&&R.log(C.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=p.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...t},ee=(t,E,H={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},$=new a,G=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&_(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,...H}),{bbMin:B,bbMax:U}=K(t,E),Z=s(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=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.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(!$.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(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};I.tileIntermediates.push(s);const E=P(W),L=[...i],D=[...a];L[0]-=E.borderSize*E.cs,L[2]-=E.borderSize*E.cs,D[0]+=E.borderSize*E.cs,D[2]+=E.borderSize*E.cs,E.set_bmin(0,L[0]),E.set_bmin(1,L[1]),E.set_bmin(2,L[2]),E.set_bmax(0,D[0]),E.set_bmax(1,D[1]),E.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(C.Module.RC_TIMER_TOTAL),O.log(C.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(C.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(C.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const $=o();if(s.heightfield=$,!n(O,$,E.width,E.height,L,D,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect(G,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,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,$,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,E.walkableClimb,$),m(O,E.walkableHeight,E.walkableClimb,$),g(O,E.walkableHeight,$);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,$,K))return r(\"Could not build compact heightfield\");if(F||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(s.contourSet=X,!R(O,K,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(C.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(C.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){$.removeTile($.getTileRefAt(t,e,0));const a=$.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(O.log(C.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(C.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:$,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","buildContext","chunkyTriMesh","tileIntermediates","p","H","A","k","heightfield","f","compactHeightfield","_","heightfieldLayerSet","O","destroy","success","intermediates","error","T","v","E","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","C","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","$","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","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","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","Recast","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,calcGridSize 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,Raw as C,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as $,getHeightfieldLayerHeights as G,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,statusToReadableString 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,E={},H=!1)=>{const F=new i,L={type:\"solo\",buildContext:F},D=new a,O=e=>(H||(L.heightfield&&(f(L.heightfield),L.heightfield=void 0),L.compactHeightfield&&(_(L.compactHeightfield),L.compactHeightfield=void 0),L.contourSet&&(z(L.contourSet),L.contourSet=void 0)),D.destroy(),{navMesh:void 0,success:!1,intermediates:L,error:e}),P=e,I=t.length,$=new l.VertsArray;$.copy(P,P.length);const G=t,N=t.length/3,W=new l.TrisArray;W.copy(G,G.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(L.heightfield=Z,!n(F,Z,X.width,X.height,B,V,X.cs,X.ch))return O(\"Could not create heightfield\");const j=new l.TriAreasArray;if(j.resize(N),d(F,X.walkableSlopeAngle,$,I,W,N,j),!h(F,$,I,W,j,N,Z,X.walkableClimb))return O(\"Could not rasterize triangles\");j.free(),c(F,X.walkableClimb,Z),m(F,X.walkableHeight,X.walkableClimb,Z),g(F,X.walkableHeight,Z);const q=u();if(L.compactHeightfield=q,!b(F,X.walkableHeight,X.walkableClimb,Z,q))return O(\"Failed to build compact data\");if(H||(f(Z),L.heightfield=void 0),!S(F,X.walkableRadius,q))return O(\"Failed to erode walkable area\");if(!w(F,q))return O(\"Failed to build distance field\");if(!M(F,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return O(\"Failed to build regions\");const J=y();if(L.contourSet=J,!R(F,q,X.maxSimplificationError,X.maxEdgeLen,J,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return O(\"Failed to create contours\");const Q=x();if(!p(F,J,X.maxVertsPerPoly,Q))return O(\"Failed to triangulate contours\");const ee=A();if(!k(F,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return O(\"Failed to build detail mesh\");H||(_(q),L.compactHeightfield=void 0,z(J),L.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==C.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new T;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return O(\"Failed to create Detour navmesh data\");const{navMeshData:ae}=ie;return D.initSolo(ae)?{success:!0,navMesh:D,intermediates:L}:O(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((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,x={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!y)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),T=t,v=w.length,E=new l.VertsArray;E.copy(T,T.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=s(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 C.RecastLinearAllocator(32e3),he=new C.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.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(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(x.chunkyTriMesh=Se,!Se.init(E,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),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(R,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Se.getChunksOverlappingRect(p,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,E,v,a,i,s);const o=h(R,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,M),m(R,ae.walkableHeight,ae.walkableClimb,M),g(R,ae.walkableHeight,M);const T=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,M,T))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,T))return{n:0};const H=I();if(!$(R,T,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(_(T),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=G(r),h=N(r),c=W(r),m=B(he,s,d,h,c,a);if(C.Detour.statusFailed(m))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),x.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=p.addTile(i);C.Detour.statusFailed(r.status)&&R.log(C.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=p.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...t},ee=(t,E,H={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},$=new a,G=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&_(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,...H}),{bbMin:B,bbMax:U}=K(t,E),Z=s(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=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.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(!$.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(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};I.tileIntermediates.push(s);const E=P(W),L=[...i],D=[...a];L[0]-=E.borderSize*E.cs,L[2]-=E.borderSize*E.cs,D[0]+=E.borderSize*E.cs,D[2]+=E.borderSize*E.cs,E.set_bmin(0,L[0]),E.set_bmin(1,L[1]),E.set_bmin(2,L[2]),E.set_bmax(0,D[0]),E.set_bmax(1,D[1]),E.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(C.Module.RC_TIMER_TOTAL),O.log(C.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(C.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(C.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const $=o();if(s.heightfield=$,!n(O,$,E.width,E.height,L,D,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect(G,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,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,$,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,E.walkableClimb,$),m(O,E.walkableHeight,E.walkableClimb,$),g(O,E.walkableHeight,$);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,$,K))return r(\"Could not build compact heightfield\");if(F||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(s.contourSet=X,!R(O,K,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(C.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(C.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){$.removeTile($.getTileRefAt(t,e,0));const a=$.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(O.log(C.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(C.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:$,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","buildContext","chunkyTriMesh","tileIntermediates","p","H","A","k","heightfield","f","compactHeightfield","_","heightfieldLayerSet","O","destroy","success","intermediates","error","T","v","E","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","C","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","$","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","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","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","Recast","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.19.0",
9
+ "version": "0.20.0",
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.19.0",
30
- "@recast-navigation/generators": "0.19.0"
29
+ "@recast-navigation/core": "0.20.0",
30
+ "@recast-navigation/generators": "0.20.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@types/three": "0.x.x",