@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 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,4 @@
1
+ export * from './crowd-helper';
2
+ export * from './nav-mesh-helper';
3
+ export * from './off-mesh-connections-helper';
4
+ export * from './tile-cache-helper';
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ export * from './debug';
2
+ export * from './helpers';
3
+ export * from './utils';
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;
@@ -0,0 +1,2 @@
1
+ import { MeshInstance } from 'playcanvas';
2
+ export declare const getPositionsAndIndices: (meshInstances: MeshInstance[]) => [Float32Array, Uint32Array];
@@ -0,0 +1,2 @@
1
+ export * from './generators';
2
+ export * from './get-positions-and-indices';
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
+ }