-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: split NavMesh into multiple classes, update helpers (#24)
- Loading branch information
1 parent
c1e1d38
commit 87e768b
Showing
41 changed files
with
2,395 additions
and
1,272 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
--- | ||
'@recast-navigation/core': patch | ||
'@recast-navigation/three': patch | ||
'@recast-navigation/wasm': patch | ||
--- | ||
|
||
feat: split NavMesh into multiple classes, update helpers | ||
|
||
### New Core Classes | ||
|
||
Functionality in the `NavMesh` class has been split into multiple classes that more closely mirror the recastnavigation api. | ||
- `TileCache` | ||
- Manages tiles and obstacles. Only used for tiled navmeshes. | ||
- `NavMeshQuery` | ||
- Provides methods for querying a navmesh. | ||
- `NavMeshExporter` | ||
- Methods for exporting a navmesh to a Uint8Array. | ||
- `NavMeshImporter` | ||
- Methods for importing a navmesh from a Uint8Array. | ||
- `NavMeshGenerator` | ||
- Methods for generating solo and tiled navmeshes. | ||
|
||
### Changes to three.js utils and helpers | ||
|
||
The usage for `threeToNavMesh` has changed slightly to include the TileCache when generating a tiled navmesh. | ||
|
||
```ts | ||
/* solo navmesh */ | ||
const { navMesh } = threeToNavMesh(meshes); | ||
|
||
/* tiled navmesh */ | ||
const { navMesh, tileCache } = threeToNavMesh(meshes, { tileSize: 16 }); | ||
``` | ||
|
||
The `threeToNavMeshArgs` function has been renamed to `getPositionsAndIndices`. | ||
|
||
The helpers have also been updated to align with the new core classes: | ||
- `TileCacheHelper` | ||
- New helper for visualising obstacles in a `TileCache` | ||
- `NavMeshHelper` | ||
- `updateObstacles` has been moved to `TileCacheHelper` | ||
- `CrowdHelper` | ||
- `update` has been renamed to `updateAgents`, following the naming convention of the other helpers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,12 @@ | ||
export * from './crowd'; | ||
export * from './debug-nav-mesh'; | ||
export * from './nav-mesh'; | ||
export * from './nav-mesh-builder'; | ||
export * from './nav-mesh-exporter'; | ||
export * from './nav-mesh-generator'; | ||
export * from './nav-mesh-importer'; | ||
export * from './nav-mesh-query'; | ||
export * from './obstacle'; | ||
export * from './raw'; | ||
export * from './tile-cache'; | ||
export * from './utils'; | ||
export * from './wasm'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
import type R from '@recast-navigation/wasm'; | ||
import { Wasm } from './wasm'; | ||
|
||
export type NavMeshCreateParams = { | ||
verts: number[]; | ||
vertCount: number; | ||
polys: number[]; | ||
polyFlags: number[]; | ||
polyAreas: number[]; | ||
polyCount: number; | ||
nvp: number; | ||
detailMeshes: number[]; | ||
detailVerts: number[]; | ||
detailVertsCount: number; | ||
detailTris: number[]; | ||
detailTriCount: number; | ||
offMeshConVerts: number[]; | ||
offMeshConRad: number[]; | ||
offMeshConFlags: number[]; | ||
offMeshConAreas: number[]; | ||
offMeshConDir: number[]; | ||
offMeshConUserID: number[]; | ||
offMeshConCount: number; | ||
userId: number; | ||
tileX: number; | ||
tileY: number; | ||
tileLayer: number; | ||
bmin: number[]; | ||
bmax: number[]; | ||
walkableHeight: number; | ||
walkableRadius: number; | ||
walkableClimb: number; | ||
cs: number; | ||
ch: number; | ||
buildBvTree: boolean; | ||
}; | ||
|
||
export type CreateNavMeshDataResult = { | ||
success: boolean; | ||
navMeshData: readonly number[]; | ||
navMeshDataSize: number; | ||
}; | ||
|
||
export class NavMeshBuilder { | ||
raw: R.NavMeshBuilder; | ||
|
||
constructor() { | ||
this.raw = new Wasm.Recast.NavMeshBuilder(); | ||
} | ||
|
||
createNavMeshData(params: NavMeshCreateParams): CreateNavMeshDataResult { | ||
const navMeshCreateParams = new Wasm.Recast.NavMeshCreateParams(); | ||
|
||
navMeshCreateParams.setVerts(params.verts); | ||
navMeshCreateParams.setVertCount(params.vertCount); | ||
navMeshCreateParams.setPolys(params.polys); | ||
navMeshCreateParams.setPolyFlags(params.polyFlags); | ||
navMeshCreateParams.setPolyAreas(params.polyAreas); | ||
navMeshCreateParams.setPolyCount(params.polyCount); | ||
navMeshCreateParams.setNvp(params.nvp); | ||
navMeshCreateParams.setDetailMeshes(params.detailMeshes); | ||
navMeshCreateParams.setDetailVerts(params.detailVerts); | ||
navMeshCreateParams.setDetailVertsCount(params.detailVertsCount); | ||
navMeshCreateParams.setDetailTris(params.detailTris); | ||
navMeshCreateParams.setDetailTriCount(params.detailTriCount); | ||
navMeshCreateParams.setOffMeshConVerts(params.offMeshConVerts); | ||
navMeshCreateParams.setOffMeshConRad(params.offMeshConRad); | ||
navMeshCreateParams.setOffMeshConFlags(params.offMeshConFlags); | ||
navMeshCreateParams.setOffMeshConAreas(params.offMeshConAreas); | ||
navMeshCreateParams.setOffMeshConDir(params.offMeshConDir); | ||
navMeshCreateParams.setOffMeshConUserID(params.offMeshConUserID); | ||
navMeshCreateParams.setOffMeshConCount(params.offMeshConCount); | ||
navMeshCreateParams.setUserId(params.userId); | ||
navMeshCreateParams.setTileX(params.tileX); | ||
navMeshCreateParams.setTileY(params.tileY); | ||
navMeshCreateParams.setTileLayer(params.tileLayer); | ||
navMeshCreateParams.setBmin(params.bmin); | ||
navMeshCreateParams.setBmax(params.bmax); | ||
navMeshCreateParams.setWalkableHeight(params.walkableHeight); | ||
navMeshCreateParams.setWalkableRadius(params.walkableRadius); | ||
navMeshCreateParams.setWalkableClimb(params.walkableClimb); | ||
navMeshCreateParams.setCs(params.cs); | ||
navMeshCreateParams.setCh(params.ch); | ||
navMeshCreateParams.setBuildBvTree(params.buildBvTree); | ||
|
||
const { success, navMeshData, navMeshDataSize } = | ||
this.raw.createNavMeshData(navMeshCreateParams); | ||
|
||
return { | ||
success, | ||
navMeshData, | ||
navMeshDataSize, | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import type R from '@recast-navigation/wasm'; | ||
import { NavMesh } from './nav-mesh'; | ||
import { TileCache } from './tile-cache'; | ||
import { Wasm } from './wasm'; | ||
|
||
export class NavMeshExporter { | ||
raw: R.NavMeshExporter; | ||
|
||
constructor() { | ||
this.raw = new Wasm.Recast.NavMeshExporter(); | ||
} | ||
|
||
/** | ||
* Returns a NavMesh export that can be used later. The NavMesh must be built before retrieving the data | ||
* @returns data the Uint8Array that can be saved and reused | ||
*/ | ||
export(navMesh: NavMesh, tileCache?: TileCache): Uint8Array { | ||
const navMeshExport = this.raw.exportNavMesh(navMesh.raw, tileCache?.raw!); | ||
|
||
const arrView = new Uint8Array( | ||
Wasm.Recast.HEAPU8.buffer, | ||
navMeshExport.dataPointer, | ||
navMeshExport.size | ||
); | ||
|
||
const data = new Uint8Array(navMeshExport.size); | ||
data.set(arrView); | ||
this.raw.freeNavMeshExport(navMeshExport); | ||
|
||
return data; | ||
} | ||
} |
Oops, something went wrong.