AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
MMAP::MapBuilder Class Reference

#include "MapBuilder.h"

Public Member Functions

 MapBuilder (Config *config, int mapid, unsigned int threads)
 
 ~MapBuilder ()
 
void buildMeshFromFile (char *name)
 
void buildSingleTile (uint32 mapID, uint32 tileX, uint32 tileY)
 
void buildMaps (Optional< uint32 > mapID)
 
Config const & getConfig () const
 

Private Member Functions

void buildMap (uint32 mapID)
 
void discoverTiles ()
 
std::set< uint32 > * getTileList (uint32 mapID)
 
void buildNavMesh (uint32 mapID, dtNavMesh *&navMesh)
 
void getTileBounds (uint32 tileX, uint32 tileY, float *verts, int vertCount, float *bmin, float *bmax) const
 
void getGridBounds (uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const
 
bool shouldSkipMap (uint32 mapID) const
 
bool isTransportMap (uint32 mapID) const
 
bool isContinentMap (uint32 mapID) const
 
rcConfig getRecastConfig (ResolvedMeshConfig const &cfg, float bmin[3], float bmax[3]) const
 
uint32 percentageDone (uint32 totalTiles, uint32 totalTilesDone) const
 
uint32 currentPercentageDone () const
 

Private Attributes

TerrainBuilderm_terrainBuilder {nullptr}
 
TileList m_tiles
 
bool m_debugOutput
 
unsigned int m_threads
 
bool m_skipContinents
 
bool m_skipJunkMaps
 
bool m_skipBattlegrounds
 
bool m_skipLiquid
 
int32 m_mapid
 
Configm_config
 
std::atomic< uint32m_totalTiles
 
std::atomic< uint32m_totalTilesProcessed
 
rcContext * m_rcContext {nullptr}
 
std::vector< TileBuilder * > m_tileBuilders
 
ProducerConsumerQueue< TileInfo_queue
 
std::atomic< bool > _cancelationToken
 

Friends

class TileBuilder
 

Detailed Description

Constructor & Destructor Documentation

◆ MapBuilder()

MMAP::MapBuilder::MapBuilder ( Config config,
int  mapid,
unsigned int  threads 
)
58 :
59 m_config (config),
60 m_debugOutput (config->IsDebugOutputEnabled()),
61 m_threads (threads),
62 m_skipContinents (config->ShouldSkipContinents()),
63 m_skipJunkMaps (config->ShouldSkipJunkMaps()),
64 m_skipBattlegrounds (config->ShouldSkipBattlegrounds()),
65 m_skipLiquid (config->ShouldSkipLiquid()),
66 m_mapid (mapid),
67 m_totalTiles (0u),
69
70 _cancelationToken (false)
71 {
72 m_terrainBuilder = new TerrainBuilder(config->DataDirPath(), config->ShouldSkipLiquid());
73
74 m_rcContext = new rcContext(false);
75
76 // At least 1 thread is needed
77 m_threads = std::max(1u, m_threads);
78
80 }
int32 m_mapid
Definition MapBuilder.h:175
Config * m_config
Definition MapBuilder.h:177
bool m_skipContinents
Definition MapBuilder.h:170
void discoverTiles()
Definition MapBuilder.cpp:96
bool m_skipLiquid
Definition MapBuilder.h:173
std::atomic< uint32 > m_totalTiles
Definition MapBuilder.h:179
rcContext * m_rcContext
Definition MapBuilder.h:183
std::atomic< bool > _cancelationToken
Definition MapBuilder.h:187
bool m_skipBattlegrounds
Definition MapBuilder.h:172
bool m_skipJunkMaps
Definition MapBuilder.h:171
std::atomic< uint32 > m_totalTilesProcessed
Definition MapBuilder.h:180
bool m_debugOutput
Definition MapBuilder.h:167
TerrainBuilder * m_terrainBuilder
Definition MapBuilder.h:164
unsigned int m_threads
Definition MapBuilder.h:169

References MMAP::Config::DataDirPath(), discoverTiles(), m_rcContext, m_terrainBuilder, m_threads, and MMAP::Config::ShouldSkipLiquid().

◆ ~MapBuilder()

MMAP::MapBuilder::~MapBuilder ( )
84 {
85 for (auto & m_tile : m_tiles)
86 {
87 m_tile.m_tiles->clear();
88 delete m_tile.m_tiles;
89 }
90
91 delete m_terrainBuilder;
92 delete m_rcContext;
93 }
TileList m_tiles
Definition MapBuilder.h:165

References m_rcContext, m_terrainBuilder, and m_tiles.

Member Function Documentation

◆ buildMap()

void MMAP::MapBuilder::buildMap ( uint32  mapID)
private
419 {
420 std::set<uint32>* tiles = getTileList(mapID);
421
422 if (!tiles->empty())
423 {
424 // build navMesh
425 dtNavMesh* navMesh = nullptr;
426 buildNavMesh(mapID, navMesh);
427 if (!navMesh)
428 {
429 printf("[Map %03i] Failed creating navmesh!\n", mapID);
430 m_totalTilesProcessed += tiles->size();
431 return;
432 }
433
434 // now start building mmtiles for each tile
435 printf("[Map %03i] We have %u tiles. \n", mapID, (unsigned int)tiles->size());
436 for (unsigned int tile : *tiles)
437 {
438 uint32 tileX, tileY;
439
440 // unpack tile coords
441 StaticMapTree::unpackTileID(tile, tileX, tileY);
442
443 TileInfo tileInfo;
444 tileInfo.m_mapId = mapID;
445 tileInfo.m_tileX = tileX;
446 tileInfo.m_tileY = tileY;
447 memcpy(&tileInfo.m_navMeshParams, navMesh->getParams(), sizeof(dtNavMeshParams));
448 _queue.Push(tileInfo);
449 }
450
451 dtFreeNavMesh(navMesh);
452 }
453 }
std::uint32_t uint32
Definition Define.h:107
ProducerConsumerQueue< TileInfo > _queue
Definition MapBuilder.h:186
std::set< uint32 > * getTileList(uint32 mapID)
Definition MapBuilder.cpp:189
void buildNavMesh(uint32 mapID, dtNavMesh *&navMesh)
Definition MapBuilder.cpp:508
static void unpackTileID(uint32 ID, uint32 &tileX, uint32 &tileY)
Definition MapTree.h:71

References _queue, buildNavMesh(), getTileList(), MMAP::TileInfo::m_mapId, MMAP::TileInfo::m_navMeshParams, MMAP::TileInfo::m_tileX, MMAP::TileInfo::m_tileY, m_totalTilesProcessed, and VMAP::StaticMapTree::unpackTileID().

Referenced by buildMaps().

◆ buildMaps()

void MMAP::MapBuilder::buildMaps ( Optional< uint32 mapID)
202 {
203 printf("Using %u threads to generate mmaps\n", m_threads);
204
205 for (unsigned int i = 0; i < m_threads; ++i)
206 {
208 }
209
210 if (mapID)
211 {
212 buildMap(*mapID);
213 }
214 else
215 {
216 // Build all maps if no map id has been specified
217 for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it)
218 {
219 if (!shouldSkipMap(it->m_mapId))
220 buildMap(it->m_mapId);
221 }
222 }
223
224 while (!_queue.Empty())
225 {
226 std::this_thread::sleep_for(std::chrono::milliseconds(1000));
227 }
228
229 _cancelationToken = true;
230
231 _queue.Cancel();
232
233 for (auto& builder : m_tileBuilders)
234 delete builder;
235
236 m_tileBuilders.clear();
237 }
std::vector< TileBuilder * > m_tileBuilders
Definition MapBuilder.h:185
bool shouldSkipMap(uint32 mapID) const
Definition MapBuilder.cpp:931
friend class TileBuilder
Definition MapBuilder.h:124
void buildMap(uint32 mapID)
Definition MapBuilder.cpp:418

