recast-navigation 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -6
- package/generators.cjs +1 -1
- package/generators.cjs.map +1 -0
- package/generators.mjs +1 -1
- package/generators.mjs.map +1 -0
- package/index.cjs.map +1 -0
- package/index.mjs.map +1 -0
- package/package.json +13 -7
- package/three.cjs.map +1 -0
- package/three.mjs.map +1 -0
package/README.md
CHANGED
|
@@ -23,8 +23,6 @@
|
|
|
23
23
|
|
|
24
24
|
This library provides high level APIs that make it easy to get started creating navigation meshes, querying them, and simulating crowds. It also provides lower-level APIs that give you fine-grained control over the navmesh generation process.
|
|
25
25
|
|
|
26
|
-
> **Warning** This library is still in early development. Versions in the 0.x.x range may have breaking changes.
|
|
27
|
-
|
|
28
26
|
## Examples
|
|
29
27
|
|
|
30
28
|
Go to the [examples website](https://recast-navigation-js.isaacmason.com) to see the project in action:
|
|
@@ -50,9 +48,9 @@ npm install recast-navigation
|
|
|
50
48
|
<script type="importmap">
|
|
51
49
|
{
|
|
52
50
|
"imports": {
|
|
53
|
-
"@recast-navigation/core": "https://unpkg.com/@recast-navigation/core@0.
|
|
54
|
-
"@recast-navigation/generators": "https://unpkg.com/@recast-navigation/generators@0.
|
|
55
|
-
"@recast-navigation/three": "https://unpkg.com/@recast-navigation/three@0.
|
|
51
|
+
"@recast-navigation/core": "https://unpkg.com/@recast-navigation/core@0.24.1/dist/index.mjs",
|
|
52
|
+
"@recast-navigation/generators": "https://unpkg.com/@recast-navigation/generators@0.24.1/dist/index.mjs",
|
|
53
|
+
"@recast-navigation/three": "https://unpkg.com/@recast-navigation/three@0.24.1/dist/index.mjs"
|
|
56
54
|
}
|
|
57
55
|
}
|
|
58
56
|
</script>
|
|
@@ -81,6 +79,8 @@ API Documentation can be found at [https://docs.recast-navigation-js.isaacmason.
|
|
|
81
79
|
|
|
82
80
|
<!-- REMOVE-FROM-DOCS-END -->
|
|
83
81
|
|
|
82
|
+
For information on changes between versions, see [CHANGELOG.md](https://github.com/isaac-mason/recast-navigation-js/tree/main/packages/recast-navigation/CHANGELOG.md)
|
|
83
|
+
|
|
84
84
|
To get the most out of this library, you should have some familiarity with the Recast and Detour libraries. These are some good resources to get started:
|
|
85
85
|
|
|
86
86
|
- https://recastnav.com/md_Docs__1_Introducation.html
|
|
@@ -228,7 +228,11 @@ const agentParameters = agent.parameters();
|
|
|
228
228
|
|
|
229
229
|
/* tell the agent to move to a target position */
|
|
230
230
|
const targetPosition = { x: 0, y: 0, z: 0 };
|
|
231
|
-
agent.
|
|
231
|
+
agent.requestMoveTarget(targetPosition);
|
|
232
|
+
|
|
233
|
+
/* tell the agent to move in a direction */
|
|
234
|
+
const targetVelocity = { x: 0, y: 0, z: 0 };
|
|
235
|
+
agent.requestMoveVelocity(targetVelocity);
|
|
232
236
|
|
|
233
237
|
/* reset the agents target */
|
|
234
238
|
agent.resetMoveTarget();
|
package/generators.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@recast-navigation/core");const t=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.vec3.toArray(a),bbMax:e.vec3.toArray(l)}},i=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},a=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),l={...e.recastConfigDefaults},r={...e.recastConfigDefaults,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},s=()=>new e.TileCacheMeshProcess(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),o={...e.recastConfigDefaults};exports.createDefaultTileCacheMeshProcess=s,exports.dtIlog2=i,exports.dtNextPow2=a,exports.generateSoloNavMesh=(i,a,r={},s=!1)=>{const o=new e.RecastBuildContext,n={type:"solo",buildContext:o},d=new e.NavMesh,h=t=>(s||(n.heightfield&&(e.freeHeightfield(n.heightfield),n.heightfield=void 0),n.compactHeightfield&&(e.freeCompactHeightfield(n.compactHeightfield),n.compactHeightfield=void 0),n.contourSet&&(e.freeContourSet(n.contourSet),n.contourSet=void 0)),d.destroy(),{navMesh:void 0,success:!1,intermediates:n,error:t}),c=i,g=a.length,f=new e.Arrays.VertsArray;f.copy(c,c.length);const m=a,u=a.length/3,b=new e.Arrays.TrisArray;b.copy(m,m.length);const{bbMin:w,bbMax:C}=t(i,a),R=e.createRcConfig({...l,...r});R.minRegionArea=R.minRegionArea*R.minRegionArea,R.mergeRegionArea=R.mergeRegionArea*R.mergeRegionArea,R.detailSampleDist=R.detailSampleDist<.9?0:R.cs*R.detailSampleDist,R.detailSampleMaxError=R.ch*R.detailSampleMaxError;const S=e.calcGridSize(w,C,R.cs);R.width=S.width,R.height=S.height;const y=e.allocHeightfield();if(n.heightfield=y,!e.createHeightfield(o,y,R.width,R.height,w,C,R.cs,R.ch))return h("Could not create heightfield");const M=new e.Arrays.TriAreasArray;if(M.resize(u),e.markWalkableTriangles(o,R.walkableSlopeAngle,f,g,b,u,M),!e.rasterizeTriangles(o,f,g,b,M,u,y,R.walkableClimb))return h("Could not rasterize triangles");M.free(),e.filterLowHangingWalkableObstacles(o,R.walkableClimb,y),e.filterLedgeSpans(o,R.walkableHeight,R.walkableClimb,y),e.filterWalkableLowHeightSpans(o,R.walkableHeight,y);const p=e.allocCompactHeightfield();if(n.compactHeightfield=p,!e.buildCompactHeightfield(o,R.walkableHeight,R.walkableClimb,y,p))return h("Failed to build compact data");if(s||(e.freeHeightfield(y),n.heightfield=void 0),!e.erodeWalkableArea(o,R.walkableRadius,p))return h("Failed to erode walkable area");if(!e.buildDistanceField(o,p))return h("Failed to build distance field");if(!e.buildRegions(o,p,R.borderSize,R.minRegionArea,R.mergeRegionArea))return h("Failed to build regions");const x=e.allocContourSet();if(n.contourSet=x,!e.buildContours(o,p,R.maxSimplificationError,R.maxEdgeLen,x,e.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return h("Failed to create contours");const A=e.allocPolyMesh();if(!e.buildPolyMesh(o,x,R.maxVertsPerPoly,A))return h("Failed to triangulate contours");const k=e.allocPolyMeshDetail();if(!e.buildPolyMeshDetail(o,A,p,R.detailSampleDist,R.detailSampleMaxError,k))return h("Failed to build detail mesh");s||(e.freeCompactHeightfield(p),n.compactHeightfield=void 0,e.freeContourSet(x),n.contourSet=void 0);for(let t=0;t<A.npolys();t++)A.areas(t)==e.Raw.Recast.WALKABLE_AREA&&A.setAreas(t,0),0==A.areas(t)&&A.setFlags(t,1);const H=new e.NavMeshCreateParams;H.setPolyMeshCreateParams(A),H.setPolyMeshDetailCreateParams(k),H.setWalkableHeight(R.walkableHeight),H.setWalkableRadius(R.walkableRadius),H.setWalkableClimb(R.walkableClimb),H.setCellSize(R.cs),H.setCellHeight(R.ch),H.setBuildBvTree(!0),r.offMeshConnections&&H.setOffMeshConnections(r.offMeshConnections);const T=e.createNavMeshData(H);if(!T.success)return h("Failed to create Detour navmesh data");const{navMeshData:v}=T;return d.initSolo(v)?{success:!0,navMesh:d,intermediates:n}:h("Failed to create Detour navmesh")},exports.generateTileCache=(l,o,n={},d=!1)=>{const h=new e.RecastBuildContext,c={type:"tilecache",buildContext:h,chunkyTriMesh:void 0,tileIntermediates:[]},g=new e.TileCache,f=new e.NavMesh,m=()=>{if(!d)for(let t=0;t<c.tileIntermediates.length;t++){const i=c.tileIntermediates[t];i.heightfield&&(e.freeHeightfield(i.heightfield),i.heightfield=void 0),i.compactHeightfield&&(e.freeCompactHeightfield(i.compactHeightfield),i.compactHeightfield=void 0),i.heightfieldLayerSet&&(e.freeHeightfieldLayerSet(i.heightfieldLayerSet),i.heightfieldLayerSet=void 0)}},u=e=>(m(),g.destroy(),f.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:c,error:e}),b=l,w=o.length,C=new e.Arrays.VertsArray;C.copy(b,b.length);const R=o,S=o.length/3,y=new e.Arrays.TrisArray;y.copy(R,R.length);const{bbMin:M,bbMax:p}=t(l,o),{expectedLayersPerTile:x,maxObstacles:A,...k}={...r,...n},H=e.createRcConfig(k),T=e.calcGridSize(M,p,H.cs);H.width=T.width,H.height=T.height,H.minRegionArea=H.minRegionArea*H.minRegionArea,H.mergeRegionArea=H.mergeRegionArea*H.mergeRegionArea,H.detailSampleDist=H.detailSampleDist<.9?0:H.cs*H.detailSampleDist,H.detailSampleMaxError=H.ch*H.detailSampleMaxError;const v=Math.floor(H.tileSize),z=Math.floor((H.width+v-1)/v),_=Math.floor((H.height+v-1)/v);H.borderSize=H.walkableRadius+3,H.width=H.tileSize+2*H.borderSize,H.height=H.tileSize+2*H.borderSize;const L=e.DetourTileCacheParams.create({orig:M,cs:H.cs,ch:H.ch,width:H.tileSize,height:H.tileSize,walkableHeight:H.walkableHeight,walkableRadius:H.walkableRadius,walkableClimb:H.walkableClimb,maxSimplificationError:H.maxSimplificationError,maxTiles:z*_*x,maxObstacles:A}),D=new e.Raw.RecastLinearAllocator(32e3),E=new e.Raw.RecastFastLZCompressor,P=n.tileCacheMeshProcess??s();if(!g.init(L,D,E,P))return u("Failed to initialize tile cache");const F=e.vec3.fromArray(M);let N=Math.min(Math.floor(i(a(z*_*x))),14);N>14&&(N=14);const O=1<<N,W=1<<22-N,G=e.NavMeshParams.create({orig:F,tileWidth:H.tileSize*H.cs,tileHeight:H.tileSize*H.cs,maxTiles:O,maxPolys:W});if(!f.initTiled(G))return u("Failed to initialize tiled navmesh");const I=new e.RecastChunkyTriMesh;if(c.chunkyTriMesh=I,!I.init(C,y,S,256))return u("Failed to build chunky triangle mesh");const $=(t,i)=>{const a={tileX:t,tileY:i},l=H.tileSize*H.cs,r=e.cloneRcConfig(H),s=[M[0]+t*l,M[1],M[2]+i*l],o=[M[0]+(t+1)*l,p[1],M[2]+(i+1)*l];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,o[0]+=r.borderSize*r.cs,o[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,o[0]),r.set_bmax(1,o[1]),r.set_bmax(2,o[2]);const n=e.allocHeightfield();if(a.heightfield=n,!e.createHeightfield(h,n,r.width,r.height,s,o,r.cs,r.ch))return{n:0};const g=[s[0],s[2]],f=[o[0],o[2]],m=new e.Arrays.ChunkIdsArray;m.resize(512);const u=I.getChunksOverlappingRect(g,f,m,512);if(0===u)return{n:0};for(let t=0;t<u;++t){const i=m.get_data(t),a=I.nodes(i).n,l=I.getNodeTris(i),s=new e.Arrays.TriAreasArray;s.resize(a),e.markWalkableTriangles(h,r.walkableSlopeAngle,C,w,l,a,s);const o=e.rasterizeTriangles(h,C,w,l,s,a,n,r.walkableClimb);if(s.free(),!o)return{n:0}}e.filterLowHangingWalkableObstacles(h,H.walkableClimb,n),e.filterLedgeSpans(h,H.walkableHeight,H.walkableClimb,n),e.filterWalkableLowHeightSpans(h,H.walkableHeight,n);const b=e.allocCompactHeightfield();if(!e.buildCompactHeightfield(h,H.walkableHeight,H.walkableClimb,n,b))return{n:0};if(d||(e.freeHeightfield(a.heightfield),a.heightfield=void 0),!e.erodeWalkableArea(h,H.walkableRadius,b))return{n:0};const R=e.allocHeightfieldLayerSet();if(!e.buildHeightfieldLayers(h,b,H.borderSize,H.walkableHeight,R))return{n:0};d||(e.freeCompactHeightfield(b),a.compactHeightfield=void 0);const S=[];for(let a=0;a<R.nlayers();a++){const l=new e.Arrays.TileCacheData,r=R.layers(a),s=new e.Raw.dtTileCacheLayerHeader;s.magic=e.Raw.Detour.TILECACHE_MAGIC,s.version=e.Raw.Detour.TILECACHE_VERSION,s.tx=t,s.ty=i,s.tlayer=a;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=e.getHeightfieldLayerHeights(r),h=e.getHeightfieldLayerAreas(r),c=e.getHeightfieldLayerCons(r),g=e.buildTileCacheLayer(E,s,d,h,c,l);if(e.Raw.Detour.statusFailed(g))return{n:0};S.push(l)}return d||(e.freeHeightfieldLayerSet(R),a.heightfieldLayerSet=void 0),c.tileIntermediates.push(a),{n:S.length,tiles:S}};for(let t=0;t<_;++t)for(let i=0;i<z;++i){const{n:a,tiles:l}=$(i,t);if(a>0&&l)for(let r=0;r<a;r++){const a=l[r],s=g.addTile(a);e.Raw.Detour.statusFailed(s.status)&&h.log(e.Raw.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${i}, ty: ${t}`)}}for(let t=0;t<_;t++)for(let i=0;i<z;i++){const a=g.buildNavMeshTilesAt(i,t,f);if(e.Raw.Detour.statusFailed(a))return u(`Failed to build nav mesh tiles at ${i}, ${t}`)}return m(),{success:!0,tileCache:g,navMesh:f,intermediates:c}},exports.generateTiledNavMesh=(l,r,s={},n=!1)=>{const d=new e.RecastBuildContext,h={type:"tiled",buildContext:d,chunkyTriMesh:void 0,tileIntermediates:[]},c=new e.NavMesh,g=()=>{if(!n){for(let t=0;t<h.tileIntermediates.length;t++){const i=h.tileIntermediates[t];i.compactHeightfield&&e.freeCompactHeightfield(i.compactHeightfield),i.heightfield&&e.freeHeightfield(i.heightfield),i.contourSet&&e.freeContourSet(i.contourSet)}h.chunkyTriMesh&&(h.chunkyTriMesh=void 0)}},f=e=>(g(),c.destroy(),{success:!1,navMesh:void 0,intermediates:h,error:e}),m=e.createRcConfig({...o,...s}),{bbMin:u,bbMax:b}=t(l,r),w=e.calcGridSize(u,b,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 C=Math.floor(m.tileSize),R=Math.floor((w.width+C-1)/C),S=Math.floor((w.height+C-1)/C),y=m.tileSize*m.cs,M=l,p=r.length,x=new e.Arrays.VertsArray;x.copy(M,M.length);const A=r,k=r.length/3,H=new e.Arrays.TrisArray;H.copy(A,A.length);const T=e.vec3.fromArray(u);let v=Math.min(Math.floor(i(a(R*S))),14);v>14&&(v=14);const z=1<<v,_=1<<22-v,L=e.NavMeshParams.create({orig:T,tileWidth:m.tileSize*m.cs,tileHeight:m.tileSize*m.cs,maxTiles:z,maxPolys:_});if(!c.initTiled(L))return f("Could not init nav mesh for tiled use");const D=new e.RecastChunkyTriMesh;if(h.chunkyTriMesh=D,!D.init(x,H,k,256))return f("Failed to build chunky triangle mesh");const E=(t,i,a,l)=>{const r=t=>(d.log(e.Raw.Module.RC_LOG_ERROR,t),{success:!1,error:t}),o={tileX:t,tileY:i};h.tileIntermediates.push(o);const c=e.cloneRcConfig(m),g=[...a],f=[...l];g[0]-=c.borderSize*c.cs,g[2]-=c.borderSize*c.cs,f[0]+=c.borderSize*c.cs,f[2]+=c.borderSize*c.cs,c.set_bmin(0,g[0]),c.set_bmin(1,g[1]),c.set_bmin(2,g[2]),c.set_bmax(0,f[0]),c.set_bmax(1,f[1]),c.set_bmax(2,f[2]),d.resetTimers(),d.startTimer(e.Raw.Module.RC_TIMER_TOTAL),d.log(e.Raw.Module.RC_LOG_PROGRESS,`Building tile ${h.tileIntermediates.length} at x: ${t}, y: ${i}`),d.log(e.Raw.Module.RC_LOG_PROGRESS,` - ${m.width} x ${m.height} cells`),d.log(e.Raw.Module.RC_LOG_PROGRESS,` - ${p/1e3}fK verts, ${k/1e3}K tris`);const u=e.allocHeightfield();if(o.heightfield=u,!e.createHeightfield(d,u,c.width,c.height,g,f,c.cs,c.ch))return r("Could not create heightfield");(new e.Arrays.TriAreasArray).resize(D.maxTrisPerChunk());const b=[g[0],g[2]],w=[f[0],f[2]],C=new e.Arrays.ChunkIdsArray;C.resize(512);const R=D.getChunksOverlappingRect(b,w,C,512);if(0===R)return{success:!0};for(let t=0;t<R;++t){const i=C.get_data(t),a=D.nodes(i).n,l=D.getNodeTris(i),s=new e.Arrays.TriAreasArray;s.resize(a),e.markWalkableTriangles(d,c.walkableSlopeAngle,x,p,l,a,s);const o=e.rasterizeTriangles(d,x,p,l,s,a,u,c.walkableClimb);if(s.free(),!o)return r("Could not rasterize triangles")}e.filterLowHangingWalkableObstacles(d,c.walkableClimb,u),e.filterLedgeSpans(d,c.walkableHeight,c.walkableClimb,u),e.filterWalkableLowHeightSpans(d,c.walkableHeight,u);const S=e.allocCompactHeightfield();if(o.compactHeightfield=S,!e.buildCompactHeightfield(d,c.walkableHeight,c.walkableClimb,u,S))return r("Could not build compact heightfield");if(n||(e.freeHeightfield(o.heightfield),o.heightfield=void 0),!e.erodeWalkableArea(d,c.walkableRadius,S))return r("Could not erode walkable area");if(!e.buildDistanceField(d,S))return r("Failed to build distance field");if(!e.buildRegions(d,S,c.borderSize,c.minRegionArea,c.mergeRegionArea))return r("Failed to build regions");const y=e.allocContourSet();if(o.contourSet=y,!e.buildContours(d,S,c.maxSimplificationError,c.maxEdgeLen,y,e.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return r("Failed to create contours");const M=e.allocPolyMesh();if(!e.buildPolyMesh(d,y,c.maxVertsPerPoly,M))return r("Failed to triangulate contours");const A=e.allocPolyMeshDetail();if(!e.buildPolyMeshDetail(d,M,S,c.detailSampleDist,c.detailSampleMaxError,A))return r("Failed to build detail mesh");n||(e.freeCompactHeightfield(S),o.compactHeightfield=void 0,e.freeContourSet(y),o.contourSet=void 0);for(let t=0;t<M.npolys();t++)M.areas(t)==e.Raw.Recast.WALKABLE_AREA&&M.setAreas(t,0),0==M.areas(t)&&M.setFlags(t,1);const H=new e.NavMeshCreateParams;H.setPolyMeshCreateParams(M),H.setPolyMeshDetailCreateParams(A),H.setWalkableHeight(c.walkableHeight),H.setWalkableRadius(c.walkableRadius),H.setWalkableClimb(c.walkableClimb),H.setCellSize(c.cs),H.setCellHeight(c.ch),H.setBuildBvTree(!0),s.offMeshConnections&&H.setOffMeshConnections(s.offMeshConnections),H.setTileX(t),H.setTileY(i);const T=e.createNavMeshData(H);return T.success?(d.log(e.Raw.Module.RC_LOG_PROGRESS,`>> Polymesh: ${M.nverts()} vertices ${M.npolys()} polygons`),{success:!0,data:T.navMeshData}):r("Failed to create Detour navmesh data")};d.startTimer(e.Raw.Module.RC_TIMER_TEMP);const P=[0,0,0],F=[0,0,0];for(let t=0;t<S;t++)for(let i=0;i<R;i++){P[0]=u[0]+i*y,P[1]=u[1],P[2]=u[2]+t*y,F[0]=u[0]+(i+1)*y,F[1]=b[1],F[2]=u[2]+(t+1)*y;const a=E(i,t,P,F);if(a.success&&a.data){c.removeTile(c.getTileRefAt(i,t,0));const l=c.addTile(a.data,e.Raw.Module.DT_TILE_FREE_DATA,0);e.Raw.Detour.statusFailed(l.status)&&(d.log(e.Raw.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${i}, ty: ${t},status: ${e.statusToReadableString(l.status)} (${l.status})`),a.data.free())}}return d.stopTimer(e.Raw.Module.RC_TIMER_TEMP),n||g(),{success:!0,navMesh:c,intermediates:h}},exports.getBoundingBox=t,exports.soloNavMeshGeneratorConfigDefaults=l,exports.tileCacheGeneratorConfigDefaults=r,exports.tiledNavMeshGeneratorConfigDefaults=o;
|
|
1
|
+
"use strict";var e=require("@recast-navigation/core");const t=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.vec3.toArray(a),bbMax:e.vec3.toArray(l)}},i=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},a=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),l={...e.recastConfigDefaults},r={...e.recastConfigDefaults,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},s=()=>new e.TileCacheMeshProcess(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),o={...e.recastConfigDefaults};exports.createDefaultTileCacheMeshProcess=s,exports.dtIlog2=i,exports.dtNextPow2=a,exports.generateSoloNavMesh=(i,a,r={},s=!1)=>{const o=new e.RecastBuildContext,n={type:"solo",buildContext:o},h=new e.NavMesh,d=t=>(s||(n.heightfield&&(e.freeHeightfield(n.heightfield),n.heightfield=void 0),n.compactHeightfield&&(e.freeCompactHeightfield(n.compactHeightfield),n.compactHeightfield=void 0),n.contourSet&&(e.freeContourSet(n.contourSet),n.contourSet=void 0),n.polyMesh&&(e.freePolyMesh(n.polyMesh),n.polyMesh=void 0),n.polyMeshDetail&&(e.freePolyMeshDetail(n.polyMeshDetail),n.polyMeshDetail=void 0)),h.destroy(),{navMesh:void 0,success:!1,intermediates:n,error:t}),c=i,g=a.length,f=new e.Arrays.VertsArray;f.copy(c,c.length);const m=a,u=a.length/3,b=new e.Arrays.TrisArray;b.copy(m,m.length);const{bbMin:y,bbMax:M}=t(i,a),w=e.createRcConfig({...l,...r});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=e.calcGridSize(y,M,w.cs);w.width=C.width,w.height=C.height;const R=e.allocHeightfield();if(n.heightfield=R,!e.createHeightfield(o,R,w.width,w.height,y,M,w.cs,w.ch))return d("Could not create heightfield");const S=new e.Arrays.TriAreasArray;if(S.resize(u),e.markWalkableTriangles(o,w.walkableSlopeAngle,f,g,b,u,S),!e.rasterizeTriangles(o,f,g,b,S,u,R,w.walkableClimb))return d("Could not rasterize triangles");S.free(),e.filterLowHangingWalkableObstacles(o,w.walkableClimb,R),e.filterLedgeSpans(o,w.walkableHeight,w.walkableClimb,R),e.filterWalkableLowHeightSpans(o,w.walkableHeight,R);const p=e.allocCompactHeightfield();if(n.compactHeightfield=p,!e.buildCompactHeightfield(o,w.walkableHeight,w.walkableClimb,R,p))return d("Failed to build compact data");if(s||(e.freeHeightfield(R),n.heightfield=void 0),!e.erodeWalkableArea(o,w.walkableRadius,p))return d("Failed to erode walkable area");if(!e.buildDistanceField(o,p))return d("Failed to build distance field");if(!e.buildRegions(o,p,w.borderSize,w.minRegionArea,w.mergeRegionArea))return d("Failed to build regions");const x=e.allocContourSet();if(n.contourSet=x,!e.buildContours(o,p,w.maxSimplificationError,w.maxEdgeLen,x,e.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return d("Failed to create contours");const A=e.allocPolyMesh();if(n.polyMesh=A,!e.buildPolyMesh(o,x,w.maxVertsPerPoly,A))return d("Failed to triangulate contours");const k=e.allocPolyMeshDetail();if(n.polyMeshDetail=k,!e.buildPolyMeshDetail(o,A,p,w.detailSampleDist,w.detailSampleMaxError,k))return d("Failed to build detail mesh");s||(e.freeCompactHeightfield(p),n.compactHeightfield=void 0,e.freeContourSet(x),n.contourSet=void 0);for(let t=0;t<A.npolys();t++)A.areas(t)==e.Raw.Recast.WALKABLE_AREA&&A.setAreas(t,0),0==A.areas(t)&&A.setFlags(t,1);const H=new e.NavMeshCreateParams;H.setPolyMeshCreateParams(A),H.setPolyMeshDetailCreateParams(k),H.setWalkableHeight(w.walkableHeight),H.setWalkableRadius(w.walkableRadius),H.setWalkableClimb(w.walkableClimb),H.setCellSize(w.cs),H.setCellHeight(w.ch),H.setBuildBvTree(!0),r.offMeshConnections&&H.setOffMeshConnections(r.offMeshConnections);const T=e.createNavMeshData(H);if(!T.success)return d("Failed to create Detour navmesh data");const{navMeshData:v}=T;return h.initSolo(v)?{success:!0,navMesh:h,intermediates:n}:d("Failed to create Detour navmesh")},exports.generateTileCache=(l,o,n={},h=!1)=>{const d=new e.RecastBuildContext,c={type:"tilecache",buildContext:d,chunkyTriMesh:void 0,tileIntermediates:[]},g=new e.TileCache,f=new e.NavMesh,m=()=>{if(!h)for(let t=0;t<c.tileIntermediates.length;t++){const i=c.tileIntermediates[t];i.heightfield&&(e.freeHeightfield(i.heightfield),i.heightfield=void 0),i.compactHeightfield&&(e.freeCompactHeightfield(i.compactHeightfield),i.compactHeightfield=void 0),i.heightfieldLayerSet&&(e.freeHeightfieldLayerSet(i.heightfieldLayerSet),i.heightfieldLayerSet=void 0)}},u=e=>(m(),g.destroy(),f.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:c,error:e}),b=l,y=o.length,M=new e.Arrays.VertsArray;M.copy(b,b.length);const w=o,C=o.length/3,R=new e.Arrays.TrisArray;R.copy(w,w.length);const{bbMin:S,bbMax:p}=t(l,o),{expectedLayersPerTile:x,maxObstacles:A,...k}={...r,...n},H=e.createRcConfig(k),T=e.calcGridSize(S,p,H.cs);H.width=T.width,H.height=T.height,H.minRegionArea=H.minRegionArea*H.minRegionArea,H.mergeRegionArea=H.mergeRegionArea*H.mergeRegionArea,H.detailSampleDist=H.detailSampleDist<.9?0:H.cs*H.detailSampleDist,H.detailSampleMaxError=H.ch*H.detailSampleMaxError;const v=Math.floor(H.tileSize),z=Math.floor((H.width+v-1)/v),_=Math.floor((H.height+v-1)/v);H.borderSize=H.walkableRadius+3,H.width=H.tileSize+2*H.borderSize,H.height=H.tileSize+2*H.borderSize;const D=e.DetourTileCacheParams.create({orig:S,cs:H.cs,ch:H.ch,width:H.tileSize,height:H.tileSize,walkableHeight:H.walkableHeight,walkableRadius:H.walkableRadius,walkableClimb:H.walkableClimb,maxSimplificationError:H.maxSimplificationError,maxTiles:z*_*x,maxObstacles:A}),L=new e.Raw.RecastLinearAllocator(32e3),P=new e.Raw.RecastFastLZCompressor,E=n.tileCacheMeshProcess??s();if(!g.init(D,L,P,E))return u("Failed to initialize tile cache");const F=e.vec3.fromArray(S);let N=Math.min(Math.floor(i(a(z*_*x))),14);N>14&&(N=14);const O=1<<N,W=1<<22-N,G=e.NavMeshParams.create({orig:F,tileWidth:H.tileSize*H.cs,tileHeight:H.tileSize*H.cs,maxTiles:O,maxPolys:W});if(!f.initTiled(G))return u("Failed to initialize tiled navmesh");const I=new e.RecastChunkyTriMesh;if(c.chunkyTriMesh=I,!I.init(M,R,C,256))return u("Failed to build chunky triangle mesh");const $=(t,i)=>{const a={tileX:t,tileY:i},l=H.tileSize*H.cs,r=e.cloneRcConfig(H),s=[S[0]+t*l,S[1],S[2]+i*l],o=[S[0]+(t+1)*l,p[1],S[2]+(i+1)*l];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,o[0]+=r.borderSize*r.cs,o[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,o[0]),r.set_bmax(1,o[1]),r.set_bmax(2,o[2]);const n=e.allocHeightfield();if(a.heightfield=n,!e.createHeightfield(d,n,r.width,r.height,s,o,r.cs,r.ch))return{n:0};const g=[s[0],s[2]],f=[o[0],o[2]],m=new e.Arrays.ChunkIdsArray;m.resize(512);const u=I.getChunksOverlappingRect(g,f,m,512);if(0===u)return{n:0};for(let t=0;t<u;++t){const i=m.get_data(t),a=I.nodes(i).n,l=I.getNodeTris(i),s=new e.Arrays.TriAreasArray;s.resize(a),e.markWalkableTriangles(d,r.walkableSlopeAngle,M,y,l,a,s);const o=e.rasterizeTriangles(d,M,y,l,s,a,n,r.walkableClimb);if(s.free(),!o)return{n:0}}e.filterLowHangingWalkableObstacles(d,H.walkableClimb,n),e.filterLedgeSpans(d,H.walkableHeight,H.walkableClimb,n),e.filterWalkableLowHeightSpans(d,H.walkableHeight,n);const b=e.allocCompactHeightfield();if(!e.buildCompactHeightfield(d,H.walkableHeight,H.walkableClimb,n,b))return{n:0};if(h||(e.freeHeightfield(a.heightfield),a.heightfield=void 0),!e.erodeWalkableArea(d,H.walkableRadius,b))return{n:0};const w=e.allocHeightfieldLayerSet();if(!e.buildHeightfieldLayers(d,b,H.borderSize,H.walkableHeight,w))return{n:0};h||(e.freeCompactHeightfield(b),a.compactHeightfield=void 0);const C=[];for(let a=0;a<w.nlayers();a++){const l=new e.Arrays.TileCacheData,r=w.layers(a),s=new e.Raw.dtTileCacheLayerHeader;s.magic=e.Raw.Detour.TILECACHE_MAGIC,s.version=e.Raw.Detour.TILECACHE_VERSION,s.tx=t,s.ty=i,s.tlayer=a;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const h=e.getHeightfieldLayerHeights(r),d=e.getHeightfieldLayerAreas(r),c=e.getHeightfieldLayerCons(r),g=e.buildTileCacheLayer(P,s,h,d,c,l);if(e.Raw.Detour.statusFailed(g))return{n:0};C.push(l)}return h||(e.freeHeightfieldLayerSet(w),a.heightfieldLayerSet=void 0),c.tileIntermediates.push(a),{n:C.length,tiles:C}};for(let t=0;t<_;++t)for(let i=0;i<z;++i){const{n:a,tiles:l}=$(i,t);if(a>0&&l)for(let r=0;r<a;r++){const a=l[r],s=g.addTile(a);e.Raw.Detour.statusFailed(s.status)&&d.log(e.Raw.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${i}, ty: ${t}`)}}for(let t=0;t<_;t++)for(let i=0;i<z;i++){const a=g.buildNavMeshTilesAt(i,t,f);if(e.Raw.Detour.statusFailed(a))return u(`Failed to build nav mesh tiles at ${i}, ${t}`)}return m(),{success:!0,tileCache:g,navMesh:f,intermediates:c}},exports.generateTiledNavMesh=(l,r,s={},n=!1)=>{const h=new e.RecastBuildContext,d={type:"tiled",buildContext:h,chunkyTriMesh:void 0,tileIntermediates:[]},c=new e.NavMesh,g=()=>{if(!n){for(let t=0;t<d.tileIntermediates.length;t++){const i=d.tileIntermediates[t];i.compactHeightfield&&e.freeCompactHeightfield(i.compactHeightfield),i.heightfield&&e.freeHeightfield(i.heightfield),i.contourSet&&e.freeContourSet(i.contourSet),i.polyMesh&&e.freePolyMesh(i.polyMesh),i.polyMeshDetail&&e.freePolyMeshDetail(i.polyMeshDetail)}d.chunkyTriMesh&&(d.chunkyTriMesh=void 0)}},f=e=>(g(),c.destroy(),{success:!1,navMesh:void 0,intermediates:d,error:e}),m=e.createRcConfig({...o,...s}),{bbMin:u,bbMax:b}=t(l,r),y=e.calcGridSize(u,b,m.cs);m.width=y.width,m.height=y.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 M=Math.floor(m.tileSize),w=Math.floor((y.width+M-1)/M),C=Math.floor((y.height+M-1)/M),R=m.tileSize*m.cs,S=l,p=r.length,x=new e.Arrays.VertsArray;x.copy(S,S.length);const A=r,k=r.length/3,H=new e.Arrays.TrisArray;H.copy(A,A.length);const T=e.vec3.fromArray(u);let v=Math.min(Math.floor(i(a(w*C))),14);v>14&&(v=14);const z=1<<v,_=1<<22-v,D=e.NavMeshParams.create({orig:T,tileWidth:m.tileSize*m.cs,tileHeight:m.tileSize*m.cs,maxTiles:z,maxPolys:_});if(!c.initTiled(D))return f("Could not init nav mesh for tiled use");const L=new e.RecastChunkyTriMesh;if(d.chunkyTriMesh=L,!L.init(x,H,k,256))return f("Failed to build chunky triangle mesh");const P=(t,i,a,l)=>{const r=t=>(h.log(e.Raw.Module.RC_LOG_ERROR,t),{success:!1,error:t}),o={tileX:t,tileY:i};d.tileIntermediates.push(o);const c=e.cloneRcConfig(m),g=[...a],f=[...l];g[0]-=c.borderSize*c.cs,g[2]-=c.borderSize*c.cs,f[0]+=c.borderSize*c.cs,f[2]+=c.borderSize*c.cs,c.set_bmin(0,g[0]),c.set_bmin(1,g[1]),c.set_bmin(2,g[2]),c.set_bmax(0,f[0]),c.set_bmax(1,f[1]),c.set_bmax(2,f[2]),h.resetTimers(),h.startTimer(e.Raw.Module.RC_TIMER_TOTAL),h.log(e.Raw.Module.RC_LOG_PROGRESS,`Building tile ${d.tileIntermediates.length} at x: ${t}, y: ${i}`),h.log(e.Raw.Module.RC_LOG_PROGRESS,` - ${m.width} x ${m.height} cells`),h.log(e.Raw.Module.RC_LOG_PROGRESS,` - ${p/1e3}fK verts, ${k/1e3}K tris`);const u=e.allocHeightfield();if(o.heightfield=u,!e.createHeightfield(h,u,c.width,c.height,g,f,c.cs,c.ch))return r("Could not create heightfield");(new e.Arrays.TriAreasArray).resize(L.maxTrisPerChunk());const b=[g[0],g[2]],y=[f[0],f[2]],M=new e.Arrays.ChunkIdsArray;M.resize(512);const w=L.getChunksOverlappingRect(b,y,M,512);if(0===w)return{success:!0};for(let t=0;t<w;++t){const i=M.get_data(t),a=L.nodes(i).n,l=L.getNodeTris(i),s=new e.Arrays.TriAreasArray;s.resize(a),e.markWalkableTriangles(h,c.walkableSlopeAngle,x,p,l,a,s);const o=e.rasterizeTriangles(h,x,p,l,s,a,u,c.walkableClimb);if(s.free(),!o)return r("Could not rasterize triangles")}e.filterLowHangingWalkableObstacles(h,c.walkableClimb,u),e.filterLedgeSpans(h,c.walkableHeight,c.walkableClimb,u),e.filterWalkableLowHeightSpans(h,c.walkableHeight,u);const C=e.allocCompactHeightfield();if(o.compactHeightfield=C,!e.buildCompactHeightfield(h,c.walkableHeight,c.walkableClimb,u,C))return r("Could not build compact heightfield");if(n||(e.freeHeightfield(o.heightfield),o.heightfield=void 0),!e.erodeWalkableArea(h,c.walkableRadius,C))return r("Could not erode walkable area");if(!e.buildDistanceField(h,C))return r("Failed to build distance field");if(!e.buildRegions(h,C,c.borderSize,c.minRegionArea,c.mergeRegionArea))return r("Failed to build regions");const R=e.allocContourSet();if(o.contourSet=R,!e.buildContours(h,C,c.maxSimplificationError,c.maxEdgeLen,R,e.Raw.Module.RC_CONTOUR_TESS_WALL_EDGES))return r("Failed to create contours");const S=e.allocPolyMesh();if(o.polyMesh=S,!e.buildPolyMesh(h,R,c.maxVertsPerPoly,S))return r("Failed to triangulate contours");const A=e.allocPolyMeshDetail();if(o.polyMeshDetail=A,!e.buildPolyMeshDetail(h,S,C,c.detailSampleDist,c.detailSampleMaxError,A))return r("Failed to build detail mesh");n||(e.freeCompactHeightfield(C),o.compactHeightfield=void 0,e.freeContourSet(R),o.contourSet=void 0);for(let t=0;t<S.npolys();t++)S.areas(t)==e.Raw.Recast.WALKABLE_AREA&&S.setAreas(t,0),0==S.areas(t)&&S.setFlags(t,1);const H=new e.NavMeshCreateParams;H.setPolyMeshCreateParams(S),H.setPolyMeshDetailCreateParams(A),H.setWalkableHeight(c.walkableHeight),H.setWalkableRadius(c.walkableRadius),H.setWalkableClimb(c.walkableClimb),H.setCellSize(c.cs),H.setCellHeight(c.ch),H.setBuildBvTree(!0),s.offMeshConnections&&H.setOffMeshConnections(s.offMeshConnections),H.setTileX(t),H.setTileY(i);const T=e.createNavMeshData(H);return T.success?(h.log(e.Raw.Module.RC_LOG_PROGRESS,`>> Polymesh: ${S.nverts()} vertices ${S.npolys()} polygons`),{success:!0,data:T.navMeshData}):r("Failed to create Detour navmesh data")};h.startTimer(e.Raw.Module.RC_TIMER_TEMP);const E=[0,0,0],F=[0,0,0];for(let t=0;t<C;t++)for(let i=0;i<w;i++){E[0]=u[0]+i*R,E[1]=u[1],E[2]=u[2]+t*R,F[0]=u[0]+(i+1)*R,F[1]=b[1],F[2]=u[2]+(t+1)*R;const a=P(i,t,E,F);if(a.success&&a.data){c.removeTile(c.getTileRefAt(i,t,0));const l=c.addTile(a.data,e.Raw.Module.DT_TILE_FREE_DATA,0);e.Raw.Detour.statusFailed(l.status)&&(h.log(e.Raw.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${i}, ty: ${t},status: ${e.statusToReadableString(l.status)} (${l.status})`),a.data.free())}}return h.stopTimer(e.Raw.Module.RC_TIMER_TEMP),n||g(),{success:!0,navMesh:c,intermediates:d}},exports.getBoundingBox=t,exports.soloNavMeshGeneratorConfigDefaults=l,exports.tileCacheGeneratorConfigDefaults=r,exports.tiledNavMeshGeneratorConfigDefaults=o;
|
|
2
2
|
//# sourceMappingURL=generators.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators.cjs","sources":["../recast-navigation-generators/dist/index.mjs"],"sourcesContent":["import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as h,rasterizeTriangles as d,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as M,buildDistanceField as y,buildRegions as S,allocContourSet as w,buildContours as p,Raw as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,freePolyMesh as E,freePolyMeshDetail as D,TileCacheMeshProcess as H,TileCache as F,DetourTileCacheParams as L,NavMeshParams as O,RecastChunkyTriMesh as P,freeHeightfieldLayerSet as I,cloneRcConfig as $,allocHeightfieldLayerSet as G,buildHeightfieldLayers as N,getHeightfieldLayerHeights as W,getHeightfieldLayerAreas as B,getHeightfieldLayerCons as V,buildTileCacheLayer as K,statusToReadableString as X}from\"@recast-navigation/core\";const Y=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},U=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},Z=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),j={...t},q=(e,t,H={},F=!1)=>{const L=new i,O={type:\"solo\",buildContext:L},P=new a,I=e=>(F||(O.heightfield&&(f(O.heightfield),O.heightfield=void 0),O.compactHeightfield&&(_(O.compactHeightfield),O.compactHeightfield=void 0),O.contourSet&&(z(O.contourSet),O.contourSet=void 0),O.polyMesh&&(E(O.polyMesh),O.polyMesh=void 0),O.polyMeshDetail&&(D(O.polyMeshDetail),O.polyMeshDetail=void 0)),P.destroy(),{navMesh:void 0,success:!1,intermediates:O,error:e}),$=e,G=t.length,N=new l.VertsArray;N.copy($,$.length);const W=t,B=t.length/3,V=new l.TrisArray;V.copy(W,W.length);const{bbMin:K,bbMax:X}=Y(e,t),U=r({...j,...H});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 Z=s(K,X,U.cs);U.width=Z.width,U.height=Z.height;const q=o();if(O.heightfield=q,!n(L,q,U.width,U.height,K,X,U.cs,U.ch))return I(\"Could not create heightfield\");const J=new l.TriAreasArray;if(J.resize(B),h(L,U.walkableSlopeAngle,N,G,V,B,J),!d(L,N,G,V,J,B,q,U.walkableClimb))return I(\"Could not rasterize triangles\");J.free(),c(L,U.walkableClimb,q),m(L,U.walkableHeight,U.walkableClimb,q),g(L,U.walkableHeight,q);const Q=u();if(O.compactHeightfield=Q,!b(L,U.walkableHeight,U.walkableClimb,q,Q))return I(\"Failed to build compact data\");if(F||(f(q),O.heightfield=void 0),!M(L,U.walkableRadius,Q))return I(\"Failed to erode walkable area\");if(!y(L,Q))return I(\"Failed to build distance field\");if(!S(L,Q,U.borderSize,U.minRegionArea,U.mergeRegionArea))return I(\"Failed to build regions\");const ee=w();if(O.contourSet=ee,!p(L,Q,U.maxSimplificationError,U.maxEdgeLen,ee,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return I(\"Failed to create contours\");const te=C();if(O.polyMesh=te,!x(L,ee,U.maxVertsPerPoly,te))return I(\"Failed to triangulate contours\");const ie=A();if(O.polyMeshDetail=ie,!k(L,te,Q,U.detailSampleDist,U.detailSampleMaxError,ie))return I(\"Failed to build detail mesh\");F||(_(Q),O.compactHeightfield=void 0,z(ee),O.contourSet=void 0);for(let e=0;e<te.npolys();e++)te.areas(e)==R.Recast.WALKABLE_AREA&&te.setAreas(e,0),0==te.areas(e)&&te.setFlags(e,1);const ae=new T;ae.setPolyMeshCreateParams(te),ae.setPolyMeshDetailCreateParams(ie),ae.setWalkableHeight(U.walkableHeight),ae.setWalkableRadius(U.walkableRadius),ae.setWalkableClimb(U.walkableClimb),ae.setCellSize(U.cs),ae.setCellHeight(U.ch),ae.setBuildBvTree(!0),H.offMeshConnections&&ae.setOffMeshConnections(H.offMeshConnections);const le=v(ae);if(!le.success)return I(\"Failed to create Detour navmesh data\");const{navMeshData:re}=le;return P.initSolo(re)?{success:!0,navMesh:P,intermediates:O}:I(\"Failed to create Detour navmesh\")},J={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},Q=()=>new H(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),ee=(t,y,S={},w=!1)=>{const p=new i,C={type:\"tilecache\",buildContext:p,chunkyTriMesh:void 0,tileIntermediates:[]},x=new F,A=new a,k=()=>{if(!w)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(I(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),x.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),T=t,v=y.length,E=new l.VertsArray;E.copy(T,T.length);const D=y,H=y.length/3,X=new l.TrisArray;X.copy(D,D.length);const{bbMin:j,bbMax:q}=Y(t,y),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...J,...S},ae=r(ie),le=s(j,q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=L.create({orig:j,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),he=new R.RecastLinearAllocator(32e3),de=new R.RecastFastLZCompressor,ce=S.tileCacheMeshProcess??Q();if(!x.init(ne,he,de,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(j);let ge=Math.min(Math.floor(U(Z(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=O.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Me=new P;if(C.chunkyTriMesh=Me,!Me.init(E,X,H,256))return z(\"Failed to build chunky triangle mesh\");const ye=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=$(ae),s=[j[0]+e*a,j[1],j[2]+t*a],y=[j[0]+(e+1)*a,q[1],j[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,y[0]+=r.borderSize*r.cs,y[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,y[0]),r.set_bmax(1,y[1]),r.set_bmax(2,y[2]);const S=o();if(i.heightfield=S,!n(p,S,r.width,r.height,s,y,r.cs,r.ch))return{n:0};const x=[s[0],s[2]],A=[y[0],y[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Me.getChunksOverlappingRect(x,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Me.nodes(t).n,a=Me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(p,r.walkableSlopeAngle,E,v,a,i,s);const o=d(p,E,v,a,s,i,S,r.walkableClimb);if(s.free(),!o)return{n:0}}c(p,ae.walkableClimb,S),m(p,ae.walkableHeight,ae.walkableClimb,S),g(p,ae.walkableHeight,S);const T=u();if(!b(p,ae.walkableHeight,ae.walkableClimb,S,T))return{n:0};if(w||(f(i.heightfield),i.heightfield=void 0),!M(p,ae.walkableRadius,T))return{n:0};const D=G();if(!N(p,T,ae.borderSize,ae.walkableHeight,D))return{n:0};w||(_(T),i.compactHeightfield=void 0);const H=[];for(let i=0;i<D.nlayers();i++){const a=new l.TileCacheData,r=D.layers(i),s=new R.dtTileCacheLayerHeader;s.magic=R.Detour.TILECACHE_MAGIC,s.version=R.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const h=W(r),d=B(r),c=V(r),m=K(de,s,h,d,c,a);if(R.Detour.statusFailed(m))return{n:0};H.push(a)}return w||(I(D),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:H.length,tiles:H}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=ye(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);R.Detour.statusFailed(r.status)&&p.log(R.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,A);if(R.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:x,navMesh:A,intermediates:C}},te={...t},ie=(t,H,F={},L=!1)=>{const I=new i,G={type:\"tiled\",buildContext:I,chunkyTriMesh:void 0,tileIntermediates:[]},N=new a,W=()=>{if(!L){for(let e=0;e<G.tileIntermediates.length;e++){const t=G.tileIntermediates[e];t.compactHeightfield&&_(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet),t.polyMesh&&E(t.polyMesh),t.polyMeshDetail&&D(t.polyMeshDetail)}G.chunkyTriMesh&&(G.chunkyTriMesh=void 0)}},B=e=>(W(),N.destroy(),{success:!1,navMesh:void 0,intermediates:G,error:e}),V=r({...te,...F}),{bbMin:K,bbMax:j}=Y(t,H),q=s(K,j,V.cs);V.width=q.width,V.height=q.height,V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.tileSize=Math.floor(V.tileSize),V.borderSize=V.walkableRadius+3,V.width=V.tileSize+2*V.borderSize,V.height=V.tileSize+2*V.borderSize,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const J=Math.floor(V.tileSize),Q=Math.floor((q.width+J-1)/J),ee=Math.floor((q.height+J-1)/J),ie=V.tileSize*V.cs,ae=t,le=H.length,re=new l.VertsArray;re.copy(ae,ae.length);const se=H,oe=H.length/3,ne=new l.TrisArray;ne.copy(se,se.length);const he=e.fromArray(K);let de=Math.min(Math.floor(U(Z(Q*ee))),14);de>14&&(de=14);const ce=1<<de,me=1<<22-de,ge=O.create({orig:he,tileWidth:V.tileSize*V.cs,tileHeight:V.tileSize*V.cs,maxTiles:ce,maxPolys:me});if(!N.initTiled(ge))return B(\"Could not init nav mesh for tiled use\");const ue=new P;if(G.chunkyTriMesh=ue,!ue.init(re,ne,oe,256))return B(\"Failed to build chunky triangle mesh\");const be=(e,t,i,a)=>{const r=e=>(I.log(R.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};G.tileIntermediates.push(s);const E=$(V),D=[...i],H=[...a];D[0]-=E.borderSize*E.cs,D[2]-=E.borderSize*E.cs,H[0]+=E.borderSize*E.cs,H[2]+=E.borderSize*E.cs,E.set_bmin(0,D[0]),E.set_bmin(1,D[1]),E.set_bmin(2,D[2]),E.set_bmax(0,H[0]),E.set_bmax(1,H[1]),E.set_bmax(2,H[2]),I.resetTimers(),I.startTimer(R.Module.RC_TIMER_TOTAL),I.log(R.Module.RC_LOG_PROGRESS,`Building tile ${G.tileIntermediates.length} at x: ${e}, y: ${t}`),I.log(R.Module.RC_LOG_PROGRESS,` - ${V.width} x ${V.height} cells`),I.log(R.Module.RC_LOG_PROGRESS,` - ${le/1e3}fK verts, ${oe/1e3}K tris`);const O=o();if(s.heightfield=O,!n(I,O,E.width,E.height,D,H,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(ue.maxTrisPerChunk());const P=[D[0],D[2]],N=[H[0],H[2]],W=new l.ChunkIdsArray;W.resize(512);const B=ue.getChunksOverlappingRect(P,N,W,512);if(0===B)return{success:!0};for(let e=0;e<B;++e){const t=W.get_data(e),i=ue.nodes(t).n,a=ue.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(I,E.walkableSlopeAngle,re,le,a,i,s);const o=d(I,re,le,a,s,i,O,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(I,E.walkableClimb,O),m(I,E.walkableHeight,E.walkableClimb,O),g(I,E.walkableHeight,O);const K=u();if(s.compactHeightfield=K,!b(I,E.walkableHeight,E.walkableClimb,O,K))return r(\"Could not build compact heightfield\");if(L||(f(s.heightfield),s.heightfield=void 0),!M(I,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!y(I,K))return r(\"Failed to build distance field\");if(!S(I,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=w();if(s.contourSet=X,!p(I,K,E.maxSimplificationError,E.maxEdgeLen,X,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(s.polyMesh=Y,!x(I,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(s.polyMeshDetail=U,!k(I,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");L||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==R.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),F.offMeshConnections&&Z.setOffMeshConnections(F.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(I.log(R.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};I.startTimer(R.Module.RC_TIMER_TEMP);const fe=[0,0,0],Me=[0,0,0];for(let e=0;e<ee;e++)for(let t=0;t<Q;t++){fe[0]=K[0]+t*ie,fe[1]=K[1],fe[2]=K[2]+e*ie,Me[0]=K[0]+(t+1)*ie,Me[1]=j[1],Me[2]=K[2]+(e+1)*ie;const i=be(t,e,fe,Me);if(i.success&&i.data){N.removeTile(N.getTileRefAt(t,e,0));const a=N.addTile(i.data,R.Module.DT_TILE_FREE_DATA,0);R.Detour.statusFailed(a.status)&&(I.log(R.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${X(a.status)} (${a.status})`),i.data.free())}}return I.stopTimer(R.Module.RC_TIMER_TEMP),L||W(),{success:!0,navMesh:N,intermediates:G}};export{Q as createDefaultTileCacheMeshProcess,U as dtIlog2,Z as dtNextPow2,q as generateSoloNavMesh,ee as generateTileCache,ie as generateTiledNavMesh,Y as getBoundingBox,j as soloNavMeshGeneratorConfigDefaults,J as tileCacheGeneratorConfigDefaults,te as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n"],"names":["Y","t","i","a","x","y","z","l","e","length","r","s","o","n","Math","min","max","bbMin","toArray","bbMax","U","Number","Z","j","recastConfigDefaults","J","tileSize","expectedLayersPerTile","maxObstacles","Q","H","TileCacheMeshProcess","polyCount","set","te","F","L","O","type","buildContext","P","NavMesh","I","heightfield","f","compactHeightfield","_","contourSet","polyMesh","E","freePolyMesh","polyMeshDetail","D","destroy","navMesh","success","intermediates","error","$","G","N","Arrays","VertsArray","copy","W","B","V","TrisArray","K","X","minRegionArea","mergeRegionArea","detailSampleDist","cs","detailSampleMaxError","ch","width","height","q","TriAreasArray","resize","h","walkableSlopeAngle","d","walkableClimb","free","c","filterLowHangingWalkableObstacles","m","walkableHeight","g","u","b","buildCompactHeightfield","freeHeightfield","M","walkableRadius","buildDistanceField","S","borderSize","ee","w","p","maxSimplificationError","maxEdgeLen","R","Raw","Module","RC_CONTOUR_TESS_WALL_EDGES","C","allocPolyMesh","maxVertsPerPoly","ie","A","allocPolyMeshDetail","k","buildPolyMeshDetail","freeCompactHeightfield","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","ae","T","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","offMeshConnections","setOffMeshConnections","le","v","createNavMeshData","navMeshData","re","initSolo","RecastBuildContext","chunkyTriMesh","tileIntermediates","TileCache","heightfieldLayerSet","freeHeightfieldLayerSet","tileCache","calcGridSize","floor","se","oe","ne","create","orig","maxTiles","he","RecastLinearAllocator","de","RecastFastLZCompressor","ce","tileCacheMeshProcess","init","me","fromArray","ge","ue","be","fe","NavMeshParams","tileWidth","tileHeight","maxPolys","initTiled","Me","ye","tileX","tileY","set_bmin","set_bmax","createHeightfield","ChunkIdsArray","getChunksOverlappingRect","get_data","nodes","getNodeTris","filterWalkableLowHeightSpans","erodeWalkableArea","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmin","bmax","minx","maxx","miny","maxy","hmin","hmax","getHeightfieldLayerHeights","buildTileCacheLayer","statusFailed","push","tiles","addTile","status","log","RC_LOG_WARNING","buildNavMeshTilesAt","freePolyMeshDetail","createRcConfig","vec3","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","filterLedgeSpans","buildRegions","buildContours","buildPolyMesh","freeContourSet","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","statusToReadableString","stopTimer"],"mappings":"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"}
|
package/generators.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{recastConfigDefaults as e,vec3 as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as C,buildContours as y,Raw as R,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as T,freeContourSet as _,NavMeshCreateParams as z,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as D,NavMeshParams as F,RecastChunkyTriMesh as L,statusToReadableString as P,freeHeightfieldLayerSet as O,cloneRcConfig as I,allocHeightfieldLayerSet as G,buildHeightfieldLayers as N,getHeightfieldLayerHeights as $,getHeightfieldLayerAreas as W,getHeightfieldLayerCons as B,buildTileCacheLayer as V}from"@recast-navigation/core";const K=(e,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let t=0;t<i.length;t++){const r=i[t],s=e[3*r],o=e[3*r+1],n=e[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:t.toArray(a),bbMax:t.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...e},Z=(e,t,E={},H=!1)=>{const D=new i,F={type:"solo",buildContext:D},L=new a,P=e=>(H||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(T(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(_(F.contourSet),F.contourSet=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),O=e,I=t.length,G=new l.VertsArray;G.copy(O,O.length);const N=t,$=t.length/3,W=new l.TrisArray;W.copy(N,N.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(F.heightfield=Z,!n(D,Z,X.width,X.height,B,V,X.cs,X.ch))return P("Could not create heightfield");const j=new l.TriAreasArray;if(j.resize($),d(D,X.walkableSlopeAngle,G,I,W,$,j),!h(D,G,I,W,j,$,Z,X.walkableClimb))return P("Could not rasterize triangles");j.free(),c(D,X.walkableClimb,Z),m(D,X.walkableHeight,X.walkableClimb,Z),g(D,X.walkableHeight,Z);const q=u();if(F.compactHeightfield=q,!b(D,X.walkableHeight,X.walkableClimb,Z,q))return P("Failed to build compact data");if(H||(f(Z),F.heightfield=void 0),!S(D,X.walkableRadius,q))return P("Failed to erode walkable area");if(!w(D,q))return P("Failed to build distance field");if(!M(D,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return P("Failed to build regions");const J=C();if(F.contourSet=J,!y(D,q,X.maxSimplificationError,X.maxEdgeLen,J,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return P("Failed to create contours");const Q=x();if(!p(D,J,X.maxVertsPerPoly,Q))return P("Failed to triangulate contours");const ee=A();if(!k(D,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return P("Failed to build detail mesh");H||(T(q),F.compactHeightfield=void 0,_(J),F.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==R.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new z;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return P("Failed to create Detour navmesh data");const{navMeshData:ae}=ie;return L.initSolo(ae)?{success:!0,navMesh:L,intermediates:F}:P("Failed to create Detour navmesh")},j={...e,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(e,w,M={},C=!1)=>{const y=new i,x={type:"tilecache",buildContext:y,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!C)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(T(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},_=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),z=e,v=w.length,E=new l.VertsArray;E.copy(z,z.length);const P=w,U=w.length/3,Z=new l.TrisArray;Z.copy(P,P.length);const{bbMin:J,bbMax:Q}=K(e,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=s(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=D.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new R.RecastLinearAllocator(32e3),he=new R.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.init(ne,de,he,ce))return _("Failed to initialize tile cache");const me=t.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=F.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!A.initTiled(fe))return _("Failed to initialize tiled navmesh");const Se=new L;if(x.chunkyTriMesh=Se,!Se.init(E,Z,U,256))return _("Failed to build chunky triangle mesh");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=I(ae),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(y,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const _=Se.getChunksOverlappingRect(p,A,k,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(y,r.walkableSlopeAngle,E,v,a,i,s);const o=h(y,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(y,ae.walkableClimb,M),m(y,ae.walkableHeight,ae.walkableClimb,M),g(y,ae.walkableHeight,M);const z=u();if(!b(y,ae.walkableHeight,ae.walkableClimb,M,z))return{n:0};if(C||(f(i.heightfield),i.heightfield=void 0),!S(y,ae.walkableRadius,z))return{n:0};const H=G();if(!N(y,z,ae.borderSize,ae.walkableHeight,H))return{n:0};C||(T(z),i.compactHeightfield=void 0);const D=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new R.dtTileCacheLayerHeader;s.magic=R.Detour.TILECACHE_MAGIC,s.version=R.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=$(r),h=W(r),c=B(r),m=V(he,s,d,h,c,a);if(R.Detour.statusFailed(m))return{n:0};D.push(a)}return C||(O(H),i.heightfieldLayerSet=void 0),x.tileIntermediates.push(i),{n:D.length,tiles:D}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=p.addTile(i);R.Detour.statusFailed(r.status)&&y.log(R.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=p.buildNavMeshTilesAt(t,e,A);if(R.Detour.statusFailed(i))return _(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...e},ee=(e,E,H={},D=!1)=>{const O=new i,G={type:"tiled",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},N=new a,$=()=>{if(!D){for(let e=0;e<G.tileIntermediates.length;e++){const t=G.tileIntermediates[e];t.compactHeightfield&&T(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&_(t.contourSet)}G.chunkyTriMesh&&(G.chunkyTriMesh=void 0)}},W=e=>($(),N.destroy(),{success:!1,navMesh:void 0,intermediates:G,error:e}),B=r({...Q,...H}),{bbMin:V,bbMax:U}=K(e,E),Z=s(V,U,B.cs);B.width=Z.width,B.height=Z.height,B.minRegionArea=B.minRegionArea*B.minRegionArea,B.mergeRegionArea=B.mergeRegionArea*B.mergeRegionArea,B.tileSize=Math.floor(B.tileSize),B.borderSize=B.walkableRadius+3,B.width=B.tileSize+2*B.borderSize,B.height=B.tileSize+2*B.borderSize,B.detailSampleDist=B.detailSampleDist<.9?0:B.cs*B.detailSampleDist,B.detailSampleMaxError=B.ch*B.detailSampleMaxError;const j=Math.floor(B.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=B.tileSize*B.cs,te=e,ie=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=t.fromArray(V);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=F.create({orig:oe,tileWidth:B.tileSize*B.cs,tileHeight:B.tileSize*B.cs,maxTiles:de,maxPolys:he});if(!N.initTiled(ce))return W("Could not init nav mesh for tiled use");const me=new L;if(G.chunkyTriMesh=me,!me.init(ae,se,re,256))return W("Failed to build chunky triangle mesh");const ge=(e,t,i,a)=>{const r=e=>(O.log(R.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};G.tileIntermediates.push(s);const E=I(B),F=[...i],L=[...a];F[0]-=E.borderSize*E.cs,F[2]-=E.borderSize*E.cs,L[0]+=E.borderSize*E.cs,L[2]+=E.borderSize*E.cs,E.set_bmin(0,F[0]),E.set_bmin(1,F[1]),E.set_bmin(2,F[2]),E.set_bmax(0,L[0]),E.set_bmax(1,L[1]),E.set_bmax(2,L[2]),O.resetTimers(),O.startTimer(R.Module.RC_TIMER_TOTAL),O.log(R.Module.RC_LOG_PROGRESS,`Building tile ${G.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(R.Module.RC_LOG_PROGRESS,` - ${B.width} x ${B.height} cells`),O.log(R.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const P=o();if(s.heightfield=P,!n(O,P,E.width,E.height,F,L,E.cs,E.ch))return r("Could not create heightfield");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const N=[F[0],F[2]],$=[L[0],L[2]],W=new l.ChunkIdsArray;W.resize(512);const V=me.getChunksOverlappingRect(N,$,W,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=W.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,P,E.walkableClimb);if(s.free(),!o)return r("Could not rasterize triangles")}c(O,E.walkableClimb,P),m(O,E.walkableHeight,E.walkableClimb,P),g(O,E.walkableHeight,P);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,P,K))return r("Could not build compact heightfield");if(D||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r("Could not erode walkable area");if(!w(O,K))return r("Failed to build distance field");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r("Failed to build regions");const X=C();if(s.contourSet=X,!y(O,K,E.maxSimplificationError,E.maxEdgeLen,X,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return r("Failed to create contours");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r("Failed to triangulate contours");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r("Failed to build detail mesh");D||(T(K),s.compactHeightfield=void 0,_(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==R.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new z;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(R.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r("Failed to create Detour navmesh data")};O.startTimer(R.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=V[0]+t*ee,ue[1]=V[1],ue[2]=V[2]+e*ee,be[0]=V[0]+(t+1)*ee,be[1]=U[1],be[2]=V[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){N.removeTile(N.getTileRefAt(t,e,0));const a=N.addTile(i.data,R.Module.DT_TILE_FREE_DATA,0);R.Detour.statusFailed(a.status)&&(O.log(R.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${P(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(R.Module.RC_TIMER_TEMP),D||$(),{success:!0,navMesh:N,intermediates:G}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};
|
|
1
|
+
import{recastConfigDefaults as e,vec3 as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as h,rasterizeTriangles as d,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as M,buildDistanceField as S,buildRegions as y,allocContourSet as w,buildContours as p,Raw as C,allocPolyMesh as R,buildPolyMesh as x,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as T,freeContourSet as _,NavMeshCreateParams as v,createNavMeshData as z,TileCacheMeshProcess as E,TileCache as D,DetourTileCacheParams as H,NavMeshParams as F,RecastChunkyTriMesh as L,statusToReadableString as P,freePolyMesh as O,freePolyMeshDetail as I,freeHeightfieldLayerSet as G,cloneRcConfig as N,allocHeightfieldLayerSet as $,buildHeightfieldLayers as W,getHeightfieldLayerHeights as B,getHeightfieldLayerAreas as V,getHeightfieldLayerCons as K,buildTileCacheLayer as X}from"@recast-navigation/core";const Y=(e,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let t=0;t<i.length;t++){const r=i[t],s=e[3*r],o=e[3*r+1],n=e[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:t.toArray(a),bbMax:t.toArray(l)}},U=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},Z=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),j={...e},q=(e,t,E={},D=!1)=>{const H=new i,F={type:"solo",buildContext:H},L=new a,P=e=>(D||(F.heightfield&&(f(F.heightfield),F.heightfield=void 0),F.compactHeightfield&&(T(F.compactHeightfield),F.compactHeightfield=void 0),F.contourSet&&(_(F.contourSet),F.contourSet=void 0),F.polyMesh&&(O(F.polyMesh),F.polyMesh=void 0),F.polyMeshDetail&&(I(F.polyMeshDetail),F.polyMeshDetail=void 0)),L.destroy(),{navMesh:void 0,success:!1,intermediates:F,error:e}),G=e,N=t.length,$=new l.VertsArray;$.copy(G,G.length);const W=t,B=t.length/3,V=new l.TrisArray;V.copy(W,W.length);const{bbMin:K,bbMax:X}=Y(e,t),U=r({...j,...E});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 Z=s(K,X,U.cs);U.width=Z.width,U.height=Z.height;const q=o();if(F.heightfield=q,!n(H,q,U.width,U.height,K,X,U.cs,U.ch))return P("Could not create heightfield");const J=new l.TriAreasArray;if(J.resize(B),h(H,U.walkableSlopeAngle,$,N,V,B,J),!d(H,$,N,V,J,B,q,U.walkableClimb))return P("Could not rasterize triangles");J.free(),c(H,U.walkableClimb,q),m(H,U.walkableHeight,U.walkableClimb,q),g(H,U.walkableHeight,q);const Q=u();if(F.compactHeightfield=Q,!b(H,U.walkableHeight,U.walkableClimb,q,Q))return P("Failed to build compact data");if(D||(f(q),F.heightfield=void 0),!M(H,U.walkableRadius,Q))return P("Failed to erode walkable area");if(!S(H,Q))return P("Failed to build distance field");if(!y(H,Q,U.borderSize,U.minRegionArea,U.mergeRegionArea))return P("Failed to build regions");const ee=w();if(F.contourSet=ee,!p(H,Q,U.maxSimplificationError,U.maxEdgeLen,ee,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return P("Failed to create contours");const te=R();if(F.polyMesh=te,!x(H,ee,U.maxVertsPerPoly,te))return P("Failed to triangulate contours");const ie=A();if(F.polyMeshDetail=ie,!k(H,te,Q,U.detailSampleDist,U.detailSampleMaxError,ie))return P("Failed to build detail mesh");D||(T(Q),F.compactHeightfield=void 0,_(ee),F.contourSet=void 0);for(let e=0;e<te.npolys();e++)te.areas(e)==C.Recast.WALKABLE_AREA&&te.setAreas(e,0),0==te.areas(e)&&te.setFlags(e,1);const ae=new v;ae.setPolyMeshCreateParams(te),ae.setPolyMeshDetailCreateParams(ie),ae.setWalkableHeight(U.walkableHeight),ae.setWalkableRadius(U.walkableRadius),ae.setWalkableClimb(U.walkableClimb),ae.setCellSize(U.cs),ae.setCellHeight(U.ch),ae.setBuildBvTree(!0),E.offMeshConnections&&ae.setOffMeshConnections(E.offMeshConnections);const le=z(ae);if(!le.success)return P("Failed to create Detour navmesh data");const{navMeshData:re}=le;return L.initSolo(re)?{success:!0,navMesh:L,intermediates:F}:P("Failed to create Detour navmesh")},J={...e,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},Q=()=>new E(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),ee=(e,S,y={},w=!1)=>{const p=new i,R={type:"tilecache",buildContext:p,chunkyTriMesh:void 0,tileIntermediates:[]},x=new D,A=new a,k=()=>{if(!w)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&&(T(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(G(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},_=e=>(k(),x.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:R,error:e}),v=e,z=S.length,E=new l.VertsArray;E.copy(v,v.length);const P=S,O=S.length/3,I=new l.TrisArray;I.copy(P,P.length);const{bbMin:j,bbMax:q}=Y(e,S),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...J,...y},ae=r(ie),le=s(j,q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=H.create({orig:j,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),he=new C.RecastLinearAllocator(32e3),de=new C.RecastFastLZCompressor,ce=y.tileCacheMeshProcess??Q();if(!x.init(ne,he,de,ce))return _("Failed to initialize tile cache");const me=t.fromArray(j);let ge=Math.min(Math.floor(U(Z(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=F.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!A.initTiled(fe))return _("Failed to initialize tiled navmesh");const Me=new L;if(R.chunkyTriMesh=Me,!Me.init(E,I,O,256))return _("Failed to build chunky triangle mesh");const Se=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=N(ae),s=[j[0]+e*a,j[1],j[2]+t*a],S=[j[0]+(e+1)*a,q[1],j[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,S[0]+=r.borderSize*r.cs,S[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,S[0]),r.set_bmax(1,S[1]),r.set_bmax(2,S[2]);const y=o();if(i.heightfield=y,!n(p,y,r.width,r.height,s,S,r.cs,r.ch))return{n:0};const x=[s[0],s[2]],A=[S[0],S[2]],k=new l.ChunkIdsArray;k.resize(512);const _=Me.getChunksOverlappingRect(x,A,k,512);if(0===_)return{n:0};for(let e=0;e<_;++e){const t=k.get_data(e),i=Me.nodes(t).n,a=Me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(p,r.walkableSlopeAngle,E,z,a,i,s);const o=d(p,E,z,a,s,i,y,r.walkableClimb);if(s.free(),!o)return{n:0}}c(p,ae.walkableClimb,y),m(p,ae.walkableHeight,ae.walkableClimb,y),g(p,ae.walkableHeight,y);const v=u();if(!b(p,ae.walkableHeight,ae.walkableClimb,y,v))return{n:0};if(w||(f(i.heightfield),i.heightfield=void 0),!M(p,ae.walkableRadius,v))return{n:0};const D=$();if(!W(p,v,ae.borderSize,ae.walkableHeight,D))return{n:0};w||(T(v),i.compactHeightfield=void 0);const H=[];for(let i=0;i<D.nlayers();i++){const a=new l.TileCacheData,r=D.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const h=B(r),d=V(r),c=K(r),m=X(de,s,h,d,c,a);if(C.Detour.statusFailed(m))return{n:0};H.push(a)}return w||(G(D),i.heightfieldLayerSet=void 0),R.tileIntermediates.push(i),{n:H.length,tiles:H}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=Se(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);C.Detour.statusFailed(r.status)&&p.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return _(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:x,navMesh:A,intermediates:R}},te={...e},ie=(e,E,D={},H=!1)=>{const G=new i,$={type:"tiled",buildContext:G,chunkyTriMesh:void 0,tileIntermediates:[]},W=new a,B=()=>{if(!H){for(let e=0;e<$.tileIntermediates.length;e++){const t=$.tileIntermediates[e];t.compactHeightfield&&T(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&_(t.contourSet),t.polyMesh&&O(t.polyMesh),t.polyMeshDetail&&I(t.polyMeshDetail)}$.chunkyTriMesh&&($.chunkyTriMesh=void 0)}},V=e=>(B(),W.destroy(),{success:!1,navMesh:void 0,intermediates:$,error:e}),K=r({...te,...D}),{bbMin:X,bbMax:j}=Y(e,E),q=s(X,j,K.cs);K.width=q.width,K.height=q.height,K.minRegionArea=K.minRegionArea*K.minRegionArea,K.mergeRegionArea=K.mergeRegionArea*K.mergeRegionArea,K.tileSize=Math.floor(K.tileSize),K.borderSize=K.walkableRadius+3,K.width=K.tileSize+2*K.borderSize,K.height=K.tileSize+2*K.borderSize,K.detailSampleDist=K.detailSampleDist<.9?0:K.cs*K.detailSampleDist,K.detailSampleMaxError=K.ch*K.detailSampleMaxError;const J=Math.floor(K.tileSize),Q=Math.floor((q.width+J-1)/J),ee=Math.floor((q.height+J-1)/J),ie=K.tileSize*K.cs,ae=e,le=E.length,re=new l.VertsArray;re.copy(ae,ae.length);const se=E,oe=E.length/3,ne=new l.TrisArray;ne.copy(se,se.length);const he=t.fromArray(X);let de=Math.min(Math.floor(U(Z(Q*ee))),14);de>14&&(de=14);const ce=1<<de,me=1<<22-de,ge=F.create({orig:he,tileWidth:K.tileSize*K.cs,tileHeight:K.tileSize*K.cs,maxTiles:ce,maxPolys:me});if(!W.initTiled(ge))return V("Could not init nav mesh for tiled use");const ue=new L;if($.chunkyTriMesh=ue,!ue.init(re,ne,oe,256))return V("Failed to build chunky triangle mesh");const be=(e,t,i,a)=>{const r=e=>(G.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};$.tileIntermediates.push(s);const E=N(K),F=[...i],L=[...a];F[0]-=E.borderSize*E.cs,F[2]-=E.borderSize*E.cs,L[0]+=E.borderSize*E.cs,L[2]+=E.borderSize*E.cs,E.set_bmin(0,F[0]),E.set_bmin(1,F[1]),E.set_bmin(2,F[2]),E.set_bmax(0,L[0]),E.set_bmax(1,L[1]),E.set_bmax(2,L[2]),G.resetTimers(),G.startTimer(C.Module.RC_TIMER_TOTAL),G.log(C.Module.RC_LOG_PROGRESS,`Building tile ${$.tileIntermediates.length} at x: ${e}, y: ${t}`),G.log(C.Module.RC_LOG_PROGRESS,` - ${K.width} x ${K.height} cells`),G.log(C.Module.RC_LOG_PROGRESS,` - ${le/1e3}fK verts, ${oe/1e3}K tris`);const P=o();if(s.heightfield=P,!n(G,P,E.width,E.height,F,L,E.cs,E.ch))return r("Could not create heightfield");(new l.TriAreasArray).resize(ue.maxTrisPerChunk());const O=[F[0],F[2]],I=[L[0],L[2]],W=new l.ChunkIdsArray;W.resize(512);const B=ue.getChunksOverlappingRect(O,I,W,512);if(0===B)return{success:!0};for(let e=0;e<B;++e){const t=W.get_data(e),i=ue.nodes(t).n,a=ue.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(G,E.walkableSlopeAngle,re,le,a,i,s);const o=d(G,re,le,a,s,i,P,E.walkableClimb);if(s.free(),!o)return r("Could not rasterize triangles")}c(G,E.walkableClimb,P),m(G,E.walkableHeight,E.walkableClimb,P),g(G,E.walkableHeight,P);const V=u();if(s.compactHeightfield=V,!b(G,E.walkableHeight,E.walkableClimb,P,V))return r("Could not build compact heightfield");if(H||(f(s.heightfield),s.heightfield=void 0),!M(G,E.walkableRadius,V))return r("Could not erode walkable area");if(!S(G,V))return r("Failed to build distance field");if(!y(G,V,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r("Failed to build regions");const X=w();if(s.contourSet=X,!p(G,V,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r("Failed to create contours");const Y=R();if(s.polyMesh=Y,!x(G,X,E.maxVertsPerPoly,Y))return r("Failed to triangulate contours");const U=A();if(s.polyMeshDetail=U,!k(G,Y,V,E.detailSampleDist,E.detailSampleMaxError,U))return r("Failed to build detail mesh");H||(T(V),s.compactHeightfield=void 0,_(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new v;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),D.offMeshConnections&&Z.setOffMeshConnections(D.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=z(Z);return j.success?(G.log(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r("Failed to create Detour navmesh data")};G.startTimer(C.Module.RC_TIMER_TEMP);const fe=[0,0,0],Me=[0,0,0];for(let e=0;e<ee;e++)for(let t=0;t<Q;t++){fe[0]=X[0]+t*ie,fe[1]=X[1],fe[2]=X[2]+e*ie,Me[0]=X[0]+(t+1)*ie,Me[1]=j[1],Me[2]=X[2]+(e+1)*ie;const i=be(t,e,fe,Me);if(i.success&&i.data){W.removeTile(W.getTileRefAt(t,e,0));const a=W.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(G.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\n\ttx: ${t}, ty: ${e},status: ${P(a.status)} (${a.status})`),i.data.free())}}return G.stopTimer(C.Module.RC_TIMER_TEMP),H||B(),{success:!0,navMesh:W,intermediates:$}};export{Q as createDefaultTileCacheMeshProcess,U as dtIlog2,Z as dtNextPow2,q as generateSoloNavMesh,ee as generateTileCache,ie as generateTiledNavMesh,Y as getBoundingBox,j as soloNavMeshGeneratorConfigDefaults,J as tileCacheGeneratorConfigDefaults,te as tiledNavMeshGeneratorConfigDefaults};
|
|
2
2
|
//# sourceMappingURL=generators.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generators.mjs","sources":["../recast-navigation-generators/dist/index.mjs"],"sourcesContent":["import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as h,rasterizeTriangles as d,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as M,buildDistanceField as y,buildRegions as S,allocContourSet as w,buildContours as p,Raw as R,allocPolyMesh as C,buildPolyMesh as x,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,freePolyMesh as E,freePolyMeshDetail as D,TileCacheMeshProcess as H,TileCache as F,DetourTileCacheParams as L,NavMeshParams as O,RecastChunkyTriMesh as P,freeHeightfieldLayerSet as I,cloneRcConfig as $,allocHeightfieldLayerSet as G,buildHeightfieldLayers as N,getHeightfieldLayerHeights as W,getHeightfieldLayerAreas as B,getHeightfieldLayerCons as V,buildTileCacheLayer as K,statusToReadableString as X}from\"@recast-navigation/core\";const Y=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},U=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},Z=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),j={...t},q=(e,t,H={},F=!1)=>{const L=new i,O={type:\"solo\",buildContext:L},P=new a,I=e=>(F||(O.heightfield&&(f(O.heightfield),O.heightfield=void 0),O.compactHeightfield&&(_(O.compactHeightfield),O.compactHeightfield=void 0),O.contourSet&&(z(O.contourSet),O.contourSet=void 0),O.polyMesh&&(E(O.polyMesh),O.polyMesh=void 0),O.polyMeshDetail&&(D(O.polyMeshDetail),O.polyMeshDetail=void 0)),P.destroy(),{navMesh:void 0,success:!1,intermediates:O,error:e}),$=e,G=t.length,N=new l.VertsArray;N.copy($,$.length);const W=t,B=t.length/3,V=new l.TrisArray;V.copy(W,W.length);const{bbMin:K,bbMax:X}=Y(e,t),U=r({...j,...H});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 Z=s(K,X,U.cs);U.width=Z.width,U.height=Z.height;const q=o();if(O.heightfield=q,!n(L,q,U.width,U.height,K,X,U.cs,U.ch))return I(\"Could not create heightfield\");const J=new l.TriAreasArray;if(J.resize(B),h(L,U.walkableSlopeAngle,N,G,V,B,J),!d(L,N,G,V,J,B,q,U.walkableClimb))return I(\"Could not rasterize triangles\");J.free(),c(L,U.walkableClimb,q),m(L,U.walkableHeight,U.walkableClimb,q),g(L,U.walkableHeight,q);const Q=u();if(O.compactHeightfield=Q,!b(L,U.walkableHeight,U.walkableClimb,q,Q))return I(\"Failed to build compact data\");if(F||(f(q),O.heightfield=void 0),!M(L,U.walkableRadius,Q))return I(\"Failed to erode walkable area\");if(!y(L,Q))return I(\"Failed to build distance field\");if(!S(L,Q,U.borderSize,U.minRegionArea,U.mergeRegionArea))return I(\"Failed to build regions\");const ee=w();if(O.contourSet=ee,!p(L,Q,U.maxSimplificationError,U.maxEdgeLen,ee,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return I(\"Failed to create contours\");const te=C();if(O.polyMesh=te,!x(L,ee,U.maxVertsPerPoly,te))return I(\"Failed to triangulate contours\");const ie=A();if(O.polyMeshDetail=ie,!k(L,te,Q,U.detailSampleDist,U.detailSampleMaxError,ie))return I(\"Failed to build detail mesh\");F||(_(Q),O.compactHeightfield=void 0,z(ee),O.contourSet=void 0);for(let e=0;e<te.npolys();e++)te.areas(e)==R.Recast.WALKABLE_AREA&&te.setAreas(e,0),0==te.areas(e)&&te.setFlags(e,1);const ae=new T;ae.setPolyMeshCreateParams(te),ae.setPolyMeshDetailCreateParams(ie),ae.setWalkableHeight(U.walkableHeight),ae.setWalkableRadius(U.walkableRadius),ae.setWalkableClimb(U.walkableClimb),ae.setCellSize(U.cs),ae.setCellHeight(U.ch),ae.setBuildBvTree(!0),H.offMeshConnections&&ae.setOffMeshConnections(H.offMeshConnections);const le=v(ae);if(!le.success)return I(\"Failed to create Detour navmesh data\");const{navMeshData:re}=le;return P.initSolo(re)?{success:!0,navMesh:P,intermediates:O}:I(\"Failed to create Detour navmesh\")},J={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},Q=()=>new H(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),ee=(t,y,S={},w=!1)=>{const p=new i,C={type:\"tilecache\",buildContext:p,chunkyTriMesh:void 0,tileIntermediates:[]},x=new F,A=new a,k=()=>{if(!w)for(let e=0;e<C.tileIntermediates.length;e++){const t=C.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(I(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),x.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:C,error:e}),T=t,v=y.length,E=new l.VertsArray;E.copy(T,T.length);const D=y,H=y.length/3,X=new l.TrisArray;X.copy(D,D.length);const{bbMin:j,bbMax:q}=Y(t,y),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...J,...S},ae=r(ie),le=s(j,q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=L.create({orig:j,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),he=new R.RecastLinearAllocator(32e3),de=new R.RecastFastLZCompressor,ce=S.tileCacheMeshProcess??Q();if(!x.init(ne,he,de,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(j);let ge=Math.min(Math.floor(U(Z(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=O.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Me=new P;if(C.chunkyTriMesh=Me,!Me.init(E,X,H,256))return z(\"Failed to build chunky triangle mesh\");const ye=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=$(ae),s=[j[0]+e*a,j[1],j[2]+t*a],y=[j[0]+(e+1)*a,q[1],j[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,y[0]+=r.borderSize*r.cs,y[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,y[0]),r.set_bmax(1,y[1]),r.set_bmax(2,y[2]);const S=o();if(i.heightfield=S,!n(p,S,r.width,r.height,s,y,r.cs,r.ch))return{n:0};const x=[s[0],s[2]],A=[y[0],y[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Me.getChunksOverlappingRect(x,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Me.nodes(t).n,a=Me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(p,r.walkableSlopeAngle,E,v,a,i,s);const o=d(p,E,v,a,s,i,S,r.walkableClimb);if(s.free(),!o)return{n:0}}c(p,ae.walkableClimb,S),m(p,ae.walkableHeight,ae.walkableClimb,S),g(p,ae.walkableHeight,S);const T=u();if(!b(p,ae.walkableHeight,ae.walkableClimb,S,T))return{n:0};if(w||(f(i.heightfield),i.heightfield=void 0),!M(p,ae.walkableRadius,T))return{n:0};const D=G();if(!N(p,T,ae.borderSize,ae.walkableHeight,D))return{n:0};w||(_(T),i.compactHeightfield=void 0);const H=[];for(let i=0;i<D.nlayers();i++){const a=new l.TileCacheData,r=D.layers(i),s=new R.dtTileCacheLayerHeader;s.magic=R.Detour.TILECACHE_MAGIC,s.version=R.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const h=W(r),d=B(r),c=V(r),m=K(de,s,h,d,c,a);if(R.Detour.statusFailed(m))return{n:0};H.push(a)}return w||(I(D),i.heightfieldLayerSet=void 0),C.tileIntermediates.push(i),{n:H.length,tiles:H}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=ye(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=x.addTile(i);R.Detour.statusFailed(r.status)&&p.log(R.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=x.buildNavMeshTilesAt(t,e,A);if(R.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:x,navMesh:A,intermediates:C}},te={...t},ie=(t,H,F={},L=!1)=>{const I=new i,G={type:\"tiled\",buildContext:I,chunkyTriMesh:void 0,tileIntermediates:[]},N=new a,W=()=>{if(!L){for(let e=0;e<G.tileIntermediates.length;e++){const t=G.tileIntermediates[e];t.compactHeightfield&&_(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet),t.polyMesh&&E(t.polyMesh),t.polyMeshDetail&&D(t.polyMeshDetail)}G.chunkyTriMesh&&(G.chunkyTriMesh=void 0)}},B=e=>(W(),N.destroy(),{success:!1,navMesh:void 0,intermediates:G,error:e}),V=r({...te,...F}),{bbMin:K,bbMax:j}=Y(t,H),q=s(K,j,V.cs);V.width=q.width,V.height=q.height,V.minRegionArea=V.minRegionArea*V.minRegionArea,V.mergeRegionArea=V.mergeRegionArea*V.mergeRegionArea,V.tileSize=Math.floor(V.tileSize),V.borderSize=V.walkableRadius+3,V.width=V.tileSize+2*V.borderSize,V.height=V.tileSize+2*V.borderSize,V.detailSampleDist=V.detailSampleDist<.9?0:V.cs*V.detailSampleDist,V.detailSampleMaxError=V.ch*V.detailSampleMaxError;const J=Math.floor(V.tileSize),Q=Math.floor((q.width+J-1)/J),ee=Math.floor((q.height+J-1)/J),ie=V.tileSize*V.cs,ae=t,le=H.length,re=new l.VertsArray;re.copy(ae,ae.length);const se=H,oe=H.length/3,ne=new l.TrisArray;ne.copy(se,se.length);const he=e.fromArray(K);let de=Math.min(Math.floor(U(Z(Q*ee))),14);de>14&&(de=14);const ce=1<<de,me=1<<22-de,ge=O.create({orig:he,tileWidth:V.tileSize*V.cs,tileHeight:V.tileSize*V.cs,maxTiles:ce,maxPolys:me});if(!N.initTiled(ge))return B(\"Could not init nav mesh for tiled use\");const ue=new P;if(G.chunkyTriMesh=ue,!ue.init(re,ne,oe,256))return B(\"Failed to build chunky triangle mesh\");const be=(e,t,i,a)=>{const r=e=>(I.log(R.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};G.tileIntermediates.push(s);const E=$(V),D=[...i],H=[...a];D[0]-=E.borderSize*E.cs,D[2]-=E.borderSize*E.cs,H[0]+=E.borderSize*E.cs,H[2]+=E.borderSize*E.cs,E.set_bmin(0,D[0]),E.set_bmin(1,D[1]),E.set_bmin(2,D[2]),E.set_bmax(0,H[0]),E.set_bmax(1,H[1]),E.set_bmax(2,H[2]),I.resetTimers(),I.startTimer(R.Module.RC_TIMER_TOTAL),I.log(R.Module.RC_LOG_PROGRESS,`Building tile ${G.tileIntermediates.length} at x: ${e}, y: ${t}`),I.log(R.Module.RC_LOG_PROGRESS,` - ${V.width} x ${V.height} cells`),I.log(R.Module.RC_LOG_PROGRESS,` - ${le/1e3}fK verts, ${oe/1e3}K tris`);const O=o();if(s.heightfield=O,!n(I,O,E.width,E.height,D,H,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(ue.maxTrisPerChunk());const P=[D[0],D[2]],N=[H[0],H[2]],W=new l.ChunkIdsArray;W.resize(512);const B=ue.getChunksOverlappingRect(P,N,W,512);if(0===B)return{success:!0};for(let e=0;e<B;++e){const t=W.get_data(e),i=ue.nodes(t).n,a=ue.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),h(I,E.walkableSlopeAngle,re,le,a,i,s);const o=d(I,re,le,a,s,i,O,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(I,E.walkableClimb,O),m(I,E.walkableHeight,E.walkableClimb,O),g(I,E.walkableHeight,O);const K=u();if(s.compactHeightfield=K,!b(I,E.walkableHeight,E.walkableClimb,O,K))return r(\"Could not build compact heightfield\");if(L||(f(s.heightfield),s.heightfield=void 0),!M(I,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!y(I,K))return r(\"Failed to build distance field\");if(!S(I,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=w();if(s.contourSet=X,!p(I,K,E.maxSimplificationError,E.maxEdgeLen,X,R.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=C();if(s.polyMesh=Y,!x(I,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(s.polyMeshDetail=U,!k(I,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");L||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==R.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),F.offMeshConnections&&Z.setOffMeshConnections(F.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(I.log(R.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};I.startTimer(R.Module.RC_TIMER_TEMP);const fe=[0,0,0],Me=[0,0,0];for(let e=0;e<ee;e++)for(let t=0;t<Q;t++){fe[0]=K[0]+t*ie,fe[1]=K[1],fe[2]=K[2]+e*ie,Me[0]=K[0]+(t+1)*ie,Me[1]=j[1],Me[2]=K[2]+(e+1)*ie;const i=be(t,e,fe,Me);if(i.success&&i.data){N.removeTile(N.getTileRefAt(t,e,0));const a=N.addTile(i.data,R.Module.DT_TILE_FREE_DATA,0);R.Detour.statusFailed(a.status)&&(I.log(R.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${X(a.status)} (${a.status})`),i.data.free())}}return I.stopTimer(R.Module.RC_TIMER_TEMP),L||W(),{success:!0,navMesh:N,intermediates:G}};export{Q as createDefaultTileCacheMeshProcess,U as dtIlog2,Z as dtNextPow2,q as generateSoloNavMesh,ee as generateTileCache,ie as generateTiledNavMesh,Y as getBoundingBox,j as soloNavMeshGeneratorConfigDefaults,J as tileCacheGeneratorConfigDefaults,te as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n"],"names":["Y","t","i","a","x","y","z","l","e","length","r","s","o","n","Math","min","max","bbMin","toArray","bbMax","U","Number","Z","j","q","H","F","L","O","type","buildContext","P","I","heightfield","f","compactHeightfield","_","contourSet","polyMesh","E","polyMeshDetail","D","destroy","navMesh","success","intermediates","error","$","G","N","VertsArray","copy","W","B","V","TrisArray","K","X","minRegionArea","mergeRegionArea","detailSampleDist","cs","detailSampleMaxError","ch","width","height","J","TriAreasArray","resize","h","walkableSlopeAngle","d","walkableClimb","free","c","m","walkableHeight","g","Q","u","b","M","walkableRadius","S","borderSize","ee","w","p","maxSimplificationError","maxEdgeLen","R","Module","RC_CONTOUR_TESS_WALL_EDGES","te","C","maxVertsPerPoly","ie","A","k","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","ae","T","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","offMeshConnections","setOffMeshConnections","le","v","navMeshData","re","initSolo","tileSize","expectedLayersPerTile","maxObstacles","polyCount","set","chunkyTriMesh","tileIntermediates","heightfieldLayerSet","tileCache","floor","se","oe","ne","create","orig","maxTiles","he","RecastLinearAllocator","de","RecastFastLZCompressor","ce","tileCacheMeshProcess","init","me","fromArray","ge","ue","be","fe","tileWidth","tileHeight","maxPolys","initTiled","Me","ye","tileX","tileY","set_bmin","set_bmax","ChunkIdsArray","getChunksOverlappingRect","get_data","nodes","getNodeTris","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmin","bmax","minx","maxx","miny","maxy","hmin","hmax","statusFailed","push","tiles","addTile","status","log","RC_LOG_WARNING","buildNavMeshTilesAt","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"],"mappings":"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"}
|
package/index.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"email": "isaac@isaacmason.com",
|
|
19
19
|
"url": "https://isaacmason.com/"
|
|
20
20
|
},
|
|
21
|
-
"version": "0.
|
|
21
|
+
"version": "0.25.0",
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"homepage": "https://github.com/isaac-mason/recast-navigation-js",
|
|
24
24
|
"bugs": {
|
|
@@ -46,13 +46,19 @@
|
|
|
46
46
|
},
|
|
47
47
|
"files": [
|
|
48
48
|
"index.mjs",
|
|
49
|
+
"index.mjs.map",
|
|
49
50
|
"index.cjs",
|
|
51
|
+
"index.cjs.map",
|
|
50
52
|
"index.d.ts",
|
|
51
53
|
"generators.mjs",
|
|
54
|
+
"generators.mjs.map",
|
|
52
55
|
"generators.cjs",
|
|
56
|
+
"generators.cjs.map",
|
|
53
57
|
"generators.d.ts",
|
|
54
58
|
"three.mjs",
|
|
59
|
+
"three.mjs.map",
|
|
55
60
|
"three.cjs",
|
|
61
|
+
"three.cjs.map",
|
|
56
62
|
"three.d.ts",
|
|
57
63
|
"LICENSE",
|
|
58
64
|
"README.md"
|
|
@@ -66,16 +72,16 @@
|
|
|
66
72
|
"lint": "eslint --ext .ts src"
|
|
67
73
|
},
|
|
68
74
|
"dependencies": {
|
|
69
|
-
"@recast-navigation/core": "0.
|
|
70
|
-
"@recast-navigation/generators": "0.
|
|
71
|
-
"@recast-navigation/three": "0.
|
|
75
|
+
"@recast-navigation/core": "0.25.0",
|
|
76
|
+
"@recast-navigation/generators": "0.25.0",
|
|
77
|
+
"@recast-navigation/three": "0.25.0"
|
|
72
78
|
},
|
|
73
79
|
"devDependencies": {
|
|
74
80
|
"@babel/core": "^7.24.4",
|
|
75
81
|
"@isaac-mason/eslint-config-typescript": "^0.0.5",
|
|
76
82
|
"@mdx-js/react": "^2.3.0",
|
|
77
83
|
"@pmndrs/assets": "^1.6.0",
|
|
78
|
-
"@react-three/drei": "^9.
|
|
84
|
+
"@react-three/drei": "^9.105.4",
|
|
79
85
|
"@react-three/fiber": "^8.15.12",
|
|
80
86
|
"@rollup/plugin-commonjs": "^25.0.7",
|
|
81
87
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
@@ -90,7 +96,7 @@
|
|
|
90
96
|
"@storybook/react-vite": "^8.0.1",
|
|
91
97
|
"@types/react": "^18.2.73",
|
|
92
98
|
"@types/react-dom": "^18.2.8",
|
|
93
|
-
"@types/three": "^0.
|
|
99
|
+
"@types/three": "^0.163.0",
|
|
94
100
|
"eslint": "^8.56.0",
|
|
95
101
|
"leva": "^0.9.35",
|
|
96
102
|
"react": "^18.2.0",
|
|
@@ -100,7 +106,7 @@
|
|
|
100
106
|
"rollup-plugin-filesize": "^10.0.0",
|
|
101
107
|
"storybook": "^8.0.1",
|
|
102
108
|
"suspend-react": "^0.1.3",
|
|
103
|
-
"three": "^0.
|
|
109
|
+
"three": "^0.163.0",
|
|
104
110
|
"three-pathfinding": "^1.2.0",
|
|
105
111
|
"typescript": "^5.4.3",
|
|
106
112
|
"vitest": "^1.5.0",
|
package/three.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/three.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|