void buildTile(uint mapID, uint tileX, uint tileY, dtNavMesh navMesh) { Console.WriteLine($"{m_totalTilesProcessed * 100 / m_totalTiles}% [Map {mapID:D4}] Building tile [{tileX:D2},{tileY:D2}]]"); MeshData meshData = new MeshData(); // get heightmap data m_terrainBuilder.loadMap(mapID, tileX, tileY, meshData, _vmapManager); // get model data m_terrainBuilder.loadVMap(mapID, tileY, tileX, meshData); // if there is no data, give up now if (meshData.solidVerts.Count == 0 && meshData.liquidVerts.Count == 0) { return; } // remove unused vertices TerrainBuilder.cleanVertices(meshData.solidVerts, meshData.solidTris); TerrainBuilder.cleanVertices(meshData.liquidVerts, meshData.liquidTris); // gather all mesh data for final data check, and bounds calculation float[] allVerts = new float[meshData.liquidVerts.Count + meshData.solidVerts.Count]; Array.Copy(meshData.liquidVerts.ToArray(), allVerts, meshData.liquidVerts.Count); Array.Copy(meshData.solidVerts.ToArray(), 0, allVerts, meshData.liquidVerts.Count, meshData.solidVerts.Count); if (allVerts.Length == 0) { return; } // get bounds of current tile getTileBounds(tileX, tileY, allVerts, allVerts.Length / 3, out float[] bmin, out float[] bmax); m_terrainBuilder.loadOffMeshConnections(mapID, tileX, tileY, meshData, null); // build navmesh tile buildMoveMapTile(mapID, tileX, tileY, meshData, bmin, bmax, navMesh); }
void buildTile(uint mapID, uint tileX, uint tileY, dtNavMesh navMesh) { MeshData meshData = new MeshData(); // get heightmap data m_terrainBuilder.loadMap(mapID, tileX, tileY, meshData, _vmapManager); // get model data m_terrainBuilder.loadVMap(mapID, tileY, tileX, meshData); // if there is no data, give up now if (meshData.solidVerts.Count == 0 && meshData.liquidVerts.Count == 0) { return; } // remove unused vertices TerrainBuilder.cleanVertices(meshData.solidVerts, meshData.solidTris); TerrainBuilder.cleanVertices(meshData.liquidVerts, meshData.liquidTris); // gather all mesh data for final data check, and bounds calculation List <float> allVerts = new List <float>(); allVerts.AddRange(meshData.liquidVerts); allVerts.AddRange(meshData.solidVerts); if (allVerts.Count == 0) { return; } // get bounds of current tile getTileBounds(tileX, tileY, allVerts.ToArray(), allVerts.Count / 3, out float[] bmin, out float[] bmax); m_terrainBuilder.loadOffMeshConnections(mapID, tileX, tileY, meshData, null); // build navmesh tile buildMoveMapTile(mapID, tileX, tileY, meshData, bmin, bmax, navMesh); }