@recast-navigation/playcanvas 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +135 -0
- package/dist/debug/debug-drawer.d.ts +54 -0
- package/dist/debug/index.d.ts +1 -0
- package/dist/helpers/crowd-helper.d.ts +25 -0
- package/dist/helpers/index.d.ts +4 -0
- package/dist/helpers/nav-mesh-helper.d.ts +30 -0
- package/dist/helpers/off-mesh-connections-helper.d.ts +29 -0
- package/dist/helpers/tile-cache-helper.d.ts +23 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.mjs +778 -0
- package/dist/index.mjs.map +1 -0
- package/dist/utils/generators.d.ts +5 -0
- package/dist/utils/get-positions-and-indices.d.ts +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Copyright © 2022 Isaac Mason
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# @recast-navigation/playcanvas
|
|
2
|
+
|
|
3
|
+
PlayCanvas nav mesh generation and visualisation helpers for [`recast-navigation`](https://github.com/isaac-mason/recast-navigation-js/tree/main/packages/recast-navigation).
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
> npm install @recast-navigation/playcanvas recast-navigation
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Importing
|
|
14
|
+
|
|
15
|
+
To import the PlayCanvas glue, you can either use the `playcanvas` entrypoint in `recast-navigation`:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { init } from 'recast-navigation'
|
|
19
|
+
import { ... } from 'recast-navigation/playcanvas';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or you can use the packages directly:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { init } from '@recast-navigation/core'
|
|
26
|
+
import { ... } from '@recast-navigation/playcanvas';
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Initialization
|
|
30
|
+
|
|
31
|
+
Before you can use the library, you must initialize it. This is an asynchronous operation.
|
|
32
|
+
|
|
33
|
+
Calling `init()` after the library has already been initialized will return a promise that resolves immediately.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { init } from 'recast-navigation';
|
|
37
|
+
|
|
38
|
+
await init();
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Generating a NavMesh
|
|
42
|
+
|
|
43
|
+
This package provides convenience functions for generating nav meshes from playcanvas MeshInstance objects.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { init } from 'recast-navigation';
|
|
47
|
+
import { pcToSoloNavMesh, pcToTiledNavMesh, pcToTileCache } from 'recast-navigation/playcanvas';
|
|
48
|
+
|
|
49
|
+
/* initialize the library */
|
|
50
|
+
await init();
|
|
51
|
+
|
|
52
|
+
/* generate a solo navmesh */
|
|
53
|
+
const { success, navMesh } = pcToSoloNavMesh(meshInstances, {
|
|
54
|
+
// ... nav mesh generation config ...
|
|
55
|
+
}});
|
|
56
|
+
|
|
57
|
+
/* generate a tiled navmesh */
|
|
58
|
+
const { success, navMesh } = pcToTiledNavMesh(meshInstances, {
|
|
59
|
+
tileSize: 16,
|
|
60
|
+
// ... nav mesh generation config ...
|
|
61
|
+
}});
|
|
62
|
+
|
|
63
|
+
/* generate a tile cache with support for temporary obstacles */
|
|
64
|
+
const { success, navMesh, tileCache } = pcToTileCache(meshInstances, {
|
|
65
|
+
tileSize: 16,
|
|
66
|
+
// ... nav mesh generation config ...
|
|
67
|
+
}});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Interacting with a NavMesh
|
|
71
|
+
|
|
72
|
+
You can documentation for interacting with the generated navmesh in the core library README:
|
|
73
|
+
|
|
74
|
+
https://github.com/isaac-mason/recast-navigation-js
|
|
75
|
+
|
|
76
|
+
This library provides helpers that are used in conjunction with the core library.
|
|
77
|
+
|
|
78
|
+
### Helpers
|
|
79
|
+
|
|
80
|
+
This package provides helpers for visualizing various recast-navigation objects in playcanvas.
|
|
81
|
+
|
|
82
|
+
#### `NavMeshHelper`
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { NavMeshHelper } from '@recast-navigation/playcanvas';
|
|
86
|
+
|
|
87
|
+
const navMeshHelper = new NavMeshHelper(navMesh, graphicsDevice);
|
|
88
|
+
|
|
89
|
+
this.entity.add(navMeshHelper);
|
|
90
|
+
|
|
91
|
+
// update the helper when the navmesh changes
|
|
92
|
+
navMeshHelper.update();
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### `OffMeshConnectionsHelper`
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
import { OffMeshConnectionsHelper } from '@recast-navigation/playcanvas';
|
|
99
|
+
|
|
100
|
+
const offMeshConnectionsHelper = new OffMeshConnectionsHelper(
|
|
101
|
+
offMeshConnections
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
this.entity.add(offMeshConnectionsHelper);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### `TileCacheHelper`
|
|
108
|
+
|
|
109
|
+
Visualises obstacles in a `TileCache`.
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { TileCacheHelper } from '@recast-navigation/playcanvas';
|
|
113
|
+
|
|
114
|
+
const tileCacheHelper = new TileCacheHelper(tileCache);
|
|
115
|
+
|
|
116
|
+
this.entity.add(tileCacheHelper);
|
|
117
|
+
|
|
118
|
+
// update the helper after adding or removing obstacles
|
|
119
|
+
tileCacheHelper.update();
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### `CrowdHelper`
|
|
123
|
+
|
|
124
|
+
Visualises agents in a `Crowd`.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import { CrowdHelper } from '@recast-navigation/playcanvas';
|
|
128
|
+
|
|
129
|
+
const crowdHelper = new CrowdHelper(crowd, graphicsDevice);
|
|
130
|
+
|
|
131
|
+
this.entity.add(crowdHelper);
|
|
132
|
+
|
|
133
|
+
// update the helper after updating the crowd
|
|
134
|
+
crowdHelper.update();
|
|
135
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DebugDrawerPrimitive, NavMesh, NavMeshQuery, RecastCompactHeightfield, RecastContourSet, RecastHeightfield, RecastHeightfieldLayer, RecastHeightfieldLayerSet, RecastPolyMesh, RecastPolyMeshDetail } from '@recast-navigation/core';
|
|
2
|
+
import { AppBase, Entity, GraphicsDevice, StandardMaterial } from 'playcanvas';
|
|
3
|
+
/**
|
|
4
|
+
* Parameters for creating DebugDrawer.
|
|
5
|
+
*/
|
|
6
|
+
export type DebugDrawerParams = {
|
|
7
|
+
app: AppBase;
|
|
8
|
+
triMaterial?: StandardMaterial;
|
|
9
|
+
pointMaterial?: StandardMaterial;
|
|
10
|
+
lineMaterial?: StandardMaterial;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Represents a helper class to visualize navigation meshes and related data in PlayCanvas.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DebugDrawer extends Entity {
|
|
16
|
+
triMaterial: StandardMaterial;
|
|
17
|
+
pointMaterial: StandardMaterial;
|
|
18
|
+
lineMaterial: StandardMaterial;
|
|
19
|
+
private debugDrawerUtils;
|
|
20
|
+
private graphicsDevice;
|
|
21
|
+
constructor(graphicsDevice: GraphicsDevice, params?: DebugDrawerParams);
|
|
22
|
+
drawPrimitives(primitives: DebugDrawerPrimitive[]): void;
|
|
23
|
+
drawHeightfieldSolid(hf: RecastHeightfield): void;
|
|
24
|
+
drawHeightfieldWalkable(hf: RecastHeightfield): void;
|
|
25
|
+
drawCompactHeightfieldSolid(chf: RecastCompactHeightfield): void;
|
|
26
|
+
drawCompactHeightfieldRegions(chf: RecastCompactHeightfield): void;
|
|
27
|
+
drawCompactHeightfieldDistance(chf: RecastCompactHeightfield): void;
|
|
28
|
+
drawHeightfieldLayer(layer: RecastHeightfieldLayer, idx: number): void;
|
|
29
|
+
drawHeightfieldLayers(lset: RecastHeightfieldLayerSet): void;
|
|
30
|
+
drawRegionConnections(cset: RecastContourSet, alpha?: number): void;
|
|
31
|
+
drawRawContours(cset: RecastContourSet, alpha?: number): void;
|
|
32
|
+
drawContours(cset: RecastContourSet, alpha?: number): void;
|
|
33
|
+
drawPolyMesh(mesh: RecastPolyMesh): void;
|
|
34
|
+
drawPolyMeshDetail(dmesh: RecastPolyMeshDetail): void;
|
|
35
|
+
drawNavMesh(mesh: NavMesh, flags?: number): void;
|
|
36
|
+
drawNavMeshWithClosedList(mesh: NavMesh, query: NavMeshQuery, flags?: number): void;
|
|
37
|
+
drawNavMeshNodes(query: NavMeshQuery): void;
|
|
38
|
+
drawNavMeshBVTree(mesh: NavMesh): void;
|
|
39
|
+
drawNavMeshPortals(mesh: NavMesh): void;
|
|
40
|
+
drawNavMeshPolysWithFlags(mesh: NavMesh, flags: number, col: number): void;
|
|
41
|
+
drawNavMeshPoly(mesh: NavMesh, ref: number, col: number): void;
|
|
42
|
+
/**
|
|
43
|
+
* Resets the debug drawer by removing all child entities.
|
|
44
|
+
*/
|
|
45
|
+
reset(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Disposes of the debug drawer and releases resources.
|
|
48
|
+
*/
|
|
49
|
+
dispose(): void;
|
|
50
|
+
private drawPoints;
|
|
51
|
+
private drawLines;
|
|
52
|
+
private drawTris;
|
|
53
|
+
private drawQuads;
|
|
54
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './debug-drawer';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Crowd, CrowdAgent } from '@recast-navigation/core';
|
|
2
|
+
import { Entity, GraphNode, GraphicsDevice, Material } from 'playcanvas';
|
|
3
|
+
export type CrowdHelperParams = {
|
|
4
|
+
agentMaterial?: Material;
|
|
5
|
+
};
|
|
6
|
+
export type CrowdAgentData = {
|
|
7
|
+
radius: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
export declare class CrowdHelper extends GraphNode {
|
|
11
|
+
agentMeshes: Map<CrowdAgent, Entity>;
|
|
12
|
+
recastCrowd: Crowd;
|
|
13
|
+
agentMaterial: Material;
|
|
14
|
+
graphicsDevice: GraphicsDevice;
|
|
15
|
+
agentMeshData: Map<number, CrowdAgentData>;
|
|
16
|
+
constructor(crowd: Crowd, graphicsDevice: GraphicsDevice, params?: CrowdHelperParams);
|
|
17
|
+
/**
|
|
18
|
+
* Update the three debug view of the crowd agents.
|
|
19
|
+
*
|
|
20
|
+
* This should be called after updating the crowd.
|
|
21
|
+
*/
|
|
22
|
+
update(): void;
|
|
23
|
+
createAgentMesh(agent: CrowdAgent): Entity;
|
|
24
|
+
updateAgentGeometry(agentMesh: Entity, agentParams: CrowdAgent): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { NavMesh } from '@recast-navigation/core';
|
|
2
|
+
import { Entity, GraphicsDevice, Material, Mesh, StandardMaterial } from 'playcanvas';
|
|
3
|
+
export type NavMeshHelperParams = {
|
|
4
|
+
navMeshMaterial?: Material;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* NavMeshHelper class for visualizing the nav mesh in PlayCanvas
|
|
8
|
+
*/
|
|
9
|
+
export declare class NavMeshHelper extends Entity {
|
|
10
|
+
navMesh: NavMesh;
|
|
11
|
+
navMeshMaterial: Material;
|
|
12
|
+
mesh: Mesh;
|
|
13
|
+
constructor(navMesh: NavMesh, graphicsDevice: GraphicsDevice, params?: NavMeshHelperParams);
|
|
14
|
+
/**
|
|
15
|
+
* Creates a default material for the nav mesh visualization
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
createDefaultMaterial(): StandardMaterial;
|
|
19
|
+
/**
|
|
20
|
+
* Updates the mesh using the nav mesh data
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
updateMesh(graphicsDevice: GraphicsDevice): void;
|
|
24
|
+
/**
|
|
25
|
+
* Update the PlayCanvas nav mesh visualization.
|
|
26
|
+
*
|
|
27
|
+
* This should be called after updating the nav mesh.
|
|
28
|
+
*/
|
|
29
|
+
update(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Entity, Material, Vec3 } from 'playcanvas';
|
|
2
|
+
/**
|
|
3
|
+
* Parameters for creating OffMeshConnectionsHelper.
|
|
4
|
+
*/
|
|
5
|
+
export type OffMeshConnectionsHelperParams = {
|
|
6
|
+
entryCircleMaterial?: Material;
|
|
7
|
+
exitCircleMaterial?: Material;
|
|
8
|
+
lineMaterial?: Material;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Represents an off-mesh connection between two points.
|
|
12
|
+
*/
|
|
13
|
+
export type OffMeshConnectionParams = {
|
|
14
|
+
startPosition: Vec3;
|
|
15
|
+
endPosition: Vec3;
|
|
16
|
+
radius: number;
|
|
17
|
+
bidirectional: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare class OffMeshConnectionsHelper extends Entity {
|
|
20
|
+
offMeshConnections: OffMeshConnectionParams[];
|
|
21
|
+
entryCircleMaterial: Material;
|
|
22
|
+
exitCircleMaterial: Material;
|
|
23
|
+
lineMaterial: Material;
|
|
24
|
+
constructor(offMeshConnections: OffMeshConnectionParams[], params?: OffMeshConnectionsHelperParams);
|
|
25
|
+
/**
|
|
26
|
+
* Updates the visual representation of the off-mesh connections.
|
|
27
|
+
*/
|
|
28
|
+
updateHelper(): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Obstacle, TileCache } from '@recast-navigation/core';
|
|
2
|
+
import { Entity, Material } from 'playcanvas';
|
|
3
|
+
/**
|
|
4
|
+
* Parameters for creating TileCacheHelper.
|
|
5
|
+
*/
|
|
6
|
+
export type TileCacheHelperParams = {
|
|
7
|
+
obstacleMaterial?: Material;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Represents a helper class to visualize tile cache obstacles in PlayCanvas.
|
|
11
|
+
*/
|
|
12
|
+
export declare class TileCacheHelper extends Entity {
|
|
13
|
+
tileCache: TileCache;
|
|
14
|
+
obstacleMeshes: Map<Obstacle, Entity>;
|
|
15
|
+
obstacleMaterial: Material;
|
|
16
|
+
constructor(tileCache: TileCache, params?: TileCacheHelperParams);
|
|
17
|
+
/**
|
|
18
|
+
* Update the obstacle meshes.
|
|
19
|
+
*
|
|
20
|
+
* This should be called after adding or removing obstacles.
|
|
21
|
+
*/
|
|
22
|
+
updateHelper(): void;
|
|
23
|
+
}
|
package/dist/index.d.ts
ADDED
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
import { DebugDrawerUtils } from '@recast-navigation/core';
|
|
2
|
+
import { Entity, StandardMaterial, Color, BLEND_NORMAL, MeshInstance, VertexFormat, SEMANTIC_POSITION, TYPE_FLOAT32, SEMANTIC_COLOR, VertexBuffer, BUFFER_STATIC, Mesh, PRIMITIVE_POINTS, PRIMITIVE_LINES, PRIMITIVE_TRIANGLES, Vec3, GraphNode, CylinderGeometry, calculateNormals, createMesh, RENDERSTYLE_WIREFRAME, VertexIterator, INDEXFORMAT_UINT32 } from 'playcanvas';
|
|
3
|
+
import { mergePositionsAndIndices, generateSoloNavMesh, generateTiledNavMesh, generateTileCache } from '@recast-navigation/generators';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a helper class to visualize navigation meshes and related data in PlayCanvas.
|
|
7
|
+
*/
|
|
8
|
+
class DebugDrawer extends Entity {
|
|
9
|
+
constructor(graphicsDevice, params) {
|
|
10
|
+
super();
|
|
11
|
+
this.debugDrawerUtils = new DebugDrawerUtils();
|
|
12
|
+
this.graphicsDevice = graphicsDevice;
|
|
13
|
+
if (params?.triMaterial) {
|
|
14
|
+
this.triMaterial = params.triMaterial;
|
|
15
|
+
} else {
|
|
16
|
+
this.triMaterial = new StandardMaterial();
|
|
17
|
+
this.triMaterial.useLighting = false;
|
|
18
|
+
this.triMaterial.diffuse = new Color(1, 1, 1);
|
|
19
|
+
this.triMaterial.opacity = 0.4;
|
|
20
|
+
this.triMaterial.blendType = BLEND_NORMAL;
|
|
21
|
+
this.triMaterial.depthWrite = false;
|
|
22
|
+
this.triMaterial.update();
|
|
23
|
+
}
|
|
24
|
+
if (params?.pointMaterial) {
|
|
25
|
+
this.pointMaterial = params.pointMaterial;
|
|
26
|
+
} else {
|
|
27
|
+
this.pointMaterial = new StandardMaterial();
|
|
28
|
+
this.pointMaterial.useLighting = false;
|
|
29
|
+
this.pointMaterial.update();
|
|
30
|
+
}
|
|
31
|
+
if (params?.lineMaterial) {
|
|
32
|
+
this.lineMaterial = params.lineMaterial;
|
|
33
|
+
} else {
|
|
34
|
+
this.lineMaterial = new StandardMaterial();
|
|
35
|
+
this.lineMaterial.useLighting = false;
|
|
36
|
+
this.lineMaterial.diffuse = new Color(1, 1, 1);
|
|
37
|
+
this.lineMaterial.emissive = new Color(1, 1, 1);
|
|
38
|
+
this.lineMaterial.update();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
drawPrimitives(primitives) {
|
|
42
|
+
for (const primitive of primitives) {
|
|
43
|
+
switch (primitive.type) {
|
|
44
|
+
case 'points':
|
|
45
|
+
this.drawPoints(primitive);
|
|
46
|
+
break;
|
|
47
|
+
case 'lines':
|
|
48
|
+
this.drawLines(primitive);
|
|
49
|
+
break;
|
|
50
|
+
case 'tris':
|
|
51
|
+
this.drawTris(primitive);
|
|
52
|
+
break;
|
|
53
|
+
case 'quads':
|
|
54
|
+
this.drawQuads(primitive);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
drawHeightfieldSolid(hf) {
|
|
60
|
+
const primitives = this.debugDrawerUtils.drawHeightfieldSolid(hf);
|
|
61
|
+
this.drawPrimitives(primitives);
|
|
62
|
+
}
|
|
63
|
+
drawHeightfieldWalkable(hf) {
|
|
64
|
+
const primitives = this.debugDrawerUtils.drawHeightfieldWalkable(hf);
|
|
65
|
+
this.drawPrimitives(primitives);
|
|
66
|
+
}
|
|
67
|
+
drawCompactHeightfieldSolid(chf) {
|
|
68
|
+
const primitives = this.debugDrawerUtils.drawCompactHeightfieldSolid(chf);
|
|
69
|
+
this.drawPrimitives(primitives);
|
|
70
|
+
}
|
|
71
|
+
drawCompactHeightfieldRegions(chf) {
|
|
72
|
+
const primitives = this.debugDrawerUtils.drawCompactHeightfieldRegions(chf);
|
|
73
|
+
this.drawPrimitives(primitives);
|
|
74
|
+
}
|
|
75
|
+
drawCompactHeightfieldDistance(chf) {
|
|
76
|
+
const primitives = this.debugDrawerUtils.drawCompactHeightfieldDistance(chf);
|
|
77
|
+
this.drawPrimitives(primitives);
|
|
78
|
+
}
|
|
79
|
+
drawHeightfieldLayer(layer, idx) {
|
|
80
|
+
const primitives = this.debugDrawerUtils.drawHeightfieldLayer(layer, idx);
|
|
81
|
+
this.drawPrimitives(primitives);
|
|
82
|
+
}
|
|
83
|
+
drawHeightfieldLayers(lset) {
|
|
84
|
+
const primitives = this.debugDrawerUtils.drawHeightfieldLayers(lset);
|
|
85
|
+
this.drawPrimitives(primitives);
|
|
86
|
+
}
|
|
87
|
+
drawRegionConnections(cset, alpha = 1) {
|
|
88
|
+
const primitives = this.debugDrawerUtils.drawRegionConnections(cset, alpha);
|
|
89
|
+
this.drawPrimitives(primitives);
|
|
90
|
+
}
|
|
91
|
+
drawRawContours(cset, alpha = 1) {
|
|
92
|
+
const primitives = this.debugDrawerUtils.drawRawContours(cset, alpha);
|
|
93
|
+
this.drawPrimitives(primitives);
|
|
94
|
+
}
|
|
95
|
+
drawContours(cset, alpha = 1) {
|
|
96
|
+
const primitives = this.debugDrawerUtils.drawContours(cset, alpha);
|
|
97
|
+
this.drawPrimitives(primitives);
|
|
98
|
+
}
|
|
99
|
+
drawPolyMesh(mesh) {
|
|
100
|
+
const primitives = this.debugDrawerUtils.drawPolyMesh(mesh);
|
|
101
|
+
this.drawPrimitives(primitives);
|
|
102
|
+
}
|
|
103
|
+
drawPolyMeshDetail(dmesh) {
|
|
104
|
+
const primitives = this.debugDrawerUtils.drawPolyMeshDetail(dmesh);
|
|
105
|
+
this.drawPrimitives(primitives);
|
|
106
|
+
}
|
|
107
|
+
drawNavMesh(mesh, flags = 0) {
|
|
108
|
+
const primitives = this.debugDrawerUtils.drawNavMesh(mesh, flags);
|
|
109
|
+
this.drawPrimitives(primitives);
|
|
110
|
+
}
|
|
111
|
+
drawNavMeshWithClosedList(mesh, query, flags = 0) {
|
|
112
|
+
const primitives = this.debugDrawerUtils.drawNavMeshWithClosedList(mesh, query, flags);
|
|
113
|
+
this.drawPrimitives(primitives);
|
|
114
|
+
}
|
|
115
|
+
drawNavMeshNodes(query) {
|
|
116
|
+
const primitives = this.debugDrawerUtils.drawNavMeshNodes(query);
|
|
117
|
+
this.drawPrimitives(primitives);
|
|
118
|
+
}
|
|
119
|
+
drawNavMeshBVTree(mesh) {
|
|
120
|
+
const primitives = this.debugDrawerUtils.drawNavMeshBVTree(mesh);
|
|
121
|
+
this.drawPrimitives(primitives);
|
|
122
|
+
}
|
|
123
|
+
drawNavMeshPortals(mesh) {
|
|
124
|
+
const primitives = this.debugDrawerUtils.drawNavMeshPortals(mesh);
|
|
125
|
+
this.drawPrimitives(primitives);
|
|
126
|
+
}
|
|
127
|
+
drawNavMeshPolysWithFlags(mesh, flags, col) {
|
|
128
|
+
const primitives = this.debugDrawerUtils.drawNavMeshPolysWithFlags(mesh, flags, col);
|
|
129
|
+
this.drawPrimitives(primitives);
|
|
130
|
+
}
|
|
131
|
+
drawNavMeshPoly(mesh, ref, col) {
|
|
132
|
+
const primitives = this.debugDrawerUtils.drawNavMeshPoly(mesh, ref, col);
|
|
133
|
+
this.drawPrimitives(primitives);
|
|
134
|
+
}
|
|
135
|
+
// Implement other drawing methods similarly...
|
|
136
|
+
/**
|
|
137
|
+
* Resets the debug drawer by removing all child entities.
|
|
138
|
+
*/
|
|
139
|
+
reset() {
|
|
140
|
+
while (this.children.length > 0) {
|
|
141
|
+
const child = this.children[0];
|
|
142
|
+
if (child instanceof Entity) {
|
|
143
|
+
child.destroy();
|
|
144
|
+
} else {
|
|
145
|
+
this.removeChild(child);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Disposes of the debug drawer and releases resources.
|
|
151
|
+
*/
|
|
152
|
+
dispose() {
|
|
153
|
+
this.debugDrawerUtils.dispose();
|
|
154
|
+
this.reset();
|
|
155
|
+
}
|
|
156
|
+
drawPoints(primitive) {
|
|
157
|
+
const graphicsDevice = this.graphicsDevice;
|
|
158
|
+
const positions = [];
|
|
159
|
+
const colors = [];
|
|
160
|
+
for (let i = 0; i < primitive.vertices.length; i++) {
|
|
161
|
+
const [x, y, z, r, g, b, a] = primitive.vertices[i];
|
|
162
|
+
positions.push(x, y, z);
|
|
163
|
+
colors.push(r, g, b, a);
|
|
164
|
+
}
|
|
165
|
+
const mesh = createPointMesh(graphicsDevice, positions, colors);
|
|
166
|
+
const meshInstance = new MeshInstance(mesh, this.pointMaterial);
|
|
167
|
+
const entity = new Entity();
|
|
168
|
+
entity.addComponent('render', {
|
|
169
|
+
meshInstances: [meshInstance]
|
|
170
|
+
});
|
|
171
|
+
this.addChild(entity);
|
|
172
|
+
}
|
|
173
|
+
drawLines(primitive) {
|
|
174
|
+
const graphicsDevice = this.graphicsDevice;
|
|
175
|
+
const positions = [];
|
|
176
|
+
const colors = [];
|
|
177
|
+
for (let i = 0; i < primitive.vertices.length; i++) {
|
|
178
|
+
const [x, y, z, r, g, b, a] = primitive.vertices[i];
|
|
179
|
+
positions.push(x, y, z);
|
|
180
|
+
colors.push(r, g, b, a);
|
|
181
|
+
}
|
|
182
|
+
const mesh = createLineMesh$1(graphicsDevice, positions, colors);
|
|
183
|
+
const meshInstance = new MeshInstance(mesh, this.lineMaterial);
|
|
184
|
+
const entity = new Entity();
|
|
185
|
+
entity.addComponent('render', {
|
|
186
|
+
meshInstances: [meshInstance]
|
|
187
|
+
});
|
|
188
|
+
this.addChild(entity);
|
|
189
|
+
}
|
|
190
|
+
drawTris(primitive) {
|
|
191
|
+
const graphicsDevice = this.graphicsDevice;
|
|
192
|
+
const positions = [];
|
|
193
|
+
const colors = [];
|
|
194
|
+
for (let i = 0; i < primitive.vertices.length; i++) {
|
|
195
|
+
const [x, y, z, r, g, b, a] = primitive.vertices[i];
|
|
196
|
+
positions.push(x, y, z);
|
|
197
|
+
colors.push(r, g, b, a);
|
|
198
|
+
}
|
|
199
|
+
const mesh = createTriangleMesh(graphicsDevice, positions, colors);
|
|
200
|
+
const meshInstance = new MeshInstance(mesh, this.triMaterial);
|
|
201
|
+
const entity = new Entity();
|
|
202
|
+
entity.addComponent('render', {
|
|
203
|
+
meshInstances: [meshInstance]
|
|
204
|
+
});
|
|
205
|
+
this.addChild(entity);
|
|
206
|
+
}
|
|
207
|
+
drawQuads(primitive) {
|
|
208
|
+
// Quads are converted to triangles
|
|
209
|
+
const graphicsDevice = this.graphicsDevice;
|
|
210
|
+
const positions = [];
|
|
211
|
+
const colors = [];
|
|
212
|
+
for (let i = 0; i < primitive.vertices.length; i += 4) {
|
|
213
|
+
const [x0, y0, z0, r0, g0, b0, a0] = primitive.vertices[i];
|
|
214
|
+
const [x1, y1, z1, r1, g1, b1, a1] = primitive.vertices[i + 1];
|
|
215
|
+
const [x2, y2, z2, r2, g2, b2, a2] = primitive.vertices[i + 2];
|
|
216
|
+
const [x3, y3, z3, r3, g3, b3, a3] = primitive.vertices[i + 3];
|
|
217
|
+
// First triangle (v0, v1, v2)
|
|
218
|
+
positions.push(x0, y0, z0, x1, y1, z1, x2, y2, z2);
|
|
219
|
+
colors.push(r0, g0, b0, a0, r1, g1, b1, a1, r2, g2, b2, a2);
|
|
220
|
+
// Second triangle (v0, v2, v3)
|
|
221
|
+
positions.push(x0, y0, z0, x2, y2, z2, x3, y3, z3);
|
|
222
|
+
colors.push(r0, g0, b0, a0, r2, g2, b2, a2, r3, g3, b3, a3);
|
|
223
|
+
}
|
|
224
|
+
const mesh = createTriangleMesh(graphicsDevice, positions, colors);
|
|
225
|
+
const meshInstance = new MeshInstance(mesh, this.triMaterial);
|
|
226
|
+
const entity = new Entity();
|
|
227
|
+
entity.addComponent('render', {
|
|
228
|
+
meshInstances: [meshInstance]
|
|
229
|
+
});
|
|
230
|
+
this.addChild(entity);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Creates a point mesh.
|
|
235
|
+
*/
|
|
236
|
+
function createPointMesh(graphicsDevice, positions, colors) {
|
|
237
|
+
const vertexFormat = new VertexFormat(graphicsDevice, [{
|
|
238
|
+
semantic: SEMANTIC_POSITION,
|
|
239
|
+
components: 3,
|
|
240
|
+
type: TYPE_FLOAT32
|
|
241
|
+
}, {
|
|
242
|
+
semantic: SEMANTIC_COLOR,
|
|
243
|
+
components: 4,
|
|
244
|
+
type: TYPE_FLOAT32
|
|
245
|
+
}]);
|
|
246
|
+
const vertexCount = positions.length / 3;
|
|
247
|
+
const vertexBuffer = new VertexBuffer(graphicsDevice, vertexFormat, vertexCount, {
|
|
248
|
+
usage: BUFFER_STATIC
|
|
249
|
+
});
|
|
250
|
+
const vertexData = new Float32Array(vertexBuffer.lock());
|
|
251
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
252
|
+
vertexData[i * 7 + 0] = positions[i * 3 + 0];
|
|
253
|
+
vertexData[i * 7 + 1] = positions[i * 3 + 1];
|
|
254
|
+
vertexData[i * 7 + 2] = positions[i * 3 + 2];
|
|
255
|
+
vertexData[i * 7 + 3] = colors[i * 4 + 0];
|
|
256
|
+
vertexData[i * 7 + 4] = colors[i * 4 + 1];
|
|
257
|
+
vertexData[i * 7 + 5] = colors[i * 4 + 2];
|
|
258
|
+
vertexData[i * 7 + 6] = colors[i * 4 + 3];
|
|
259
|
+
}
|
|
260
|
+
vertexBuffer.unlock();
|
|
261
|
+
const mesh = new Mesh(graphicsDevice);
|
|
262
|
+
mesh.vertexBuffer = vertexBuffer;
|
|
263
|
+
mesh.primitive[0].type = PRIMITIVE_POINTS;
|
|
264
|
+
mesh.primitive[0].base = 0;
|
|
265
|
+
mesh.primitive[0].count = vertexCount;
|
|
266
|
+
mesh.primitive[0].indexed = false;
|
|
267
|
+
return mesh;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Creates a line mesh.
|
|
271
|
+
*/
|
|
272
|
+
function createLineMesh$1(graphicsDevice, positions, colors) {
|
|
273
|
+
const vertexFormat = new VertexFormat(graphicsDevice, [{
|
|
274
|
+
semantic: SEMANTIC_POSITION,
|
|
275
|
+
components: 3,
|
|
276
|
+
type: TYPE_FLOAT32
|
|
277
|
+
}, {
|
|
278
|
+
semantic: SEMANTIC_COLOR,
|
|
279
|
+
components: 4,
|
|
280
|
+
type: TYPE_FLOAT32
|
|
281
|
+
}]);
|
|
282
|
+
const vertexCount = positions.length / 3;
|
|
283
|
+
const vertexBuffer = new VertexBuffer(graphicsDevice, vertexFormat, vertexCount, {
|
|
284
|
+
usage: BUFFER_STATIC
|
|
285
|
+
});
|
|
286
|
+
const vertexData = new Float32Array(vertexBuffer.lock());
|
|
287
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
288
|
+
vertexData[i * 7 + 0] = positions[i * 3 + 0];
|
|
289
|
+
vertexData[i * 7 + 1] = positions[i * 3 + 1];
|
|
290
|
+
vertexData[i * 7 + 2] = positions[i * 3 + 2];
|
|
291
|
+
vertexData[i * 7 + 3] = colors[i * 4 + 0];
|
|
292
|
+
vertexData[i * 7 + 4] = colors[i * 4 + 1];
|
|
293
|
+
vertexData[i * 7 + 5] = colors[i * 4 + 2];
|
|
294
|
+
vertexData[i * 7 + 6] = colors[i * 4 + 3];
|
|
295
|
+
}
|
|
296
|
+
vertexBuffer.unlock();
|
|
297
|
+
const mesh = new Mesh(graphicsDevice);
|
|
298
|
+
mesh.vertexBuffer = vertexBuffer;
|
|
299
|
+
mesh.primitive[0].type = PRIMITIVE_LINES;
|
|
300
|
+
mesh.primitive[0].base = 0;
|
|
301
|
+
mesh.primitive[0].count = vertexCount;
|
|
302
|
+
mesh.primitive[0].indexed = false;
|
|
303
|
+
return mesh;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Creates a triangle mesh.
|
|
307
|
+
*/
|
|
308
|
+
function createTriangleMesh(graphicsDevice, positions, colors) {
|
|
309
|
+
const vertexFormat = new VertexFormat(graphicsDevice, [{
|
|
310
|
+
semantic: SEMANTIC_POSITION,
|
|
311
|
+
components: 3,
|
|
312
|
+
type: TYPE_FLOAT32
|
|
313
|
+
}, {
|
|
314
|
+
semantic: SEMANTIC_COLOR,
|
|
315
|
+
components: 4,
|
|
316
|
+
type: TYPE_FLOAT32
|
|
317
|
+
}]);
|
|
318
|
+
const vertexCount = positions.length / 3;
|
|
319
|
+
const vertexBuffer = new VertexBuffer(graphicsDevice, vertexFormat, vertexCount, {
|
|
320
|
+
usage: BUFFER_STATIC
|
|
321
|
+
});
|
|
322
|
+
const vertexData = new Float32Array(vertexBuffer.lock());
|
|
323
|
+
for (let i = 0; i < vertexCount; i++) {
|
|
324
|
+
vertexData[i * 7 + 0] = positions[i * 3 + 0];
|
|
325
|
+
vertexData[i * 7 + 1] = positions[i * 3 + 1];
|
|
326
|
+
vertexData[i * 7 + 2] = positions[i * 3 + 2];
|
|
327
|
+
vertexData[i * 7 + 3] = colors[i * 4 + 0];
|
|
328
|
+
vertexData[i * 7 + 4] = colors[i * 4 + 1];
|
|
329
|
+
vertexData[i * 7 + 5] = colors[i * 4 + 2];
|
|
330
|
+
vertexData[i * 7 + 6] = colors[i * 4 + 3];
|
|
331
|
+
}
|
|
332
|
+
vertexBuffer.unlock();
|
|
333
|
+
const mesh = new Mesh(graphicsDevice);
|
|
334
|
+
mesh.vertexBuffer = vertexBuffer;
|
|
335
|
+
mesh.primitive[0].type = PRIMITIVE_TRIANGLES;
|
|
336
|
+
mesh.primitive[0].base = 0;
|
|
337
|
+
mesh.primitive[0].count = vertexCount;
|
|
338
|
+
mesh.primitive[0].indexed = false;
|
|
339
|
+
return mesh;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
const _position = new Vec3();
|
|
343
|
+
const _velocity = new Vec3();
|
|
344
|
+
class CrowdHelper extends GraphNode {
|
|
345
|
+
agentMeshes = new Map();
|
|
346
|
+
agentMeshData = new Map();
|
|
347
|
+
constructor(crowd, graphicsDevice, params) {
|
|
348
|
+
super();
|
|
349
|
+
this.agentMeshData = new Map();
|
|
350
|
+
this.recastCrowd = crowd;
|
|
351
|
+
this.graphicsDevice = graphicsDevice;
|
|
352
|
+
if (params?.agentMaterial) {
|
|
353
|
+
this.agentMaterial = params.agentMaterial;
|
|
354
|
+
} else {
|
|
355
|
+
const material = new StandardMaterial();
|
|
356
|
+
material.diffuse.set(1, 0, 0);
|
|
357
|
+
this.agentMaterial = material;
|
|
358
|
+
}
|
|
359
|
+
this.update();
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Update the three debug view of the crowd agents.
|
|
363
|
+
*
|
|
364
|
+
* This should be called after updating the crowd.
|
|
365
|
+
*/
|
|
366
|
+
update() {
|
|
367
|
+
const agents = this.recastCrowd.getAgents();
|
|
368
|
+
const unseen = new Set(this.agentMeshes.keys());
|
|
369
|
+
for (const agent of agents) {
|
|
370
|
+
unseen.delete(agent);
|
|
371
|
+
const position = agent.position();
|
|
372
|
+
const velocity = agent.velocity();
|
|
373
|
+
let agentMesh = this.agentMeshes.get(agent);
|
|
374
|
+
if (agentMesh === undefined) {
|
|
375
|
+
agentMesh = this.createAgentMesh(agent);
|
|
376
|
+
this.addChild(agentMesh);
|
|
377
|
+
this.agentMeshes.set(agent, agentMesh);
|
|
378
|
+
} else {
|
|
379
|
+
this.updateAgentGeometry(agentMesh, agent);
|
|
380
|
+
}
|
|
381
|
+
agentMesh.setLocalPosition(position.x, position.y + agent.height / 2, position.z);
|
|
382
|
+
agentMesh.lookAt(_position.copy(agentMesh.getPosition()).add(_velocity.set(velocity.x, velocity.y, velocity.z)));
|
|
383
|
+
}
|
|
384
|
+
for (const agentId of unseen) {
|
|
385
|
+
const agentMesh = this.agentMeshes.get(agentId);
|
|
386
|
+
if (agentMesh) {
|
|
387
|
+
this.removeChild(agentMesh);
|
|
388
|
+
this.agentMeshes.delete(agentId);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
createAgentMesh(agent) {
|
|
393
|
+
const mesh = new Entity();
|
|
394
|
+
mesh.addComponent('render');
|
|
395
|
+
mesh.render.material = this.agentMaterial;
|
|
396
|
+
this.updateAgentGeometry(mesh, agent);
|
|
397
|
+
this.agentMeshData.set(agent.agentIndex, {
|
|
398
|
+
radius: agent.radius,
|
|
399
|
+
height: agent.height
|
|
400
|
+
});
|
|
401
|
+
return mesh;
|
|
402
|
+
}
|
|
403
|
+
updateAgentGeometry(agentMesh, agentParams) {
|
|
404
|
+
const agentData = this.agentMeshData.get(agentParams.agentIndex);
|
|
405
|
+
if (agentData === undefined || agentData.radius !== agentParams.radius || agentData.height !== agentParams.height) {
|
|
406
|
+
// Dispose of the old mesh
|
|
407
|
+
if (agentMesh.render) {
|
|
408
|
+
agentMesh.render.meshInstances.forEach(meshInstance => meshInstance.mesh.destroy());
|
|
409
|
+
}
|
|
410
|
+
const mesh = Mesh.fromGeometry(this.graphicsDevice, new CylinderGeometry(agentParams));
|
|
411
|
+
if (agentMesh.render) {
|
|
412
|
+
agentMesh.render.meshInstances = [new MeshInstance(mesh, this.agentMaterial, agentMesh)];
|
|
413
|
+
}
|
|
414
|
+
this.agentMeshData.set(agentParams.agentIndex, agentParams);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* NavMeshHelper class for visualizing the nav mesh in PlayCanvas
|
|
421
|
+
*/
|
|
422
|
+
class NavMeshHelper extends Entity {
|
|
423
|
+
constructor(navMesh, graphicsDevice, params) {
|
|
424
|
+
super();
|
|
425
|
+
this.navMesh = navMesh;
|
|
426
|
+
// Create material if not provided
|
|
427
|
+
this.navMeshMaterial = params?.navMeshMaterial || this.createDefaultMaterial();
|
|
428
|
+
// Update the mesh
|
|
429
|
+
this.updateMesh(graphicsDevice);
|
|
430
|
+
// Create a MeshInstance with the mesh and material
|
|
431
|
+
const meshInstance = new MeshInstance(this.mesh, this.navMeshMaterial);
|
|
432
|
+
// Add a render component and assign the mesh instance
|
|
433
|
+
this.addComponent('render', {
|
|
434
|
+
meshInstances: [meshInstance]
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Creates a default material for the nav mesh visualization
|
|
439
|
+
* @private
|
|
440
|
+
*/
|
|
441
|
+
createDefaultMaterial() {
|
|
442
|
+
const material = new StandardMaterial();
|
|
443
|
+
material.diffuse.set(1, 0.65, 0);
|
|
444
|
+
material.opacity = 0.7;
|
|
445
|
+
material.blendType = BLEND_NORMAL;
|
|
446
|
+
material.depthWrite = false;
|
|
447
|
+
material.update();
|
|
448
|
+
return material;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Updates the mesh using the nav mesh data
|
|
452
|
+
* @private
|
|
453
|
+
*/
|
|
454
|
+
updateMesh(graphicsDevice) {
|
|
455
|
+
const [positions, indices] = this.navMesh.getDebugNavMesh();
|
|
456
|
+
const normals = calculateNormals(positions, indices);
|
|
457
|
+
// Create the mesh
|
|
458
|
+
this.mesh = new Mesh(graphicsDevice);
|
|
459
|
+
this.mesh.setPositions(positions);
|
|
460
|
+
this.mesh.setIndices(indices);
|
|
461
|
+
this.mesh.setNormals(normals);
|
|
462
|
+
this.mesh.update();
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Update the PlayCanvas nav mesh visualization.
|
|
466
|
+
*
|
|
467
|
+
* This should be called after updating the nav mesh.
|
|
468
|
+
*/
|
|
469
|
+
update() {
|
|
470
|
+
// Re-create the mesh
|
|
471
|
+
const graphicsDevice = this.mesh.vertexBuffer.device;
|
|
472
|
+
this.updateMesh(graphicsDevice);
|
|
473
|
+
// Update the mesh instance with the new mesh
|
|
474
|
+
this.render.meshInstances[0].mesh = this.mesh;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
class OffMeshConnectionsHelper extends Entity {
|
|
479
|
+
constructor(offMeshConnections, params) {
|
|
480
|
+
super();
|
|
481
|
+
this.offMeshConnections = offMeshConnections;
|
|
482
|
+
// Initialize materials
|
|
483
|
+
if (params?.entryCircleMaterial) {
|
|
484
|
+
this.entryCircleMaterial = params.entryCircleMaterial;
|
|
485
|
+
} else {
|
|
486
|
+
const material = new StandardMaterial();
|
|
487
|
+
material.diffuse = new Color(0, 1, 0); // Green
|
|
488
|
+
material.useLighting = false;
|
|
489
|
+
material.update();
|
|
490
|
+
this.entryCircleMaterial = material;
|
|
491
|
+
}
|
|
492
|
+
if (params?.exitCircleMaterial) {
|
|
493
|
+
this.exitCircleMaterial = params.exitCircleMaterial;
|
|
494
|
+
} else {
|
|
495
|
+
const material = new StandardMaterial();
|
|
496
|
+
material.diffuse = new Color(0, 0, 1); // Blue
|
|
497
|
+
material.useLighting = false;
|
|
498
|
+
material.update();
|
|
499
|
+
this.exitCircleMaterial = material;
|
|
500
|
+
}
|
|
501
|
+
if (params?.lineMaterial) {
|
|
502
|
+
this.lineMaterial = params.lineMaterial;
|
|
503
|
+
} else {
|
|
504
|
+
const material = new StandardMaterial();
|
|
505
|
+
material.diffuse = new Color(1, 0, 0); // Red
|
|
506
|
+
material.useLighting = false;
|
|
507
|
+
material.update();
|
|
508
|
+
this.lineMaterial = material;
|
|
509
|
+
}
|
|
510
|
+
this.updateHelper();
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Updates the visual representation of the off-mesh connections.
|
|
514
|
+
*/
|
|
515
|
+
updateHelper() {
|
|
516
|
+
// Remove all child entities
|
|
517
|
+
while (this.children.length > 0) {
|
|
518
|
+
this.children[0].destroy();
|
|
519
|
+
}
|
|
520
|
+
const graphicsDevice = this.app.graphicsDevice;
|
|
521
|
+
for (const offMeshConnection of this.offMeshConnections) {
|
|
522
|
+
// Create circle mesh at start position
|
|
523
|
+
const circleMesh = createCircleMesh(graphicsDevice, offMeshConnection.radius, 16);
|
|
524
|
+
const circleEntity = new Entity();
|
|
525
|
+
circleEntity.addComponent('render', {
|
|
526
|
+
meshInstances: [new MeshInstance(circleMesh, this.entryCircleMaterial)]
|
|
527
|
+
});
|
|
528
|
+
circleEntity.setPosition(offMeshConnection.startPosition);
|
|
529
|
+
circleEntity.setLocalEulerAngles(-90, 0, 0); // Rotate to lie flat on XZ plane
|
|
530
|
+
this.addChild(circleEntity);
|
|
531
|
+
// Create circle mesh at end position
|
|
532
|
+
const endCircleEntity = new Entity();
|
|
533
|
+
endCircleEntity.addComponent('render', {
|
|
534
|
+
meshInstances: [new MeshInstance(circleMesh, offMeshConnection.bidirectional ? this.entryCircleMaterial : this.exitCircleMaterial)]
|
|
535
|
+
});
|
|
536
|
+
endCircleEntity.setPosition(offMeshConnection.endPosition);
|
|
537
|
+
endCircleEntity.setLocalEulerAngles(-90, 0, 0); // Rotate to lie flat on XZ plane
|
|
538
|
+
this.addChild(endCircleEntity);
|
|
539
|
+
// Create curve between points
|
|
540
|
+
const start = offMeshConnection.startPosition.clone();
|
|
541
|
+
const end = offMeshConnection.endPosition.clone();
|
|
542
|
+
const middle = new Vec3().add2(start, end).mulScalar(0.5);
|
|
543
|
+
middle.y *= 1.2; // Elevate the middle point for a curve effect
|
|
544
|
+
// Generate points along a quadratic Bezier curve
|
|
545
|
+
const curvePoints = generateBezierCurve([start, middle, end], 50);
|
|
546
|
+
// Create line mesh
|
|
547
|
+
const lineMesh = createLineMesh(graphicsDevice, curvePoints);
|
|
548
|
+
const lineEntity = new Entity();
|
|
549
|
+
lineEntity.addComponent('render', {
|
|
550
|
+
meshInstances: [new MeshInstance(lineMesh, this.lineMaterial)]
|
|
551
|
+
});
|
|
552
|
+
this.addChild(lineEntity);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
/**
|
|
557
|
+
* Creates a circle mesh.
|
|
558
|
+
* @param {GraphicsDevice} graphicsDevice - The graphics device.
|
|
559
|
+
* @param {number} radius - Radius of the circle.
|
|
560
|
+
* @param {number} segments - Number of segments.
|
|
561
|
+
* @returns {Mesh} - The circle mesh.
|
|
562
|
+
*/
|
|
563
|
+
function createCircleMesh(graphicsDevice, radius, segments) {
|
|
564
|
+
const positions = [];
|
|
565
|
+
const indices = [];
|
|
566
|
+
// Create circle vertices
|
|
567
|
+
for (let i = 0; i <= segments; i++) {
|
|
568
|
+
const theta = i / segments * Math.PI * 2;
|
|
569
|
+
const x = radius * Math.cos(theta);
|
|
570
|
+
const z = radius * Math.sin(theta);
|
|
571
|
+
positions.push(x, 0, z);
|
|
572
|
+
}
|
|
573
|
+
// Center point
|
|
574
|
+
positions.push(0, 0, 0);
|
|
575
|
+
const centerIndex = positions.length / 3 - 1;
|
|
576
|
+
// Create indices
|
|
577
|
+
for (let i = 0; i < segments; i++) {
|
|
578
|
+
indices.push(i, (i + 1) % segments, centerIndex);
|
|
579
|
+
}
|
|
580
|
+
return createMesh(graphicsDevice, positions, {
|
|
581
|
+
indices: indices
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Generates points along a quadratic Bezier curve.
|
|
586
|
+
* @param {Vec3[]} points - Control points.
|
|
587
|
+
* @param {number} numPoints - Number of points to generate.
|
|
588
|
+
* @returns {Vec3[]} - Points along the curve.
|
|
589
|
+
*/
|
|
590
|
+
function generateBezierCurve(points, numPoints) {
|
|
591
|
+
const curvePoints = [];
|
|
592
|
+
for (let i = 0; i <= numPoints; i++) {
|
|
593
|
+
const t = i / numPoints;
|
|
594
|
+
const point = bezierQuadratic(points[0], points[1], points[2], t);
|
|
595
|
+
curvePoints.push(point);
|
|
596
|
+
}
|
|
597
|
+
return curvePoints;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Computes a point on a quadratic Bezier curve.
|
|
601
|
+
* @param {Vec3} p0 - Start point.
|
|
602
|
+
* @param {Vec3} p1 - Control point.
|
|
603
|
+
* @param {Vec3} p2 - End point.
|
|
604
|
+
* @param {number} t - Parameter between 0 and 1.
|
|
605
|
+
* @returns {Vec3} - Point on the curve.
|
|
606
|
+
*/
|
|
607
|
+
function bezierQuadratic(p0, p1, p2, t) {
|
|
608
|
+
const oneMinusT = 1 - t;
|
|
609
|
+
const x = oneMinusT * oneMinusT * p0.x + 2 * oneMinusT * t * p1.x + t * t * p2.x;
|
|
610
|
+
const y = oneMinusT * oneMinusT * p0.y + 2 * oneMinusT * t * p1.y + t * t * p2.y;
|
|
611
|
+
const z = oneMinusT * oneMinusT * p0.z + 2 * oneMinusT * t * p1.z + t * t * p2.z;
|
|
612
|
+
return new Vec3(x, y, z);
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Creates a line mesh from an array of points.
|
|
616
|
+
* @param {GraphicsDevice} graphicsDevice - The graphics device.
|
|
617
|
+
* @param {Vec3[]} points - Points of the line.
|
|
618
|
+
* @returns {Mesh} - The line mesh.
|
|
619
|
+
*/
|
|
620
|
+
function createLineMesh(graphicsDevice, points) {
|
|
621
|
+
const positions = [];
|
|
622
|
+
const indices = [];
|
|
623
|
+
for (let i = 0; i < points.length; i++) {
|
|
624
|
+
positions.push(points[i].x, points[i].y, points[i].z);
|
|
625
|
+
}
|
|
626
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
627
|
+
indices.push(i, i + 1);
|
|
628
|
+
}
|
|
629
|
+
return createMesh(graphicsDevice, positions, {
|
|
630
|
+
indices: indices,
|
|
631
|
+
primitiveType: PRIMITIVE_LINES
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Represents a helper class to visualize tile cache obstacles in PlayCanvas.
|
|
637
|
+
*/
|
|
638
|
+
class TileCacheHelper extends Entity {
|
|
639
|
+
obstacleMeshes = new Map();
|
|
640
|
+
constructor(tileCache, params) {
|
|
641
|
+
super();
|
|
642
|
+
this.tileCache = tileCache;
|
|
643
|
+
// Initialize obstacleMaterial
|
|
644
|
+
if (params?.obstacleMaterial) {
|
|
645
|
+
this.obstacleMaterial = params.obstacleMaterial;
|
|
646
|
+
} else {
|
|
647
|
+
const material = new StandardMaterial();
|
|
648
|
+
material.diffuse = new Color(1, 0, 0); // Red color
|
|
649
|
+
material.update();
|
|
650
|
+
this.obstacleMaterial = material;
|
|
651
|
+
}
|
|
652
|
+
this.updateHelper();
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Update the obstacle meshes.
|
|
656
|
+
*
|
|
657
|
+
* This should be called after adding or removing obstacles.
|
|
658
|
+
*/
|
|
659
|
+
updateHelper() {
|
|
660
|
+
const unseen = new Set(this.obstacleMeshes.keys());
|
|
661
|
+
for (const obstacle of this.tileCache.obstacles.values()) {
|
|
662
|
+
let obstacleEntity = this.obstacleMeshes.get(obstacle);
|
|
663
|
+
unseen.delete(obstacle);
|
|
664
|
+
if (!obstacleEntity) {
|
|
665
|
+
const {
|
|
666
|
+
position
|
|
667
|
+
} = obstacle;
|
|
668
|
+
obstacleEntity = new Entity();
|
|
669
|
+
obstacleEntity.setPosition(new Vec3(position.x, position.y, position.z));
|
|
670
|
+
if (obstacle.type === 'box') {
|
|
671
|
+
const {
|
|
672
|
+
halfExtents,
|
|
673
|
+
angle
|
|
674
|
+
} = obstacle;
|
|
675
|
+
obstacleEntity.addComponent('render', {
|
|
676
|
+
type: 'box',
|
|
677
|
+
material: this.obstacleMaterial
|
|
678
|
+
});
|
|
679
|
+
obstacleEntity.setLocalScale(halfExtents.x * 2, halfExtents.y * 2, halfExtents.z * 2);
|
|
680
|
+
obstacleEntity.setEulerAngles(0, angle * (180 / Math.PI), 0);
|
|
681
|
+
} else if (obstacle.type === 'cylinder') {
|
|
682
|
+
const {
|
|
683
|
+
radius,
|
|
684
|
+
height
|
|
685
|
+
} = obstacle;
|
|
686
|
+
obstacleEntity.addComponent('render', {
|
|
687
|
+
type: 'cylinder',
|
|
688
|
+
material: this.obstacleMaterial
|
|
689
|
+
});
|
|
690
|
+
obstacleEntity.setLocalScale(radius * 2, height, radius * 2);
|
|
691
|
+
obstacleEntity.translateLocal(0, height / 2, 0);
|
|
692
|
+
} else {
|
|
693
|
+
throw new Error(`Unknown obstacle type: ${obstacle.type}`);
|
|
694
|
+
}
|
|
695
|
+
// Set render style to wireframe
|
|
696
|
+
if (obstacleEntity.render) {
|
|
697
|
+
obstacleEntity.render.meshInstances.forEach(meshInstance => {
|
|
698
|
+
meshInstance.renderStyle = RENDERSTYLE_WIREFRAME;
|
|
699
|
+
});
|
|
700
|
+
}
|
|
701
|
+
this.addChild(obstacleEntity);
|
|
702
|
+
this.obstacleMeshes.set(obstacle, obstacleEntity);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
for (const obstacle of unseen) {
|
|
706
|
+
const obstacleEntity = this.obstacleMeshes.get(obstacle);
|
|
707
|
+
if (obstacleEntity) {
|
|
708
|
+
obstacleEntity.destroy();
|
|
709
|
+
this.obstacleMeshes.delete(obstacle);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const _vector3 = new Vec3();
|
|
716
|
+
const getPositionsAndIndices = meshInstances => {
|
|
717
|
+
const toMerge = [];
|
|
718
|
+
for (const meshInstance of meshInstances) {
|
|
719
|
+
const mesh = meshInstance.mesh;
|
|
720
|
+
const vertexBuffer = mesh.vertexBuffer;
|
|
721
|
+
if (!vertexBuffer) {
|
|
722
|
+
continue;
|
|
723
|
+
}
|
|
724
|
+
const vertexFormat = vertexBuffer.getFormat();
|
|
725
|
+
const positionElement = vertexFormat.elements.find(element => element.name === SEMANTIC_POSITION);
|
|
726
|
+
if (!positionElement || positionElement.numComponents !== 3) {
|
|
727
|
+
continue;
|
|
728
|
+
}
|
|
729
|
+
const worldMatrix = meshInstance.node.getWorldTransform();
|
|
730
|
+
const positions = new Float32Array(vertexBuffer.getNumVertices() * 3);
|
|
731
|
+
const iterator = new VertexIterator(vertexBuffer);
|
|
732
|
+
iterator.readData(SEMANTIC_POSITION, positions);
|
|
733
|
+
for (let i = 0; i < positions.length; i += 3) {
|
|
734
|
+
_vector3.set(positions[i], positions[i + 1], positions[i + 2]);
|
|
735
|
+
worldMatrix.transformPoint(_vector3, _vector3);
|
|
736
|
+
positions[i] = _vector3.x;
|
|
737
|
+
positions[i + 1] = _vector3.y;
|
|
738
|
+
positions[i + 2] = _vector3.z;
|
|
739
|
+
}
|
|
740
|
+
let indices;
|
|
741
|
+
if (mesh.indexBuffer[0]) {
|
|
742
|
+
const indexBuffer = mesh.indexBuffer[0];
|
|
743
|
+
const indexFormat = indexBuffer.getFormat() === INDEXFORMAT_UINT32 ? Uint32Array : Uint16Array;
|
|
744
|
+
const indicesCopy = new indexFormat(indexBuffer.getNumIndices());
|
|
745
|
+
const originalIndices = new indexFormat(indexBuffer.storage);
|
|
746
|
+
indicesCopy.set(originalIndices);
|
|
747
|
+
indices = indicesCopy;
|
|
748
|
+
} else {
|
|
749
|
+
// this will become indexed when merging with other meshes
|
|
750
|
+
const ascendingIndex = [];
|
|
751
|
+
for (let i = 0; i < vertexBuffer.getNumVertices(); i++) {
|
|
752
|
+
ascendingIndex.push(i);
|
|
753
|
+
}
|
|
754
|
+
indices = ascendingIndex;
|
|
755
|
+
}
|
|
756
|
+
toMerge.push({
|
|
757
|
+
positions,
|
|
758
|
+
indices
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
return mergePositionsAndIndices(toMerge);
|
|
762
|
+
};
|
|
763
|
+
|
|
764
|
+
const pcToSoloNavMesh = (meshes, navMeshGeneratorConfig = {}, keepIntermediates = false) => {
|
|
765
|
+
const [positions, indices] = getPositionsAndIndices(meshes);
|
|
766
|
+
return generateSoloNavMesh(positions, indices, navMeshGeneratorConfig, keepIntermediates);
|
|
767
|
+
};
|
|
768
|
+
const pcToTiledNavMesh = (meshes, navMeshGeneratorConfig = {}, keepIntermediates = false) => {
|
|
769
|
+
const [positions, indices] = getPositionsAndIndices(meshes);
|
|
770
|
+
return generateTiledNavMesh(positions, indices, navMeshGeneratorConfig, keepIntermediates);
|
|
771
|
+
};
|
|
772
|
+
const threeToTileCache = (meshes, navMeshGeneratorConfig = {}, keepIntermediates = false) => {
|
|
773
|
+
const [positions, indices] = getPositionsAndIndices(meshes);
|
|
774
|
+
return generateTileCache(positions, indices, navMeshGeneratorConfig, keepIntermediates);
|
|
775
|
+
};
|
|
776
|
+
|
|
777
|
+
export { CrowdHelper, DebugDrawer, NavMeshHelper, OffMeshConnectionsHelper, TileCacheHelper, getPositionsAndIndices, pcToSoloNavMesh, pcToTiledNavMesh, threeToTileCache };
|
|
778
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../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","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":["DebugDrawer","Entity","constructor","graphicsDevice","params","debugDrawerUtils","DebugDrawerUtils","triMaterial","StandardMaterial","useLighting","diffuse","Color","opacity","blendType","BLEND_NORMAL","depthWrite","update","pointMaterial","lineMaterial","emissive","drawPrimitives","primitives","primitive","type","drawPoints","drawLines","drawTris","drawQuads","drawHeightfieldSolid","hf","drawHeightfieldWalkable","drawCompactHeightfieldSolid","chf","drawCompactHeightfieldRegions","drawCompactHeightfieldDistance","drawHeightfieldLayer","layer","idx","drawHeightfieldLayers","lset","drawRegionConnections","cset","alpha","drawRawContours","drawContours","drawPolyMesh","mesh","drawPolyMeshDetail","dmesh","drawNavMesh","flags","drawNavMeshWithClosedList","query","drawNavMeshNodes","drawNavMeshBVTree","drawNavMeshPortals","drawNavMeshPolysWithFlags","col","drawNavMeshPoly","ref","reset","children","length","child","destroy","removeChild","dispose","positions","colors","i","vertices","x","y","z","r","g","b","a","push","createPointMesh","meshInstance","MeshInstance","entity","addComponent","meshInstances","addChild","createLineMesh","createTriangleMesh","x0","y0","z0","r0","g0","b0","a0","x1","y1","z1","r1","g1","b1","a1","x2","y2","z2","r2","g2","b2","a2","x3","y3","z3","r3","g3","b3","a3","vertexFormat","VertexFormat","semantic","SEMANTIC_POSITION","components","TYPE_FLOAT32","SEMANTIC_COLOR","vertexCount","vertexBuffer","VertexBuffer","usage","BUFFER_STATIC","vertexData","Float32Array","lock","unlock","Mesh","PRIMITIVE_POINTS","base","count","indexed","PRIMITIVE_LINES","PRIMITIVE_TRIANGLES","_position","Vec3","_velocity","CrowdHelper","GraphNode","agentMeshes","Map","agentMeshData","crowd","recastCrowd","agentMaterial","material","set","agents","getAgents","unseen","Set","keys","agent","delete","position","velocity","agentMesh","get","undefined","createAgentMesh","updateAgentGeometry","setLocalPosition","height","lookAt","copy","getPosition","add","agentId","render","agentIndex","radius","agentParams","agentData","forEach","fromGeometry","CylinderGeometry","NavMeshHelper","navMesh","navMeshMaterial","createDefaultMaterial","updateMesh","indices","getDebugNavMesh","normals","calculateNormals","setPositions","setIndices","setNormals","device","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","updateHelper","app","offMeshConnection","circleMesh","createCircleMesh","circleEntity","setPosition","startPosition","setLocalEulerAngles","endCircleEntity","bidirectional","endPosition","start","clone","end","middle","add2","mulScalar","curvePoints","generateBezierCurve","lineMesh","lineEntity","segments","theta","Math","PI","cos","sin","centerIndex","createMesh","points","numPoints","t","point","bezierQuadratic","p0","p1","p2","oneMinusT","primitiveType","TileCacheHelper","obstacleMeshes","tileCache","obstacleMaterial","obstacle","obstacles","values","obstacleEntity","halfExtents","angle","setLocalScale","setEulerAngles","translateLocal","Error","renderStyle","RENDERSTYLE_WIREFRAME","_vector3","getPositionsAndIndices","toMerge","getFormat","positionElement","elements","find","element","name","numComponents","worldMatrix","node","getWorldTransform","getNumVertices","iterator","VertexIterator","readData","transformPoint","indexBuffer","indexFormat","INDEXFORMAT_UINT32","Uint32Array","Uint16Array","indicesCopy","getNumIndices","originalIndices","storage","ascendingIndex","mergePositionsAndIndices","pcToSoloNavMesh","meshes","navMeshGeneratorConfig","keepIntermediates","generateSoloNavMesh","pcToTiledNavMesh","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SoloNavMeshGeneratorConfig, TileCacheGeneratorConfig, TiledNavMeshGeneratorConfig } from '@recast-navigation/generators';
|
|
2
|
+
import { MeshInstance } from 'playcanvas';
|
|
3
|
+
export declare const pcToSoloNavMesh: (meshes: MeshInstance[], navMeshGeneratorConfig?: Partial<SoloNavMeshGeneratorConfig>, keepIntermediates?: boolean) => import("@recast-navigation/generators").SoloNavMeshGeneratorResult;
|
|
4
|
+
export declare const pcToTiledNavMesh: (meshes: MeshInstance[], navMeshGeneratorConfig?: Partial<TiledNavMeshGeneratorConfig>, keepIntermediates?: boolean) => import("@recast-navigation/generators").TiledNavMeshGeneratorResult;
|
|
5
|
+
export declare const threeToTileCache: (meshes: MeshInstance[], navMeshGeneratorConfig?: Partial<TileCacheGeneratorConfig>, keepIntermediates?: boolean) => import("@recast-navigation/generators").TileCacheGeneratorResult;
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@recast-navigation/playcanvas",
|
|
3
|
+
"description": "Utilities for using recast-navigation with PlayCanvas",
|
|
4
|
+
"version": "0.35.0",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"homepage": "https://github.com/isaac-mason/recast-navigation-js",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/isaac-mason/recast-navigation-js/issues"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "./dist/index.mjs",
|
|
12
|
+
"module": "./dist/index.mjs",
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/**",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "rollup --config rollup.config.js --bundleConfigAsCjs",
|
|
21
|
+
"test": "tsc",
|
|
22
|
+
"lint": "eslint src"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@recast-navigation/core": "0.35.0",
|
|
26
|
+
"@recast-navigation/generators": "0.35.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@babel/core": "^7.24.5",
|
|
30
|
+
"@babel/preset-env": "^7.24.5",
|
|
31
|
+
"@babel/preset-typescript": "^7.24.1",
|
|
32
|
+
"@isaac-mason/eslint-config-typescript": "^0.0.9",
|
|
33
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
34
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
35
|
+
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
36
|
+
"@rollup/plugin-terser": "^0.4.3",
|
|
37
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
38
|
+
"eslint": "^9.6.0",
|
|
39
|
+
"playcanvas": "^2.0.0",
|
|
40
|
+
"prettier": "^3.1.0",
|
|
41
|
+
"rollup": "^4.14.0",
|
|
42
|
+
"rollup-plugin-copy": "^3.4.0",
|
|
43
|
+
"rollup-plugin-filesize": "^10.0.0",
|
|
44
|
+
"typescript": "^5.4.3"
|
|
45
|
+
},
|
|
46
|
+
"packageManager": "yarn@3.2.1",
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"playcanvas": "^2.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|