References _cancelationToken, _queue, buildMap(), m_debugOutput, m_skipLiquid, m_threads, m_tileBuilders, m_tiles, shouldSkipMap(), and TileBuilder.

Referenced by main().

◆ buildMeshFromFile()

void MMAP::MapBuilder::buildMeshFromFile ( char *  name)
285 {
286 FILE* file = fopen(name, "rb");
287 if (!file)
288 return;
289
290 printf("Building mesh from file\n");
291 int tileX, tileY, mapId;
292 if (fread(&mapId, sizeof(int), 1, file) != 1)
293 {
294 fclose(file);
295 return;
296 }
297 if (fread(&tileX, sizeof(int), 1, file) != 1)
298 {
299 fclose(file);
300 return;
301 }
302 if (fread(&tileY, sizeof(int), 1, file) != 1)
303 {
304 fclose(file);
305 return;
306 }
307
308 dtNavMesh* navMesh = nullptr;
309 buildNavMesh(mapId, navMesh);
310 if (!navMesh)
311 {
312 printf("Failed creating navmesh! \n");
313 fclose(file);
314 return;
315 }
316
317 uint32 verticesCount, indicesCount;
318 if (fread(&verticesCount, sizeof(uint32), 1, file) != 1)
319 {
320 fclose(file);
321 return;
322 }
323
324 if (fread(&indicesCount, sizeof(uint32), 1, file) != 1)
325 {
326 fclose(file);
327 return;
328 }
329
330 float* verts = new float[verticesCount];
331 int* inds = new int[indicesCount];
332
333 if (fread(verts, sizeof(float), verticesCount, file) != verticesCount)
334 {
335 fclose(file);
336 delete[] verts;
337 delete[] inds; // cppcheck-suppress uninitdata
338 return;
339 }
340
341 if (fread(inds, sizeof(int), indicesCount, file) != indicesCount)
342 {
343 fclose(file);
344 delete[] verts;
345 delete[] inds;
346 return;
347 }
348
349 MeshData data;
350
351 for (uint32 i = 0; i < verticesCount; ++i)
352 data.solidVerts.append(verts[i]);
353 delete[] verts;
354
355 for (uint32 i = 0; i < indicesCount; ++i)
356 data.solidTris.append(inds[i]);
357 delete[] inds;
358
359 TerrainBuilder::cleanVertices(data.solidVerts, data.solidTris);
360 // get bounds of current tile
361 float bmin[3], bmax[3];
362 getTileBounds(tileX, tileY, data.solidVerts.getCArray(), data.solidVerts.size() / 3, bmin, bmax);
363
364 // build navmesh tile
366 tileBuilder.buildMoveMapTile(mapId, tileX, tileY, data, bmin, bmax, navMesh);
367 fclose(file);
368 }
void getTileBounds(uint32 tileX, uint32 tileY, float *verts, int vertCount, float *bmin, float *bmax) const
Definition MapBuilder.cpp:912
static void cleanVertices(G3D::Array< float > &verts, G3D::Array< int > &tris)
Definition TerrainBuilder.cpp:887

