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