@recast-navigation/three 0.14.0 → 0.15.1

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}),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){let 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;let l={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]};const 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.FloatArray;M.copy(m,m.length);const w=i,y=i.length/3,p=new t.Arrays.IntArray;p.copy(w,w.length);const{bbMin:C,bbMax:x}=n(e,i),{expectedLayersPerTile:S,maxObstacles:R,...A}={...g,...a},{raw:k}=t.RecastConfig.create(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),z=Math.floor((k.width+H-1)/H),T=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:z*T*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(z*T*S))),14);F>14&&(F=14);const I=1<<F,O=1<<22-F,W=t.NavMeshParams.create({orig:E,tileWidth:k.tileSize*k.cs,tileHeight:k.tileSize*k.cs,maxTiles:I,maxPolys:O});if(!d.initTiled(W))return f("Failed to initialize tiled navmesh");const G=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=G,!G.init(M,p,y,256))return f("Failed to build chunky triangle mesh");const N=(e,i)=>{const a={tileX:e,tileY:i},o=k.tileSize*k.cs,{raw:n}=new t.RecastConfig(k).clone(),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.IntArray;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.UnsignedCharArray;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 w=t.allocCompactHeightfield();if(!t.buildCompactHeightfield(s,k.walkableHeight,k.walkableClimb,d,w))return{n:0};if(r||(t.freeHeightfield(a.heightfield),a.heightfield=void 0),!t.erodeWalkableArea(s,k.walkableRadius,w))return{n:0};const y=t.allocHeightfieldLayerSet();if(!t.buildHeightfieldLayers(s,w,k.borderSize,k.walkableHeight,y))return{n:0};r||(t.freeCompactHeightfield(w),a.compactHeightfield=void 0);const p=[];for(let a=0;a<y.nlayers();a++){const r=new t.Arrays.UnsignedCharArray,s=y.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(y),a.heightfieldLayerSet=void 0),l.tileIntermediates.push(a),{n:p.length,tiles:p}};for(let e=0;e<T;++e)for(let i=0;i<z;++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<T;e++)for(let i=0;i<z;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,r=i.geometry.getIndex()?.array;if(!r){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],r={};let s=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,l=e.geometry.getIndex().array;for(let o=0;o<l.length;o++){const n=3*l[o],h=m.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=r[c];d||(r[c]=d=s,i.push(h.x,h.y,h.z),s++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]};exports.CrowdHelper=i,exports.HeightfieldHelper=r,exports.NavMeshHelper=s,exports.OffMeshConnectionsHelper=l,exports.TileCacheHelper=o,exports.getPositionsAndIndices=b,exports.threeToSoloNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"solo",buildContext:s},o=new t.NavMesh,h=e=>(r||(l.heightfield&&(t.freeHeightfield(l.heightfield),l.heightfield=void 0),l.compactHeightfield&&(t.freeCompactHeightfield(l.compactHeightfield),l.compactHeightfield=void 0),l.contourSet&&(t.freeContourSet(l.contourSet),l.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:l,error:e}),c=e,g=i.length,u=new t.Arrays.FloatArray;u.copy(c,c.length);const f=i,m=i.length/3,b=new t.Arrays.IntArray;b.copy(f,f.length);const{bbMin:M,bbMax:w}=n(e,i),{raw:y}=t.RecastConfig.create({...d,...a});y.minRegionArea=y.minRegionArea*y.minRegionArea,y.mergeRegionArea=y.mergeRegionArea*y.mergeRegionArea,y.detailSampleDist=y.detailSampleDist<.9?0:y.cs*y.detailSampleDist,y.detailSampleMaxError=y.ch*y.detailSampleMaxError;const p=t.Raw.Recast.calcGridSize(M,w,y.cs);y.width=p.width,y.height=p.height;const C=t.allocHeightfield();if(l.heightfield=C,!t.createHeightfield(s,C,y.width,y.height,M,w,y.cs,y.ch))return h("Could not create heightfield");const x=new t.Arrays.UnsignedCharArray;if(x.resize(m),t.markWalkableTriangles(s,y.walkableSlopeAngle,u,g,b,m,x),!t.rasterizeTriangles(s,u,g,b,x,m,C,y.walkableClimb))return h("Could not rasterize triangles");x.free(),t.filterLowHangingWalkableObstacles(s,y.walkableClimb,C),t.filterLedgeSpans(s,y.walkableHeight,y.walkableClimb,C),t.filterWalkableLowHeightSpans(s,y.walkableHeight,C);const S=t.allocCompactHeightfield();if(l.compactHeightfield=S,!t.buildCompactHeightfield(s,y.walkableHeight,y.walkableClimb,C,S))return h("Failed to build compact data");if(r||(t.freeHeightfield(C),l.heightfield=void 0),!t.erodeWalkableArea(s,y.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,y.borderSize,y.minRegionArea,y.mergeRegionArea))return h("Failed to build regions");const R=t.allocContourSet();if(l.contourSet=R,!t.buildContours(s,S,y.maxSimplificationError,y.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,y.maxVertsPerPoly,A))return h("Failed to triangulate contours");const k=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,A,S,y.detailSampleDist,y.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(y.walkableHeight),v.setWalkableRadius(y.walkableRadius),v.setWalkableClimb(y.walkableClimb),v.setCellSize(y.cs),v.setCellHeight(y.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:z}=H;return o.initSolo(z)?{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.RecastConfig.create({...f,...a}),{raw:m}=u,{bbMin:b,bbMax:M}=n(e,i),w=t.calcGridSize(b,M,m.cs);m.width=w.width,m.height=w.height,m.minRegionArea=m.minRegionArea*m.minRegionArea,m.mergeRegionArea=m.mergeRegionArea*m.mergeRegionArea,m.tileSize=Math.floor(m.tileSize),m.borderSize=m.walkableRadius+3,m.width=m.tileSize+2*m.borderSize,m.height=m.tileSize+2*m.borderSize,m.detailSampleDist=m.detailSampleDist<.9?0:m.cs*m.detailSampleDist,m.detailSampleMaxError=m.ch*m.detailSampleMaxError;const y=Math.floor(m.tileSize),p=Math.floor((w.width+y-1)/y),C=Math.floor((w.height+y-1)/y),x=m.tileSize*m.cs,S=e,R=i.length,A=new t.Arrays.FloatArray;A.copy(S,S.length);const k=i,v=i.length/3,H=new t.Arrays.IntArray;H.copy(k,k.length);const z=t.vec3.fromArray(b);let T=Math.min(Math.floor(h(c(p*C))),14);T>14&&(T=14);const _=1<<T,D=1<<22-T,L=t.NavMeshParams.create({orig:z,tileWidth:m.tileSize*m.cs,tileHeight:m.tileSize*m.cs,maxTiles:_,maxPolys:D});if(!o.initTiled(L))return g("Could not init nav mesh for tiled use");const P=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=P,!P.init(A,H,v,256))return g("Failed to build chunky triangle mesh");const E=(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{raw:d}=u.clone(),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,` - ${m.width} x ${m.height} cells`),s.log(t.Raw.Module.RC_LOG_PROGRESS,` - ${R/1e3}fK verts, ${v/1e3}K tris`);const b=t.allocHeightfield();if(c.heightfield=b,!t.createHeightfield(s,b,d.width,d.height,g,f,d.cs,d.ch))return h("Could not create heightfield");(new t.Arrays.UnsignedCharArray).resize(P.maxTrisPerChunk());const M=[g[0],g[2]],w=[f[0],f[2]],y=new t.Arrays.IntArray;y.resize(512);const p=P.getChunksOverlappingRect(M,w,y,512);if(0===p)return{success:!0};for(let e=0;e<p;++e){const i=y.get_data(e),a=P.nodes(i).n,r=P.getNodeTris(i),l=new t.Arrays.UnsignedCharArray;l.resize(a),t.markWalkableTriangles(s,d.walkableSlopeAngle,A,R,r,a,l);const o=t.rasterizeTriangles(s,A,R,r,l,a,b,d.walkableClimb);if(l.free(),!o)return h("Could not rasterize triangles")}t.filterLowHangingWalkableObstacles(s,d.walkableClimb,b),t.filterLedgeSpans(s,d.walkableHeight,d.walkableClimb,b),t.filterWalkableLowHeightSpans(s,d.walkableHeight,b);const C=t.allocCompactHeightfield();if(c.compactHeightfield=C,!t.buildCompactHeightfield(s,d.walkableHeight,d.walkableClimb,b,C))return h("Could not build compact heightfield");if(r||(t.freeHeightfield(c.heightfield),c.heightfield=void 0),!t.erodeWalkableArea(s,d.walkableRadius,C))return h("Could not erode walkable area");if(!t.buildDistanceField(s,C))return h("Failed to build distance field");if(!t.buildRegions(s,C,d.borderSize,d.minRegionArea,d.mergeRegionArea))return h("Failed to build regions");const x=t.allocContourSet();if(c.contourSet=x,!t.buildContours(s,C,d.maxSimplificationError,d.maxEdgeLen,x,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const S=t.allocPolyMesh();if(!t.buildPolyMesh(s,x,d.maxVertsPerPoly,S))return h("Failed to triangulate contours");const k=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,S,C,d.detailSampleDist,d.detailSampleMaxError,k))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(C),c.compactHeightfield=void 0,t.freeContourSet(x),c.contourSet=void 0);for(let e=0;e<S.npolys();e++)S.areas(e)==t.Raw.Recast.WALKABLE_AREA&&S.setAreas(e,0),0==S.areas(e)&&S.setFlags(e,1);const H=new t.NavMeshCreateParams;H.setPolyMeshCreateParams(S),H.setPolyMeshDetailCreateParams(k),H.setWalkableHeight(d.walkableHeight),H.setWalkableRadius(d.walkableRadius),H.setWalkableClimb(d.walkableClimb),H.setCellSize(d.cs),H.setCellHeight(d.ch),H.setBuildBvTree(!0),a.offMeshConnections&&H.setOffMeshConnections(a.offMeshConnections),H.setTileX(e),H.setTileY(i);const z=t.createNavMeshData(H);return z.success?(s.log(t.Raw.Module.RC_LOG_PROGRESS,`>> Polymesh: ${S.nverts()} vertices ${S.npolys()} polygons`),{success:!0,data:z.navMeshData}):h("Failed to create Detour navmesh data")};s.startTimer(t.Raw.Module.RC_TIMER_TEMP);let F=[0,0,0],I=[0,0,0];for(let e=0;e<C;e++)for(let i=0;i<p;i++){F[0]=b[0]+i*x,F[1]=b[1],F[2]=b[2]+e*x,I[0]=b[0]+(i+1)*x,I[1]=M[1],I[2]=b[2]+(e+1)*x;const a=E(i,e,F,I);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}),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){let 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;let l={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]};const 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.FloatArray;M.copy(m,m.length);const y=i,w=i.length/3,C=new t.Arrays.IntArray;C.copy(y,y.length);const{bbMin:p,bbMax:x}=n(e,i),{expectedLayersPerTile:S,maxObstacles:R,...A}={...g,...a},k=t.createRcConfig(A),v=t.calcGridSize(p,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),z=Math.floor((k.width+H-1)/H),T=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:p,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:z*T*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(p);let F=Math.min(Math.floor(h(c(z*T*S))),14);F>14&&(F=14);const I=1<<F,O=1<<22-F,W=t.NavMeshParams.create({orig:E,tileWidth:k.tileSize*k.cs,tileHeight:k.tileSize*k.cs,maxTiles:I,maxPolys:O});if(!d.initTiled(W))return f("Failed to initialize tiled navmesh");const G=new t.RecastChunkyTriMesh;if(l.chunkyTriMesh=G,!G.init(M,C,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=[p[0]+e*o,p[1],p[2]+i*o],c=[p[0]+(e+1)*o,x[1],p[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.IntArray;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.UnsignedCharArray;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 C=[];for(let a=0;a<w.nlayers();a++){const r=new t.Arrays.UnsignedCharArray,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};C.push(r)}return r||(t.freeHeightfieldLayerSet(w),a.heightfieldLayerSet=void 0),l.tileIntermediates.push(a),{n:C.length,tiles:C}};for(let e=0;e<T;++e)for(let i=0;i<z;++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<T;e++)for(let i=0;i<z;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,r=i.geometry.getIndex()?.array;if(!r){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],r={};let s=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,l=e.geometry.getIndex().array;for(let o=0;o<l.length;o++){const n=3*l[o],h=m.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=r[c];d||(r[c]=d=s,i.push(h.x,h.y,h.z),s++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]};exports.CrowdHelper=i,exports.HeightfieldHelper=r,exports.NavMeshHelper=s,exports.OffMeshConnectionsHelper=l,exports.TileCacheHelper=o,exports.getPositionsAndIndices=b,exports.threeToSoloNavMesh=(e,i={},a=!1)=>{const[r,s]=b(e);return((e,i,a={},r=!1)=>{const s=new t.RecastBuildContext,l={type:"solo",buildContext:s},o=new t.NavMesh,h=e=>(r||(l.heightfield&&(t.freeHeightfield(l.heightfield),l.heightfield=void 0),l.compactHeightfield&&(t.freeCompactHeightfield(l.compactHeightfield),l.compactHeightfield=void 0),l.contourSet&&(t.freeContourSet(l.contourSet),l.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:l,error:e}),c=e,g=i.length,u=new t.Arrays.FloatArray;u.copy(c,c.length);const f=i,m=i.length/3,b=new t.Arrays.IntArray;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 C=t.Raw.Recast.calcGridSize(M,y,w.cs);w.width=C.width,w.height=C.height;const p=t.allocHeightfield();if(l.heightfield=p,!t.createHeightfield(s,p,w.width,w.height,M,y,w.cs,w.ch))return h("Could not create heightfield");const x=new t.Arrays.UnsignedCharArray;if(x.resize(m),t.markWalkableTriangles(s,w.walkableSlopeAngle,u,g,b,m,x),!t.rasterizeTriangles(s,u,g,b,x,m,p,w.walkableClimb))return h("Could not rasterize triangles");x.free(),t.filterLowHangingWalkableObstacles(s,w.walkableClimb,p),t.filterLedgeSpans(s,w.walkableHeight,w.walkableClimb,p),t.filterWalkableLowHeightSpans(s,w.walkableHeight,p);const S=t.allocCompactHeightfield();if(l.compactHeightfield=S,!t.buildCompactHeightfield(s,w.walkableHeight,w.walkableClimb,p,S))return h("Failed to build compact data");if(r||(t.freeHeightfield(p),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:z}=H;return o.initSolo(z)?{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),C=Math.floor((M.height+y-1)/y),p=u.tileSize*u.cs,x=e,S=i.length,R=new t.Arrays.FloatArray;R.copy(x,x.length);const A=i,k=i.length/3,v=new t.Arrays.IntArray;v.copy(A,A.length);const H=t.vec3.fromArray(m);let z=Math.min(Math.floor(h(c(w*C))),14);z>14&&(z=14);const T=1<<z,_=1<<22-z,D=t.NavMeshParams.create({orig:H,tileWidth:u.tileSize*u.cs,tileHeight:u.tileSize*u.cs,maxTiles:T,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.UnsignedCharArray).resize(L.maxTrisPerChunk());const b=[g[0],g[2]],M=[f[0],f[2]],y=new t.Arrays.IntArray;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.UnsignedCharArray;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 C=t.allocCompactHeightfield();if(c.compactHeightfield=C,!t.buildCompactHeightfield(s,d.walkableHeight,d.walkableClimb,m,C))return h("Could not build compact heightfield");if(r||(t.freeHeightfield(c.heightfield),c.heightfield=void 0),!t.erodeWalkableArea(s,d.walkableRadius,C))return h("Could not erode walkable area");if(!t.buildDistanceField(s,C))return h("Failed to build distance field");if(!t.buildRegions(s,C,d.borderSize,d.minRegionArea,d.mergeRegionArea))return h("Failed to build regions");const p=t.allocContourSet();if(c.contourSet=p,!t.buildContours(s,C,d.maxSimplificationError,d.maxEdgeLen,p,t.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const x=t.allocPolyMesh();if(!t.buildPolyMesh(s,p,d.maxVertsPerPoly,x))return h("Failed to triangulate contours");const A=t.allocPolyMeshDetail();if(!t.buildPolyMeshDetail(s,x,C,d.detailSampleDist,d.detailSampleMaxError,A))return h("Failed to build detail mesh");r||(t.freeCompactHeightfield(C),c.compactHeightfield=void 0,t.freeContourSet(p),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);let E=[0,0,0],F=[0,0,0];for(let e=0;e<C;e++)for(let i=0;i<w;i++){E[0]=m[0]+i*p,E[1]=m[1],E[2]=m[2]+e*p,F[0]=m[0]+(i+1)*p,F[1]=b[1],F[2]=m[2]+(e+1)*p;const a=P(i,e,E,F);if(a.success&&a.data){o.removeTile(o.getTileRefAt(i,e,0));const r=o.addTile(a.data,t.Raw.Module.DT_TILE_FREE_DATA,0);t.Raw.Detour.statusFailed(r.status)&&(s.log(t.Raw.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${i}, ty: ${e},status: ${t.dtStatusToReadableString(r.status)} (${r.status})`),a.data.free())}}return s.stopTimer(t.Raw.Module.RC_TIMER_TEMP),r||d(),{success:!0,navMesh:o,intermediates:l}})(r,s,i,a)};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n let 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,RecastConfig as r,Raw as o,allocHeightfield as s,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 w,buildDistanceField as S,buildRegions as y,allocContourSet as M,buildContours as C,allocPolyMesh as R,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as v,TileCacheMeshProcess as T,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,allocHeightfieldLayerSet as P,buildHeightfieldLayers as I,getHeightfieldLayerHeights as G,getHeightfieldLayerAreas as $,getHeightfieldLayerCons as N,buildTileCacheLayer as W,dtStatusToReadableString as B}from\"@recast-navigation/core\";const U=(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],o=t[3*r],s=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,o),a.y=Math.min(a.y,s),a.z=Math.min(a.z,n),l.x=Math.max(l.x,o),l.y=Math.max(l.y,s),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},K=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},V=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),X={...t},Y=(e,t,T={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.FloatArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.IntArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=U(e,t),{raw:K}=r.create({...X,...T});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 V=o.Recast.calcGridSize(W,B,K.cs);K.width=V.width,K.height=V.height;const Y=s();if(F.heightfield=Y,!n(H,Y,K.width,K.height,W,B,K.cs,K.ch))return D(\"Could not create heightfield\");const Z=new l.UnsignedCharArray;if(Z.resize($),d(H,K.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,K.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,K.walkableClimb,Y),m(H,K.walkableHeight,K.walkableClimb,Y),g(H,K.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,K.walkableHeight,K.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!w(H,K.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!S(H,j))return D(\"Failed to build distance field\");if(!y(H,j,K.borderSize,K.minRegionArea,K.mergeRegionArea))return D(\"Failed to build regions\");const q=M();if(F.contourSet=q,!C(H,j,K.maxSimplificationError,K.maxEdgeLen,q,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=R();if(!x(H,q,K.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,K.detailSampleDist,K.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==o.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(K.walkableHeight),ee.setWalkableRadius(K.walkableRadius),ee.setWalkableClimb(K.walkableClimb),ee.setCellSize(K.cs),ee.setCellHeight(K.ch),ee.setBuildBvTree(!0),T.offMeshConnections&&ee.setOffMeshConnections(T.offMeshConnections);const te=v(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},Z={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},j=()=>new T(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),q=(t,S,y={},M=!1)=>{const C=new i;let R={type:\"tilecache\",buildContext:C,chunkyTriMesh:void 0,tileIntermediates:[]};const x=new E,p=new a,A=()=>{if(!M)for(let e=0;e<R.tileIntermediates.length;e++){const t=R.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:R,error:e}),_=t,v=S.length,T=new l.FloatArray;T.copy(_,_.length);const B=S,X=S.length/3,Y=new l.IntArray;Y.copy(B,B.length);const{bbMin:q,bbMax:J}=U(t,S),{expectedLayersPerTile:Q,maxObstacles:ee,...te}={...Z,...y},{raw:ie}=r.create(te),ae=H(q,J,ie.cs);ie.width=ae.width,ie.height=ae.height,ie.minRegionArea=ie.minRegionArea*ie.minRegionArea,ie.mergeRegionArea=ie.mergeRegionArea*ie.mergeRegionArea,ie.detailSampleDist=ie.detailSampleDist<.9?0:ie.cs*ie.detailSampleDist,ie.detailSampleMaxError=ie.ch*ie.detailSampleMaxError;const le=Math.floor(ie.tileSize),re=Math.floor((ie.width+le-1)/le),oe=Math.floor((ie.height+le-1)/le);ie.borderSize=ie.walkableRadius+3,ie.width=ie.tileSize+2*ie.borderSize,ie.height=ie.tileSize+2*ie.borderSize;const se=F.create({orig:q,cs:ie.cs,ch:ie.ch,width:ie.tileSize,height:ie.tileSize,walkableHeight:ie.walkableHeight,walkableRadius:ie.walkableRadius,walkableClimb:ie.walkableClimb,maxSimplificationError:ie.maxSimplificationError,maxTiles:re*oe*Q,maxObstacles:ee}),ne=new o.RecastLinearAllocator(32e3),de=new o.RecastFastLZCompressor,he=y.tileCacheMeshProcess??j();if(!x.init(se,ne,de,he))return z(\"Failed to initialize tile cache\");const ce=e.fromArray(q);let me=Math.min(Math.floor(K(V(re*oe*Q))),14);me>14&&(me=14);const ge=1<<me,ue=1<<22-me,be=L.create({orig:ce,tileWidth:ie.tileSize*ie.cs,tileHeight:ie.tileSize*ie.cs,maxTiles:ge,maxPolys:ue});if(!p.initTiled(be))return z(\"Failed to initialize tiled navmesh\");const fe=new D;if(R.chunkyTriMesh=fe,!fe.init(T,Y,X,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ie.tileSize*ie.cs,{raw:S}=new r(ie).clone(),y=[q[0]+e*a,q[1],q[2]+t*a],x=[q[0]+(e+1)*a,J[1],q[2]+(t+1)*a];y[0]-=S.borderSize*S.cs,y[2]-=S.borderSize*S.cs,x[0]+=S.borderSize*S.cs,x[2]+=S.borderSize*S.cs,S.set_bmin(0,y[0]),S.set_bmin(1,y[1]),S.set_bmin(2,y[2]),S.set_bmax(0,x[0]),S.set_bmax(1,x[1]),S.set_bmax(2,x[2]);const p=s();if(i.heightfield=p,!n(C,p,S.width,S.height,y,x,S.cs,S.ch))return{n:0};const A=[y[0],y[2]],z=[x[0],x[2]],_=new l.IntArray;_.resize(512);const E=fe.getChunksOverlappingRect(A,z,_,512);if(0===E)return{n:0};for(let e=0;e<E;++e){const t=_.get_data(e),i=fe.nodes(t).n,a=fe.getNodeTris(t),r=new l.UnsignedCharArray;r.resize(i),d(C,S.walkableSlopeAngle,T,v,a,i,r);const o=h(C,T,v,a,r,i,p,S.walkableClimb);if(r.free(),!o)return{n:0}}c(C,ie.walkableClimb,p),m(C,ie.walkableHeight,ie.walkableClimb,p),g(C,ie.walkableHeight,p);const H=u();if(!b(C,ie.walkableHeight,ie.walkableClimb,p,H))return{n:0};if(M||(f(i.heightfield),i.heightfield=void 0),!w(C,ie.walkableRadius,H))return{n:0};const F=P();if(!I(C,H,ie.borderSize,ie.walkableHeight,F))return{n:0};M||(k(H),i.compactHeightfield=void 0);const L=[];for(let i=0;i<F.nlayers();i++){const a=new l.UnsignedCharArray,r=F.layers(i),s=new o.dtTileCacheLayerHeader;s.magic=o.Detour.TILECACHE_MAGIC,s.version=o.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const n=r.bmin(),d=r.bmax();s.set_bmin(0,n.x),s.set_bmin(1,n.y),s.set_bmin(2,n.z),s.set_bmax(0,d.x),s.set_bmax(1,d.y),s.set_bmax(2,d.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 h=G(r),c=$(r),m=N(r),g=W(de,s,h,c,m,a);if(o.Detour.statusFailed(g))return{n:0};L.push(a)}return M||(O(F),i.heightfieldLayerSet=void 0),R.tileIntermediates.push(i),{n:L.length,tiles:L}};for(let e=0;e<oe;++e)for(let t=0;t<re;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);o.Detour.statusFailed(r.status)&&C.log(o.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<re;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(o.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:R}},J={...t},Q=(t,T,E={},F=!1)=>{const O=new i,P={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},I=new a,G=()=>{if(!F){for(let e=0;e<P.tileIntermediates.length;e++){const t=P.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}P.chunkyTriMesh&&(P.chunkyTriMesh=void 0)}},$=e=>(G(),I.destroy(),{success:!1,navMesh:void 0,intermediates:P,error:e}),N=r.create({...J,...E}),{raw:W}=N,{bbMin:X,bbMax:Y}=U(t,T),Z=H(X,Y,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),Q=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=T.length,ae=new l.FloatArray;ae.copy(te,te.length);const le=T,re=T.length/3,oe=new l.IntArray;oe.copy(le,le.length);const se=e.fromArray(X);let ne=Math.min(Math.floor(K(V(q*Q))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:se,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!I.initTiled(ce))return $(\"Could not init nav mesh for tiled use\");const me=new D;if(P.chunkyTriMesh=me,!me.init(ae,oe,re,256))return $(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(o.Module.RC_LOG_ERROR,e),{success:!1,error:e}),T={tileX:e,tileY:t};P.tileIntermediates.push(T);const{raw:H}=N.clone(),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(o.Module.RC_TIMER_TOTAL),O.log(o.Module.RC_LOG_PROGRESS,`Building tile ${P.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(o.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(o.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const I=s();if(T.heightfield=I,!n(O,I,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.UnsignedCharArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],$=[D[0],D[2]],B=new l.IntArray;B.resize(512);const U=me.getChunksOverlappingRect(G,$,B,512);if(0===U)return{success:!0};for(let e=0;e<U;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,o);const s=h(O,ae,ie,a,o,i,I,H.walkableClimb);if(o.free(),!s)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,I),m(O,H.walkableHeight,H.walkableClimb,I),g(O,H.walkableHeight,I);const K=u();if(T.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,I,K))return r(\"Could not build compact heightfield\");if(F||(f(T.heightfield),T.heightfield=void 0),!w(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!S(O,K))return r(\"Failed to build distance field\");if(!y(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const V=M();if(T.contourSet=V,!C(O,K,H.maxSimplificationError,H.maxEdgeLen,V,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const X=R();if(!x(O,V,H.maxVertsPerPoly,X))return r(\"Failed to triangulate contours\");const Y=p();if(!A(O,X,K,H.detailSampleDist,H.detailSampleMaxError,Y))return r(\"Failed to build detail mesh\");F||(k(K),T.compactHeightfield=void 0,z(V),T.contourSet=void 0);for(let e=0;e<X.npolys();e++)X.areas(e)==o.Recast.WALKABLE_AREA&&X.setAreas(e,0),0==X.areas(e)&&X.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(X),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(o.Module.RC_LOG_PROGRESS,`>> Polymesh: ${X.nverts()} vertices ${X.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(o.Module.RC_TIMER_TEMP);let ue=[0,0,0],be=[0,0,0];for(let e=0;e<Q;e++)for(let t=0;t<q;t++){ue[0]=X[0]+t*ee,ue[1]=X[1],ue[2]=X[2]+e*ee,be[0]=X[0]+(t+1)*ee,be[1]=Y[1],be[2]=X[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){I.removeTile(I.getTileRefAt(t,e,0));const a=I.addTile(i.data,o.Module.DT_TILE_FREE_DATA,0);o.Detour.statusFailed(a.status)&&(O.log(o.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${B(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(o.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:I,intermediates:P}};export{j as createDefaultTileCacheMeshProcess,K as dtIlog2,V as dtNextPow2,Y as generateSoloNavMesh,q as generateTileCache,Q as generateTiledNavMesh,U as getBoundingBox,X as soloNavMeshGeneratorConfigDefaults,Z as tileCacheGeneratorConfigDefaults,J 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 let index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","U","t","a","l","e","r","o","s","n","min","max","bbMin","toArray","bbMax","vec3","K","Number","V","X","Z","tileSize","expectedLayersPerTile","maxObstacles","q","S","M","C","R","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","freeHeightfield","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","v","T","FloatArray","B","Y","IntArray","J","Q","ee","te","raw","ie","RecastConfig","create","ae","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","le","floor","re","oe","borderSize","walkableRadius","se","F","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","ne","Raw","RecastLinearAllocator","de","RecastFastLZCompressor","he","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","ce","fromArray","me","ge","ue","be","L","NavMeshParams","tileWidth","tileHeight","maxPolys","initTiled","fe","D","RecastChunkyTriMesh","we","tileX","tileY","clone","set_bmin","set_bmax","createHeightfield","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","UnsignedCharArray","d","walkableSlopeAngle","h","free","c","filterLowHangingWalkableObstacles","m","filterLedgeSpans","g","filterWalkableLowHeightSpans","u","b","w","P","I","nlayers","Arrays","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","getHeightfieldLayerHeights","$","N","W","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","navMeshGeneratorConfig","keepIntermediates","RecastBuildContext","freeCompactHeightfield","contourSet","freeContourSet","Recast","calcGridSize","markWalkableTriangles","rasterizeTriangles","j","allocCompactHeightfield","erodeWalkableArea","allocContourSet","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","allocPolyMesh","buildPolyMesh","maxVertsPerPoly","npolys","areas","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","createNavMeshData","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 });\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 let obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as o,allocHeightfield as s,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 y,allocContourSet as M,buildContours as C,allocPolyMesh as R,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as v,TileCacheMeshProcess as T,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as U}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],o=t[3*r],s=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,o),a.y=Math.min(a.y,s),a.z=Math.min(a.z,n),l.x=Math.max(l.x,o),l.y=Math.max(l.y,s),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},V=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},X=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),Y={...t},Z=(e,t,T={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.FloatArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.IntArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),U=r({...Y,...T});U.minRegionArea=U.minRegionArea*U.minRegionArea,U.mergeRegionArea=U.mergeRegionArea*U.mergeRegionArea,U.detailSampleDist=U.detailSampleDist<.9?0:U.cs*U.detailSampleDist,U.detailSampleMaxError=U.ch*U.detailSampleMaxError;const V=o.Recast.calcGridSize(W,B,U.cs);U.width=V.width,U.height=V.height;const X=s();if(F.heightfield=X,!n(H,X,U.width,U.height,W,B,U.cs,U.ch))return D(\"Could not create heightfield\");const Z=new l.UnsignedCharArray;if(Z.resize($),d(H,U.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,X,U.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,U.walkableClimb,X),m(H,U.walkableHeight,U.walkableClimb,X),g(H,U.walkableHeight,X);const j=u();if(F.compactHeightfield=j,!b(H,U.walkableHeight,U.walkableClimb,X,j))return D(\"Failed to build compact data\");if(E||(f(X),F.heightfield=void 0),!S(H,U.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!y(H,j,U.borderSize,U.minRegionArea,U.mergeRegionArea))return D(\"Failed to build regions\");const q=M();if(F.contourSet=q,!C(H,j,U.maxSimplificationError,U.maxEdgeLen,q,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=R();if(!x(H,q,U.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,U.detailSampleDist,U.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==o.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(U.walkableHeight),ee.setWalkableRadius(U.walkableRadius),ee.setWalkableClimb(U.walkableClimb),ee.setCellSize(U.cs),ee.setCellHeight(U.ch),ee.setBuildBvTree(!0),T.offMeshConnections&&ee.setOffMeshConnections(T.offMeshConnections);const te=v(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new T(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,y={},M=!1)=>{const C=new i;let R={type:\"tilecache\",buildContext:C,chunkyTriMesh:void 0,tileIntermediates:[]};const x=new E,p=new a,A=()=>{if(!M)for(let e=0;e<R.tileIntermediates.length;e++){const t=R.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:R,error:e}),_=t,v=w.length,T=new l.FloatArray;T.copy(_,_.length);const U=w,Y=w.length/3,Z=new l.IntArray;Z.copy(U,U.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...y},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),oe=Math.floor((ae.width+re-1)/re),se=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:oe*se*ee,maxObstacles:te}),de=new o.RecastLinearAllocator(32e3),he=new o.RecastFastLZCompressor,ce=y.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(V(X(oe*se*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(R.chunkyTriMesh=Se,!Se.init(T,Z,Y,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],y=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,y[0]+=r.borderSize*r.cs,y[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,y[0]),r.set_bmax(1,y[1]),r.set_bmax(2,y[2]);const x=s();if(i.heightfield=x,!n(C,x,r.width,r.height,w,y,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[y[0],y[2]],z=new l.IntArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(C,r.walkableSlopeAngle,T,v,a,i,o);const s=h(C,T,v,a,o,i,x,r.walkableClimb);if(o.free(),!s)return{n:0}}c(C,ae.walkableClimb,x),m(C,ae.walkableHeight,ae.walkableClimb,x),g(C,ae.walkableHeight,x);const E=u();if(!b(C,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(M||(f(i.heightfield),i.heightfield=void 0),!S(C,ae.walkableRadius,E))return{n:0};const H=I();if(!G(C,E,ae.borderSize,ae.walkableHeight,H))return{n:0};M||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.UnsignedCharArray,r=H.layers(i),s=new o.dtTileCacheLayerHeader;s.magic=o.Detour.TILECACHE_MAGIC,s.version=o.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const n=r.bmin(),d=r.bmax();s.set_bmin(0,n.x),s.set_bmin(1,n.y),s.set_bmin(2,n.z),s.set_bmax(0,d.x),s.set_bmax(1,d.y),s.set_bmax(2,d.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 h=$(r),c=N(r),m=W(r),g=B(he,s,h,c,m,a);if(o.Detour.statusFailed(g))return{n:0};F.push(a)}return M||(O(H),i.heightfieldLayerSet=void 0),R.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<se;++e)for(let t=0;t<oe;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);o.Detour.statusFailed(r.status)&&C.log(o.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<se;e++)for(let t=0;t<oe;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(o.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:R}},Q={...t},ee=(t,T,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:Y}=K(t,T),Z=H(B,Y,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=T.length,ae=new l.FloatArray;ae.copy(te,te.length);const le=T,re=T.length/3,oe=new l.IntArray;oe.copy(le,le.length);const se=e.fromArray(B);let ne=Math.min(Math.floor(V(X(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:se,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,oe,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(o.Module.RC_LOG_ERROR,e),{success:!1,error:e}),T={tileX:e,tileY:t};I.tileIntermediates.push(T);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(o.Module.RC_TIMER_TOTAL),O.log(o.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(o.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(o.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=s();if(T.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.UnsignedCharArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.IntArray;B.resize(512);const U=me.getChunksOverlappingRect($,N,B,512);if(0===U)return{success:!0};for(let e=0;e<U;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,o);const s=h(O,ae,ie,a,o,i,G,H.walkableClimb);if(o.free(),!s)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(T.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(T.heightfield),T.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!y(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const V=M();if(T.contourSet=V,!C(O,K,H.maxSimplificationError,H.maxEdgeLen,V,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const X=R();if(!x(O,V,H.maxVertsPerPoly,X))return r(\"Failed to triangulate contours\");const Y=p();if(!A(O,X,K,H.detailSampleDist,H.detailSampleMaxError,Y))return r(\"Failed to build detail mesh\");F||(k(K),T.compactHeightfield=void 0,z(V),T.contourSet=void 0);for(let e=0;e<X.npolys();e++)X.areas(e)==o.Recast.WALKABLE_AREA&&X.setAreas(e,0),0==X.areas(e)&&X.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(X),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(o.Module.RC_LOG_PROGRESS,`>> Polymesh: ${X.nverts()} vertices ${X.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(o.Module.RC_TIMER_TEMP);let 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]=Y[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,o.Module.DT_TILE_FREE_DATA,0);o.Detour.statusFailed(a.status)&&(O.log(o.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${U(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(o.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,V as dtIlog2,X as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,Y 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 let index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","o","s","n","min","max","bbMin","vec3","toArray","bbMax","V","Number","X","Y","j","recastConfigDefaults","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","C","RecastBuildContext","R","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","v","T","Arrays","FloatArray","U","Z","IntArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","oe","se","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","TileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","cloneRcConfig","set_bmin","set_bmax","createHeightfield","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","UnsignedCharArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","S","erodeWalkableArea","I","G","nlayers","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","N","W","getHeightfieldLayerCons","B","buildTileCacheLayer","statusFailed","tiles","addTile","Raw","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","navMeshGeneratorConfig","keepIntermediates","freeHeightfield","contourSet","createRcConfig","Recast","calcGridSize","filterLowHangingWalkableObstacles","filterWalkableLowHeightSpans","buildCompactHeightfield","q","buildContours","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","allocPolyMeshDetail","buildPolyMeshDetail","npolys","areas","WALKABLE_AREA","setAreas","setFlags","NavMeshCreateParams","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","generateTileCache","NavMesh","freeCompactHeightfield","NavMeshParams","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","markWalkableTriangles","filterLedgeSpans","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","dtStatusToReadableString","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,RecastConfig as p,Raw as C,allocHeightfield as x,createHeightfield as S,markWalkableTriangles as A,rasterizeTriangles as k,filterLowHangingWalkableObstacles as R,filterLedgeSpans as v,filterWalkableLowHeightSpans as z,allocCompactHeightfield as _,buildCompactHeightfield as T,freeHeightfield as E,erodeWalkableArea as F,buildDistanceField as H,buildRegions as D,allocContourSet as P,buildContours as I,allocPolyMesh as L,buildPolyMesh as O,allocPolyMeshDetail as $,buildPolyMeshDetail as G,freeCompactHeightfield as W,freeContourSet as N,NavMeshCreateParams as U,createNavMeshData as B,TileCache as V,calcGridSize as K,DetourTileCacheParams as X,vec3 as Y,NavMeshParams as Z,RecastChunkyTriMesh as j,dtStatusToReadableString as q,TileCacheMeshProcess as J,freeHeightfieldLayerSet as Q,allocHeightfieldLayerSet as ee,buildHeightfieldLayers as te,getHeightfieldLayerHeights as ie,getHeightfieldLayerAreas as ae,getHeightfieldLayerCons as se,buildTileCacheLayer as re}from"@recast-navigation/core";class oe 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 le=new r;class ne 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,le.setPosition(...t)),d.setColorAt(e,i?this.walkableColor:this.defaultColor)}d.instanceMatrix.needsUpdate=!0,d.instanceColor&&(d.instanceColor.needsUpdate=!0),this.add(d)}}}class he extends e{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:e,navMeshMaterial:i}){super(),this.navMesh=e,this.geometry=new c,this.navMeshMaterial=i||new t({color:"orange",transparent:!0,opacity:.7}),this.update(),this.mesh=new a(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[e,t]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new d(Float32Array.from(e),3)),this.geometry.setIndex(new d(Uint32Array.from(t),1)),this.geometry.computeVertexNormals()}}class ce 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 de 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){let 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 ge=(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)}},me=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},ue=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),fe={...b},be={...b,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},we=(e,t,i={},a=!1)=>{const s=new w;let r={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]};const o=new V,l=new M,n=()=>{if(!a)for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.heightfield&&(E(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(W(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(Q(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},h=e=>(n(),o.destroy(),l.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:r,error:e}),c=e,d=t.length,g=new y.FloatArray;g.copy(c,c.length);const m=t,u=t.length/3,f=new y.IntArray;f.copy(m,m.length);const{bbMin:b,bbMax:H}=ge(e,t),{expectedLayersPerTile:D,maxObstacles:P,...I}={...be,...i},{raw:L}=p.create(I),O=K(b,H,L.cs);L.width=O.width,L.height=O.height,L.minRegionArea=L.minRegionArea*L.minRegionArea,L.mergeRegionArea=L.mergeRegionArea*L.mergeRegionArea,L.detailSampleDist=L.detailSampleDist<.9?0:L.cs*L.detailSampleDist,L.detailSampleMaxError=L.ch*L.detailSampleMaxError;const $=Math.floor(L.tileSize),G=Math.floor((L.width+$-1)/$),N=Math.floor((L.height+$-1)/$);L.borderSize=L.walkableRadius+3,L.width=L.tileSize+2*L.borderSize,L.height=L.tileSize+2*L.borderSize;const U=X.create({orig:b,cs:L.cs,ch:L.ch,width:L.tileSize,height:L.tileSize,walkableHeight:L.walkableHeight,walkableRadius:L.walkableRadius,walkableClimb:L.walkableClimb,maxSimplificationError:L.maxSimplificationError,maxTiles:G*N*D,maxObstacles:P}),B=new C.RecastLinearAllocator(32e3),q=new C.RecastFastLZCompressor,oe=i.tileCacheMeshProcess??new J(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(U,B,q,oe))return h("Failed to initialize tile cache");const le=Y.fromArray(b);let ne=Math.min(Math.floor(me(ue(G*N*D))),14);ne>14&&(ne=14);const he=1<<ne,ce=1<<22-ne,de=Z.create({orig:le,tileWidth:L.tileSize*L.cs,tileHeight:L.tileSize*L.cs,maxTiles:he,maxPolys:ce});if(!l.initTiled(de))return h("Failed to initialize tiled navmesh");const fe=new j;if(r.chunkyTriMesh=fe,!fe.init(g,f,u,256))return h("Failed to build chunky triangle mesh");const we=(e,t)=>{const i={tileX:e,tileY:t},o=L.tileSize*L.cs,{raw:l}=new p(L).clone(),n=[b[0]+e*o,b[1],b[2]+t*o],h=[b[0]+(e+1)*o,H[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.IntArray;f.resize(512);const w=fe.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=fe.nodes(t).n,a=fe.getNodeTris(t),r=new y.UnsignedCharArray;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,L.walkableClimb,c),v(s,L.walkableHeight,L.walkableClimb,c),z(s,L.walkableHeight,c);const M=_();if(!T(s,L.walkableHeight,L.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!F(s,L.walkableRadius,M))return{n:0};const D=ee();if(!te(s,M,L.borderSize,L.walkableHeight,D))return{n:0};a||(W(M),i.compactHeightfield=void 0);const P=[];for(let i=0;i<D.nlayers();i++){const a=new y.UnsignedCharArray,s=D.layers(i),r=new C.dtTileCacheLayerHeader;r.magic=C.Detour.TILECACHE_MAGIC,r.version=C.Detour.TILECACHE_VERSION,r.tx=e,r.ty=t,r.tlayer=i;const o=s.bmin(),l=s.bmax();r.set_bmin(0,o.x),r.set_bmin(1,o.y),r.set_bmin(2,o.z),r.set_bmax(0,l.x),r.set_bmax(1,l.y),r.set_bmax(2,l.z),r.width=s.width(),r.height=s.height(),r.minx=s.minx(),r.maxx=s.maxx(),r.miny=s.miny(),r.maxy=s.maxy(),r.hmin=s.hmin(),r.hmax=s.hmax();const n=ie(s),h=ae(s),c=se(s),d=re(q,r,n,h,c,a);if(C.Detour.statusFailed(d))return{n:0};P.push(a)}return a||(Q(D),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:P.length,tiles:P}};for(let e=0;e<N;++e)for(let t=0;t<G;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let r=0;r<i;r++){const i=a[r],l=o.addTile(i);C.Detour.statusFailed(l.status)&&s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<N;e++)for(let t=0;t<G;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(C.Detour.statusFailed(i))return h(`Failed to build nav mesh tiles at ${t}, ${e}`)}return n(),{success:!0,tileCache:o,navMesh:l,intermediates:r}},Me={...b},ye=new i,pe=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i,s=i.geometry.getIndex()?.array;if(!s){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],s={};let r=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,o=e.geometry.getIndex().array;for(let l=0;l<o.length;l++){const n=3*o[l],h=ye.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)]},Ce=(e,t={},i=!1)=>{const[a,s]=pe(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"solo",buildContext:s},o=new M,l=e=>(a||(r.heightfield&&(E(r.heightfield),r.heightfield=void 0),r.compactHeightfield&&(W(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(N(r.contourSet),r.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:r,error:e}),n=e,h=t.length,c=new y.FloatArray;c.copy(n,n.length);const d=t,g=t.length/3,m=new y.IntArray;m.copy(d,d.length);const{bbMin:u,bbMax:f}=ge(e,t),{raw:b}=p.create({...fe,...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 V=C.Recast.calcGridSize(u,f,b.cs);b.width=V.width,b.height=V.height;const K=x();if(r.heightfield=K,!S(s,K,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const X=new y.UnsignedCharArray;if(X.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,X),!k(s,c,h,m,X,g,K,b.walkableClimb))return l("Could not rasterize triangles");X.free(),R(s,b.walkableClimb,K),v(s,b.walkableHeight,b.walkableClimb,K),z(s,b.walkableHeight,K);const Y=_();if(r.compactHeightfield=Y,!T(s,b.walkableHeight,b.walkableClimb,K,Y))return l("Failed to build compact data");if(a||(E(K),r.heightfield=void 0),!F(s,b.walkableRadius,Y))return l("Failed to erode walkable area");if(!H(s,Y))return l("Failed to build distance field");if(!D(s,Y,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const Z=P();if(r.contourSet=Z,!I(s,Y,b.maxSimplificationError,b.maxEdgeLen,Z,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const j=L();if(!O(s,Z,b.maxVertsPerPoly,j))return l("Failed to triangulate contours");const q=$();if(!G(s,j,Y,b.detailSampleDist,b.detailSampleMaxError,q))return l("Failed to build detail mesh");a||(W(Y),r.compactHeightfield=void 0,N(Z),r.contourSet=void 0);for(let e=0;e<j.npolys();e++)j.areas(e)==C.Recast.WALKABLE_AREA&&j.setAreas(e,0),0==j.areas(e)&&j.setFlags(e,1);const J=new U;J.setPolyMeshCreateParams(j),J.setPolyMeshDetailCreateParams(q),J.setWalkableHeight(b.walkableHeight),J.setWalkableRadius(b.walkableRadius),J.setWalkableClimb(b.walkableClimb),J.setCellSize(b.cs),J.setCellHeight(b.ch),J.setBuildBvTree(!0),i.offMeshConnections&&J.setOffMeshConnections(i.offMeshConnections);const Q=B(J);if(!Q.success)return l("Failed to create Detour navmesh data");const{navMeshData:ee}=Q;return o.initSolo(ee)?{success:!0,navMesh:o,intermediates:r}:l("Failed to create Detour navmesh")})(a,s,t,i)},xe=(e,t={},i=!1)=>{const[a,s]=pe(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new M,l=()=>{if(!a){for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.compactHeightfield&&W(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&N(t.contourSet)}r.chunkyTriMesh&&(r.chunkyTriMesh=void 0)}},n=e=>(l(),o.destroy(),{success:!1,navMesh:void 0,intermediates:r,error:e}),h=p.create({...Me,...i}),{raw:c}=h,{bbMin:d,bbMax:g}=ge(e,t),m=K(d,g,c.cs);c.width=m.width,c.height=m.height,c.minRegionArea=c.minRegionArea*c.minRegionArea,c.mergeRegionArea=c.mergeRegionArea*c.mergeRegionArea,c.tileSize=Math.floor(c.tileSize),c.borderSize=c.walkableRadius+3,c.width=c.tileSize+2*c.borderSize,c.height=c.tileSize+2*c.borderSize,c.detailSampleDist=c.detailSampleDist<.9?0:c.cs*c.detailSampleDist,c.detailSampleMaxError=c.ch*c.detailSampleMaxError;const u=Math.floor(c.tileSize),f=Math.floor((m.width+u-1)/u),b=Math.floor((m.height+u-1)/u),V=c.tileSize*c.cs,X=e,J=t.length,Q=new y.FloatArray;Q.copy(X,X.length);const ee=t,te=t.length/3,ie=new y.IntArray;ie.copy(ee,ee.length);const ae=Y.fromArray(d);let se=Math.min(Math.floor(me(ue(f*b))),14);se>14&&(se=14);const re=1<<se,oe=1<<22-se,le=Z.create({orig:ae,tileWidth:c.tileSize*c.cs,tileHeight:c.tileSize*c.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(Q,ie,te,256))return n("Failed to build chunky triangle mesh");const he=(e,t,o,l)=>{const n=e=>(s.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),d={tileX:e,tileY:t};r.tileIntermediates.push(d);const{raw:g}=h.clone(),m=[...o],u=[...l];m[0]-=g.borderSize*g.cs,m[2]-=g.borderSize*g.cs,u[0]+=g.borderSize*g.cs,u[2]+=g.borderSize*g.cs,g.set_bmin(0,m[0]),g.set_bmin(1,m[1]),g.set_bmin(2,m[2]),g.set_bmax(0,u[0]),g.set_bmax(1,u[1]),g.set_bmax(2,u[2]),s.resetTimers(),s.startTimer(C.Module.RC_TIMER_TOTAL),s.log(C.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(C.Module.RC_LOG_PROGRESS,` - ${c.width} x ${c.height} cells`),s.log(C.Module.RC_LOG_PROGRESS,` - ${J/1e3}fK verts, ${te/1e3}K tris`);const f=x();if(d.heightfield=f,!S(s,f,g.width,g.height,m,u,g.cs,g.ch))return n("Could not create heightfield");(new y.UnsignedCharArray).resize(ne.maxTrisPerChunk());const b=[m[0],m[2]],w=[u[0],u[2]],M=new y.IntArray;M.resize(512);const p=ne.getChunksOverlappingRect(b,w,M,512);if(0===p)return{success:!0};for(let e=0;e<p;++e){const t=M.get_data(e),i=ne.nodes(t).n,a=ne.getNodeTris(t),r=new y.UnsignedCharArray;r.resize(i),A(s,g.walkableSlopeAngle,Q,J,a,i,r);const o=k(s,Q,J,a,r,i,f,g.walkableClimb);if(r.free(),!o)return n("Could not rasterize triangles")}R(s,g.walkableClimb,f),v(s,g.walkableHeight,g.walkableClimb,f),z(s,g.walkableHeight,f);const V=_();if(d.compactHeightfield=V,!T(s,g.walkableHeight,g.walkableClimb,f,V))return n("Could not build compact heightfield");if(a||(E(d.heightfield),d.heightfield=void 0),!F(s,g.walkableRadius,V))return n("Could not erode walkable area");if(!H(s,V))return n("Failed to build distance field");if(!D(s,V,g.borderSize,g.minRegionArea,g.mergeRegionArea))return n("Failed to build regions");const K=P();if(d.contourSet=K,!I(s,V,g.maxSimplificationError,g.maxEdgeLen,K,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const X=L();if(!O(s,K,g.maxVertsPerPoly,X))return n("Failed to triangulate contours");const Y=$();if(!G(s,X,V,g.detailSampleDist,g.detailSampleMaxError,Y))return n("Failed to build detail mesh");a||(W(V),d.compactHeightfield=void 0,N(K),d.contourSet=void 0);for(let e=0;e<X.npolys();e++)X.areas(e)==C.Recast.WALKABLE_AREA&&X.setAreas(e,0),0==X.areas(e)&&X.setFlags(e,1);const Z=new U;Z.setPolyMeshCreateParams(X),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(g.walkableHeight),Z.setWalkableRadius(g.walkableRadius),Z.setWalkableClimb(g.walkableClimb),Z.setCellSize(g.cs),Z.setCellHeight(g.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(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${X.nverts()} vertices ${X.npolys()} polygons`),{success:!0,data:j.navMeshData}):n("Failed to create Detour navmesh data")};s.startTimer(C.Module.RC_TIMER_TEMP);let ce=[0,0,0],de=[0,0,0];for(let e=0;e<b;e++)for(let t=0;t<f;t++){ce[0]=d[0]+t*V,ce[1]=d[1],ce[2]=d[2]+e*V,de[0]=d[0]+(t+1)*V,de[1]=g[1],de[2]=d[2]+(e+1)*V;const i=he(t,e,ce,de);if(i.success&&i.data){o.removeTile(o.getTileRefAt(t,e,0));const a=o.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${q(a.status)} (${a.status})`),i.data.free())}}return s.stopTimer(C.Module.RC_TIMER_TEMP),a||l(),{success:!0,navMesh:o,intermediates:r}})(a,s,t,i)},Se=(e,t={},i=!1)=>{const[a,s]=pe(e);return we(a,s,t,i)};export{oe as CrowdHelper,ne as HeightfieldHelper,he as NavMeshHelper,ce as OffMeshConnectionsHelper,de as TileCacheHelper,pe as getPositionsAndIndices,Ce as threeToSoloNavMesh,Se as threeToTileCache,xe as threeToTiledNavMesh};
1
+ import{Object3D as e,MeshBasicMaterial as t,Vector3 as i,Mesh as a,CylinderGeometry as s,Matrix4 as r,Color as o,BoxGeometry as l,InstancedMesh as n,DynamicDrawUsage as h,BufferGeometry as c,BufferAttribute as d,LineBasicMaterial as g,CircleGeometry as m,CatmullRomCurve3 as u,Line as f}from"three";import{recastConfigDefaults as b,RecastBuildContext as w,NavMesh as M,Arrays as y,createRcConfig as p,Raw as C,allocHeightfield as x,createHeightfield as S,markWalkableTriangles as A,rasterizeTriangles as k,filterLowHangingWalkableObstacles as R,filterLedgeSpans as v,filterWalkableLowHeightSpans as z,allocCompactHeightfield as _,buildCompactHeightfield as T,freeHeightfield as E,erodeWalkableArea as F,buildDistanceField as H,buildRegions as D,allocContourSet as P,buildContours as I,allocPolyMesh as L,buildPolyMesh as O,allocPolyMeshDetail as $,buildPolyMeshDetail as G,freeCompactHeightfield as W,freeContourSet as N,NavMeshCreateParams as U,createNavMeshData as B,TileCache as V,calcGridSize as K,DetourTileCacheParams as X,vec3 as Y,NavMeshParams as Z,RecastChunkyTriMesh as j,dtStatusToReadableString as q,TileCacheMeshProcess as J,freeHeightfieldLayerSet as Q,cloneRcConfig as ee,allocHeightfieldLayerSet as te,buildHeightfieldLayers as ie,getHeightfieldLayerHeights as ae,getHeightfieldLayerAreas as se,getHeightfieldLayerCons as re,buildTileCacheLayer as oe}from"@recast-navigation/core";class le extends e{agentMeshes=new Map;recastCrowd;agentMaterial;constructor({crowd:e,agentMaterial:i}){super(),this.recastCrowd=e,this.agentMaterial=i??new t({color:"red"}),this.update()}update(){const e=this.recastCrowd.getAgents(),t=new Set(this.agentMeshes.keys());for(const a of e){t.delete(a.agentIndex);const e=a.position(),s=a.velocity();let r=this.agentMeshes.get(a.agentIndex);void 0===r?(r=this.createAgentMesh(a),this.add(r),this.agentMeshes.set(a.agentIndex,r)):this.updateAgentGeometry(r,a),r.position.set(e.x,e.y+a.height/2,e.z),r.lookAt((new i).copy(r.position).add(s))}for(const e of t){const t=this.agentMeshes.get(e);t&&(this.remove(t),this.agentMeshes.delete(e))}}createAgentMesh(e){const t=new a;return t.material=this.agentMaterial,this.updateAgentGeometry(t,e),t.userData={radius:e.radius,height:e.height},t}updateAgentGeometry(e,t){if(e.userData.radius!==t.radius||e.userData.height!==t.height){const i=new s(t.radius,t.radius,t.height);e.geometry.dispose(),e.geometry=i,e.userData.radius=t.radius,e.userData.height=t.height}}}const ne=new r;class he extends e{heightfields;highlightWalkable;defaultColor;walkableColor;material;constructor({heightfields:e,highlightWalkable:i=!1,material:a=new t,defaultColor:s="blue",walkableColor:r="green"}){super(),this.heightfields=e,this.highlightWalkable=i,this.material=a,this.defaultColor=new o(s),this.walkableColor=new o(r),this.update()}update(){this.clear();for(const e of this.heightfields){const t=e.bmin(),i=e.cs(),a=e.ch(),s=e.width(),r=e.height(),o=[];for(let l=0;l<r;++l)for(let r=0;r<s;++r){const n=t.x+r*i,h=t.z+l*i;let c=e.spans(r+l*s);for(;c;){const e=n,s=t.y+c.smin()*a,r=h,l=n+i,d=t.y+c.smax()*a,g=h+i;o.push({position:[(l+e)/2,(d+s)/2,(g+r)/2],walkable:this.highlightWalkable&&0!==c.area()}),c=c.next()}}const c=new l(i,a,i),d=new n(c,this.material,o.length);d.instanceMatrix.setUsage(h);for(let e=0;e<o.length;e++){const{position:t,walkable:i}=o[e];d.setMatrixAt(e,ne.setPosition(...t)),d.setColorAt(e,i?this.walkableColor:this.defaultColor)}d.instanceMatrix.needsUpdate=!0,d.instanceColor&&(d.instanceColor.needsUpdate=!0),this.add(d)}}}class ce extends e{navMesh;navMeshMaterial;mesh;geometry;constructor({navMesh:e,navMeshMaterial:i}){super(),this.navMesh=e,this.geometry=new c,this.navMeshMaterial=i||new t({color:"orange",transparent:!0,opacity:.7}),this.update(),this.mesh=new a(this.geometry,this.navMeshMaterial),this.add(this.mesh)}update(){const[e,t]=this.navMesh.getDebugNavMesh();this.geometry.setAttribute("position",new d(Float32Array.from(e),3)),this.geometry.setIndex(new d(Uint32Array.from(t),1)),this.geometry.computeVertexNormals()}}class de extends e{offMeshConnections;entryCircleMaterial;exitCircleMaterial;lineMaterial;constructor({offMeshConnections:e,entryCircleMaterial:i,exitCircleMaterial:a,lineMaterial:s}){super(),this.offMeshConnections=e??[],this.entryCircleMaterial=i??new t({color:"green"}),this.exitCircleMaterial=a??new t({color:"blue"}),this.lineMaterial=s??new g({color:"red"}),this.update()}update(){this.clear();for(const e of this.offMeshConnections){const t=new m(e.radius,16),s=new a(t,this.entryCircleMaterial);s.position.copy(e.startPosition),s.position.y+=.001,s.rotation.x=-Math.PI/2,this.add(s);const r=new a(t,e.bidirectional?this.entryCircleMaterial:this.exitCircleMaterial);r.position.copy(e.endPosition),r.position.y+=.001,r.rotation.x=-Math.PI/2,this.add(r);const o=(new i).copy(e.startPosition),l=(new i).copy(e.endPosition),n=(new i).addVectors(o,l).multiplyScalar(.5);n.y*=1.2;const h=new u([o,n,l]).getPoints(50),d=(new c).setFromPoints(h),g=new f(d,this.lineMaterial);this.add(g)}}}class ge extends e{tileCache;obstacleMeshes=new Map;obstacleMaterial;constructor({tileCache:e,obstacleMaterial:i}){super(),this.tileCache=e,this.obstacleMaterial=i||new t({color:"red",wireframe:!0,wireframeLinewidth:2}),this.update()}update(){const e=new Set(this.obstacleMeshes.keys());for(const[,t]of this.tileCache.obstacles){let 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;let r={type:"tilecache",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]};const o=new V,l=new M,n=()=>{if(!a)for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.heightfield&&(E(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(W(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(Q(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},h=e=>(n(),o.destroy(),l.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:r,error:e}),c=e,d=t.length,g=new y.FloatArray;g.copy(c,c.length);const m=t,u=t.length/3,f=new y.IntArray;f.copy(m,m.length);const{bbMin:b,bbMax:H}=me(e,t),{expectedLayersPerTile:D,maxObstacles:P,...I}={...we,...i},L=p(I),O=K(b,H,L.cs);L.width=O.width,L.height=O.height,L.minRegionArea=L.minRegionArea*L.minRegionArea,L.mergeRegionArea=L.mergeRegionArea*L.mergeRegionArea,L.detailSampleDist=L.detailSampleDist<.9?0:L.cs*L.detailSampleDist,L.detailSampleMaxError=L.ch*L.detailSampleMaxError;const $=Math.floor(L.tileSize),G=Math.floor((L.width+$-1)/$),N=Math.floor((L.height+$-1)/$);L.borderSize=L.walkableRadius+3,L.width=L.tileSize+2*L.borderSize,L.height=L.tileSize+2*L.borderSize;const U=X.create({orig:b,cs:L.cs,ch:L.ch,width:L.tileSize,height:L.tileSize,walkableHeight:L.walkableHeight,walkableRadius:L.walkableRadius,walkableClimb:L.walkableClimb,maxSimplificationError:L.maxSimplificationError,maxTiles:G*N*D,maxObstacles:P}),B=new C.RecastLinearAllocator(32e3),q=new C.RecastFastLZCompressor,le=i.tileCacheMeshProcess??new J(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)}));if(!o.init(U,B,q,le))return h("Failed to initialize tile cache");const ne=Y.fromArray(b);let he=Math.min(Math.floor(ue(fe(G*N*D))),14);he>14&&(he=14);const ce=1<<he,de=1<<22-he,ge=Z.create({orig:ne,tileWidth:L.tileSize*L.cs,tileHeight:L.tileSize*L.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=L.tileSize*L.cs,l=ee(L),n=[b[0]+e*o,b[1],b[2]+t*o],h=[b[0]+(e+1)*o,H[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.IntArray;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.UnsignedCharArray;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,L.walkableClimb,c),v(s,L.walkableHeight,L.walkableClimb,c),z(s,L.walkableHeight,c);const M=_();if(!T(s,L.walkableHeight,L.walkableClimb,c,M))return{n:0};if(a||(E(i.heightfield),i.heightfield=void 0),!F(s,L.walkableRadius,M))return{n:0};const p=te();if(!ie(s,M,L.borderSize,L.walkableHeight,p))return{n:0};a||(W(M),i.compactHeightfield=void 0);const D=[];for(let i=0;i<p.nlayers();i++){const a=new y.UnsignedCharArray,s=p.layers(i),r=new C.dtTileCacheLayerHeader;r.magic=C.Detour.TILECACHE_MAGIC,r.version=C.Detour.TILECACHE_VERSION,r.tx=e,r.ty=t,r.tlayer=i;const o=s.bmin(),l=s.bmax();r.set_bmin(0,o.x),r.set_bmin(1,o.y),r.set_bmin(2,o.z),r.set_bmax(0,l.x),r.set_bmax(1,l.y),r.set_bmax(2,l.z),r.width=s.width(),r.height=s.height(),r.minx=s.minx(),r.maxx=s.maxx(),r.miny=s.miny(),r.maxy=s.maxy(),r.hmin=s.hmin(),r.hmax=s.hmax();const n=ae(s),h=se(s),c=re(s),d=oe(q,r,n,h,c,a);if(C.Detour.statusFailed(d))return{n:0};D.push(a)}return a||(Q(p),i.heightfieldLayerSet=void 0),r.tileIntermediates.push(i),{n:D.length,tiles:D}};for(let e=0;e<N;++e)for(let t=0;t<G;++t){const{n:i,tiles:a}=Me(t,e);if(i>0&&a)for(let r=0;r<i;r++){const i=a[r],l=o.addTile(i);C.Detour.statusFailed(l.status)&&s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<N;e++)for(let t=0;t<G;t++){const i=o.buildNavMeshTilesAt(t,e,l);if(C.Detour.statusFailed(i))return h(`Failed to build nav mesh tiles at ${t}, ${e}`)}return n(),{success:!0,tileCache:o,navMesh:l,intermediates:r}},ye={...b},pe=new i,Ce=e=>{const t=[];for(const i of e){const e=i.geometry.attributes.position;if(!e||3!==e.itemSize)continue;let a=i,s=i.geometry.getIndex()?.array;if(!s){a=a.clone(),a.geometry=i.geometry.clone();const t=[];for(let i=0;i<e.count;i++)t.push(i);a.geometry.setIndex(t)}t.push(a)}const i=[],a=[],s={};let r=0;for(const e of t){e.updateMatrixWorld();const t=e.geometry.attributes.position.array,o=e.geometry.getIndex().array;for(let l=0;l<o.length;l++){const n=3*o[l],h=pe.set(t[n],t[n+1],t[n+2]);e.localToWorld(h);const c=`${h.x}_${h.y}_${h.z}`;let d=s[c];d||(s[c]=d=r,i.push(h.x,h.y,h.z),r++),a.push(d)}}return[Float32Array.from(i),Uint32Array.from(a)]},xe=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"solo",buildContext:s},o=new M,l=e=>(a||(r.heightfield&&(E(r.heightfield),r.heightfield=void 0),r.compactHeightfield&&(W(r.compactHeightfield),r.compactHeightfield=void 0),r.contourSet&&(N(r.contourSet),r.contourSet=void 0)),o.destroy(),{navMesh:void 0,success:!1,intermediates:r,error:e}),n=e,h=t.length,c=new y.FloatArray;c.copy(n,n.length);const d=t,g=t.length/3,m=new y.IntArray;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 V=C.Recast.calcGridSize(u,f,b.cs);b.width=V.width,b.height=V.height;const K=x();if(r.heightfield=K,!S(s,K,b.width,b.height,u,f,b.cs,b.ch))return l("Could not create heightfield");const X=new y.UnsignedCharArray;if(X.resize(g),A(s,b.walkableSlopeAngle,c,h,m,g,X),!k(s,c,h,m,X,g,K,b.walkableClimb))return l("Could not rasterize triangles");X.free(),R(s,b.walkableClimb,K),v(s,b.walkableHeight,b.walkableClimb,K),z(s,b.walkableHeight,K);const Y=_();if(r.compactHeightfield=Y,!T(s,b.walkableHeight,b.walkableClimb,K,Y))return l("Failed to build compact data");if(a||(E(K),r.heightfield=void 0),!F(s,b.walkableRadius,Y))return l("Failed to erode walkable area");if(!H(s,Y))return l("Failed to build distance field");if(!D(s,Y,b.borderSize,b.minRegionArea,b.mergeRegionArea))return l("Failed to build regions");const Z=P();if(r.contourSet=Z,!I(s,Y,b.maxSimplificationError,b.maxEdgeLen,Z,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return l("Failed to create contours");const j=L();if(!O(s,Z,b.maxVertsPerPoly,j))return l("Failed to triangulate contours");const q=$();if(!G(s,j,Y,b.detailSampleDist,b.detailSampleMaxError,q))return l("Failed to build detail mesh");a||(W(Y),r.compactHeightfield=void 0,N(Z),r.contourSet=void 0);for(let e=0;e<j.npolys();e++)j.areas(e)==C.Recast.WALKABLE_AREA&&j.setAreas(e,0),0==j.areas(e)&&j.setFlags(e,1);const J=new U;J.setPolyMeshCreateParams(j),J.setPolyMeshDetailCreateParams(q),J.setWalkableHeight(b.walkableHeight),J.setWalkableRadius(b.walkableRadius),J.setWalkableClimb(b.walkableClimb),J.setCellSize(b.cs),J.setCellHeight(b.ch),J.setBuildBvTree(!0),i.offMeshConnections&&J.setOffMeshConnections(i.offMeshConnections);const Q=B(J);if(!Q.success)return l("Failed to create Detour navmesh data");const{navMeshData:ee}=Q;return o.initSolo(ee)?{success:!0,navMesh:o,intermediates:r}:l("Failed to create Detour navmesh")})(a,s,t,i)},Se=(e,t={},i=!1)=>{const[a,s]=Ce(e);return((e,t,i={},a=!1)=>{const s=new w,r={type:"tiled",buildContext:s,chunkyTriMesh:void 0,tileIntermediates:[]},o=new M,l=()=>{if(!a){for(let e=0;e<r.tileIntermediates.length;e++){const t=r.tileIntermediates[e];t.compactHeightfield&&W(t.compactHeightfield),t.heightfield&&E(t.heightfield),t.contourSet&&N(t.contourSet)}r.chunkyTriMesh&&(r.chunkyTriMesh=void 0)}},n=e=>(l(),o.destroy(),{success:!1,navMesh:void 0,intermediates:r,error:e}),h=p({...ye,...i}),{bbMin:c,bbMax:d}=me(e,t),g=K(c,d,h.cs);h.width=g.width,h.height=g.height,h.minRegionArea=h.minRegionArea*h.minRegionArea,h.mergeRegionArea=h.mergeRegionArea*h.mergeRegionArea,h.tileSize=Math.floor(h.tileSize),h.borderSize=h.walkableRadius+3,h.width=h.tileSize+2*h.borderSize,h.height=h.tileSize+2*h.borderSize,h.detailSampleDist=h.detailSampleDist<.9?0:h.cs*h.detailSampleDist,h.detailSampleMaxError=h.ch*h.detailSampleMaxError;const m=Math.floor(h.tileSize),u=Math.floor((g.width+m-1)/m),f=Math.floor((g.height+m-1)/m),b=h.tileSize*h.cs,V=e,X=t.length,J=new y.FloatArray;J.copy(V,V.length);const Q=t,te=t.length/3,ie=new y.IntArray;ie.copy(Q,Q.length);const ae=Y.fromArray(c);let se=Math.min(Math.floor(ue(fe(u*f))),14);se>14&&(se=14);const re=1<<se,oe=1<<22-se,le=Z.create({orig:ae,tileWidth:h.tileSize*h.cs,tileHeight:h.tileSize*h.cs,maxTiles:re,maxPolys:oe});if(!o.initTiled(le))return n("Could not init nav mesh for tiled use");const ne=new j;if(r.chunkyTriMesh=ne,!ne.init(J,ie,te,256))return n("Failed to build chunky triangle mesh");const he=(e,t,o,l)=>{const n=e=>(s.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),c={tileX:e,tileY:t};r.tileIntermediates.push(c);const d=ee(h),g=[...o],m=[...l];g[0]-=d.borderSize*d.cs,g[2]-=d.borderSize*d.cs,m[0]+=d.borderSize*d.cs,m[2]+=d.borderSize*d.cs,d.set_bmin(0,g[0]),d.set_bmin(1,g[1]),d.set_bmin(2,g[2]),d.set_bmax(0,m[0]),d.set_bmax(1,m[1]),d.set_bmax(2,m[2]),s.resetTimers(),s.startTimer(C.Module.RC_TIMER_TOTAL),s.log(C.Module.RC_LOG_PROGRESS,`Building tile ${r.tileIntermediates.length} at x: ${e}, y: ${t}`),s.log(C.Module.RC_LOG_PROGRESS,` - ${h.width} x ${h.height} cells`),s.log(C.Module.RC_LOG_PROGRESS,` - ${X/1e3}fK verts, ${te/1e3}K tris`);const u=x();if(c.heightfield=u,!S(s,u,d.width,d.height,g,m,d.cs,d.ch))return n("Could not create heightfield");(new y.UnsignedCharArray).resize(ne.maxTrisPerChunk());const f=[g[0],g[2]],b=[m[0],m[2]],w=new y.IntArray;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.UnsignedCharArray;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),!F(s,d.walkableRadius,p))return n("Could not erode walkable area");if(!H(s,p))return n("Failed to build distance field");if(!D(s,p,d.borderSize,d.minRegionArea,d.mergeRegionArea))return n("Failed to build regions");const V=P();if(c.contourSet=V,!I(s,p,d.maxSimplificationError,d.maxEdgeLen,V,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return n("Failed to create contours");const K=L();if(!O(s,V,d.maxVertsPerPoly,K))return n("Failed to triangulate contours");const Y=$();if(!G(s,K,p,d.detailSampleDist,d.detailSampleMaxError,Y))return n("Failed to build detail mesh");a||(W(p),c.compactHeightfield=void 0,N(V),c.contourSet=void 0);for(let e=0;e<K.npolys();e++)K.areas(e)==C.Recast.WALKABLE_AREA&&K.setAreas(e,0),0==K.areas(e)&&K.setFlags(e,1);const Z=new U;Z.setPolyMeshCreateParams(K),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(d.walkableHeight),Z.setWalkableRadius(d.walkableRadius),Z.setWalkableClimb(d.walkableClimb),Z.setCellSize(d.cs),Z.setCellHeight(d.ch),Z.setBuildBvTree(!0),i.offMeshConnections&&Z.setOffMeshConnections(i.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=B(Z);return j.success?(s.log(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${K.nverts()} vertices ${K.npolys()} polygons`),{success:!0,data:j.navMeshData}):n("Failed to create Detour navmesh data")};s.startTimer(C.Module.RC_TIMER_TEMP);let ce=[0,0,0],de=[0,0,0];for(let e=0;e<f;e++)for(let t=0;t<u;t++){ce[0]=c[0]+t*b,ce[1]=c[1],ce[2]=c[2]+e*b,de[0]=c[0]+(t+1)*b,de[1]=d[1],de[2]=c[2]+(e+1)*b;const i=he(t,e,ce,de);if(i.success&&i.data){o.removeTile(o.getTileRefAt(t,e,0));const a=o.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(s.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${q(a.status)} (${a.status})`),i.data.free())}}return s.stopTimer(C.Module.RC_TIMER_TEMP),a||l(),{success:!0,navMesh:o,intermediates:r}})(a,s,t,i)},Ae=(e,t={},i=!1)=>{const[a,s]=Ce(e);return Me(a,s,t,i)};export{le as CrowdHelper,he as HeightfieldHelper,ce as NavMeshHelper,de as OffMeshConnectionsHelper,ge as TileCacheHelper,Ce as getPositionsAndIndices,xe as threeToSoloNavMesh,Ae as threeToTileCache,Se as threeToTiledNavMesh};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n let 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,RecastConfig as r,Raw as o,allocHeightfield as s,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 w,buildDistanceField as S,buildRegions as y,allocContourSet as M,buildContours as C,allocPolyMesh as R,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as v,TileCacheMeshProcess as T,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,allocHeightfieldLayerSet as P,buildHeightfieldLayers as I,getHeightfieldLayerHeights as G,getHeightfieldLayerAreas as $,getHeightfieldLayerCons as N,buildTileCacheLayer as W,dtStatusToReadableString as B}from\"@recast-navigation/core\";const U=(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],o=t[3*r],s=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,o),a.y=Math.min(a.y,s),a.z=Math.min(a.z,n),l.x=Math.max(l.x,o),l.y=Math.max(l.y,s),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},K=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},V=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),X={...t},Y=(e,t,T={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.FloatArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.IntArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=U(e,t),{raw:K}=r.create({...X,...T});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 V=o.Recast.calcGridSize(W,B,K.cs);K.width=V.width,K.height=V.height;const Y=s();if(F.heightfield=Y,!n(H,Y,K.width,K.height,W,B,K.cs,K.ch))return D(\"Could not create heightfield\");const Z=new l.UnsignedCharArray;if(Z.resize($),d(H,K.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,Y,K.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,K.walkableClimb,Y),m(H,K.walkableHeight,K.walkableClimb,Y),g(H,K.walkableHeight,Y);const j=u();if(F.compactHeightfield=j,!b(H,K.walkableHeight,K.walkableClimb,Y,j))return D(\"Failed to build compact data\");if(E||(f(Y),F.heightfield=void 0),!w(H,K.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!S(H,j))return D(\"Failed to build distance field\");if(!y(H,j,K.borderSize,K.minRegionArea,K.mergeRegionArea))return D(\"Failed to build regions\");const q=M();if(F.contourSet=q,!C(H,j,K.maxSimplificationError,K.maxEdgeLen,q,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=R();if(!x(H,q,K.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,K.detailSampleDist,K.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==o.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(K.walkableHeight),ee.setWalkableRadius(K.walkableRadius),ee.setWalkableClimb(K.walkableClimb),ee.setCellSize(K.cs),ee.setCellHeight(K.ch),ee.setBuildBvTree(!0),T.offMeshConnections&&ee.setOffMeshConnections(T.offMeshConnections);const te=v(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},Z={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},j=()=>new T(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),q=(t,S,y={},M=!1)=>{const C=new i;let R={type:\"tilecache\",buildContext:C,chunkyTriMesh:void 0,tileIntermediates:[]};const x=new E,p=new a,A=()=>{if(!M)for(let e=0;e<R.tileIntermediates.length;e++){const t=R.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:R,error:e}),_=t,v=S.length,T=new l.FloatArray;T.copy(_,_.length);const B=S,X=S.length/3,Y=new l.IntArray;Y.copy(B,B.length);const{bbMin:q,bbMax:J}=U(t,S),{expectedLayersPerTile:Q,maxObstacles:ee,...te}={...Z,...y},{raw:ie}=r.create(te),ae=H(q,J,ie.cs);ie.width=ae.width,ie.height=ae.height,ie.minRegionArea=ie.minRegionArea*ie.minRegionArea,ie.mergeRegionArea=ie.mergeRegionArea*ie.mergeRegionArea,ie.detailSampleDist=ie.detailSampleDist<.9?0:ie.cs*ie.detailSampleDist,ie.detailSampleMaxError=ie.ch*ie.detailSampleMaxError;const le=Math.floor(ie.tileSize),re=Math.floor((ie.width+le-1)/le),oe=Math.floor((ie.height+le-1)/le);ie.borderSize=ie.walkableRadius+3,ie.width=ie.tileSize+2*ie.borderSize,ie.height=ie.tileSize+2*ie.borderSize;const se=F.create({orig:q,cs:ie.cs,ch:ie.ch,width:ie.tileSize,height:ie.tileSize,walkableHeight:ie.walkableHeight,walkableRadius:ie.walkableRadius,walkableClimb:ie.walkableClimb,maxSimplificationError:ie.maxSimplificationError,maxTiles:re*oe*Q,maxObstacles:ee}),ne=new o.RecastLinearAllocator(32e3),de=new o.RecastFastLZCompressor,he=y.tileCacheMeshProcess??j();if(!x.init(se,ne,de,he))return z(\"Failed to initialize tile cache\");const ce=e.fromArray(q);let me=Math.min(Math.floor(K(V(re*oe*Q))),14);me>14&&(me=14);const ge=1<<me,ue=1<<22-me,be=L.create({orig:ce,tileWidth:ie.tileSize*ie.cs,tileHeight:ie.tileSize*ie.cs,maxTiles:ge,maxPolys:ue});if(!p.initTiled(be))return z(\"Failed to initialize tiled navmesh\");const fe=new D;if(R.chunkyTriMesh=fe,!fe.init(T,Y,X,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ie.tileSize*ie.cs,{raw:S}=new r(ie).clone(),y=[q[0]+e*a,q[1],q[2]+t*a],x=[q[0]+(e+1)*a,J[1],q[2]+(t+1)*a];y[0]-=S.borderSize*S.cs,y[2]-=S.borderSize*S.cs,x[0]+=S.borderSize*S.cs,x[2]+=S.borderSize*S.cs,S.set_bmin(0,y[0]),S.set_bmin(1,y[1]),S.set_bmin(2,y[2]),S.set_bmax(0,x[0]),S.set_bmax(1,x[1]),S.set_bmax(2,x[2]);const p=s();if(i.heightfield=p,!n(C,p,S.width,S.height,y,x,S.cs,S.ch))return{n:0};const A=[y[0],y[2]],z=[x[0],x[2]],_=new l.IntArray;_.resize(512);const E=fe.getChunksOverlappingRect(A,z,_,512);if(0===E)return{n:0};for(let e=0;e<E;++e){const t=_.get_data(e),i=fe.nodes(t).n,a=fe.getNodeTris(t),r=new l.UnsignedCharArray;r.resize(i),d(C,S.walkableSlopeAngle,T,v,a,i,r);const o=h(C,T,v,a,r,i,p,S.walkableClimb);if(r.free(),!o)return{n:0}}c(C,ie.walkableClimb,p),m(C,ie.walkableHeight,ie.walkableClimb,p),g(C,ie.walkableHeight,p);const H=u();if(!b(C,ie.walkableHeight,ie.walkableClimb,p,H))return{n:0};if(M||(f(i.heightfield),i.heightfield=void 0),!w(C,ie.walkableRadius,H))return{n:0};const F=P();if(!I(C,H,ie.borderSize,ie.walkableHeight,F))return{n:0};M||(k(H),i.compactHeightfield=void 0);const L=[];for(let i=0;i<F.nlayers();i++){const a=new l.UnsignedCharArray,r=F.layers(i),s=new o.dtTileCacheLayerHeader;s.magic=o.Detour.TILECACHE_MAGIC,s.version=o.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const n=r.bmin(),d=r.bmax();s.set_bmin(0,n.x),s.set_bmin(1,n.y),s.set_bmin(2,n.z),s.set_bmax(0,d.x),s.set_bmax(1,d.y),s.set_bmax(2,d.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 h=G(r),c=$(r),m=N(r),g=W(de,s,h,c,m,a);if(o.Detour.statusFailed(g))return{n:0};L.push(a)}return M||(O(F),i.heightfieldLayerSet=void 0),R.tileIntermediates.push(i),{n:L.length,tiles:L}};for(let e=0;e<oe;++e)for(let t=0;t<re;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);o.Detour.statusFailed(r.status)&&C.log(o.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<re;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(o.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:R}},J={...t},Q=(t,T,E={},F=!1)=>{const O=new i,P={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},I=new a,G=()=>{if(!F){for(let e=0;e<P.tileIntermediates.length;e++){const t=P.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}P.chunkyTriMesh&&(P.chunkyTriMesh=void 0)}},$=e=>(G(),I.destroy(),{success:!1,navMesh:void 0,intermediates:P,error:e}),N=r.create({...J,...E}),{raw:W}=N,{bbMin:X,bbMax:Y}=U(t,T),Z=H(X,Y,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),Q=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=T.length,ae=new l.FloatArray;ae.copy(te,te.length);const le=T,re=T.length/3,oe=new l.IntArray;oe.copy(le,le.length);const se=e.fromArray(X);let ne=Math.min(Math.floor(K(V(q*Q))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:se,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!I.initTiled(ce))return $(\"Could not init nav mesh for tiled use\");const me=new D;if(P.chunkyTriMesh=me,!me.init(ae,oe,re,256))return $(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(o.Module.RC_LOG_ERROR,e),{success:!1,error:e}),T={tileX:e,tileY:t};P.tileIntermediates.push(T);const{raw:H}=N.clone(),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(o.Module.RC_TIMER_TOTAL),O.log(o.Module.RC_LOG_PROGRESS,`Building tile ${P.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(o.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(o.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const I=s();if(T.heightfield=I,!n(O,I,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.UnsignedCharArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],$=[D[0],D[2]],B=new l.IntArray;B.resize(512);const U=me.getChunksOverlappingRect(G,$,B,512);if(0===U)return{success:!0};for(let e=0;e<U;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,o);const s=h(O,ae,ie,a,o,i,I,H.walkableClimb);if(o.free(),!s)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,I),m(O,H.walkableHeight,H.walkableClimb,I),g(O,H.walkableHeight,I);const K=u();if(T.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,I,K))return r(\"Could not build compact heightfield\");if(F||(f(T.heightfield),T.heightfield=void 0),!w(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!S(O,K))return r(\"Failed to build distance field\");if(!y(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const V=M();if(T.contourSet=V,!C(O,K,H.maxSimplificationError,H.maxEdgeLen,V,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const X=R();if(!x(O,V,H.maxVertsPerPoly,X))return r(\"Failed to triangulate contours\");const Y=p();if(!A(O,X,K,H.detailSampleDist,H.detailSampleMaxError,Y))return r(\"Failed to build detail mesh\");F||(k(K),T.compactHeightfield=void 0,z(V),T.contourSet=void 0);for(let e=0;e<X.npolys();e++)X.areas(e)==o.Recast.WALKABLE_AREA&&X.setAreas(e,0),0==X.areas(e)&&X.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(X),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(o.Module.RC_LOG_PROGRESS,`>> Polymesh: ${X.nverts()} vertices ${X.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(o.Module.RC_TIMER_TEMP);let ue=[0,0,0],be=[0,0,0];for(let e=0;e<Q;e++)for(let t=0;t<q;t++){ue[0]=X[0]+t*ee,ue[1]=X[1],ue[2]=X[2]+e*ee,be[0]=X[0]+(t+1)*ee,be[1]=Y[1],be[2]=X[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){I.removeTile(I.getTileRefAt(t,e,0));const a=I.addTile(i.data,o.Module.DT_TILE_FREE_DATA,0);o.Detour.statusFailed(a.status)&&(O.log(o.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${B(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(o.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:I,intermediates:P}};export{j as createDefaultTileCacheMeshProcess,K as dtIlog2,V as dtNextPow2,Y as generateSoloNavMesh,q as generateTileCache,Q as generateTiledNavMesh,U as getBoundingBox,X as soloNavMeshGeneratorConfigDefaults,Z as tileCacheGeneratorConfigDefaults,J 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 let index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","U","t","a","l","e","r","o","s","n","min","max","bbMin","toArray","bbMax","K","Number","V","X","Z","tileSize","expectedLayersPerTile","maxObstacles","q","S","M","C","R","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","v","T","FloatArray","B","Y","IntArray","J","Q","ee","te","raw","ie","create","ae","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","le","floor","re","oe","borderSize","walkableRadius","se","F","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","ne","RecastLinearAllocator","de","RecastFastLZCompressor","he","tileCacheMeshProcess","polyCount","init","ce","fromArray","me","ge","ue","be","L","tileWidth","tileHeight","maxPolys","initTiled","fe","D","we","tileX","tileY","clone","set_bmin","set_bmax","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","UnsignedCharArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","w","P","I","nlayers","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","$","N","W","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","Recast","calcGridSize","j","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n });\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 let obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,Raw as o,allocHeightfield as s,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 y,allocContourSet as M,buildContours as C,allocPolyMesh as R,buildPolyMesh as x,allocPolyMeshDetail as p,buildPolyMeshDetail as A,freeCompactHeightfield as k,freeContourSet as z,NavMeshCreateParams as _,createNavMeshData as v,TileCacheMeshProcess as T,TileCache as E,calcGridSize as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as G,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,dtStatusToReadableString as U}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],o=t[3*r],s=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,o),a.y=Math.min(a.y,s),a.z=Math.min(a.z,n),l.x=Math.max(l.x,o),l.y=Math.max(l.y,s),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},V=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},X=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),Y={...t},Z=(e,t,T={},E=!1)=>{const H=new i,F={type:\"solo\",buildContext:H},L=new a,D=e=>(E||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(k(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(z(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,P=t.length,I=new l.FloatArray;I.copy(O,O.length);const G=t,$=t.length/3,N=new l.IntArray;N.copy(G,G.length);const{bbMin:W,bbMax:B}=K(e,t),U=r({...Y,...T});U.minRegionArea=U.minRegionArea*U.minRegionArea,U.mergeRegionArea=U.mergeRegionArea*U.mergeRegionArea,U.detailSampleDist=U.detailSampleDist<.9?0:U.cs*U.detailSampleDist,U.detailSampleMaxError=U.ch*U.detailSampleMaxError;const V=o.Recast.calcGridSize(W,B,U.cs);U.width=V.width,U.height=V.height;const X=s();if(F.heightfield=X,!n(H,X,U.width,U.height,W,B,U.cs,U.ch))return D(\"Could not create heightfield\");const Z=new l.UnsignedCharArray;if(Z.resize($),d(H,U.walkableSlopeAngle,I,P,N,$,Z),!h(H,I,P,N,Z,$,X,U.walkableClimb))return D(\"Could not rasterize triangles\");Z.free(),c(H,U.walkableClimb,X),m(H,U.walkableHeight,U.walkableClimb,X),g(H,U.walkableHeight,X);const j=u();if(F.compactHeightfield=j,!b(H,U.walkableHeight,U.walkableClimb,X,j))return D(\"Failed to build compact data\");if(E||(f(X),F.heightfield=void 0),!S(H,U.walkableRadius,j))return D(\"Failed to erode walkable area\");if(!w(H,j))return D(\"Failed to build distance field\");if(!y(H,j,U.borderSize,U.minRegionArea,U.mergeRegionArea))return D(\"Failed to build regions\");const q=M();if(F.contourSet=q,!C(H,j,U.maxSimplificationError,U.maxEdgeLen,q,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return D(\"Failed to create contours\");const J=R();if(!x(H,q,U.maxVertsPerPoly,J))return D(\"Failed to triangulate contours\");const Q=p();if(!A(H,J,j,U.detailSampleDist,U.detailSampleMaxError,Q))return D(\"Failed to build detail mesh\");E||(k(j),F.compactHeightfield=void 0,z(q),F.contourSet=void 0);for(let e=0;e<J.npolys();e++)J.areas(e)==o.Recast.WALKABLE_AREA&&J.setAreas(e,0),0==J.areas(e)&&J.setFlags(e,1);const ee=new _;ee.setPolyMeshCreateParams(J),ee.setPolyMeshDetailCreateParams(Q),ee.setWalkableHeight(U.walkableHeight),ee.setWalkableRadius(U.walkableRadius),ee.setWalkableClimb(U.walkableClimb),ee.setCellSize(U.cs),ee.setCellHeight(U.ch),ee.setBuildBvTree(!0),T.offMeshConnections&&ee.setOffMeshConnections(T.offMeshConnections);const te=v(ee);if(!te.success)return D(\"Failed to create Detour navmesh data\");const{navMeshData:ie}=te;return L.initSolo(ie)?{success:!0,navMesh:L,intermediates:F}:D(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new T(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,y={},M=!1)=>{const C=new i;let R={type:\"tilecache\",buildContext:C,chunkyTriMesh:void 0,tileIntermediates:[]};const x=new E,p=new a,A=()=>{if(!M)for(let e=0;e<R.tileIntermediates.length;e++){const t=R.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(k(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(A(),x.destroy(),p.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:R,error:e}),_=t,v=w.length,T=new l.FloatArray;T.copy(_,_.length);const U=w,Y=w.length/3,Z=new l.IntArray;Z.copy(U,U.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...y},ae=r(ie),le=H(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),oe=Math.floor((ae.width+re-1)/re),se=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:oe*se*ee,maxObstacles:te}),de=new o.RecastLinearAllocator(32e3),he=new o.RecastFastLZCompressor,ce=y.tileCacheMeshProcess??q();if(!x.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(V(X(oe*se*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!p.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(R.chunkyTriMesh=Se,!Se.init(T,Z,Y,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),w=[J[0]+e*a,J[1],J[2]+t*a],y=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];w[0]-=r.borderSize*r.cs,w[2]-=r.borderSize*r.cs,y[0]+=r.borderSize*r.cs,y[2]+=r.borderSize*r.cs,r.set_bmin(0,w[0]),r.set_bmin(1,w[1]),r.set_bmin(2,w[2]),r.set_bmax(0,y[0]),r.set_bmax(1,y[1]),r.set_bmax(2,y[2]);const x=s();if(i.heightfield=x,!n(C,x,r.width,r.height,w,y,r.cs,r.ch))return{n:0};const p=[w[0],w[2]],A=[y[0],y[2]],z=new l.IntArray;z.resize(512);const _=Se.getChunksOverlappingRect(p,A,z,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=z.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(C,r.walkableSlopeAngle,T,v,a,i,o);const s=h(C,T,v,a,o,i,x,r.walkableClimb);if(o.free(),!s)return{n:0}}c(C,ae.walkableClimb,x),m(C,ae.walkableHeight,ae.walkableClimb,x),g(C,ae.walkableHeight,x);const E=u();if(!b(C,ae.walkableHeight,ae.walkableClimb,x,E))return{n:0};if(M||(f(i.heightfield),i.heightfield=void 0),!S(C,ae.walkableRadius,E))return{n:0};const H=I();if(!G(C,E,ae.borderSize,ae.walkableHeight,H))return{n:0};M||(k(E),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.UnsignedCharArray,r=H.layers(i),s=new o.dtTileCacheLayerHeader;s.magic=o.Detour.TILECACHE_MAGIC,s.version=o.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const n=r.bmin(),d=r.bmax();s.set_bmin(0,n.x),s.set_bmin(1,n.y),s.set_bmin(2,n.z),s.set_bmax(0,d.x),s.set_bmax(1,d.y),s.set_bmax(2,d.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 h=$(r),c=N(r),m=W(r),g=B(he,s,h,c,m,a);if(o.Detour.statusFailed(g))return{n:0};F.push(a)}return M||(O(H),i.heightfieldLayerSet=void 0),R.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<se;++e)for(let t=0;t<oe;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);o.Detour.statusFailed(r.status)&&C.log(o.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<se;e++)for(let t=0;t<oe;t++){const i=x.buildNavMeshTilesAt(t,e,p);if(o.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return A(),{success:!0,tileCache:x,navMesh:p,intermediates:R}},Q={...t},ee=(t,T,E={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},G=new a,$=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&k(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>($(),G.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...E}),{bbMin:B,bbMax:Y}=K(t,T),Z=H(B,Y,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=T.length,ae=new l.FloatArray;ae.copy(te,te.length);const le=T,re=T.length/3,oe=new l.IntArray;oe.copy(le,le.length);const se=e.fromArray(B);let ne=Math.min(Math.floor(V(X(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:se,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!G.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,oe,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(o.Module.RC_LOG_ERROR,e),{success:!1,error:e}),T={tileX:e,tileY:t};I.tileIntermediates.push(T);const H=P(W),L=[...i],D=[...a];L[0]-=H.borderSize*H.cs,L[2]-=H.borderSize*H.cs,D[0]+=H.borderSize*H.cs,D[2]+=H.borderSize*H.cs,H.set_bmin(0,L[0]),H.set_bmin(1,L[1]),H.set_bmin(2,L[2]),H.set_bmax(0,D[0]),H.set_bmax(1,D[1]),H.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(o.Module.RC_TIMER_TOTAL),O.log(o.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(o.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(o.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const G=s();if(T.heightfield=G,!n(O,G,H.width,H.height,L,D,H.cs,H.ch))return r(\"Could not create heightfield\");(new l.UnsignedCharArray).resize(me.maxTrisPerChunk());const $=[L[0],L[2]],N=[D[0],D[2]],B=new l.IntArray;B.resize(512);const U=me.getChunksOverlappingRect($,N,B,512);if(0===U)return{success:!0};for(let e=0;e<U;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),o=new l.UnsignedCharArray;o.resize(i),d(O,H.walkableSlopeAngle,ae,ie,a,i,o);const s=h(O,ae,ie,a,o,i,G,H.walkableClimb);if(o.free(),!s)return r(\"Could not rasterize triangles\")}c(O,H.walkableClimb,G),m(O,H.walkableHeight,H.walkableClimb,G),g(O,H.walkableHeight,G);const K=u();if(T.compactHeightfield=K,!b(O,H.walkableHeight,H.walkableClimb,G,K))return r(\"Could not build compact heightfield\");if(F||(f(T.heightfield),T.heightfield=void 0),!S(O,H.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!y(O,K,H.borderSize,H.minRegionArea,H.mergeRegionArea))return r(\"Failed to build regions\");const V=M();if(T.contourSet=V,!C(O,K,H.maxSimplificationError,H.maxEdgeLen,V,o.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const X=R();if(!x(O,V,H.maxVertsPerPoly,X))return r(\"Failed to triangulate contours\");const Y=p();if(!A(O,X,K,H.detailSampleDist,H.detailSampleMaxError,Y))return r(\"Failed to build detail mesh\");F||(k(K),T.compactHeightfield=void 0,z(V),T.contourSet=void 0);for(let e=0;e<X.npolys();e++)X.areas(e)==o.Recast.WALKABLE_AREA&&X.setAreas(e,0),0==X.areas(e)&&X.setFlags(e,1);const Z=new _;Z.setPolyMeshCreateParams(X),Z.setPolyMeshDetailCreateParams(Y),Z.setWalkableHeight(H.walkableHeight),Z.setWalkableRadius(H.walkableRadius),Z.setWalkableClimb(H.walkableClimb),Z.setCellSize(H.cs),Z.setCellHeight(H.ch),Z.setBuildBvTree(!0),E.offMeshConnections&&Z.setOffMeshConnections(E.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(o.Module.RC_LOG_PROGRESS,`>> Polymesh: ${X.nverts()} vertices ${X.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(o.Module.RC_TIMER_TEMP);let 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]=Y[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){G.removeTile(G.getTileRefAt(t,e,0));const a=G.addTile(i.data,o.Module.DT_TILE_FREE_DATA,0);o.Detour.statusFailed(a.status)&&(O.log(o.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${U(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(o.Module.RC_TIMER_TEMP),F||$(),{success:!0,navMesh:G,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,V as dtIlog2,X as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,Y 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 let index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (!index) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","o","s","n","min","max","bbMin","toArray","bbMax","V","Number","X","Y","j","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","C","R","buildContext","chunkyTriMesh","tileIntermediates","E","p","A","heightfield","f","compactHeightfield","k","heightfieldLayerSet","O","destroy","success","intermediates","error","_","v","T","FloatArray","U","Z","IntArray","Q","ee","te","ie","ae","le","H","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","oe","se","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","UnsignedCharArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","S","I","G","nlayers","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","$","N","W","B","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","Recast","calcGridSize","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "email": "isaac@isaacmason.com",
7
7
  "url": "https://isaacmason.com/"
8
8
  },
9
- "version": "0.14.0",
9
+ "version": "0.15.1",
10
10
  "license": "MIT",
11
11
  "homepage": "https://github.com/isaac-mason/recast-navigation-js",
12
12
  "bugs": {
@@ -24,8 +24,8 @@
24
24
  "build": "rollup --config rollup.config.js --bundleConfigAsCjs"
25
25
  },
26
26
  "dependencies": {
27
- "@recast-navigation/core": "0.14.0",
28
- "@recast-navigation/generators": "0.14.0"
27
+ "@recast-navigation/core": "0.15.1",
28
+ "@recast-navigation/generators": "0.15.1"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "@types/three": "0.x.x",