References MMAP::TileBuilder::buildMoveMapTile(), buildNavMesh(), MMAP::TerrainBuilder::cleanVertices(), getTileBounds(), m_debugOutput, m_skipLiquid, MMAP::MeshData::solidTris, MMAP::MeshData::solidVerts, and TileBuilder.

Referenced by main().

◆ buildNavMesh()

void MMAP::MapBuilder::buildNavMesh ( uint32  mapID,
dtNavMesh *&  navMesh 
)
private

‍*** calculate number of bits needed to store tiles & polys ***‍/

509 {
510 std::set<uint32>* tiles = getTileList(mapID);
511
512 // old code for non-statically assigned bitmask sizes:
514 //int tileBits = dtIlog2(dtNextPow2(tiles->size()));
515 //if (tileBits < 1) tileBits = 1; // need at least one bit!
516 //int polyBits = sizeof(dtPolyRef)*8 - SALT_MIN_BITS - tileBits;
517
518 int polyBits = DT_POLY_BITS;
519
520 int maxTiles = tiles->size();
521 int maxPolysPerTile = 1 << polyBits;
522
523 /*** calculate bounds of map ***/
524
525 uint32 tileXMin = 64, tileYMin = 64, tileXMax = 0, tileYMax = 0, tileX, tileY;
526 for (unsigned int tile : *tiles)
527 {
528 StaticMapTree::unpackTileID(tile, tileX, tileY);
529
530 if (tileX > tileXMax)
531 tileXMax = tileX;
532 else if (tileX < tileXMin)
533 tileXMin = tileX;
534
535 if (tileY > tileYMax)
536 tileYMax = tileY;
537 else if (tileY < tileYMin)
538 tileYMin = tileY;
539 }
540
541 // use Max because '32 - tileX' is negative for values over 32
542 float bmin[3], bmax[3];
543 getTileBounds(tileXMax, tileYMax, nullptr, 0, bmin, bmax);
544
545 /*** now create the navmesh ***/
546
547 // navmesh creation params
548 dtNavMeshParams navMeshParams;
549 memset(&navMeshParams, 0, sizeof(dtNavMeshParams));
550 navMeshParams.tileWidth = GRID_SIZE;
551 navMeshParams.tileHeight = GRID_SIZE;
552 rcVcopy(navMeshParams.orig, bmin);
553 navMeshParams.maxTiles = maxTiles;
554 navMeshParams.maxPolys = maxPolysPerTile;
555
556 navMesh = dtAllocNavMesh();
557 printf("[Map %03i] Creating navMesh...\n", mapID);
558 if (!navMesh->init(&navMeshParams))
559 {
560 printf("[Map %03i] Failed creating navmesh! \n", mapID);
561 return;
562 }
563
564 const std::string fileName = Acore::StringFormat(
567 mapID
568 );
569
570 FILE* file = fopen(fileName.c_str(), "wb");
571 if (!file)
572 {
573 dtFreeNavMesh(navMesh);
574 char message[1024];
575 sprintf(message, "[Map %03i] Failed to open %s for writing!\n", mapID, fileName.c_str());
576 perror(message);
577 return;
578 }
579
580 // now that we know navMesh params are valid, we can write them to file
581 fwrite(&navMeshParams, sizeof(dtNavMeshParams), 1, file);
582 fclose(file);
583 }
std::string DataDirPath() const
Definition Config.h:77
std::string StringFormat(FormatStringView fmt, Args &&... args)
Default AC string format function.
Definition StringFormat.h:44
static const float GRID_SIZE
Definition TerrainBuilder.h:48
static char const *const MAP_FILE_NAME_FORMAT
Definition MMapMgr.h:48

