@recast-navigation/three 0.24.1 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/helpers/crowd-helper.ts","../src/helpers/heightfield-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../../recast-navigation-generators/dist/index.mjs","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import { Crowd, CrowdAgent } from '@recast-navigation/core';\nimport {\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type CrowdHelperParams = {\n crowd: Crowd;\n agentMaterial?: Material;\n};\n\nexport class CrowdHelper extends Object3D {\n agentMeshes: Map<number, Mesh> = new Map();\n\n recastCrowd: Crowd;\n\n agentMaterial: Material;\n\n constructor({ crowd, agentMaterial }: CrowdHelperParams) {\n super();\n\n this.recastCrowd = crowd;\n\n this.agentMaterial =\n agentMaterial ?? new MeshBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the crowd agents.\n *\n * This should be called after updating the crowd.\n */\n update() {\n const agents = this.recastCrowd.getAgents();\n\n const unseen = new Set(this.agentMeshes.keys());\n\n for (const agent of agents) {\n unseen.delete(agent.agentIndex);\n\n const position = agent.position();\n const velocity = agent.velocity();\n\n let agentMesh: Mesh | undefined = this.agentMeshes.get(agent.agentIndex);\n\n if (agentMesh === undefined) {\n agentMesh = this.createAgentMesh(agent);\n\n this.add(agentMesh);\n this.agentMeshes.set(agent.agentIndex, agentMesh);\n } else {\n this.updateAgentGeometry(agentMesh, agent);\n }\n\n agentMesh.position.set(\n position.x,\n position.y + agent.height / 2,\n position.z\n );\n\n agentMesh.lookAt(\n new Vector3().copy(agentMesh.position).add(velocity as Vector3)\n );\n }\n\n for (const agentId of unseen) {\n const agentMesh = this.agentMeshes.get(agentId);\n\n if (agentMesh) {\n this.remove(agentMesh);\n this.agentMeshes.delete(agentId);\n }\n }\n }\n\n private createAgentMesh(agent: CrowdAgent): Mesh {\n const mesh = new Mesh();\n\n mesh.material = this.agentMaterial;\n\n this.updateAgentGeometry(mesh, agent);\n\n mesh.userData = {\n radius: agent.radius,\n height: agent.height,\n };\n\n return mesh;\n }\n\n private updateAgentGeometry(agentMesh: Mesh, agentParams: CrowdAgent) {\n if (\n agentMesh.userData.radius !== agentParams.radius ||\n agentMesh.userData.height !== agentParams.height\n ) {\n const geometry = new CylinderGeometry(\n agentParams.radius,\n agentParams.radius,\n agentParams.height\n );\n\n agentMesh.geometry.dispose();\n agentMesh.geometry = geometry;\n\n agentMesh.userData.radius = agentParams.radius;\n agentMesh.userData.height = agentParams.height;\n }\n }\n}\n","import { RecastHeightfield, RecastSpan } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n Color,\n ColorRepresentation,\n DynamicDrawUsage,\n InstancedMesh,\n Material,\n Matrix4,\n MeshBasicMaterial,\n Object3D,\n Vector3Tuple,\n} from 'three';\n\nconst tmpMatrix4 = new Matrix4();\n\nexport type HeightfieldHelperParams = {\n heightfields: RecastHeightfield[];\n\n /**\n * @default false\n */\n highlightWalkable?: boolean;\n\n /**\n * @default 'blue'\n */\n defaultColor?: ColorRepresentation;\n\n /**\n * @default 'green'\n */\n walkableColor?: ColorRepresentation;\n\n /**\n * @default MeshBasicMaterial\n */\n material?: Material;\n};\n\nexport class HeightfieldHelper extends Object3D {\n heightfields: RecastHeightfield[];\n\n highlightWalkable: boolean;\n\n defaultColor: Color;\n\n walkableColor: Color;\n\n material: Material;\n\n constructor({\n heightfields,\n highlightWalkable = false,\n material = new MeshBasicMaterial(),\n defaultColor = 'blue',\n walkableColor = 'green',\n }: HeightfieldHelperParams) {\n super();\n\n this.heightfields = heightfields;\n this.highlightWalkable = highlightWalkable;\n this.material = material;\n this.defaultColor = new Color(defaultColor);\n this.walkableColor = new Color(walkableColor);\n\n this.update();\n }\n\n update(): void {\n this.clear();\n\n for (const hf of this.heightfields) {\n const orig = hf.bmin();\n const cs = hf.cs();\n const ch = hf.ch();\n\n const width = hf.width();\n const height = hf.height();\n\n const boxes: {\n position: Vector3Tuple;\n walkable: boolean;\n }[] = [];\n\n for (let y = 0; y < height; ++y) {\n for (let x = 0; x < width; ++x) {\n const fx = orig.x + x * cs;\n const fz = orig.z + y * cs;\n\n let span: RecastSpan | null = hf.spans(x + y * width);\n\n while (span) {\n const minX = fx;\n const minY = orig.y + span.smin() * ch;\n const minZ = fz;\n\n const maxX = fx + cs;\n const maxY = orig.y + span.smax() * ch;\n const maxZ = fz + cs;\n\n boxes.push({\n position: [\n (maxX + minX) / 2,\n (maxY + minY) / 2,\n (maxZ + minZ) / 2,\n ],\n walkable: this.highlightWalkable && span.area() !== 0,\n });\n\n span = span.next();\n }\n }\n }\n\n const geometry = new BoxGeometry(cs, ch, cs);\n\n const instancedMesh = new InstancedMesh(\n geometry,\n this.material,\n boxes.length\n );\n instancedMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n\n for (let i = 0; i < boxes.length; i++) {\n const { position, walkable } = boxes[i];\n\n instancedMesh.setMatrixAt(i, tmpMatrix4.setPosition(...position));\n instancedMesh.setColorAt(\n i,\n walkable ? this.walkableColor : this.defaultColor\n );\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n if (instancedMesh.instanceColor) {\n instancedMesh.instanceColor.needsUpdate = true;\n }\n\n this.add(instancedMesh);\n }\n }\n}\n","import { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n depthWrite: false,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as d,rasterizeTriangles as h,filterLowHangingWalkableObstacles as c,filterLedgeSpans as m,filterWalkableLowHeightSpans as g,allocCompactHeightfield as u,buildCompactHeightfield as b,freeHeightfield as f,erodeWalkableArea as S,buildDistanceField as w,buildRegions as M,allocContourSet as y,buildContours as R,Raw as C,allocPolyMesh as x,buildPolyMesh as p,allocPolyMeshDetail as A,buildPolyMeshDetail as k,freeCompactHeightfield as _,freeContourSet as z,NavMeshCreateParams as T,createNavMeshData as v,TileCacheMeshProcess as E,TileCache as H,DetourTileCacheParams as F,NavMeshParams as L,RecastChunkyTriMesh as D,freeHeightfieldLayerSet as O,cloneRcConfig as P,allocHeightfieldLayerSet as I,buildHeightfieldLayers as $,getHeightfieldLayerHeights as G,getHeightfieldLayerAreas as N,getHeightfieldLayerCons as W,buildTileCacheLayer as B,statusToReadableString as V}from\"@recast-navigation/core\";const K=(t,i)=>{const a={x:1/0,y:1/0,z:1/0},l={x:-1/0,y:-1/0,z:-1/0};for(let e=0;e<i.length;e++){const r=i[e],s=t[3*r],o=t[3*r+1],n=t[3*r+2];a.x=Math.min(a.x,s),a.y=Math.min(a.y,o),a.z=Math.min(a.z,n),l.x=Math.max(l.x,s),l.y=Math.max(l.y,o),l.z=Math.max(l.z,n)}return{bbMin:e.toArray(a),bbMax:e.toArray(l)}},X=e=>{let t=0,i=0;return t=Number(e>65535)<<4,e>>=t,i=Number(e>255)<<3,e>>=i,t|=i,i=Number(e>15)<<2,e>>=i,t|=i,i=Number(e>3)<<1,t|=i,t|=(e>>=i)>>1,t},Y=e=>(e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e),U={...t},Z=(e,t,E={},H=!1)=>{const F=new i,L={type:\"solo\",buildContext:F},D=new a,O=e=>(H||(L.heightfield&&(f(L.heightfield),L.heightfield=void 0),L.compactHeightfield&&(_(L.compactHeightfield),L.compactHeightfield=void 0),L.contourSet&&(z(L.contourSet),L.contourSet=void 0)),D.destroy(),{navMesh:void 0,success:!1,intermediates:L,error:e}),P=e,I=t.length,$=new l.VertsArray;$.copy(P,P.length);const G=t,N=t.length/3,W=new l.TrisArray;W.copy(G,G.length);const{bbMin:B,bbMax:V}=K(e,t),X=r({...U,...E});X.minRegionArea=X.minRegionArea*X.minRegionArea,X.mergeRegionArea=X.mergeRegionArea*X.mergeRegionArea,X.detailSampleDist=X.detailSampleDist<.9?0:X.cs*X.detailSampleDist,X.detailSampleMaxError=X.ch*X.detailSampleMaxError;const Y=s(B,V,X.cs);X.width=Y.width,X.height=Y.height;const Z=o();if(L.heightfield=Z,!n(F,Z,X.width,X.height,B,V,X.cs,X.ch))return O(\"Could not create heightfield\");const j=new l.TriAreasArray;if(j.resize(N),d(F,X.walkableSlopeAngle,$,I,W,N,j),!h(F,$,I,W,j,N,Z,X.walkableClimb))return O(\"Could not rasterize triangles\");j.free(),c(F,X.walkableClimb,Z),m(F,X.walkableHeight,X.walkableClimb,Z),g(F,X.walkableHeight,Z);const q=u();if(L.compactHeightfield=q,!b(F,X.walkableHeight,X.walkableClimb,Z,q))return O(\"Failed to build compact data\");if(H||(f(Z),L.heightfield=void 0),!S(F,X.walkableRadius,q))return O(\"Failed to erode walkable area\");if(!w(F,q))return O(\"Failed to build distance field\");if(!M(F,q,X.borderSize,X.minRegionArea,X.mergeRegionArea))return O(\"Failed to build regions\");const J=y();if(L.contourSet=J,!R(F,q,X.maxSimplificationError,X.maxEdgeLen,J,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return O(\"Failed to create contours\");const Q=x();if(!p(F,J,X.maxVertsPerPoly,Q))return O(\"Failed to triangulate contours\");const ee=A();if(!k(F,Q,q,X.detailSampleDist,X.detailSampleMaxError,ee))return O(\"Failed to build detail mesh\");H||(_(q),L.compactHeightfield=void 0,z(J),L.contourSet=void 0);for(let e=0;e<Q.npolys();e++)Q.areas(e)==C.Recast.WALKABLE_AREA&&Q.setAreas(e,0),0==Q.areas(e)&&Q.setFlags(e,1);const te=new T;te.setPolyMeshCreateParams(Q),te.setPolyMeshDetailCreateParams(ee),te.setWalkableHeight(X.walkableHeight),te.setWalkableRadius(X.walkableRadius),te.setWalkableClimb(X.walkableClimb),te.setCellSize(X.cs),te.setCellHeight(X.ch),te.setBuildBvTree(!0),E.offMeshConnections&&te.setOffMeshConnections(E.offMeshConnections);const ie=v(te);if(!ie.success)return O(\"Failed to create Detour navmesh data\");const{navMeshData:ae}=ie;return D.initSolo(ae)?{success:!0,navMesh:D,intermediates:L}:O(\"Failed to create Detour navmesh\")},j={...t,tileSize:32,expectedLayersPerTile:4,maxObstacles:128},q=()=>new E(((e,t,i)=>{for(let a=0;a<e.polyCount();++a)t.set(a,0),i.set(a,1)})),J=(t,w,M={},y=!1)=>{const R=new i,x={type:\"tilecache\",buildContext:R,chunkyTriMesh:void 0,tileIntermediates:[]},p=new H,A=new a,k=()=>{if(!y)for(let e=0;e<x.tileIntermediates.length;e++){const t=x.tileIntermediates[e];t.heightfield&&(f(t.heightfield),t.heightfield=void 0),t.compactHeightfield&&(_(t.compactHeightfield),t.compactHeightfield=void 0),t.heightfieldLayerSet&&(O(t.heightfieldLayerSet),t.heightfieldLayerSet=void 0)}},z=e=>(k(),p.destroy(),A.destroy(),{success:!1,navMesh:void 0,tileCache:void 0,intermediates:x,error:e}),T=t,v=w.length,E=new l.VertsArray;E.copy(T,T.length);const V=w,U=w.length/3,Z=new l.TrisArray;Z.copy(V,V.length);const{bbMin:J,bbMax:Q}=K(t,w),{expectedLayersPerTile:ee,maxObstacles:te,...ie}={...j,...M},ae=r(ie),le=s(J,Q,ae.cs);ae.width=le.width,ae.height=le.height,ae.minRegionArea=ae.minRegionArea*ae.minRegionArea,ae.mergeRegionArea=ae.mergeRegionArea*ae.mergeRegionArea,ae.detailSampleDist=ae.detailSampleDist<.9?0:ae.cs*ae.detailSampleDist,ae.detailSampleMaxError=ae.ch*ae.detailSampleMaxError;const re=Math.floor(ae.tileSize),se=Math.floor((ae.width+re-1)/re),oe=Math.floor((ae.height+re-1)/re);ae.borderSize=ae.walkableRadius+3,ae.width=ae.tileSize+2*ae.borderSize,ae.height=ae.tileSize+2*ae.borderSize;const ne=F.create({orig:J,cs:ae.cs,ch:ae.ch,width:ae.tileSize,height:ae.tileSize,walkableHeight:ae.walkableHeight,walkableRadius:ae.walkableRadius,walkableClimb:ae.walkableClimb,maxSimplificationError:ae.maxSimplificationError,maxTiles:se*oe*ee,maxObstacles:te}),de=new C.RecastLinearAllocator(32e3),he=new C.RecastFastLZCompressor,ce=M.tileCacheMeshProcess??q();if(!p.init(ne,de,he,ce))return z(\"Failed to initialize tile cache\");const me=e.fromArray(J);let ge=Math.min(Math.floor(X(Y(se*oe*ee))),14);ge>14&&(ge=14);const ue=1<<ge,be=1<<22-ge,fe=L.create({orig:me,tileWidth:ae.tileSize*ae.cs,tileHeight:ae.tileSize*ae.cs,maxTiles:ue,maxPolys:be});if(!A.initTiled(fe))return z(\"Failed to initialize tiled navmesh\");const Se=new D;if(x.chunkyTriMesh=Se,!Se.init(E,Z,U,256))return z(\"Failed to build chunky triangle mesh\");const we=(e,t)=>{const i={tileX:e,tileY:t},a=ae.tileSize*ae.cs,r=P(ae),s=[J[0]+e*a,J[1],J[2]+t*a],w=[J[0]+(e+1)*a,Q[1],J[2]+(t+1)*a];s[0]-=r.borderSize*r.cs,s[2]-=r.borderSize*r.cs,w[0]+=r.borderSize*r.cs,w[2]+=r.borderSize*r.cs,r.set_bmin(0,s[0]),r.set_bmin(1,s[1]),r.set_bmin(2,s[2]),r.set_bmax(0,w[0]),r.set_bmax(1,w[1]),r.set_bmax(2,w[2]);const M=o();if(i.heightfield=M,!n(R,M,r.width,r.height,s,w,r.cs,r.ch))return{n:0};const p=[s[0],s[2]],A=[w[0],w[2]],k=new l.ChunkIdsArray;k.resize(512);const z=Se.getChunksOverlappingRect(p,A,k,512);if(0===z)return{n:0};for(let e=0;e<z;++e){const t=k.get_data(e),i=Se.nodes(t).n,a=Se.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(R,r.walkableSlopeAngle,E,v,a,i,s);const o=h(R,E,v,a,s,i,M,r.walkableClimb);if(s.free(),!o)return{n:0}}c(R,ae.walkableClimb,M),m(R,ae.walkableHeight,ae.walkableClimb,M),g(R,ae.walkableHeight,M);const T=u();if(!b(R,ae.walkableHeight,ae.walkableClimb,M,T))return{n:0};if(y||(f(i.heightfield),i.heightfield=void 0),!S(R,ae.walkableRadius,T))return{n:0};const H=I();if(!$(R,T,ae.borderSize,ae.walkableHeight,H))return{n:0};y||(_(T),i.compactHeightfield=void 0);const F=[];for(let i=0;i<H.nlayers();i++){const a=new l.TileCacheData,r=H.layers(i),s=new C.dtTileCacheLayerHeader;s.magic=C.Detour.TILECACHE_MAGIC,s.version=C.Detour.TILECACHE_VERSION,s.tx=e,s.ty=t,s.tlayer=i;const o=r.bmin(),n=r.bmax();s.set_bmin(0,o.x),s.set_bmin(1,o.y),s.set_bmin(2,o.z),s.set_bmax(0,n.x),s.set_bmax(1,n.y),s.set_bmax(2,n.z),s.width=r.width(),s.height=r.height(),s.minx=r.minx(),s.maxx=r.maxx(),s.miny=r.miny(),s.maxy=r.maxy(),s.hmin=r.hmin(),s.hmax=r.hmax();const d=G(r),h=N(r),c=W(r),m=B(he,s,d,h,c,a);if(C.Detour.statusFailed(m))return{n:0};F.push(a)}return y||(O(H),i.heightfieldLayerSet=void 0),x.tileIntermediates.push(i),{n:F.length,tiles:F}};for(let e=0;e<oe;++e)for(let t=0;t<se;++t){const{n:i,tiles:a}=we(t,e);if(i>0&&a)for(let l=0;l<i;l++){const i=a[l],r=p.addTile(i);C.Detour.statusFailed(r.status)&&R.log(C.Module.RC_LOG_WARNING,`Failed to add tile to tile cache - tx: ${t}, ty: ${e}`)}}for(let e=0;e<oe;e++)for(let t=0;t<se;t++){const i=p.buildNavMeshTilesAt(t,e,A);if(C.Detour.statusFailed(i))return z(`Failed to build nav mesh tiles at ${t}, ${e}`)}return k(),{success:!0,tileCache:p,navMesh:A,intermediates:x}},Q={...t},ee=(t,E,H={},F=!1)=>{const O=new i,I={type:\"tiled\",buildContext:O,chunkyTriMesh:void 0,tileIntermediates:[]},$=new a,G=()=>{if(!F){for(let e=0;e<I.tileIntermediates.length;e++){const t=I.tileIntermediates[e];t.compactHeightfield&&_(t.compactHeightfield),t.heightfield&&f(t.heightfield),t.contourSet&&z(t.contourSet)}I.chunkyTriMesh&&(I.chunkyTriMesh=void 0)}},N=e=>(G(),$.destroy(),{success:!1,navMesh:void 0,intermediates:I,error:e}),W=r({...Q,...H}),{bbMin:B,bbMax:U}=K(t,E),Z=s(B,U,W.cs);W.width=Z.width,W.height=Z.height,W.minRegionArea=W.minRegionArea*W.minRegionArea,W.mergeRegionArea=W.mergeRegionArea*W.mergeRegionArea,W.tileSize=Math.floor(W.tileSize),W.borderSize=W.walkableRadius+3,W.width=W.tileSize+2*W.borderSize,W.height=W.tileSize+2*W.borderSize,W.detailSampleDist=W.detailSampleDist<.9?0:W.cs*W.detailSampleDist,W.detailSampleMaxError=W.ch*W.detailSampleMaxError;const j=Math.floor(W.tileSize),q=Math.floor((Z.width+j-1)/j),J=Math.floor((Z.height+j-1)/j),ee=W.tileSize*W.cs,te=t,ie=E.length,ae=new l.VertsArray;ae.copy(te,te.length);const le=E,re=E.length/3,se=new l.TrisArray;se.copy(le,le.length);const oe=e.fromArray(B);let ne=Math.min(Math.floor(X(Y(q*J))),14);ne>14&&(ne=14);const de=1<<ne,he=1<<22-ne,ce=L.create({orig:oe,tileWidth:W.tileSize*W.cs,tileHeight:W.tileSize*W.cs,maxTiles:de,maxPolys:he});if(!$.initTiled(ce))return N(\"Could not init nav mesh for tiled use\");const me=new D;if(I.chunkyTriMesh=me,!me.init(ae,se,re,256))return N(\"Failed to build chunky triangle mesh\");const ge=(e,t,i,a)=>{const r=e=>(O.log(C.Module.RC_LOG_ERROR,e),{success:!1,error:e}),s={tileX:e,tileY:t};I.tileIntermediates.push(s);const E=P(W),L=[...i],D=[...a];L[0]-=E.borderSize*E.cs,L[2]-=E.borderSize*E.cs,D[0]+=E.borderSize*E.cs,D[2]+=E.borderSize*E.cs,E.set_bmin(0,L[0]),E.set_bmin(1,L[1]),E.set_bmin(2,L[2]),E.set_bmax(0,D[0]),E.set_bmax(1,D[1]),E.set_bmax(2,D[2]),O.resetTimers(),O.startTimer(C.Module.RC_TIMER_TOTAL),O.log(C.Module.RC_LOG_PROGRESS,`Building tile ${I.tileIntermediates.length} at x: ${e}, y: ${t}`),O.log(C.Module.RC_LOG_PROGRESS,` - ${W.width} x ${W.height} cells`),O.log(C.Module.RC_LOG_PROGRESS,` - ${ie/1e3}fK verts, ${re/1e3}K tris`);const $=o();if(s.heightfield=$,!n(O,$,E.width,E.height,L,D,E.cs,E.ch))return r(\"Could not create heightfield\");(new l.TriAreasArray).resize(me.maxTrisPerChunk());const G=[L[0],L[2]],N=[D[0],D[2]],B=new l.ChunkIdsArray;B.resize(512);const V=me.getChunksOverlappingRect(G,N,B,512);if(0===V)return{success:!0};for(let e=0;e<V;++e){const t=B.get_data(e),i=me.nodes(t).n,a=me.getNodeTris(t),s=new l.TriAreasArray;s.resize(i),d(O,E.walkableSlopeAngle,ae,ie,a,i,s);const o=h(O,ae,ie,a,s,i,$,E.walkableClimb);if(s.free(),!o)return r(\"Could not rasterize triangles\")}c(O,E.walkableClimb,$),m(O,E.walkableHeight,E.walkableClimb,$),g(O,E.walkableHeight,$);const K=u();if(s.compactHeightfield=K,!b(O,E.walkableHeight,E.walkableClimb,$,K))return r(\"Could not build compact heightfield\");if(F||(f(s.heightfield),s.heightfield=void 0),!S(O,E.walkableRadius,K))return r(\"Could not erode walkable area\");if(!w(O,K))return r(\"Failed to build distance field\");if(!M(O,K,E.borderSize,E.minRegionArea,E.mergeRegionArea))return r(\"Failed to build regions\");const X=y();if(s.contourSet=X,!R(O,K,E.maxSimplificationError,E.maxEdgeLen,X,C.Module.RC_CONTOUR_TESS_WALL_EDGES))return r(\"Failed to create contours\");const Y=x();if(!p(O,X,E.maxVertsPerPoly,Y))return r(\"Failed to triangulate contours\");const U=A();if(!k(O,Y,K,E.detailSampleDist,E.detailSampleMaxError,U))return r(\"Failed to build detail mesh\");F||(_(K),s.compactHeightfield=void 0,z(X),s.contourSet=void 0);for(let e=0;e<Y.npolys();e++)Y.areas(e)==C.Recast.WALKABLE_AREA&&Y.setAreas(e,0),0==Y.areas(e)&&Y.setFlags(e,1);const Z=new T;Z.setPolyMeshCreateParams(Y),Z.setPolyMeshDetailCreateParams(U),Z.setWalkableHeight(E.walkableHeight),Z.setWalkableRadius(E.walkableRadius),Z.setWalkableClimb(E.walkableClimb),Z.setCellSize(E.cs),Z.setCellHeight(E.ch),Z.setBuildBvTree(!0),H.offMeshConnections&&Z.setOffMeshConnections(H.offMeshConnections),Z.setTileX(e),Z.setTileY(t);const j=v(Z);return j.success?(O.log(C.Module.RC_LOG_PROGRESS,`>> Polymesh: ${Y.nverts()} vertices ${Y.npolys()} polygons`),{success:!0,data:j.navMeshData}):r(\"Failed to create Detour navmesh data\")};O.startTimer(C.Module.RC_TIMER_TEMP);const ue=[0,0,0],be=[0,0,0];for(let e=0;e<J;e++)for(let t=0;t<q;t++){ue[0]=B[0]+t*ee,ue[1]=B[1],ue[2]=B[2]+e*ee,be[0]=B[0]+(t+1)*ee,be[1]=U[1],be[2]=B[2]+(e+1)*ee;const i=ge(t,e,ue,be);if(i.success&&i.data){$.removeTile($.getTileRefAt(t,e,0));const a=$.addTile(i.data,C.Module.DT_TILE_FREE_DATA,0);C.Detour.statusFailed(a.status)&&(O.log(C.Module.RC_LOG_WARNING,`Failed to add tile to nav mesh\\n\\ttx: ${t}, ty: ${e},status: ${V(a.status)} (${a.status})`),i.data.free())}}return O.stopTimer(C.Module.RC_TIMER_TEMP),F||G(),{success:!0,navMesh:$,intermediates:I}};export{q as createDefaultTileCacheMeshProcess,X as dtIlog2,Y as dtNextPow2,Z as generateSoloNavMesh,J as generateTileCache,ee as generateTiledNavMesh,K as getBoundingBox,U as soloNavMeshGeneratorConfigDefaults,j as tileCacheGeneratorConfigDefaults,Q as tiledNavMeshGeneratorConfigDefaults};\n//# sourceMappingURL=index.mjs.map\n","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (index === undefined) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","constructor","crowd","super","this","MeshBasicMaterial","color","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","position","velocity","agentMesh","get","undefined","createAgentMesh","add","set","updateAgentGeometry","x","y","height","z","lookAt","Vector3","copy","agentId","remove","mesh","Mesh","material","userData","radius","agentParams","geometry","CylinderGeometry","dispose","tmpMatrix4","Matrix4","HeightfieldHelper","heightfields","highlightWalkable","defaultColor","walkableColor","Color","clear","hf","orig","bmin","cs","ch","width","boxes","fx","fz","span","spans","minX","minY","smin","minZ","maxX","maxY","smax","maxZ","push","walkable","area","next","BoxGeometry","instancedMesh","InstancedMesh","length","instanceMatrix","setUsage","DynamicDrawUsage","i","setMatrixAt","setPosition","setColorAt","needsUpdate","instanceColor","NavMeshHelper","navMesh","navMeshMaterial","BufferGeometry","transparent","opacity","depthWrite","positions","indices","getDebugNavMesh","setAttribute","BufferAttribute","Float32Array","from","setIndex","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","lineMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","Math","PI","endMesh","bidirectional","endPosition","start","end","middle","addVectors","multiplyScalar","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","type","extent","angle","Error","K","t","a","l","e","r","s","o","n","min","max","bbMin","toArray","bbMax","X","Number","Y","U","j","tileSize","expectedLayersPerTile","maxObstacles","J","w","M","R","buildContext","chunkyTriMesh","tileIntermediates","p","H","A","k","heightfield","f","compactHeightfield","_","heightfieldLayerSet","O","destroy","success","intermediates","error","T","v","E","VertsArray","V","Z","TrisArray","Q","ee","te","ie","ae","le","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","re","floor","se","oe","borderSize","walkableRadius","ne","F","create","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","de","C","RecastLinearAllocator","he","RecastFastLZCompressor","ce","tileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","L","tileWidth","tileHeight","maxPolys","initTiled","Se","D","we","tileX","tileY","P","set_bmin","set_bmax","ChunkIdsArray","resize","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","d","walkableSlopeAngle","h","free","c","m","g","u","b","S","I","$","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmax","minx","maxx","miny","maxy","hmin","hmax","G","N","W","B","statusFailed","tiles","addTile","status","log","Module","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","attributes","itemSize","meshToMerge","index","getIndex","array","clone","ascendingIndex","count","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","idx","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/three-stdlib/lines/LineSegmentsGeometry.js","../../../node_modules/three-stdlib/lines/LineMaterial.js","../../../node_modules/three-stdlib/lines/LineSegments2.js","../src/debug/debug-drawer.ts","../src/helpers/crowd-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 { Box3, Vector3, InstancedBufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, WireframeGeometry, Sphere } from \"three\";\nconst _box = new Box3();\nconst _vector = new Vector3();\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n this.isLineSegmentsGeometry = true;\n this.type = \"LineSegmentsGeometry\";\n const positions = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0];\n const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2];\n const index = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];\n this.setIndex(index);\n this.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n }\n applyMatrix4(matrix) {\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0) {\n start.applyMatrix4(matrix);\n end.applyMatrix4(matrix);\n start.needsUpdate = true;\n }\n if (this.boundingBox !== null) {\n this.computeBoundingBox();\n }\n if (this.boundingSphere !== null) {\n this.computeBoundingSphere();\n }\n return this;\n }\n setPositions(array) {\n let lineSegments;\n if (array instanceof Float32Array) {\n lineSegments = array;\n } else if (Array.isArray(array)) {\n lineSegments = new Float32Array(array);\n }\n const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\n this.setAttribute(\"instanceStart\", new InterleavedBufferAttribute(instanceBuffer, 3, 0));\n this.setAttribute(\"instanceEnd\", new InterleavedBufferAttribute(instanceBuffer, 3, 3));\n this.computeBoundingBox();\n this.computeBoundingSphere();\n return this;\n }\n setColors(array, itemSize = 3) {\n let colors;\n if (array instanceof Float32Array) {\n colors = array;\n } else if (Array.isArray(array)) {\n colors = new Float32Array(array);\n }\n const instanceColorBuffer = new InstancedInterleavedBuffer(colors, itemSize * 2, 1);\n this.setAttribute(\"instanceColorStart\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, 0));\n this.setAttribute(\"instanceColorEnd\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, itemSize));\n return this;\n }\n fromWireframeGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromEdgesGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromMesh(mesh) {\n this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry));\n return this;\n }\n fromLineSegments(lineSegments) {\n const geometry = lineSegments.geometry;\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n computeBoundingBox() {\n if (this.boundingBox === null) {\n this.boundingBox = new Box3();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n this.boundingBox.setFromBufferAttribute(start);\n _box.setFromBufferAttribute(end);\n this.boundingBox.union(_box);\n }\n }\n computeBoundingSphere() {\n if (this.boundingSphere === null) {\n this.boundingSphere = new Sphere();\n }\n if (this.boundingBox === null) {\n this.computeBoundingBox();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n const center = this.boundingSphere.center;\n this.boundingBox.getCenter(center);\n let maxRadiusSq = 0;\n for (let i = 0, il = start.count; i < il; i++) {\n _vector.fromBufferAttribute(start, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n _vector.fromBufferAttribute(end, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n }\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq);\n if (isNaN(this.boundingSphere.radius)) {\n console.error(\n \"THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.\",\n this\n );\n }\n }\n }\n toJSON() {\n }\n applyMatrix(matrix) {\n console.warn(\"THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().\");\n return this.applyMatrix4(matrix);\n }\n}\nexport {\n LineSegmentsGeometry\n};\n//# sourceMappingURL=LineSegmentsGeometry.js.map\n","import { ShaderMaterial, UniformsUtils, UniformsLib, Vector2, REVISION } from \"three\";\nclass LineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n type: \"LineMaterial\",\n uniforms: UniformsUtils.clone(\n UniformsUtils.merge([\n UniformsLib.common,\n UniformsLib.fog,\n {\n worldUnits: { value: 1 },\n linewidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n dashOffset: { value: 0 },\n dashScale: { value: 1 },\n dashSize: { value: 1 },\n gapSize: { value: 1 }\n // todo FIX - maybe change to totalSize\n }\n ])\n ),\n vertexShader: (\n /* glsl */\n `\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\tuniform float linewidth;\n\t\t\t\tuniform vec2 resolution;\n\n\t\t\t\tattribute vec3 instanceStart;\n\t\t\t\tattribute vec3 instanceEnd;\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t\tattribute vec4 instanceColorStart;\n\t\t\t\t\t\tattribute vec4 instanceColorEnd;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t\tattribute vec3 instanceColorStart;\n\t\t\t\t\t\tattribute vec3 instanceColorEnd;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashScale;\n\t\t\t\t\tattribute float instanceDistanceStart;\n\t\t\t\t\tattribute float instanceDistanceEnd;\n\t\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#endif\n\n\t\t\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t\t\t// conservative estimate of the near plane\n\t\t\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#ifdef USE_COLOR\n\n\t\t\t\t\t\tvLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t\t\t// camera space\n\t\t\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\tworldStart = start.xyz;\n\t\t\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\t\t\tif ( perspective ) {\n\n\t\t\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// clip space\n\t\t\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t\t\t// ndc space\n\t\t\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t\t\t// direction\n\t\t\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t\t\t// account for clip-space aspect ratio\n\t\t\t\t\tdir.x *= aspect;\n\t\t\t\t\tdir = normalize( dir );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// get the offset direction as perpendicular to the view vector\n\t\t\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\t\t\tvec3 offset;\n\t\t\t\t\t\tif ( position.y < 0.5 ) {\n\n\t\t\t\t\t\t\toffset = normalize( cross( start.xyz, worldDir ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toffset = normalize( cross( end.xyz, worldDir ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\tfloat forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );\n\n\t\t\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t// extend the line bounds to encompass endcaps\n\t\t\t\t\t\t\tstart.xyz += - worldDir * linewidth * 0.5;\n\t\t\t\t\t\t\tend.xyz += worldDir * linewidth * 0.5;\n\n\t\t\t\t\t\t\t// shift the position of the quad so it hugs the forward edge of the line\n\t\t\t\t\t\t\toffset.xy -= dir * forwardOffset;\n\t\t\t\t\t\t\toffset.z += 0.5;\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset.xy += dir * 2.0 * forwardOffset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth * 0.5;\n\n\t\t\t\t\t\t// set the world position\n\t\t\t\t\t\tworldPos = ( position.y < 0.5 ) ? start : end;\n\t\t\t\t\t\tworldPos.xyz += offset;\n\n\t\t\t\t\t\t// project the worldpos\n\t\t\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t\t\t// segments overlap neatly\n\t\t\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\t\t\tdir.x /= aspect;\n\t\t\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset += - dir;\n\n\t\t\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\t\t\toffset += dir;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth;\n\n\t\t\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t\t\t// select end\n\t\t\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t\t\t// back to clip space\n\t\t\t\t\t\toffset *= clip.w;\n\n\t\t\t\t\t\tclip.xy += offset;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_Position = clip;\n\n\t\t\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t#include <clipping_planes_vertex>\n\t\t\t\t\t#include <fog_vertex>\n\n\t\t\t\t}\n\t\t\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t\t\tuniform vec3 diffuse;\n\t\t\t\tuniform float opacity;\n\t\t\t\tuniform float linewidth;\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashOffset;\n\t\t\t\t\tuniform float dashSize;\n\t\t\t\t\tuniform float gapSize;\n\n\t\t\t\t#endif\n\n\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <clipping_planes_pars_fragment>\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\t\t\tfloat mua;\n\t\t\t\t\tfloat mub;\n\n\t\t\t\t\tvec3 p13 = p1 - p3;\n\t\t\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\t\t\tmua = numer / denom;\n\t\t\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\t\t\treturn vec2( mua, mub );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat alpha = opacity;\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\t\t\tfloat len = length( delta );\n\t\t\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\t\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\t\tdiffuseColor *= vLineColor;\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tdiffuseColor.rgb *= vLineColor;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\t\t\tgl_FragColor = diffuseColor;\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${parseInt(REVISION.replace(/\\D+/g, \"\")) >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\t\t\t\t\t#include <fog_fragment>\n\t\t\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t\t\t}\n\t\t\t`\n ),\n clipping: true\n // required for clipping support\n });\n this.isLineMaterial = true;\n this.onBeforeCompile = function() {\n if (this.transparent) {\n this.defines.USE_LINE_COLOR_ALPHA = \"1\";\n } else {\n delete this.defines.USE_LINE_COLOR_ALPHA;\n }\n };\n Object.defineProperties(this, {\n color: {\n enumerable: true,\n get: function() {\n return this.uniforms.diffuse.value;\n },\n set: function(value) {\n this.uniforms.diffuse.value = value;\n }\n },\n worldUnits: {\n enumerable: true,\n get: function() {\n return \"WORLD_UNITS\" in this.defines;\n },\n set: function(value) {\n if (value === true) {\n this.defines.WORLD_UNITS = \"\";\n } else {\n delete this.defines.WORLD_UNITS;\n }\n }\n },\n linewidth: {\n enumerable: true,\n get: function() {\n return this.uniforms.linewidth.value;\n },\n set: function(value) {\n this.uniforms.linewidth.value = value;\n }\n },\n dashed: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_DASH\" in this.defines);\n },\n set(value) {\n if (Boolean(value) !== Boolean(\"USE_DASH\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_DASH = \"\";\n } else {\n delete this.defines.USE_DASH;\n }\n }\n },\n dashScale: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashScale.value;\n },\n set: function(value) {\n this.uniforms.dashScale.value = value;\n }\n },\n dashSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashSize.value;\n },\n set: function(value) {\n this.uniforms.dashSize.value = value;\n }\n },\n dashOffset: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashOffset.value;\n },\n set: function(value) {\n this.uniforms.dashOffset.value = value;\n }\n },\n gapSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.gapSize.value;\n },\n set: function(value) {\n this.uniforms.gapSize.value = value;\n }\n },\n opacity: {\n enumerable: true,\n get: function() {\n return this.uniforms.opacity.value;\n },\n set: function(value) {\n this.uniforms.opacity.value = value;\n }\n },\n resolution: {\n enumerable: true,\n get: function() {\n return this.uniforms.resolution.value;\n },\n set: function(value) {\n this.uniforms.resolution.value.copy(value);\n }\n },\n alphaToCoverage: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines);\n },\n set: function(value) {\n if (Boolean(value) !== Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_ALPHA_TO_COVERAGE = \"\";\n this.extensions.derivatives = true;\n } else {\n delete this.defines.USE_ALPHA_TO_COVERAGE;\n this.extensions.derivatives = false;\n }\n }\n }\n });\n this.setValues(parameters);\n }\n}\nexport {\n LineMaterial\n};\n//# sourceMappingURL=LineMaterial.js.map\n","import { Vector3, Vector4, Matrix4, Line3, Box3, Sphere, Mesh, InstancedInterleavedBuffer, InterleavedBufferAttribute, MathUtils } from \"three\";\nimport { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\nlet _ray, _instanceStart, _instanceEnd, _lineWidth;\nfunction getWorldSpaceHalfWidth(camera, distance, resolution) {\n _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n _clipToWorldVector.x = _lineWidth / resolution.width;\n _clipToWorldVector.y = _lineWidth / resolution.height;\n _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y));\n}\nfunction raycastWorldUnits(lineSegments, intersects) {\n for (let i = 0, l = _instanceStart.count; i < l; i++) {\n _line.start.fromBufferAttribute(_instanceStart, i);\n _line.end.fromBufferAttribute(_instanceEnd, i);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5;\n if (isInside) {\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n uv2: null\n });\n }\n }\n}\nfunction raycastScreenSpace(lineSegments, camera, intersects) {\n const projectionMatrix = camera.projectionMatrix;\n const material = lineSegments.material;\n const resolution = material.resolution;\n const matrixWorld = lineSegments.matrixWorld;\n const geometry = lineSegments.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const near = -camera.near;\n _ray.at(1, _ssOrigin);\n _ssOrigin.w = 1;\n _ssOrigin.applyMatrix4(camera.matrixWorldInverse);\n _ssOrigin.applyMatrix4(projectionMatrix);\n _ssOrigin.multiplyScalar(1 / _ssOrigin.w);\n _ssOrigin.x *= resolution.x / 2;\n _ssOrigin.y *= resolution.y / 2;\n _ssOrigin.z = 0;\n _ssOrigin3.copy(_ssOrigin);\n _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld);\n for (let i = 0, l = instanceStart.count; i < l; i++) {\n _start4.fromBufferAttribute(instanceStart, i);\n _end4.fromBufferAttribute(instanceEnd, i);\n _start4.w = 1;\n _end4.w = 1;\n _start4.applyMatrix4(_mvMatrix);\n _end4.applyMatrix4(_mvMatrix);\n const isBehindCameraNear = _start4.z > near && _end4.z > near;\n if (isBehindCameraNear) {\n continue;\n }\n if (_start4.z > near) {\n const deltaDist = _start4.z - _end4.z;\n const t = (_start4.z - near) / deltaDist;\n _start4.lerp(_end4, t);\n } else if (_end4.z > near) {\n const deltaDist = _end4.z - _start4.z;\n const t = (_end4.z - near) / deltaDist;\n _end4.lerp(_start4, t);\n }\n _start4.applyMatrix4(projectionMatrix);\n _end4.applyMatrix4(projectionMatrix);\n _start4.multiplyScalar(1 / _start4.w);\n _end4.multiplyScalar(1 / _end4.w);\n _start4.x *= resolution.x / 2;\n _start4.y *= resolution.y / 2;\n _end4.x *= resolution.x / 2;\n _end4.y *= resolution.y / 2;\n _line.start.copy(_start4);\n _line.start.z = 0;\n _line.end.copy(_end4);\n _line.end.z = 0;\n const param = _line.closestPointToPointParameter(_ssOrigin3, true);\n _line.at(param, _closestPoint);\n const zPos = MathUtils.lerp(_start4.z, _end4.z, param);\n const isInClipSpace = zPos >= -1 && zPos <= 1;\n const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * 0.5;\n if (isInClipSpace && isInside) {\n _line.start.fromBufferAttribute(instanceStart, i);\n _line.end.fromBufferAttribute(instanceEnd, i);\n _line.start.applyMatrix4(matrixWorld);\n _line.end.applyMatrix4(matrixWorld);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n uv2: null\n });\n }\n }\n}\nclass LineSegments2 extends Mesh {\n constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isLineSegments2 = true;\n this.type = \"LineSegments2\";\n }\n // for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n computeLineDistances() {\n const geometry = this.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const lineDistances = new Float32Array(2 * instanceStart.count);\n for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {\n _start.fromBufferAttribute(instanceStart, i);\n _end.fromBufferAttribute(instanceEnd, i);\n lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];\n lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);\n }\n const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1);\n geometry.setAttribute(\"instanceDistanceStart\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));\n geometry.setAttribute(\"instanceDistanceEnd\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));\n return this;\n }\n raycast(raycaster, intersects) {\n const worldUnits = this.material.worldUnits;\n const camera = raycaster.camera;\n if (camera === null && !worldUnits) {\n console.error(\n 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'\n );\n }\n const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0;\n _ray = raycaster.ray;\n const matrixWorld = this.matrixWorld;\n const geometry = this.geometry;\n const material = this.material;\n _lineWidth = material.linewidth + threshold;\n _instanceStart = geometry.attributes.instanceStart;\n _instanceEnd = geometry.attributes.instanceEnd;\n if (geometry.boundingSphere === null) {\n geometry.computeBoundingSphere();\n }\n _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld);\n let sphereMargin;\n if (worldUnits) {\n sphereMargin = _lineWidth * 0.5;\n } else {\n const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin));\n sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution);\n }\n _sphere.radius += sphereMargin;\n if (_ray.intersectsSphere(_sphere) === false) {\n return;\n }\n if (geometry.boundingBox === null) {\n geometry.computeBoundingBox();\n }\n _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld);\n let boxMargin;\n if (worldUnits) {\n boxMargin = _lineWidth * 0.5;\n } else {\n const distanceToBox = Math.max(camera.near, _box.distanceToPoint(_ray.origin));\n boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution);\n }\n _box.expandByScalar(boxMargin);\n if (_ray.intersectsBox(_box) === false) {\n return;\n }\n if (worldUnits) {\n raycastWorldUnits(this, intersects);\n } else {\n raycastScreenSpace(this, camera, intersects);\n }\n }\n}\nexport {\n LineSegments2\n};\n//# sourceMappingURL=LineSegments2.js.map\n","import {\n NavMesh,\n NavMeshQuery,\n Raw,\n RecastCompactHeightfield,\n RecastContourSet,\n RecastHeightfield,\n RecastHeightfieldLayer,\n RecastHeightfieldLayerSet,\n RecastPolyMesh,\n RecastPolyMeshDetail,\n} from '@recast-navigation/core';\nimport * as THREE from 'three';\nimport {\n LineMaterial,\n LineSegments2,\n LineSegmentsGeometry,\n} from 'three-stdlib';\n\ntype VertexData = {\n x: number;\n y: number;\n z: number;\n r: number;\n g: number;\n b: number;\n a: number;\n};\n\nconst _color = new THREE.Color();\n\nexport type DebugDrawerParams = {\n triMaterial?: THREE.Material;\n pointMaterial?: THREE.Material;\n lineMaterial?: LineMaterial;\n};\n\nexport class DebugDrawer extends THREE.Group {\n triMaterial: THREE.Material;\n\n pointMaterial: THREE.Material;\n pointGeometry = new THREE.SphereGeometry(0.02, 32, 32);\n\n lineMaterial: LineMaterial;\n\n private debugDrawImpl: InstanceType<typeof Raw.Module.DebugDrawImpl>;\n\n private currentVertices: VertexData[] = [];\n private currentPrimitive = 0;\n\n constructor({\n triMaterial,\n pointMaterial,\n lineMaterial,\n }: DebugDrawerParams = {}) {\n super();\n\n this.triMaterial =\n triMaterial ??\n new THREE.MeshBasicMaterial({\n vertexColors: true,\n transparent: true,\n opacity: 0.4,\n depthWrite: false,\n });\n\n this.pointMaterial = pointMaterial ?? new THREE.MeshBasicMaterial();\n\n this.lineMaterial =\n lineMaterial ??\n new LineMaterial({\n color: 0xffffff,\n linewidth: 1,\n vertexColors: true,\n transparent: true,\n opacity: 0.4,\n depthWrite: false,\n });\n\n this.debugDrawImpl = new Raw.Module.DebugDrawImpl();\n\n this.debugDrawImpl.handleBegin = (primitive: number, _size: number) => {\n this.currentPrimitive = primitive;\n this.currentVertices = [];\n };\n\n this.debugDrawImpl.handleDepthMask = (_state: number) => {\n // all methods must be implemented for JSImplentation\n };\n\n this.debugDrawImpl.handleTexture = (_state: number) => {\n // all methods must be implemented for JSImplentation\n };\n\n this.debugDrawImpl.handleVertexWithColor = (\n x: number,\n y: number,\n z: number,\n color: number\n ) => {\n this.vertex(x, y, z, color);\n };\n\n this.debugDrawImpl.handleVertexWithColorAndUV = (\n x: number,\n y: number,\n z: number,\n color: number,\n _u: number,\n _v: number\n ) => {\n this.vertex(x, y, z, color);\n };\n\n this.debugDrawImpl.handleEnd = () => {\n if (this.currentPrimitive === Raw.Module.DU_DRAW_LINES) {\n this.endLines();\n } else if (this.currentPrimitive === Raw.Module.DU_DRAW_TRIS) {\n this.endTris();\n } else if (this.currentPrimitive === Raw.Module.DU_DRAW_QUADS) {\n this.endQuads();\n } else if (this.currentPrimitive === Raw.Module.DU_DRAW_POINTS) {\n this.endPoints();\n }\n };\n }\n\n debugDrawHeightfieldSolid(hf: RecastHeightfield): void {\n Raw.RecastDebugDraw.debugDrawHeightfieldSolid(this.debugDrawImpl, hf.raw);\n }\n\n debugDrawHeightfieldWalkable(hf: RecastHeightfield): void {\n Raw.RecastDebugDraw.debugDrawHeightfieldWalkable(\n this.debugDrawImpl,\n hf.raw\n );\n }\n\n debugDrawCompactHeightfieldSolid(chf: RecastCompactHeightfield): void {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldSolid(\n this.debugDrawImpl,\n chf.raw\n );\n }\n\n debugDrawCompactHeightfieldRegions(chf: RecastCompactHeightfield): void {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldRegions(\n this.debugDrawImpl,\n chf.raw\n );\n }\n\n debugDrawCompactHeightfieldDistance(chf: RecastCompactHeightfield): void {\n Raw.RecastDebugDraw.debugDrawCompactHeightfieldDistance(\n this.debugDrawImpl,\n chf.raw\n );\n }\n\n debugDrawHeightfieldLayer(layer: RecastHeightfieldLayer, idx: number): void {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayer(\n this.debugDrawImpl,\n layer.raw,\n idx\n );\n }\n\n debugDrawHeightfieldLayers(lset: RecastHeightfieldLayerSet): void {\n Raw.RecastDebugDraw.debugDrawHeightfieldLayers(\n this.debugDrawImpl,\n lset.raw\n );\n }\n\n debugDrawRegionConnections(cset: RecastContourSet, alpha: number): void {\n Raw.RecastDebugDraw.debugDrawRegionConnections(\n this.debugDrawImpl,\n cset.raw,\n alpha\n );\n }\n\n debugDrawRawContours(cset: RecastContourSet, alpha: number): void {\n Raw.RecastDebugDraw.debugDrawRawContours(\n this.debugDrawImpl,\n cset.raw,\n alpha\n );\n }\n\n debugDrawContours(cset: RecastContourSet, alpha: number): void {\n Raw.RecastDebugDraw.debugDrawContours(this.debugDrawImpl, cset.raw, alpha);\n }\n\n debugDrawPolyMesh(mesh: RecastPolyMesh): void {\n Raw.RecastDebugDraw.debugDrawPolyMesh(this.debugDrawImpl, mesh.raw);\n }\n\n debugDrawPolyMeshDetail(dmesh: RecastPolyMeshDetail): void {\n Raw.RecastDebugDraw.debugDrawPolyMeshDetail(this.debugDrawImpl, dmesh.raw);\n }\n\n debugDrawNavMesh(mesh: NavMesh, flags: number): void {\n Raw.DetourDebugDraw.debugDrawNavMesh(\n this.debugDrawImpl,\n mesh.raw.getNavMesh(),\n flags\n );\n }\n\n debugDrawNavMeshWithClosedList(\n mesh: NavMesh,\n query: NavMeshQuery,\n flags: number\n ): void {\n Raw.DetourDebugDraw.debugDrawNavMeshWithClosedList(\n this.debugDrawImpl,\n mesh.raw.m_navMesh,\n query.raw.m_navQuery,\n flags\n );\n }\n\n debugDrawNavMeshNodes(query: NavMeshQuery): void {\n Raw.DetourDebugDraw.debugDrawNavMeshNodes(\n this.debugDrawImpl,\n query.raw.m_navQuery\n );\n }\n\n debugDrawNavMeshBVTree(mesh: NavMesh): void {\n Raw.DetourDebugDraw.debugDrawNavMeshBVTree(\n this.debugDrawImpl,\n mesh.raw.m_navMesh\n );\n }\n\n debugDrawNavMeshPortals(mesh: NavMesh): void {\n Raw.DetourDebugDraw.debugDrawNavMeshPortals(\n this.debugDrawImpl,\n mesh.raw.m_navMesh\n );\n }\n\n debugDrawNavMeshPolysWithFlags(\n mesh: NavMesh,\n flags: number,\n col: number\n ): void {\n Raw.DetourDebugDraw.debugDrawNavMeshPolysWithFlags(\n this.debugDrawImpl,\n mesh.raw.m_navMesh,\n flags,\n col\n );\n }\n\n debugDrawNavMeshPoly(mesh: NavMesh, ref: number, col: number): void {\n Raw.DetourDebugDraw.debugDrawNavMeshPoly(\n this.debugDrawImpl,\n mesh.raw.m_navMesh,\n ref,\n col\n );\n }\n\n // todo:\n // - debugDrawTileCacheLayerAreas\n // - debugDrawTileCacheLayerRegions\n // - debugDrawTileCacheContours\n // - debugDrawTileCachePolyMesh\n\n resize(width: number, height: number): void {\n this.lineMaterial.resolution.set(width, height);\n }\n\n reset(): void {\n for (const child of this.children) {\n if (child instanceof THREE.Mesh || child instanceof LineSegments2) {\n child.geometry.dispose();\n }\n }\n\n this.clear();\n }\n\n dispose(): void {\n this.reset();\n\n Raw.Module.destroy(this.debugDrawImpl);\n }\n\n private vertex(x: number, y: number, z: number, color: number) {\n const r = ((color >> 16) & 0xff) / 255;\n const g = ((color >> 8) & 0xff) / 255;\n const b = (color & 0xff) / 255;\n const a = ((color >> 24) & 0xff) / 255;\n\n this.currentVertices.push({ x, y, z, r, g, b, a });\n }\n\n private endPoints(): void {\n const geometry = this.pointGeometry;\n\n const instancedMesh = new THREE.InstancedMesh(\n geometry,\n this.pointMaterial,\n this.currentVertices.length\n );\n\n for (let i = 0; i < this.currentVertices.length; i++) {\n const point = this.currentVertices[i];\n\n instancedMesh.setMatrixAt(\n i,\n new THREE.Matrix4().setPosition(point.x, point.y, point.z)\n );\n\n instancedMesh.setColorAt(i, _color.setRGB(point.r, point.g, point.b));\n }\n\n instancedMesh.instanceMatrix.needsUpdate = true;\n\n this.add(instancedMesh);\n }\n\n private endLines(): void {\n const lineSegmentsGeometry = new LineSegmentsGeometry();\n\n const positions: number[] = [];\n const colors: number[] = [];\n\n for (let i = 0; i < this.currentVertices.length; i += 2) {\n const p1 = this.currentVertices[i];\n const p2 = this.currentVertices[i + 1];\n\n positions.push(p1.x, p1.y, p1.z);\n positions.push(p2.x, p2.y, p2.z);\n\n colors.push(p1.r, p1.g, p1.b);\n colors.push(p2.r, p2.g, p2.b);\n }\n\n lineSegmentsGeometry.setPositions(positions);\n lineSegmentsGeometry.setColors(colors);\n\n const lineSegments = new LineSegments2(\n lineSegmentsGeometry,\n this.lineMaterial\n );\n\n this.add(lineSegments);\n }\n\n private endTris(): void {\n const geometry = new THREE.BufferGeometry();\n const positions = new Float32Array(this.currentVertices.length * 3);\n const colors = new Float32Array(this.currentVertices.length * 3);\n\n for (let i = 0; i < this.currentVertices.length; i++) {\n const point = this.currentVertices[i];\n positions[i * 3 + 0] = point.x;\n positions[i * 3 + 1] = point.y;\n positions[i * 3 + 2] = point.z;\n\n colors[i * 3 + 0] = point.r;\n colors[i * 3 + 1] = point.g;\n colors[i * 3 + 2] = point.b;\n }\n\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n\n const material = this.triMaterial;\n const mesh = new THREE.Mesh(geometry, material);\n\n this.add(mesh);\n }\n\n private endQuads(): void {\n const positions: number[] = [];\n const colors: number[] = [];\n\n for (let i = 0; i < this.currentVertices.length; i += 4) {\n const vertices = [\n this.currentVertices[i],\n this.currentVertices[i + 1],\n this.currentVertices[i + 2],\n\n this.currentVertices[i],\n this.currentVertices[i + 2],\n this.currentVertices[i + 3],\n ];\n\n for (const vertex of vertices) {\n positions.push(vertex.x, vertex.y, vertex.z);\n colors.push(vertex.r, vertex.g, vertex.b);\n }\n }\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\n 'position',\n new THREE.BufferAttribute(new Float32Array(positions), 3)\n );\n geometry.setAttribute(\n 'color',\n new THREE.BufferAttribute(new Float32Array(colors), 3)\n );\n\n const material = this.triMaterial;\n\n const mesh = new THREE.Mesh(geometry, material);\n\n this.add(mesh);\n }\n}\n","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 { NavMesh } from '@recast-navigation/core';\nimport {\n BufferAttribute,\n BufferGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n} from 'three';\n\nexport type NavMeshHelperParams = {\n navMesh: NavMesh;\n navMeshMaterial?: Material;\n};\n\nexport class NavMeshHelper extends Object3D {\n navMesh: NavMesh;\n\n navMeshMaterial: Material;\n\n mesh: Mesh;\n\n geometry: BufferGeometry;\n\n constructor({ navMesh, navMeshMaterial }: NavMeshHelperParams) {\n super();\n\n this.navMesh = navMesh;\n\n this.geometry = new BufferGeometry();\n\n this.navMeshMaterial = navMeshMaterial\n ? navMeshMaterial\n : new MeshBasicMaterial({\n color: 'orange',\n transparent: true,\n opacity: 0.7,\n depthWrite: false,\n });\n\n this.update();\n\n this.mesh = new Mesh(this.geometry, this.navMeshMaterial);\n\n this.add(this.mesh);\n }\n\n /**\n * Update the three debug nav mesh.\n *\n * This should be called after updating the nav mesh.\n */\n update() {\n const [positions, indices] = this.navMesh.getDebugNavMesh();\n\n this.geometry.setAttribute(\n 'position',\n new BufferAttribute(Float32Array.from(positions), 3)\n );\n this.geometry.setIndex(new BufferAttribute(Uint32Array.from(indices), 1));\n this.geometry.computeVertexNormals();\n }\n}\n","import { OffMeshConnectionParams } from '@recast-navigation/core';\nimport {\n BufferGeometry,\n CatmullRomCurve3,\n CircleGeometry,\n Line,\n LineBasicMaterial,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type OffMeshConnectionsHelperParams = {\n offMeshConnections?: OffMeshConnectionParams[];\n entryCircleMaterial?: Material;\n exitCircleMaterial?: Material;\n lineMaterial?: LineBasicMaterial;\n};\n\nexport class OffMeshConnectionsHelper extends Object3D {\n offMeshConnections: OffMeshConnectionParams[];\n\n entryCircleMaterial: Material;\n\n exitCircleMaterial: Material;\n\n lineMaterial: LineBasicMaterial;\n\n constructor({\n offMeshConnections,\n entryCircleMaterial,\n exitCircleMaterial,\n lineMaterial,\n }: OffMeshConnectionsHelperParams) {\n super();\n\n this.offMeshConnections = offMeshConnections ?? [];\n\n this.entryCircleMaterial =\n entryCircleMaterial ?? new MeshBasicMaterial({ color: 'green' });\n\n this.exitCircleMaterial =\n exitCircleMaterial ?? new MeshBasicMaterial({ color: 'blue' });\n\n this.lineMaterial = lineMaterial ?? new LineBasicMaterial({ color: 'red' });\n\n this.update();\n }\n\n /**\n * Update the three debug view of the off mesh connections.\n */\n update() {\n this.clear();\n\n for (const offMeshConnection of this.offMeshConnections) {\n // start and end circles\n const circleGeometry = new CircleGeometry(offMeshConnection.radius, 16);\n\n const startMesh = new Mesh(circleGeometry, this.entryCircleMaterial);\n startMesh.position.copy(offMeshConnection.startPosition as Vector3);\n startMesh.position.y += 0.001;\n startMesh.rotation.x = -Math.PI / 2;\n this.add(startMesh);\n\n const endMesh = new Mesh(\n circleGeometry,\n offMeshConnection.bidirectional\n ? this.entryCircleMaterial\n : this.exitCircleMaterial\n );\n endMesh.position.copy(offMeshConnection.endPosition as Vector3);\n endMesh.position.y += 0.001;\n endMesh.rotation.x = -Math.PI / 2;\n this.add(endMesh);\n\n // line between points\n const start = new Vector3().copy(\n offMeshConnection.startPosition as Vector3\n );\n const end = new Vector3().copy(offMeshConnection.endPosition as Vector3);\n\n const middle = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n middle.y *= 1.2;\n\n const curve = new CatmullRomCurve3([start, middle, end]);\n const curvePoints = curve.getPoints(50);\n\n const lineGeometry = new BufferGeometry().setFromPoints(curvePoints);\n const line = new Line(lineGeometry, this.lineMaterial);\n\n this.add(line);\n }\n }\n}\n","import { Obstacle, TileCache } from '@recast-navigation/core';\nimport {\n BoxGeometry,\n CylinderGeometry,\n Material,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Vector3,\n} from 'three';\n\nexport type TileCacheHelperParams = {\n tileCache: TileCache;\n obstacleMaterial?: Material;\n};\n\nexport class TileCacheHelper extends Object3D {\n tileCache: TileCache;\n\n obstacleMeshes: Map<Obstacle, Mesh> = new Map();\n\n obstacleMaterial: Material;\n\n constructor({ tileCache, obstacleMaterial }: TileCacheHelperParams) {\n super();\n\n this.tileCache = tileCache;\n\n this.obstacleMaterial = obstacleMaterial\n ? obstacleMaterial\n : new MeshBasicMaterial({\n color: 'red',\n wireframe: true,\n wireframeLinewidth: 2,\n });\n\n this.update();\n }\n\n /**\n * Update the obstacle meshes.\n *\n * This should be called after adding or removing obstacles.\n */\n update() {\n const unseen = new Set(this.obstacleMeshes.keys());\n\n for (const [, obstacle] of this.tileCache.obstacles) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n unseen.delete(obstacle);\n\n if (!obstacleMesh) {\n const { position } = obstacle;\n\n const mesh = new Mesh(undefined, this.obstacleMaterial);\n\n mesh.position.copy(position as Vector3);\n\n if (obstacle.type === 'box') {\n const { extent, angle } = obstacle;\n\n mesh.geometry = new BoxGeometry(\n extent.x * 2,\n extent.y * 2,\n extent.z * 2\n );\n\n mesh.rotation.y = angle;\n } else if (obstacle.type === 'cylinder') {\n const { radius, height } = obstacle;\n\n mesh.geometry = new CylinderGeometry(radius, radius, height, 16);\n\n mesh.position.y += height / 2;\n } else {\n throw new Error(`Unknown obstacle type: ${obstacle}`);\n }\n\n this.add(mesh);\n this.obstacleMeshes.set(obstacle, mesh);\n }\n }\n\n for (const obstacle of unseen) {\n const obstacleMesh = this.obstacleMeshes.get(obstacle);\n\n if (obstacleMesh) {\n this.remove(obstacleMesh);\n this.obstacleMeshes.delete(obstacle);\n }\n }\n }\n}\n","import{vec3 as e,recastConfigDefaults as t,RecastBuildContext as i,NavMesh as a,Arrays as l,createRcConfig as r,calcGridSize as s,allocHeightfield as o,createHeightfield as n,markWalkableTriangles as 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","import { BufferAttribute, Mesh, Vector3 } from 'three';\n\nconst tmpVec3 = new Vector3();\n\nexport const getPositionsAndIndices = (\n meshes: Mesh[]\n): [positions: Float32Array, indices: Uint32Array] => {\n const meshesToMerge: Mesh[] = [];\n\n for (const mesh of meshes) {\n const positionAttribute = mesh.geometry.attributes\n .position as BufferAttribute;\n\n if (!positionAttribute || positionAttribute.itemSize !== 3) {\n continue;\n }\n\n let meshToMerge = mesh;\n const index: ArrayLike<number> | undefined = mesh.geometry.getIndex()?.array;\n\n if (index === undefined) {\n meshToMerge = meshToMerge.clone();\n meshToMerge.geometry = mesh.geometry.clone();\n\n // this will become indexed when merging with other meshes\n const ascendingIndex: number[] = [];\n for (let i = 0; i < positionAttribute.count; i++) {\n ascendingIndex.push(i);\n }\n\n meshToMerge.geometry.setIndex(ascendingIndex);\n }\n\n meshesToMerge.push(meshToMerge);\n }\n\n const mergedPositions: number[] = [];\n const mergedIndices: number[] = [];\n\n const positionToIndex: { [hash: string]: number } = {};\n let indexCounter = 0;\n\n for (const mesh of meshesToMerge) {\n mesh.updateMatrixWorld();\n\n const positions = mesh.geometry.attributes.position.array;\n const index = mesh.geometry.getIndex()!.array;\n\n for (let i = 0; i < index.length; i++) {\n const pt = index[i] * 3;\n\n const pos = tmpVec3.set(\n positions[pt],\n positions[pt + 1],\n positions[pt + 2]\n );\n mesh.localToWorld(pos);\n\n const key = `${pos.x}_${pos.y}_${pos.z}`;\n let idx = positionToIndex[key];\n\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(pos.x, pos.y, pos.z);\n indexCounter++;\n }\n\n mergedIndices.push(idx);\n }\n }\n\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n","import {\n SoloNavMeshGeneratorConfig,\n TileCacheGeneratorConfig,\n TiledNavMeshGeneratorConfig,\n generateSoloNavMesh,\n generateTileCache,\n generateTiledNavMesh\n} from '@recast-navigation/generators';\nimport { Mesh } from 'three';\nimport { getPositionsAndIndices } from './get-positions-and-indices';\n\nexport const threeToSoloNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<SoloNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateSoloNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTiledNavMesh = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TiledNavMeshGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTiledNavMesh(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n\nexport const threeToTileCache = (\n meshes: Mesh[],\n navMeshGeneratorConfig: Partial<TileCacheGeneratorConfig> = {},\n keepIntermediates = false\n) => {\n const [positions, indices] = getPositionsAndIndices(meshes);\n\n return generateTileCache(\n positions,\n indices,\n navMeshGeneratorConfig,\n keepIntermediates\n );\n};\n"],"names":["_box","Box3","_vector","Vector3","LineSegmentsGeometry","InstancedBufferGeometry","constructor","super","this","isLineSegmentsGeometry","type","setIndex","setAttribute","Float32BufferAttribute","applyMatrix4","matrix","start","attributes","instanceStart","end","instanceEnd","needsUpdate","boundingBox","computeBoundingBox","boundingSphere","computeBoundingSphere","setPositions","array","lineSegments","Float32Array","Array","isArray","instanceBuffer","InstancedInterleavedBuffer","InterleavedBufferAttribute","setColors","itemSize","colors","instanceColorBuffer","fromWireframeGeometry","geometry","position","fromEdgesGeometry","fromMesh","mesh","WireframeGeometry","fromLineSegments","setFromBufferAttribute","union","Sphere","center","getCenter","maxRadiusSq","i","il","count","fromBufferAttribute","Math","max","distanceToSquared","radius","sqrt","isNaN","console","error","toJSON","applyMatrix","warn","LineMaterial","ShaderMaterial","parameters","uniforms","UniformsUtils","clone","merge","UniformsLib","common","fog","worldUnits","value","linewidth","resolution","Vector2","dashOffset","dashScale","dashSize","gapSize","vertexShader","fragmentShader","parseInt","REVISION","replace","clipping","isLineMaterial","onBeforeCompile","transparent","defines","USE_LINE_COLOR_ALPHA","Object","defineProperties","color","enumerable","get","diffuse","set","WORLD_UNITS","dashed","Boolean","USE_DASH","opacity","copy","alphaToCoverage","USE_ALPHA_TO_COVERAGE","extensions","derivatives","setValues","_start","_end","_start4","Vector4","_end4","_ssOrigin","_ssOrigin3","_mvMatrix","Matrix4","_line","Line3","_closestPoint","_sphere","_clipToWorldVector","_ray","_instanceStart","_instanceEnd","_lineWidth","getWorldSpaceHalfWidth","camera","distance","projectionMatrix","multiplyScalar","w","x","width","y","height","projectionMatrixInverse","abs","LineSegments2","Mesh","material","random","isLineSegments2","computeLineDistances","lineDistances","j","l","distanceTo","instanceDistanceBuffer","raycast","raycaster","intersects","threshold","params","Line2","ray","matrixWorld","sphereMargin","boxMargin","near","distanceToPoint","origin","intersectsSphere","expandByScalar","intersectsBox","pointOnLine","point","distanceSqToSegment","push","object","face","faceIndex","uv","uv2","raycastWorldUnits","at","matrixWorldInverse","z","multiplyMatrices","deltaDist","t","lerp","param","closestPointToPointParameter","zPos","MathUtils","isInClipSpace","isInside","raycastScreenSpace","_color","THREE","Color","DebugDrawer","Group","triMaterial","pointMaterial","pointGeometry","SphereGeometry","lineMaterial","debugDrawImpl","currentVertices","currentPrimitive","MeshBasicMaterial","vertexColors","depthWrite","Raw","Module","DebugDrawImpl","handleBegin","primitive","_size","handleDepthMask","_state","handleTexture","handleVertexWithColor","vertex","handleVertexWithColorAndUV","_u","_v","handleEnd","DU_DRAW_LINES","endLines","DU_DRAW_TRIS","endTris","DU_DRAW_QUADS","endQuads","DU_DRAW_POINTS","endPoints","debugDrawHeightfieldSolid","hf","RecastDebugDraw","raw","debugDrawHeightfieldWalkable","debugDrawCompactHeightfieldSolid","chf","debugDrawCompactHeightfieldRegions","debugDrawCompactHeightfieldDistance","debugDrawHeightfieldLayer","layer","idx","debugDrawHeightfieldLayers","lset","debugDrawRegionConnections","cset","alpha","debugDrawRawContours","debugDrawContours","debugDrawPolyMesh","debugDrawPolyMeshDetail","dmesh","debugDrawNavMesh","flags","DetourDebugDraw","getNavMesh","debugDrawNavMeshWithClosedList","query","m_navMesh","m_navQuery","debugDrawNavMeshNodes","debugDrawNavMeshBVTree","debugDrawNavMeshPortals","debugDrawNavMeshPolysWithFlags","col","debugDrawNavMeshPoly","ref","resize","reset","child","children","dispose","clear","destroy","r","g","b","a","instancedMesh","InstancedMesh","length","setMatrixAt","setPosition","setColorAt","setRGB","instanceMatrix","add","lineSegmentsGeometry","positions","p1","p2","BufferGeometry","BufferAttribute","vertices","CrowdHelper","Object3D","agentMeshes","Map","recastCrowd","agentMaterial","crowd","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","velocity","agentMesh","undefined","createAgentMesh","updateAgentGeometry","lookAt","agentId","remove","userData","agentParams","CylinderGeometry","NavMeshHelper","navMesh","navMeshMaterial","indices","getDebugNavMesh","from","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","PI","endMesh","bidirectional","endPosition","middle","addVectors","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","line","Line","TileCacheHelper","tileCache","obstacleMeshes","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","extent","angle","BoxGeometry","Error","Y","e","s","o","n","min","bbMin","toArray","bbMax","U","Number","Z","J","tileSize","expectedLayersPerTile","maxObstacles","ee","S","p","C","buildContext","chunkyTriMesh","tileIntermediates","F","A","k","heightfield","f","compactHeightfield","_","heightfieldLayerSet","I","success","intermediates","T","v","E","VertsArray","D","H","X","TrisArray","q","te","ie","ae","le","cs","minRegionArea","mergeRegionArea","detailSampleDist","detailSampleMaxError","ch","re","floor","se","oe","borderSize","walkableRadius","ne","L","create","orig","walkableHeight","walkableClimb","maxSimplificationError","maxTiles","he","R","RecastLinearAllocator","de","RecastFastLZCompressor","ce","tileCacheMeshProcess","polyCount","init","me","fromArray","ge","ue","be","fe","O","tileWidth","tileHeight","maxPolys","initTiled","Me","P","ye","tileX","tileY","$","set_bmin","set_bmax","ChunkIdsArray","getChunksOverlappingRect","get_data","nodes","getNodeTris","TriAreasArray","h","walkableSlopeAngle","d","free","c","m","u","M","G","N","nlayers","TileCacheData","layers","dtTileCacheLayerHeader","magic","Detour","TILECACHE_MAGIC","version","TILECACHE_VERSION","tx","ty","tlayer","bmin","bmax","minx","maxx","miny","maxy","hmin","hmax","W","B","V","K","statusFailed","tiles","addTile","status","log","RC_LOG_WARNING","buildNavMeshTilesAt","tmpVec3","getPositionsAndIndices","meshes","meshesToMerge","positionAttribute","meshToMerge","index","getIndex","ascendingIndex","mergedPositions","mergedIndices","positionToIndex","indexCounter","updateMatrixWorld","pt","pos","localToWorld","key","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","contourSet","polyMesh","polyMeshDetail","Q","maxEdgeLen","RC_CONTOUR_TESS_WALL_EDGES","maxVertsPerPoly","npolys","areas","Recast","WALKABLE_AREA","setAreas","setFlags","setPolyMeshCreateParams","setPolyMeshDetailCreateParams","setWalkableHeight","setWalkableRadius","setWalkableClimb","setCellSize","setCellHeight","setBuildBvTree","setOffMeshConnections","navMeshData","initSolo","generateSoloNavMesh","threeToTiledNavMesh","RC_LOG_ERROR","resetTimers","startTimer","RC_TIMER_TOTAL","RC_LOG_PROGRESS","maxTrisPerChunk","setTileX","setTileY","nverts","data","RC_TIMER_TEMP","removeTile","getTileRefAt","DT_TILE_FREE_DATA","stopTimer","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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","x_google_ignoreList":[0,1,2]}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "email": "isaac@isaacmason.com",
7
7
  "url": "https://isaacmason.com/"
8
8
  },