References MMAP::Config::DataDirPath(), getTileBounds(), getTileList(), MMAP::GRID_SIZE, m_config, MMAP::MAP_FILE_NAME_FORMAT, Acore::StringFormat(), and VMAP::StaticMapTree::unpackTileID().

Referenced by buildMap(), buildMeshFromFile(), and buildSingleTile().

◆ buildSingleTile()

void MMAP::MapBuilder::buildSingleTile ( uint32  mapID,
uint32  tileX,
uint32  tileY 
)
Todo:
: delete the old tile as the user clearly wants to rebuild it
372 {
373 dtNavMesh* navMesh = nullptr;
374 buildNavMesh(mapID, navMesh);
375 if (!navMesh)
376 {
377 printf("Failed creating navmesh! \n");
378 return;
379 }
380
382
384 tileBuilder.buildTile(mapID, tileX, tileY, navMesh);
385 dtFreeNavMesh(navMesh);
386
387 _cancelationToken = true;
388
389 _queue.Cancel();
390 }

References _cancelationToken, _queue, buildNavMesh(), MMAP::TileBuilder::buildTile(), m_debugOutput, m_skipLiquid, and TileBuilder.

Referenced by main().

◆ currentPercentageDone()

uint32 MMAP::MapBuilder::currentPercentageDone ( ) const
private
1097 {
1099 }
uint32 percentageDone(uint32 totalTiles, uint32 totalTilesDone) const
Definition MapBuilder.cpp:1088

References m_totalTiles, m_totalTilesProcessed, and percentageDone().

Referenced by MMAP::TileBuilder::buildTile().

◆ discoverTiles()

void MMAP::MapBuilder::discoverTiles ( )
private
97 {
98 std::vector<std::string> files;
99 uint32 mapID, tileX, tileY, tileID, count = 0, fsize = 0;
100 char filter[12];
101
102 printf("Discovering maps... ");
104 for (auto & file : files)
105 {
106 mapID = uint32(atoi(file.substr(0, file.size() - 8).c_str()));
107 if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end())
108 {
109 m_tiles.emplace_back(mapID, new std::set<uint32>);
110 count++;
111 }
112 }
113
114 files.clear();
115 getDirContents(files, m_config->VMapsPath(), "*.vmtree");
116 for (auto & file : files)
117 {
118 mapID = uint32(atoi(file.substr(0, file.size() - 7).c_str()));
119 if (std::find(m_tiles.begin(), m_tiles.end(), mapID) == m_tiles.end())
120 {
121 m_tiles.emplace_back(mapID, new std::set<uint32>);
122 count++;
123 }
124 }
125 printf("found %u.\n", count);
126
127 count = 0;
128 printf("Discovering tiles... ");
129 for (auto & m_tile : m_tiles)
130 {
131 std::set<uint32>* tiles = m_tile.m_tiles;
132 mapID = m_tile.m_mapId;
133
134 sprintf(filter, "%03u*.vmtile", mapID);
135 files.clear();
136 getDirContents(files, m_config->VMapsPath(), filter);
137 for (auto & file : files)
138 {
139 fsize = file.size();
140
141 tileY = uint32(atoi(file.substr(fsize - 12, 2).c_str()));
142 tileX = uint32(atoi(file.substr(fsize - 9, 2).c_str()));
143 tileID = StaticMapTree::packTileID(tileY, tileX);
144
145 tiles->insert(tileID);
146 count++;
147 }
148
149 sprintf(filter, "%03u*", mapID);
150 files.clear();
151 getDirContents(files, m_config->MapsPath(), filter);
152 for (auto & file : files)
153 {
154 fsize = file.size();
155
156 tileY = uint32(atoi(file.substr(fsize - 8, 2).c_str()));
157 tileX = uint32(atoi(file.substr(fsize - 6, 2).c_str()));
158 tileID = StaticMapTree::packTileID(tileX, tileY);
159
160 if (tiles->insert(tileID).second)
161 count++;
162 }
163
164 // make sure we process maps which don't have tiles
165 if (tiles->empty())
166 {
167 // convert coord bounds to grid bounds
168 uint32 minX, minY, maxX, maxY;
169 getGridBounds(mapID, minX, minY, maxX, maxY);
170
171 // add all tiles within bounds to tile list.
172 for (uint32 i = minX; i <= maxX; ++i)
173 for (uint32 j = minY; j <= maxY; ++j)
174 if (tiles->insert(StaticMapTree::packTileID(i, j)).second)
175 count++;
176 }
177 }
178 printf("found %u.\n\n", count);
179
180 // Calculate tiles to process in total
181 for (auto & m_tile : m_tiles)
182 {
183 if (!shouldSkipMap(m_tile.m_mapId))
184 m_totalTiles += m_tile.m_tiles->size();
185 }
186 }
std::string MapsPath() const
Definition Config.h:75
std::string VMapsPath() const
Definition Config.h:74
void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) const
Definition MapBuilder.cpp:240
static uint32 packTileID(uint32 tileX, uint32 tileY)
Definition MapTree.h:70
ListFilesResult getDirContents(std::vector< std::string > &fileList, std::string dirpath=".", std::string filter="*")
Definition PathCommon.h:82