9
- "version": "0.24.1",
9
+ "version": "0.25.0",
10
10
  "license": "MIT",
11
11
  "homepage": "https://github.com/isaac-mason/recast-navigation-js",
12
12
  "bugs": {
@@ -26,8 +26,8 @@
26
26
  "lint": "eslint --ext .ts src"
27
27
  },
28
28
  "dependencies": {
29
- "@recast-navigation/core": "0.24.1",
30
- "@recast-navigation/generators": "0.24.1"
29
+ "@recast-navigation/core": "0.25.0",
30
+ "@recast-navigation/generators": "0.25.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@types/three": "0.x.x",
@@ -39,13 +39,13 @@
39
39
  "@rollup/plugin-node-resolve": "^15.0.1",
40
40
  "@rollup/plugin-terser": "^0.4.3",
41
41
  "@rollup/plugin-typescript": "^11.1.6",
42
- "@types/three": "^0.160.0",
42
+ "@types/three": "^0.163.0",
43
43
  "eslint": "^8.56.0",
44
44
  "prettier": "^3.1.0",
45
45
  "rollup": "^4.14.0",
46
46
  "rollup-plugin-copy": "^3.4.0",
47
47
  "rollup-plugin-filesize": "^10.0.0",
48
- "three": "^0.160.0",
48
+ "three": "^0.163.0",
49
49
  "typescript": "^5.4.3"
50
50
  },
51
51
  "packageManager": "yarn@3.2.1"
@@ -1,30 +0,0 @@
1
- import { RecastHeightfield } from '@recast-navigation/core';
2
- import { Color, ColorRepresentation, Material, Object3D } from 'three';
3
- export type HeightfieldHelperParams = {
4
- heightfields: RecastHeightfield[];
5
- /**
6
- * @default false
7
- */
8
- highlightWalkable?: boolean;
9
- /**
10
- * @default 'blue'
11
- */
12
- defaultColor?: ColorRepresentation;
13
- /**
14
- * @default 'green'
15
- */
16
- walkableColor?: ColorRepresentation;
17
- /**
18
- * @default MeshBasicMaterial
19
- */
20
- material?: Material;
21
- };
22
- export declare class HeightfieldHelper extends Object3D {
23
- heightfields: RecastHeightfield[];
24
- highlightWalkable: boolean;
25
- defaultColor: Color;
26
- walkableColor: Color;
27
- material: Material;
28
- constructor({ heightfields, highlightWalkable, material, defaultColor, walkableColor, }: HeightfieldHelperParams);
29
- update(): void;
30
- }