References MMAP::getDirContents(), getGridBounds(), m_config, m_tiles, m_totalTiles, MMAP::Config::MapsPath(), VMAP::StaticMapTree::packTileID(), shouldSkipMap(), and MMAP::Config::VMapsPath().

Referenced by MapBuilder().

◆ getConfig()

Config const & MMAP::MapBuilder::getConfig ( ) const
inline

◆ getGridBounds()

void MMAP::MapBuilder::getGridBounds ( uint32  mapID,
uint32 minX,
uint32 minY,
uint32 maxX,
uint32 maxY 
) const
private
241 {
242 // min and max are initialized to invalid values so the caller iterating the [min, max] range
243 // will never enter the loop unless valid min/max values are found
244 maxX = 0;
245 maxY = 0;
246 minX = std::numeric_limits<uint32>::max();
247 minY = std::numeric_limits<uint32>::max();
248
249 float bmin[3] = { 0, 0, 0 };
250 float bmax[3] = { 0, 0, 0 };
251 float lmin[3] = { 0, 0, 0 };
252 float lmax[3] = { 0, 0, 0 };
253 MeshData meshData;
254
255 // make sure we process maps which don't have tiles
256 // initialize the static tree, which loads WDT models
257 if (!m_terrainBuilder->loadVMap(mapID, 64, 64, meshData))
258 return;
259
260 // get the coord bounds of the model data
261 if (meshData.solidVerts.size() + meshData.liquidVerts.size() == 0)
262 return;
263
264 // get the coord bounds of the model data
265 if (meshData.solidVerts.size() && meshData.liquidVerts.size())
266 {
267 rcCalcBounds(meshData.solidVerts.getCArray(), meshData.solidVerts.size() / 3, bmin, bmax);
268 rcCalcBounds(meshData.liquidVerts.getCArray(), meshData.liquidVerts.size() / 3, lmin, lmax);
269 rcVmin(bmin, lmin);
270 rcVmax(bmax, lmax);
271 }
272 else if (meshData.solidVerts.size())
273 rcCalcBounds(meshData.solidVerts.getCArray(), meshData.solidVerts.size() / 3, bmin, bmax);
274 else
275 rcCalcBounds(meshData.liquidVerts.getCArray(), meshData.liquidVerts.size() / 3, lmin, lmax);
276
277 // convert coord bounds to grid bounds
278 maxX = 32 - bmin[0] / GRID_SIZE;
279 maxY = 32 - bmin[2] / GRID_SIZE;
280 minX = 32 - bmax[0] / GRID_SIZE;
281 minY = 32 - bmax[2] / GRID_SIZE;
282 }
bool loadVMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData)
Definition TerrainBuilder.cpp:677

References MMAP::GRID_SIZE, MMAP::MeshData::liquidVerts, MMAP::TerrainBuilder::loadVMap(), m_terrainBuilder, and MMAP::MeshData::solidVerts.

Referenced by discoverTiles().

◆ getRecastConfig()

rcConfig MMAP::MapBuilder::getRecastConfig ( ResolvedMeshConfig const &  cfg,
float  bmin[3],
float  bmax[3] 
) const
private
1062 {
1063 rcConfig config;
1064 memset(&config, 0, sizeof(rcConfig));
1065
1066 rcVcopy(config.bmin, bmin);
1067 rcVcopy(config.bmax, bmax);
1068
1069 config.maxVertsPerPoly = DT_VERTS_PER_POLYGON;
1070 config.cs = cfg.cellSizeHorizontal;
1071 config.ch = cfg.cellSizeVertical;
1072 config.walkableSlopeAngle = cfg.walkableSlopeAngle;
1073 config.tileSize = cfg.vertexPerTileEdge;
1074 config.walkableRadius = cfg.walkableRadius;
1075 config.borderSize = cfg.walkableRadius + 3;
1076 config.maxEdgeLen = cfg.vertexPerTileEdge + 1; // anything bigger than tileSize
1077 config.walkableHeight = cfg.walkableHeight;
1078 config.walkableClimb = cfg.walkableClimb;
1079 config.minRegionArea = rcSqr(60);
1080 config.mergeRegionArea = rcSqr(50);
1081 config.maxSimplificationError = cfg.maxSimplificationError; // eliminates most jagged edges (tiny polygons)
1082 config.detailSampleDist = config.cs * 16;
1083 config.detailSampleMaxError = config.ch * 1;
1084 return config;
1085 }

References MMAP::ResolvedMeshConfig::cellSizeHorizontal, MMAP::ResolvedMeshConfig::cellSizeVertical, MMAP::ResolvedMeshConfig::maxSimplificationError, MMAP::ResolvedMeshConfig::vertexPerTileEdge, MMAP::ResolvedMeshConfig::walkableClimb, MMAP::ResolvedMeshConfig::walkableHeight, MMAP::ResolvedMeshConfig::walkableRadius, and MMAP::ResolvedMeshConfig::walkableSlopeAngle.

Referenced by MMAP::TileBuilder::buildMoveMapTile().

◆ getTileBounds()

void MMAP::MapBuilder::getTileBounds ( uint32  tileX,
uint32  tileY,
float *  verts,
int  vertCount,
float *  bmin,
float *  bmax 
) const
private
913 {
914 // this is for elevation
915 if (verts && vertCount)
916 rcCalcBounds(verts, vertCount, bmin, bmax);
917 else
918 {
919 bmin[1] = FLT_MIN;
920 bmax[1] = FLT_MAX;
921 }
922
923 // this is for width and depth
924 bmax[0] = (32 - int(tileX)) * GRID_SIZE;
925 bmax[2] = (32 - int(tileY)) * GRID_SIZE;
926 bmin[0] = bmax[0] - GRID_SIZE;
927 bmin[2] = bmax[2] - GRID_SIZE;
928 }

References MMAP::GRID_SIZE.

Referenced by buildMeshFromFile(), buildNavMesh(), and MMAP::TileBuilder::buildTile().

◆ getTileList()

std::set< uint32 > * MMAP::MapBuilder::getTileList ( uint32  mapID)
private
190 {
191 TileList::iterator itr = std::find(m_tiles.begin(), m_tiles.end(), mapID);
192 if (itr != m_tiles.end())
193 return (*itr).m_tiles;
194
195 std::set<uint32>* tiles = new std::set<uint32>();
196 m_tiles.emplace_back(mapID, tiles);
197 return tiles;
198 }

References m_tiles.

Referenced by buildMap(), and buildNavMesh().

◆ isContinentMap()

bool MMAP::MapBuilder::isContinentMap ( uint32  mapID) const
private
1019 {
1020 switch (mapID)
1021 {
1022 case 0:
1023 case 1:
1024 case 530:
1025 case 571:
1026 return true;
1027 default:
1028 return false;
1029 }
1030 }

Referenced by shouldSkipMap().

◆ isTransportMap()

bool MMAP::MapBuilder::isTransportMap ( uint32  mapID) const
private
980 {
981 switch (mapID)
982 {
983 // transport maps
984 case 582:
985 case 584:
986 case 586:
987 case 587:
988 case 588:
989 case 589:
990 case 590:
991 case 591:
992 case 592:
993 case 593:
994 case 594:
995 case 596:
996 case 610:
997 case 612:
998 case 613:
999 case 614:
1000 case 620:
1001 case 621:
1002 case 622:
1003 case 623:
1004 case 641:
1005 case 642:
1006 case 647:
1007 case 672:
1008 case 673:
1009 case 712:
1010 case 713:
1011 case 718:
1012 return true;
1013 default:
1014 return false;
1015 }
1016 }

Referenced by shouldSkipMap().

◆ percentageDone()

uint32 MMAP::MapBuilder::percentageDone ( uint32  totalTiles,
uint32  totalTilesDone 
) const
private
1089 {
1090 if (totalTiles)
1091 return totalTilesBuilt * 100 / totalTiles;
1092
1093 return 0;
1094 }

Referenced by currentPercentageDone().

◆ shouldSkipMap()

bool MMAP::MapBuilder::shouldSkipMap ( uint32  mapID) const
private
932 {
933 if (m_mapid >= 0)
934 return static_cast<uint32>(m_mapid) != mapID;
935
937 if (isContinentMap(mapID))
938 return true;
939
940 if (m_skipJunkMaps)
941 switch (mapID)
942 {
943 case 13: // test.wdt
944 case 25: // ScottTest.wdt
945 case 29: // Test.wdt
946 case 42: // Colin.wdt
947 case 169: // EmeraldDream.wdt (unused, and very large)
948 case 451: // development.wdt
949 case 573: // ExteriorTest.wdt
950 case 597: // CraigTest.wdt
951 case 605: // development_nonweighted.wdt
952 case 606: // QA_DVD.wdt
953 return true;
954 default:
955 if (isTransportMap(mapID))
956 return true;
957 break;
958 }
959
961 switch (mapID)
962 {
963 case 30: // AV
964 case 37: // ?
965 case 489: // WSG
966 case 529: // AB
967 case 566: // EotS
968 case 607: // SotA
969 case 628: // IoC
970 return true;
971 default:
972 break;
973 }
974
975 return false;
976 }
bool isTransportMap(uint32 mapID) const
Definition MapBuilder.cpp:979
bool isContinentMap(uint32 mapID) const
Definition MapBuilder.cpp:1018

References isContinentMap(), isTransportMap(), m_mapid, m_skipBattlegrounds, m_skipContinents, and m_skipJunkMaps.

Referenced by buildMaps(), and discoverTiles().

Friends And Related Symbol Documentation

◆ TileBuilder

friend class TileBuilder
friend

Member Data Documentation

◆ _cancelationToken

std::atomic<bool> MMAP::MapBuilder::_cancelationToken
private

◆ _queue

◆ m_config

Config* MMAP::MapBuilder::m_config
private

◆ m_debugOutput

bool MMAP::MapBuilder::m_debugOutput
private

◆ m_mapid

int32 MMAP::MapBuilder::m_mapid
private

Referenced by shouldSkipMap().

◆ m_rcContext

rcContext* MMAP::MapBuilder::m_rcContext {nullptr}
private
183{nullptr};

Referenced by MapBuilder(), and ~MapBuilder().

◆ m_skipBattlegrounds

bool MMAP::MapBuilder::m_skipBattlegrounds
private

Referenced by shouldSkipMap().

◆ m_skipContinents

bool MMAP::MapBuilder::m_skipContinents
private

Referenced by shouldSkipMap().

◆ m_skipJunkMaps

bool MMAP::MapBuilder::m_skipJunkMaps
private

Referenced by shouldSkipMap().

◆ m_skipLiquid

bool MMAP::MapBuilder::m_skipLiquid
private

◆ m_terrainBuilder

TerrainBuilder* MMAP::MapBuilder::m_terrainBuilder {nullptr}
private
164{nullptr};

Referenced by getGridBounds(), MapBuilder(), and ~MapBuilder().

◆ m_threads

unsigned int MMAP::MapBuilder::m_threads
private

Referenced by buildMaps(), and MapBuilder().

◆ m_tileBuilders

std::vector<TileBuilder*> MMAP::MapBuilder::m_tileBuilders
private

Referenced by buildMaps().

◆ m_tiles

TileList MMAP::MapBuilder::m_tiles
private

◆ m_totalTiles

std::atomic<uint32> MMAP::MapBuilder::m_totalTiles
private

◆ m_totalTilesProcessed

std::atomic<uint32> MMAP::MapBuilder::m_totalTilesProcessed
private

The documentation for this class was generated from the following files: